ofp-print.c:ds_put_char:
   94|  1.70M|{
   95|  1.70M|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 1.67M, False: 30.3k]
  ------------------
   96|  1.67M|        ds->string[ds->length++] = c;
   97|  1.67M|        ds->string[ds->length] = '\0';
   98|  1.67M|    } else {
   99|  30.3k|        ds_put_char__(ds, c);
  100|  30.3k|    }
  101|  1.70M|}
ofp-queue.c:ds_put_char:
   94|  74.3k|{
   95|  74.3k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 70.3k, False: 4.09k]
  ------------------
   96|  70.3k|        ds->string[ds->length++] = c;
   97|  70.3k|        ds->string[ds->length] = '\0';
   98|  70.3k|    } else {
   99|  4.09k|        ds_put_char__(ds, c);
  100|  4.09k|    }
  101|  74.3k|}
ofp-switch.c:ds_put_char:
   94|  8.31k|{
   95|  8.31k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 7.77k, False: 539]
  ------------------
   96|  7.77k|        ds->string[ds->length++] = c;
   97|  7.77k|        ds->string[ds->length] = '\0';
   98|  7.77k|    } else {
   99|    539|        ds_put_char__(ds, c);
  100|    539|    }
  101|  8.31k|}
ofp-table.c:ds_put_char:
   94|   798k|{
   95|   798k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 791k, False: 7.92k]
  ------------------
   96|   791k|        ds->string[ds->length++] = c;
   97|   791k|        ds->string[ds->length] = '\0';
   98|   791k|    } else {
   99|  7.92k|        ds_put_char__(ds, c);
  100|  7.92k|    }
  101|   798k|}
dynamic-string.c:ds_put_char:
   94|   102M|{
   95|   102M|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 102M, False: 593k]
  ------------------
   96|   102M|        ds->string[ds->length++] = c;
   97|   102M|        ds->string[ds->length] = '\0';
   98|   102M|    } else {
   99|   593k|        ds_put_char__(ds, c);
  100|   593k|    }
  101|   102M|}
flow.c:ds_put_char:
   94|  66.5k|{
   95|  66.5k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 64.4k, False: 2.07k]
  ------------------
   96|  64.4k|        ds->string[ds->length++] = c;
   97|  64.4k|        ds->string[ds->length] = '\0';
   98|  64.4k|    } else {
   99|  2.07k|        ds_put_char__(ds, c);
  100|  2.07k|    }
  101|  66.5k|}
match.c:ds_put_char:
   94|   625k|{
   95|   625k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 612k, False: 12.7k]
  ------------------
   96|   612k|        ds->string[ds->length++] = c;
   97|   612k|        ds->string[ds->length] = '\0';
   98|   612k|    } else {
   99|  12.7k|        ds_put_char__(ds, c);
  100|  12.7k|    }
  101|   625k|}
meta-flow.c:ds_put_char:
   94|  1.13k|{
   95|  1.13k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 1.07k, False: 66]
  ------------------
   96|  1.07k|        ds->string[ds->length++] = c;
   97|  1.07k|        ds->string[ds->length] = '\0';
   98|  1.07k|    } else {
   99|     66|        ds_put_char__(ds, c);
  100|     66|    }
  101|  1.13k|}
netdev.c:ds_put_char:
   94|  71.9k|{
   95|  71.9k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 71.5k, False: 322]
  ------------------
   96|  71.5k|        ds->string[ds->length++] = c;
   97|  71.5k|        ds->string[ds->length] = '\0';
   98|  71.5k|    } else {
   99|    322|        ds_put_char__(ds, c);
  100|    322|    }
  101|  71.9k|}
nx-match.c:ds_put_char:
   94|  21.2k|{
   95|  21.2k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 20.1k, False: 1.10k]
  ------------------
   96|  20.1k|        ds->string[ds->length++] = c;
   97|  20.1k|        ds->string[ds->length] = '\0';
   98|  20.1k|    } else {
   99|  1.10k|        ds_put_char__(ds, c);
  100|  1.10k|    }
  101|  21.2k|}
ofp-actions.c:ds_put_char:
   94|   142k|{
   95|   142k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 135k, False: 6.44k]
  ------------------
   96|   135k|        ds->string[ds->length++] = c;
   97|   135k|        ds->string[ds->length] = '\0';
   98|   135k|    } else {
   99|  6.44k|        ds_put_char__(ds, c);
  100|  6.44k|    }
  101|   142k|}
ofp-bundle.c:ds_put_char:
   94|  8.36k|{
   95|  8.36k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 8.36k, False: 0]
  ------------------
   96|  8.36k|        ds->string[ds->length++] = c;
   97|  8.36k|        ds->string[ds->length] = '\0';
   98|  8.36k|    } else {
   99|      0|        ds_put_char__(ds, c);
  100|      0|    }
  101|  8.36k|}
ofp-connection.c:ds_put_char:
   94|   181k|{
   95|   181k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 180k, False: 1.16k]
  ------------------
   96|   180k|        ds->string[ds->length++] = c;
   97|   180k|        ds->string[ds->length] = '\0';
   98|   180k|    } else {
   99|  1.16k|        ds_put_char__(ds, c);
  100|  1.16k|    }
  101|   181k|}
ofp-ct.c:ds_put_char:
   94|  3.78k|{
   95|  3.78k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 3.19k, False: 591]
  ------------------
   96|  3.19k|        ds->string[ds->length++] = c;
   97|  3.19k|        ds->string[ds->length] = '\0';
   98|  3.19k|    } else {
   99|    591|        ds_put_char__(ds, c);
  100|    591|    }
  101|  3.78k|}
ofp-flow.c:ds_put_char:
   94|   250k|{
   95|   250k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 234k, False: 15.7k]
  ------------------
   96|   234k|        ds->string[ds->length++] = c;
   97|   234k|        ds->string[ds->length] = '\0';
   98|   234k|    } else {
   99|  15.7k|        ds_put_char__(ds, c);
  100|  15.7k|    }
  101|   250k|}
ofp-group.c:ds_put_char:
   94|  94.5k|{
   95|  94.5k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 87.1k, False: 7.46k]
  ------------------
   96|  87.1k|        ds->string[ds->length++] = c;
   97|  87.1k|        ds->string[ds->length] = '\0';
   98|  87.1k|    } else {
   99|  7.46k|        ds_put_char__(ds, c);
  100|  7.46k|    }
  101|  94.5k|}
ofp-ipfix.c:ds_put_char:
   94|  27.0k|{
   95|  27.0k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 25.6k, False: 1.42k]
  ------------------
   96|  25.6k|        ds->string[ds->length++] = c;
   97|  25.6k|        ds->string[ds->length] = '\0';
   98|  25.6k|    } else {
   99|  1.42k|        ds_put_char__(ds, c);
  100|  1.42k|    }
  101|  27.0k|}
ofp-match.c:ds_put_char:
   94|  1.40k|{
   95|  1.40k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 1.40k, False: 0]
  ------------------
   96|  1.40k|        ds->string[ds->length++] = c;
   97|  1.40k|        ds->string[ds->length] = '\0';
   98|  1.40k|    } else {
   99|      0|        ds_put_char__(ds, c);
  100|      0|    }
  101|  1.40k|}
ofp-meter.c:ds_put_char:
   94|  12.4k|{
   95|  12.4k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 9.14k, False: 3.31k]
  ------------------
   96|  9.14k|        ds->string[ds->length++] = c;
   97|  9.14k|        ds->string[ds->length] = '\0';
   98|  9.14k|    } else {
   99|  3.31k|        ds_put_char__(ds, c);
  100|  3.31k|    }
  101|  12.4k|}
ofp-monitor.c:ds_put_char:
   94|  18.1k|{
   95|  18.1k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 15.1k, False: 3.00k]
  ------------------
   96|  15.1k|        ds->string[ds->length++] = c;
   97|  15.1k|        ds->string[ds->length] = '\0';
   98|  15.1k|    } else {
   99|  3.00k|        ds_put_char__(ds, c);
  100|  3.00k|    }
  101|  18.1k|}
ofp-packet.c:ds_put_char:
   94|   158k|{
   95|   158k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 149k, False: 8.73k]
  ------------------
   96|   149k|        ds->string[ds->length++] = c;
   97|   149k|        ds->string[ds->length] = '\0';
   98|   149k|    } else {
   99|  8.73k|        ds_put_char__(ds, c);
  100|  8.73k|    }
  101|   158k|}
ofp-port.c:ds_put_char:
   94|   135k|{
   95|   135k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 130k, False: 5.02k]
  ------------------
   96|   130k|        ds->string[ds->length++] = c;
   97|   130k|        ds->string[ds->length] = '\0';
   98|   130k|    } else {
   99|  5.02k|        ds_put_char__(ds, c);
  100|  5.02k|    }
  101|   135k|}
packets.c:ds_put_char:
   94|  1.24k|{
   95|  1.24k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 1.24k, False: 0]
  ------------------
   96|  1.24k|        ds->string[ds->length++] = c;
   97|  1.24k|        ds->string[ds->length] = '\0';
   98|  1.24k|    } else {
   99|      0|        ds_put_char__(ds, c);
  100|      0|    }
  101|  1.24k|}
tun-metadata.c:ds_put_char:
   94|  22.7k|{
   95|  22.7k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 20.9k, False: 1.84k]
  ------------------
   96|  20.9k|        ds->string[ds->length++] = c;
   97|  20.9k|        ds->string[ds->length] = '\0';
   98|  20.9k|    } else {
   99|  1.84k|        ds_put_char__(ds, c);
  100|  1.84k|    }
  101|  22.7k|}
bundle.c:ds_put_char:
   94|  11.3k|{
   95|  11.3k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 10.3k, False: 1.03k]
  ------------------
   96|  10.3k|        ds->string[ds->length++] = c;
   97|  10.3k|        ds->string[ds->length] = '\0';
   98|  10.3k|    } else {
   99|  1.03k|        ds_put_char__(ds, c);
  100|  1.03k|    }
  101|  11.3k|}
learn.c:ds_put_char:
   94|  45.5k|{
   95|  45.5k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 44.2k, False: 1.25k]
  ------------------
   96|  44.2k|        ds->string[ds->length++] = c;
   97|  44.2k|        ds->string[ds->length] = '\0';
   98|  44.2k|    } else {
   99|  1.25k|        ds_put_char__(ds, c);
  100|  1.25k|    }
  101|  45.5k|}

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|  13.5M|{
  368|  13.5M|    return hmap->buckets[hash & hmap->mask];
  369|  13.5M|}
nx-match.c:hmap_next_in_bucket:
  381|  12.5M|{
  382|  12.5M|    return node->next;
  383|  12.5M|}
ofp-actions.c:hmap_first_with_hash:
  359|   433k|{
  360|   433k|    return hmap_next_with_hash__(hmap->buckets[hash & hmap->mask], hash);
  361|   433k|}
ofp-actions.c:hmap_next_with_hash__:
  348|   433k|{
  349|   786k|    while (node != NULL && node->hash != hash) {
  ------------------
  |  Branch (349:12): [True: 765k, False: 21.1k]
  |  Branch (349:28): [True: 352k, False: 412k]
  ------------------
  350|   352k|        node = node->next;
  351|   352k|    }
  352|   433k|    return CONST_CAST(struct hmap_node *, node);
  ------------------
  |  |   85|   433k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   433k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   433k|     (TYPE) (POINTER))
  ------------------
  353|   433k|}
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|  5.20M|{
  360|  5.20M|    return hmap_next_with_hash__(hmap->buckets[hash & hmap->mask], hash);
  361|  5.20M|}
ofp-msgs.c:hmap_next_with_hash__:
  348|  5.20M|{
  349|  7.79M|    while (node != NULL && node->hash != hash) {
  ------------------
  |  Branch (349:12): [True: 7.09M, False: 703k]
  |  Branch (349:28): [True: 2.59M, False: 4.49M]
  ------------------
  350|  2.59M|        node = node->next;
  351|  2.59M|    }
  352|  5.20M|    return CONST_CAST(struct hmap_node *, node);
  ------------------
  |  |   85|  5.20M|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  5.20M|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  5.20M|     (TYPE) (POINTER))
  ------------------
  353|  5.20M|}
ofp-msgs.c:hmap_next_with_hash:
  395|    330|{
  396|    330|    return hmap_next_with_hash__(node->next, node->hash);
  397|    330|}
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|  2.34M|{
  158|  2.34M|    *list = OVS_LIST_POISON;
  159|  2.34M|}
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|  71.7k|{
  321|  71.7k|    return list->next == list;
  322|  71.7k|}
ofp-group.c:ovs_list_pop_front:
  261|  16.5k|{
  262|  16.5k|    struct ovs_list *front = list->next;
  263|       |
  264|  16.5k|    ovs_list_remove(front);
  265|  16.5k|    return front;
  266|  16.5k|}
ofp-group.c:ovs_list_remove:
  251|  16.5k|{
  252|  16.5k|    elem->prev->next = elem->next;
  253|  16.5k|    elem->next->prev = elem->prev;
  254|  16.5k|    return elem->next;
  255|  16.5k|}
ofp-group.c:ovs_list_push_back:
  204|  16.5k|{
  205|  16.5k|    ovs_list_insert(list, elem);
  206|  16.5k|}
ofp-group.c:ovs_list_insert:
  164|  16.5k|{
  165|  16.5k|    elem->prev = before->prev;
  166|  16.5k|    elem->next = before;
  167|  16.5k|    before->prev->next = elem;
  168|  16.5k|    before->prev = elem;
  169|  16.5k|}
ofp-group.c:ovs_list_init:
  149|  51.1k|{
  150|  51.1k|    list->next = list->prev = list;
  151|  51.1k|}
ofp-group.c:ovs_list_is_short:
  334|  2.44k|{
  335|  2.44k|    return list->next == list->prev;
  336|  2.44k|}
ofp-group.c:ovs_list_is_singleton:
  327|  2.44k|{
  328|  2.44k|    return ovs_list_is_short(list) && !ovs_list_is_empty(list);
  ------------------
  |  Branch (328:12): [True: 2.43k, False: 10]
  |  Branch (328:39): [True: 2.04k, False: 384]
  ------------------
  329|  2.44k|}
ofp-match.c:ovs_list_init:
  149|  4.07k|{
  150|  4.07k|    list->next = list->prev = list;
  151|  4.07k|}
ofp-match.c:ovs_list_push_back:
  204|  8.85k|{
  205|  8.85k|    ovs_list_insert(list, elem);
  206|  8.85k|}
ofp-match.c:ovs_list_insert:
  164|  8.85k|{
  165|  8.85k|    elem->prev = before->prev;
  166|  8.85k|    elem->next = before;
  167|  8.85k|    before->prev->next = elem;
  168|  8.85k|    before->prev = elem;
  169|  8.85k|}
ofp-match.c:ovs_list_is_empty:
  320|  12.9k|{
  321|  12.9k|    return list->next == list;
  322|  12.9k|}
ofp-match.c:ovs_list_pop_front:
  261|  8.85k|{
  262|  8.85k|    struct ovs_list *front = list->next;
  263|       |
  264|  8.85k|    ovs_list_remove(front);
  265|  8.85k|    return front;
  266|  8.85k|}
ofp-match.c:ovs_list_remove:
  251|  8.85k|{
  252|  8.85k|    elem->prev->next = elem->next;
  253|  8.85k|    elem->next->prev = elem->prev;
  254|  8.85k|    return elem->next;
  255|  8.85k|}

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

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

ofp-actions.c:ofpact_next:
  212|   708k|{
  213|   708k|    return ALIGNED_CAST(struct ofpact *,
  ------------------
  |  |  434|   708k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  214|   708k|                        (uint8_t *) ofpact + OFPACT_ALIGN(ofpact->len));
  215|   708k|}
ofp-actions.c:ofpact_get_CLONE:
 1289|  3.08k|    {                                                                   \
 1290|  3.08k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  3.08k|#define ovs_assert ovs_ignore
  ------------------
 1291|  3.08k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  3.08k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  3.08k|    }                                                                   \
ofp-actions.c:ofpact_get_CT:
 1289|  4.50k|    {                                                                   \
 1290|  4.50k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  4.50k|#define ovs_assert ovs_ignore
  ------------------
 1291|  4.50k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  4.50k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  4.50k|    }                                                                   \
ofp-actions.c:ofpact_get_WRITE_ACTIONS:
 1289|  16.5k|    {                                                                   \
 1290|  16.5k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  16.5k|#define ovs_assert ovs_ignore
  ------------------
 1291|  16.5k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  16.5k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  16.5k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_FIELD:
 1303|  28.4k|    {                                                                   \
 1304|  28.4k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  28.4k|                                            sizeof(struct STRUCT));     \
 1306|  28.4k|    }                                                                   \
ofp-actions.c:ofpact_finish_SET_FIELD:
 1317|  28.4k|    {                                                                   \
 1318|  28.4k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  28.4k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  28.4k|#define ovs_assert ovs_ignore
  ------------------
 1320|  28.4k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  28.4k|    }
ofp-actions.c:ofpact_end:
  221|  1.23M|{
  222|  1.23M|    return ofpacts
  ------------------
  |  Branch (222:12): [True: 1.21M, False: 16.4k]
  ------------------
  223|  1.23M|           ? ALIGNED_CAST(struct ofpact *, (uint8_t *) ofpacts + ofpacts_len)
  ------------------
  |  |  434|  1.21M|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  224|       |           : NULL;
  225|  1.23M|}
ofp-actions.c:ofpact_put_METER:
 1303|  1.41k|    {                                                                   \
 1304|  1.41k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.41k|                                            sizeof(struct STRUCT));     \
 1306|  1.41k|    }                                                                   \
ofp-actions.c:ofpact_put_OUTPUT:
 1303|  14.9k|    {                                                                   \
 1304|  14.9k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  14.9k|                                            sizeof(struct STRUCT));     \
 1306|  14.9k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_VLAN_VID:
 1303|  10.8k|    {                                                                   \
 1304|  10.8k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  10.8k|                                            sizeof(struct STRUCT));     \
 1306|  10.8k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_VLAN_PCP:
 1303|  6.50k|    {                                                                   \
 1304|  6.50k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  6.50k|                                            sizeof(struct STRUCT));     \
 1306|  6.50k|    }                                                                   \
ofp-actions.c:ofpact_put_PUSH_VLAN:
 1303|  3.62k|    {                                                                   \
 1304|  3.62k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  3.62k|                                            sizeof(struct STRUCT));     \
 1306|  3.62k|    }                                                                   \
ofp-actions.c:ofpact_put_STRIP_VLAN:
 1303|  11.4k|    {                                                                   \
 1304|  11.4k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  11.4k|                                            sizeof(struct STRUCT));     \
 1306|  11.4k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_ETH_SRC:
 1303|    579|    {                                                                   \
 1304|    579|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    579|                                            sizeof(struct STRUCT));     \
 1306|    579|    }                                                                   \
ofp-actions.c:ofpact_put_SET_ETH_DST:
 1303|    403|    {                                                                   \
 1304|    403|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    403|                                            sizeof(struct STRUCT));     \
 1306|    403|    }                                                                   \
ofp-actions.c:ofpact_put_SET_IPV4_SRC:
 1303|  5.97k|    {                                                                   \
 1304|  5.97k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  5.97k|                                            sizeof(struct STRUCT));     \
 1306|  5.97k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_IPV4_DST:
 1303|  9.05k|    {                                                                   \
 1304|  9.05k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  9.05k|                                            sizeof(struct STRUCT));     \
 1306|  9.05k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_IP_DSCP:
 1303|  8.85k|    {                                                                   \
 1304|  8.85k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  8.85k|                                            sizeof(struct STRUCT));     \
 1306|  8.85k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_IP_ECN:
 1303|  4.50k|    {                                                                   \
 1304|  4.50k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  4.50k|                                            sizeof(struct STRUCT));     \
 1306|  4.50k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_L4_SRC_PORT:
 1303|  18.4k|    {                                                                   \
 1304|  18.4k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  18.4k|                                            sizeof(struct STRUCT));     \
 1306|  18.4k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_L4_DST_PORT:
 1303|  10.3k|    {                                                                   \
 1304|  10.3k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  10.3k|                                            sizeof(struct STRUCT));     \
 1306|  10.3k|    }                                                                   \
ofp-actions.c:ofpact_put_ENQUEUE:
 1303|    208|    {                                                                   \
 1304|    208|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    208|                                            sizeof(struct STRUCT));     \
 1306|    208|    }                                                                   \
ofp-actions.c:ofpact_put_SET_MPLS_LABEL:
 1303|  3.16k|    {                                                                   \
 1304|  3.16k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  3.16k|                                            sizeof(struct STRUCT));     \
 1306|  3.16k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_MPLS_TC:
 1303|  1.17k|    {                                                                   \
 1304|  1.17k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.17k|                                            sizeof(struct STRUCT));     \
 1306|  1.17k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_MPLS_TTL:
 1303|  2.50k|    {                                                                   \
 1304|  2.50k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  2.50k|                                            sizeof(struct STRUCT));     \
 1306|  2.50k|    }                                                                   \
ofp-actions.c:ofpact_put_DEC_MPLS_TTL:
 1303|  7.00k|    {                                                                   \
 1304|  7.00k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  7.00k|                                            sizeof(struct STRUCT));     \
 1306|  7.00k|    }                                                                   \
ofp-actions.c:ofpact_put_PUSH_MPLS:
 1303|  4.98k|    {                                                                   \
 1304|  4.98k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  4.98k|                                            sizeof(struct STRUCT));     \
 1306|  4.98k|    }                                                                   \
ofp-actions.c:ofpact_put_POP_MPLS:
 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_SET_QUEUE:
 1303|    526|    {                                                                   \
 1304|    526|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    526|                                            sizeof(struct STRUCT));     \
 1306|    526|    }                                                                   \
ofp-actions.c:ofpact_put_GROUP:
 1303|  1.81k|    {                                                                   \
 1304|  1.81k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.81k|                                            sizeof(struct STRUCT));     \
 1306|  1.81k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_IP_TTL:
 1303|  1.46k|    {                                                                   \
 1304|  1.46k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.46k|                                            sizeof(struct STRUCT));     \
 1306|  1.46k|    }                                                                   \
ofp-actions.c:ofpact_put_DEC_TTL:
 1303|  11.1k|    {                                                                   \
 1304|  11.1k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  11.1k|                                            sizeof(struct STRUCT));     \
 1306|  11.1k|    }                                                                   \
ofp-actions.c:ofpact_finish_DEC_TTL:
 1317|  10.3k|    {                                                                   \
 1318|  10.3k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  10.3k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  10.3k|#define ovs_assert ovs_ignore
  ------------------
 1320|  10.3k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  10.3k|    }
ofp-actions.c:ofpact_put_REG_MOVE:
 1303|  10.6k|    {                                                                   \
 1304|  10.6k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  10.6k|                                            sizeof(struct STRUCT));     \
 1306|  10.6k|    }                                                                   \
ofp-actions.c:ofpact_put_RESUBMIT:
 1303|  3.28k|    {                                                                   \
 1304|  3.28k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  3.28k|                                            sizeof(struct STRUCT));     \
 1306|  3.28k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_TUNNEL:
 1303|  1.98k|    {                                                                   \
 1304|  1.98k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.98k|                                            sizeof(struct STRUCT));     \
 1306|  1.98k|    }                                                                   \
ofp-actions.c:ofpact_put_POP_QUEUE:
 1303|  3.29k|    {                                                                   \
 1304|  3.29k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  3.29k|                                            sizeof(struct STRUCT));     \
 1306|  3.29k|    }                                                                   \
ofp-actions.c:ofpact_put_NOTE:
 1303|  15.7k|    {                                                                   \
 1304|  15.7k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  15.7k|                                            sizeof(struct STRUCT));     \
 1306|  15.7k|    }                                                                   \
ofp-actions.c:ofpact_finish_NOTE:
 1317|  15.7k|    {                                                                   \
 1318|  15.7k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  15.7k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  15.7k|#define ovs_assert ovs_ignore
  ------------------
 1320|  15.7k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  15.7k|    }
ofp-actions.c:ofpact_put_MULTIPATH:
 1303|  3.35k|    {                                                                   \
 1304|  3.35k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  3.35k|                                            sizeof(struct STRUCT));     \
 1306|  3.35k|    }                                                                   \
ofp-actions.c:ofpact_put_BUNDLE:
 1303|  6.42k|    {                                                                   \
 1304|  6.42k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  6.42k|                                            sizeof(struct STRUCT));     \
 1306|  6.42k|    }                                                                   \
ofp-actions.c:ofpact_finish_BUNDLE:
 1317|  5.89k|    {                                                                   \
 1318|  5.89k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  5.89k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  5.89k|#define ovs_assert ovs_ignore
  ------------------
 1320|  5.89k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  5.89k|    }
ofp-actions.c:ofpact_put_OUTPUT_REG:
 1303|  1.02k|    {                                                                   \
 1304|  1.02k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.02k|                                            sizeof(struct STRUCT));     \
 1306|  1.02k|    }                                                                   \
ofp-actions.c:ofpact_put_LEARN:
 1303|  33.0k|    {                                                                   \
 1304|  33.0k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  33.0k|                                            sizeof(struct STRUCT));     \
 1306|  33.0k|    }                                                                   \
ofp-actions.c:ofpact_finish_LEARN:
 1317|  25.7k|    {                                                                   \
 1318|  25.7k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  25.7k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  25.7k|#define ovs_assert ovs_ignore
  ------------------
 1320|  25.7k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  25.7k|    }
ofp-actions.c:ofpact_put_EXIT:
 1303|  3.00k|    {                                                                   \
 1304|  3.00k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  3.00k|                                            sizeof(struct STRUCT));     \
 1306|  3.00k|    }                                                                   \
ofp-actions.c:ofpact_put_FIN_TIMEOUT:
 1303|  1.12k|    {                                                                   \
 1304|  1.12k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.12k|                                            sizeof(struct STRUCT));     \
 1306|  1.12k|    }                                                                   \
ofp-actions.c:ofpact_put_CONTROLLER:
 1303|  5.12k|    {                                                                   \
 1304|  5.12k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  5.12k|                                            sizeof(struct STRUCT));     \
 1306|  5.12k|    }                                                                   \
ofp-actions.c:ofpact_finish_CONTROLLER:
 1317|  4.31k|    {                                                                   \
 1318|  4.31k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  4.31k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  4.31k|#define ovs_assert ovs_ignore
  ------------------
 1320|  4.31k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  4.31k|    }
ofp-actions.c:ofpact_put_STACK_PUSH:
 1303|  1.69k|    {                                                                   \
 1304|  1.69k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.69k|                                            sizeof(struct STRUCT));     \
 1306|  1.69k|    }                                                                   \
ofp-actions.c:ofpact_put_STACK_POP:
 1303|  2.25k|    {                                                                   \
 1304|  2.25k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  2.25k|                                            sizeof(struct STRUCT));     \
 1306|  2.25k|    }                                                                   \
ofp-actions.c:ofpact_put_SAMPLE:
 1303|  11.4k|    {                                                                   \
 1304|  11.4k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  11.4k|                                            sizeof(struct STRUCT));     \
 1306|  11.4k|    }                                                                   \
ofp-actions.c:ofpact_put_CONJUNCTION:
 1303|  5.13k|    {                                                                   \
 1304|  5.13k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  5.13k|                                            sizeof(struct STRUCT));     \
 1306|  5.13k|    }                                                                   \
ofp-actions.c:ofpact_put_CT:
 1303|  17.0k|    {                                                                   \
 1304|  17.0k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  17.0k|                                            sizeof(struct STRUCT));     \
 1306|  17.0k|    }                                                                   \
ofp-actions.c:ofpact_finish_CT:
 1317|  11.6k|    {                                                                   \
 1318|  11.6k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  11.6k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  11.6k|#define ovs_assert ovs_ignore
  ------------------
 1320|  11.6k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  11.6k|    }
ofp-actions.c:ofpact_get_NAT:
 1289|  6.43k|    {                                                                   \
 1290|  6.43k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  6.43k|#define ovs_assert ovs_ignore
  ------------------
 1291|  6.43k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  6.43k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  6.43k|    }                                                                   \
ofp-actions.c:ofpact_put_NAT:
 1303|  32.8k|    {                                                                   \
 1304|  32.8k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  32.8k|                                            sizeof(struct STRUCT));     \
 1306|  32.8k|    }                                                                   \
ofp-actions.c:ofpact_put_OUTPUT_TRUNC:
 1303|  1.53k|    {                                                                   \
 1304|  1.53k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.53k|                                            sizeof(struct STRUCT));     \
 1306|  1.53k|    }                                                                   \
ofp-actions.c:ofpact_put_CLONE:
 1303|  3.72k|    {                                                                   \
 1304|  3.72k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  3.72k|                                            sizeof(struct STRUCT));     \
 1306|  3.72k|    }                                                                   \
ofp-actions.c:ofpact_finish_CLONE:
 1317|  3.63k|    {                                                                   \
 1318|  3.63k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  3.63k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  3.63k|#define ovs_assert ovs_ignore
  ------------------
 1320|  3.63k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  3.63k|    }
ofp-actions.c:ofpact_put_CT_CLEAR:
 1303|    131|    {                                                                   \
 1304|    131|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    131|                                            sizeof(struct STRUCT));     \
 1306|    131|    }                                                                   \
ofp-actions.c:ofpact_put_ENCAP:
 1303|  9.65k|    {                                                                   \
 1304|  9.65k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  9.65k|                                            sizeof(struct STRUCT));     \
 1306|  9.65k|    }                                                                   \
ofp-actions.c:ofpact_finish_ENCAP:
 1317|  5.67k|    {                                                                   \
 1318|  5.67k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  5.67k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  5.67k|#define ovs_assert ovs_ignore
  ------------------
 1320|  5.67k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  5.67k|    }
ofp-actions.c:ofpact_put_DECAP:
 1303|  20.7k|    {                                                                   \
 1304|  20.7k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  20.7k|                                            sizeof(struct STRUCT));     \
 1306|  20.7k|    }                                                                   \
ofp-actions.c:ofpact_put_DEC_NSH_TTL:
 1303|  1.75k|    {                                                                   \
 1304|  1.75k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.75k|                                            sizeof(struct STRUCT));     \
 1306|  1.75k|    }                                                                   \
ofp-actions.c:ofpact_put_CHECK_PKT_LARGER:
 1303|  2.24k|    {                                                                   \
 1304|  2.24k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  2.24k|                                            sizeof(struct STRUCT));     \
 1306|  2.24k|    }                                                                   \
ofp-actions.c:ofpact_put_DELETE_FIELD:
 1303|    560|    {                                                                   \
 1304|    560|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    560|                                            sizeof(struct STRUCT));     \
 1306|    560|    }                                                                   \
ofp-actions.c:ofpact_put_CLEAR_ACTIONS:
 1303|    310|    {                                                                   \
 1304|    310|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    310|                                            sizeof(struct STRUCT));     \
 1306|    310|    }                                                                   \
ofp-actions.c:ofpact_put_WRITE_METADATA:
 1303|  1.61k|    {                                                                   \
 1304|  1.61k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.61k|                                            sizeof(struct STRUCT));     \
 1306|  1.61k|    }                                                                   \
ofp-actions.c:ofpact_put_GOTO_TABLE:
 1303|  1.17k|    {                                                                   \
 1304|  1.17k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.17k|                                            sizeof(struct STRUCT));     \
 1306|  1.17k|    }                                                                   \
ofp-actions.c:ofpact_get_OUTPUT:
 1289|  8.23k|    {                                                                   \
 1290|  8.23k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  8.23k|#define ovs_assert ovs_ignore
  ------------------
 1291|  8.23k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  8.23k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  8.23k|    }                                                                   \
ofp-actions.c:ofpact_get_CONTROLLER:
 1289|    116|    {                                                                   \
 1290|    116|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    116|#define ovs_assert ovs_ignore
  ------------------
 1291|    116|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    116|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    116|    }                                                                   \
ofp-actions.c:ofpact_get_ENQUEUE:
 1289|    166|    {                                                                   \
 1290|    166|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    166|#define ovs_assert ovs_ignore
  ------------------
 1291|    166|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    166|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    166|    }                                                                   \
ofp-actions.c:ofpact_get_OUTPUT_REG:
 1289|    197|    {                                                                   \
 1290|    197|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    197|#define ovs_assert ovs_ignore
  ------------------
 1291|    197|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    197|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    197|    }                                                                   \
ofp-actions.c:ofpact_get_BUNDLE:
 1289|    877|    {                                                                   \
 1290|    877|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    877|#define ovs_assert ovs_ignore
  ------------------
 1291|    877|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    877|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    877|    }                                                                   \
ofp-actions.c:ofpact_get_SET_FIELD:
 1289|  4.55k|    {                                                                   \
 1290|  4.55k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  4.55k|#define ovs_assert ovs_ignore
  ------------------
 1291|  4.55k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  4.55k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  4.55k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_VLAN_VID:
 1289|  5.87k|    {                                                                   \
 1290|  5.87k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  5.87k|#define ovs_assert ovs_ignore
  ------------------
 1291|  5.87k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  5.87k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  5.87k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_VLAN_PCP:
 1289|  5.21k|    {                                                                   \
 1290|  5.21k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  5.21k|#define ovs_assert ovs_ignore
  ------------------
 1291|  5.21k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  5.21k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  5.21k|    }                                                                   \
ofp-actions.c:ofpact_get_STRIP_VLAN:
 1289|  8.82k|    {                                                                   \
 1290|  8.82k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  8.82k|#define ovs_assert ovs_ignore
  ------------------
 1291|  8.82k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  8.82k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  8.82k|    }                                                                   \
ofp-actions.c:ofpact_get_PUSH_VLAN:
 1289|  3.03k|    {                                                                   \
 1290|  3.03k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  3.03k|#define ovs_assert ovs_ignore
  ------------------
 1291|  3.03k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  3.03k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  3.03k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_ETH_SRC:
 1289|    555|    {                                                                   \
 1290|    555|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    555|#define ovs_assert ovs_ignore
  ------------------
 1291|    555|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    555|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    555|    }                                                                   \
ofp-actions.c:ofpact_get_SET_ETH_DST:
 1289|    371|    {                                                                   \
 1290|    371|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    371|#define ovs_assert ovs_ignore
  ------------------
 1291|    371|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    371|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    371|    }                                                                   \
ofp-actions.c:ofpact_get_SET_IPV4_SRC:
 1289|  4.26k|    {                                                                   \
 1290|  4.26k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  4.26k|#define ovs_assert ovs_ignore
  ------------------
 1291|  4.26k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  4.26k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  4.26k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_IPV4_DST:
 1289|  7.66k|    {                                                                   \
 1290|  7.66k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  7.66k|#define ovs_assert ovs_ignore
  ------------------
 1291|  7.66k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  7.66k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  7.66k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_IP_DSCP:
 1289|  7.02k|    {                                                                   \
 1290|  7.02k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  7.02k|#define ovs_assert ovs_ignore
  ------------------
 1291|  7.02k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  7.02k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  7.02k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_IP_ECN:
 1289|  3.61k|    {                                                                   \
 1290|  3.61k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  3.61k|#define ovs_assert ovs_ignore
  ------------------
 1291|  3.61k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  3.61k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  3.61k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_IP_TTL:
 1289|  1.44k|    {                                                                   \
 1290|  1.44k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  1.44k|#define ovs_assert ovs_ignore
  ------------------
 1291|  1.44k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  1.44k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  1.44k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_L4_SRC_PORT:
 1289|  5.73k|    {                                                                   \
 1290|  5.73k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  5.73k|#define ovs_assert ovs_ignore
  ------------------
 1291|  5.73k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  5.73k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  5.73k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_L4_DST_PORT:
 1289|  8.64k|    {                                                                   \
 1290|  8.64k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  8.64k|#define ovs_assert ovs_ignore
  ------------------
 1291|  8.64k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  8.64k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  8.64k|    }                                                                   \
ofp-actions.c:ofpact_get_REG_MOVE:
 1289|    277|    {                                                                   \
 1290|    277|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    277|#define ovs_assert ovs_ignore
  ------------------
 1291|    277|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    277|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    277|    }                                                                   \
ofp-actions.c:ofpact_get_STACK_PUSH:
 1289|    104|    {                                                                   \
 1290|    104|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    104|#define ovs_assert ovs_ignore
  ------------------
 1291|    104|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    104|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    104|    }                                                                   \
ofp-actions.c:ofpact_get_STACK_POP:
 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_DEC_TTL:
 1289|  3.96k|    {                                                                   \
 1290|  3.96k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  3.96k|#define ovs_assert ovs_ignore
  ------------------
 1291|  3.96k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  3.96k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  3.96k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_MPLS_LABEL:
 1289|  3.04k|    {                                                                   \
 1290|  3.04k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  3.04k|#define ovs_assert ovs_ignore
  ------------------
 1291|  3.04k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  3.04k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  3.04k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_MPLS_TC:
 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_get_SET_MPLS_TTL:
 1289|  1.17k|    {                                                                   \
 1290|  1.17k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  1.17k|#define ovs_assert ovs_ignore
  ------------------
 1291|  1.17k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  1.17k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  1.17k|    }                                                                   \
ofp-actions.c:ofpact_get_DEC_MPLS_TTL:
 1289|  6.51k|    {                                                                   \
 1290|  6.51k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  6.51k|#define ovs_assert ovs_ignore
  ------------------
 1291|  6.51k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  6.51k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  6.51k|    }                                                                   \
ofp-actions.c:ofpact_get_PUSH_MPLS:
 1289|  4.63k|    {                                                                   \
 1290|  4.63k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  4.63k|#define ovs_assert ovs_ignore
  ------------------
 1291|  4.63k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  4.63k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  4.63k|    }                                                                   \
ofp-actions.c:ofpact_get_POP_MPLS:
 1289|  8.44k|    {                                                                   \
 1290|  8.44k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  8.44k|#define ovs_assert ovs_ignore
  ------------------
 1291|  8.44k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  8.44k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  8.44k|    }                                                                   \
ofp-actions.c:ofpact_get_DEC_NSH_TTL:
 1289|  1.70k|    {                                                                   \
 1290|  1.70k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  1.70k|#define ovs_assert ovs_ignore
  ------------------
 1291|  1.70k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  1.70k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  1.70k|    }                                                                   \
ofp-actions.c:ofpact_get_DELETE_FIELD:
 1289|     46|    {                                                                   \
 1290|     46|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     46|#define ovs_assert ovs_ignore
  ------------------
 1291|     46|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     46|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     46|    }                                                                   \
ofp-actions.c:ofpact_get_ENCAP:
 1289|  4.09k|    {                                                                   \
 1290|  4.09k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  4.09k|#define ovs_assert ovs_ignore
  ------------------
 1291|  4.09k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  4.09k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  4.09k|    }                                                                   \
ofp-actions.c:ofpact_get_DECAP:
 1289|  16.7k|    {                                                                   \
 1290|  16.7k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  16.7k|#define ovs_assert ovs_ignore
  ------------------
 1291|  16.7k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  16.7k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  16.7k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_TUNNEL:
 1289|     44|    {                                                                   \
 1290|     44|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     44|#define ovs_assert ovs_ignore
  ------------------
 1291|     44|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     44|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     44|    }                                                                   \
ofp-actions.c:ofpact_get_SET_QUEUE:
 1289|    210|    {                                                                   \
 1290|    210|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    210|#define ovs_assert ovs_ignore
  ------------------
 1291|    210|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    210|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    210|    }                                                                   \
ofp-actions.c:ofpact_get_POP_QUEUE:
 1289|    508|    {                                                                   \
 1290|    508|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    508|#define ovs_assert ovs_ignore
  ------------------
 1291|    508|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    508|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    508|    }                                                                   \
ofp-actions.c:ofpact_get_FIN_TIMEOUT:
 1289|    365|    {                                                                   \
 1290|    365|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    365|#define ovs_assert ovs_ignore
  ------------------
 1291|    365|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    365|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    365|    }                                                                   \
ofp-actions.c:ofpact_get_RESUBMIT:
 1289|    243|    {                                                                   \
 1290|    243|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    243|#define ovs_assert ovs_ignore
  ------------------
 1291|    243|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    243|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    243|    }                                                                   \
ofp-actions.c:ofpact_get_LEARN:
 1289|  24.5k|    {                                                                   \
 1290|  24.5k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  24.5k|#define ovs_assert ovs_ignore
  ------------------
 1291|  24.5k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  24.5k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  24.5k|    }                                                                   \
ofp-actions.c:ofpact_get_CONJUNCTION:
 1289|    311|    {                                                                   \
 1290|    311|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    311|#define ovs_assert ovs_ignore
  ------------------
 1291|    311|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    311|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    311|    }                                                                   \
ofp-actions.c:ofpact_get_MULTIPATH:
 1289|    313|    {                                                                   \
 1290|    313|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    313|#define ovs_assert ovs_ignore
  ------------------
 1291|    313|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    313|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    313|    }                                                                   \
ofp-actions.c:ofpact_get_NOTE:
 1289|    298|    {                                                                   \
 1290|    298|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    298|#define ovs_assert ovs_ignore
  ------------------
 1291|    298|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    298|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    298|    }                                                                   \
ofp-actions.c:ofpact_get_EXIT:
 1289|    452|    {                                                                   \
 1290|    452|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    452|#define ovs_assert ovs_ignore
  ------------------
 1291|    452|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    452|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    452|    }                                                                   \
ofp-actions.c:ofpact_get_SAMPLE:
 1289|     94|    {                                                                   \
 1290|     94|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     94|#define ovs_assert ovs_ignore
  ------------------
 1291|     94|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     94|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     94|    }                                                                   \
ofp-actions.c:ofpact_ct_get_action_len:
  723|  12.5k|{
  724|       |    return oc->ofpact.len - offsetof(struct ofpact_conntrack, actions);
  725|  12.5k|}
ofp-actions.c:ofpact_get_CT_CLEAR:
 1289|     53|    {                                                                   \
 1290|     53|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     53|#define ovs_assert ovs_ignore
  ------------------
 1291|     53|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     53|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     53|    }                                                                   \
ofp-actions.c:ofpact_get_OUTPUT_TRUNC:
 1289|  1.11k|    {                                                                   \
 1290|  1.11k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  1.11k|#define ovs_assert ovs_ignore
  ------------------
 1291|  1.11k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  1.11k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  1.11k|    }                                                                   \
ofp-actions.c:ofpact_nest_get_action_len:
  673|  38.4k|{
  674|       |    return on->ofpact.len - offsetof(struct ofpact_nest, actions);
  675|  38.4k|}
ofp-actions.c:ofpact_get_CHECK_PKT_LARGER:
 1289|     12|    {                                                                   \
 1290|     12|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     12|#define ovs_assert ovs_ignore
  ------------------
 1291|     12|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     12|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     12|    }                                                                   \
ofp-actions.c:ofpact_get_CLEAR_ACTIONS:
 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_WRITE_METADATA:
 1289|     89|    {                                                                   \
 1290|     89|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     89|#define ovs_assert ovs_ignore
  ------------------
 1291|     89|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     89|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     89|    }                                                                   \
ofp-actions.c:ofpact_get_GOTO_TABLE:
 1289|    829|    {                                                                   \
 1290|    829|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    829|#define ovs_assert ovs_ignore
  ------------------
 1291|    829|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    829|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    829|    }                                                                   \
ofp-actions.c:ofpact_get_GROUP:
 1289|  1.56k|    {                                                                   \
 1290|  1.56k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  1.56k|#define ovs_assert ovs_ignore
  ------------------
 1291|  1.56k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  1.56k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  1.56k|    }                                                                   \
ofp-actions.c:ofpact_get_METER:
 1289|    328|    {                                                                   \
 1290|    328|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    328|#define ovs_assert ovs_ignore
  ------------------
 1291|    328|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    328|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    328|    }                                                                   \
ofp-packet.c:ofpact_put_UNROLL_XLATE:
 1303|  14.6k|    {                                                                   \
 1304|  14.6k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  14.6k|                                            sizeof(struct STRUCT));     \
 1306|  14.6k|    }                                                                   \
learn.c:ofpact_learn_spec_end:
  894|   140k|{
  895|   140k|    return ALIGNED_CAST(const struct ofpact_learn_spec *,
  ------------------
  |  |  434|   140k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  896|   140k|                        ofpact_next(&learn->ofpact));
  897|   140k|}
learn.c:ofpact_next:
  212|   140k|{
  213|   140k|    return ALIGNED_CAST(struct ofpact *,
  ------------------
  |  |  434|   140k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  214|   140k|                        (uint8_t *) ofpact + OFPACT_ALIGN(ofpact->len));
  215|   140k|}
learn.c:ofpact_learn_spec_imm:
  850|  86.1k|{
  851|  86.1k|    return spec + 1;
  852|  86.1k|}
learn.c:ofpact_learn_spec_next:
  856|  92.7k|{
  857|  92.7k|    if (spec->src_type == NX_LEARN_SRC_IMMEDIATE) {
  ------------------
  |  |  822|  92.7k|#define NX_LEARN_SRC_IMMEDIATE (1 << 13) /* Copy from immediate value. */
  ------------------
  |  Branch (857:9): [True: 87.9k, False: 4.81k]
  ------------------
  858|  87.9k|        unsigned int n_bytes = OFPACT_ALIGN(DIV_ROUND_UP(spec->n_bits, 8));
  ------------------
  |  |  205|  87.9k|#define OFPACT_ALIGN(SIZE) ROUND_UP(SIZE, OFPACT_ALIGNTO)
  |  |  ------------------
  |  |  |  |  303|  87.9k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|  87.9k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  859|  87.9k|        return ALIGNED_CAST(const struct ofpact_learn_spec *,
  ------------------
  |  |  434|  87.9k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  860|  87.9k|                            (const uint8_t *)(spec + 1) + n_bytes);
  861|  87.9k|    }
  862|  4.81k|    return spec + 1;
  863|  92.7k|}

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

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

ofp_print_target.c:ofpbuf_at:
  183|  5.99M|{
  184|  5.99M|    if (offset + size <= b->size) {
  ------------------
  |  Branch (184:9): [True: 5.95M, False: 39.1k]
  ------------------
  185|  5.95M|        ovs_assert(b->data);
  ------------------
  |  |   62|  5.95M|#define ovs_assert ovs_ignore
  ------------------
  186|  5.95M|        return (char *) b->data + offset;
  187|  5.95M|    }
  188|  39.1k|    return NULL;
  189|  5.99M|}
ofp_print_target.c:ofpbuf_pull:
  258|  2.97M|{
  259|  2.97M|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  2.97M|#define ovs_assert ovs_ignore
  ------------------
  260|  2.97M|    void *data = b->data;
  261|       |
  262|  2.97M|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 2.97M]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  2.97M|    b->data = (char*)b->data + size;
  267|  2.97M|    b->size = b->size - size;
  268|  2.97M|    return data;
  269|  2.97M|}
ofp-print.c:ofpbuf_const_initializer:
   97|   120k|{
   98|   120k|    return (struct ofpbuf) {
   99|   120k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|   120k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   120k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   120k|     (TYPE) (POINTER))
  ------------------
  100|   120k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|   120k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   120k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   120k|     (TYPE) (POINTER))
  ------------------
  101|   120k|        .size = size,
  102|   120k|        .allocated = size,
  103|   120k|        .header = NULL,
  104|       |        .msg = NULL,
  105|   120k|        .list_node = OVS_LIST_POISON,
  106|   120k|        .source = OFPBUF_STACK,
  107|   120k|    };
  108|   120k|}
ofp-protocol.c:ofpbuf_const_initializer:
   97|  1.04k|{
   98|  1.04k|    return (struct ofpbuf) {
   99|  1.04k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  1.04k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  1.04k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  1.04k|     (TYPE) (POINTER))
  ------------------
  100|  1.04k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  1.04k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  1.04k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  1.04k|     (TYPE) (POINTER))
  ------------------
  101|  1.04k|        .size = size,
  102|  1.04k|        .allocated = size,
  103|  1.04k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  1.04k|        .list_node = OVS_LIST_POISON,
  106|  1.04k|        .source = OFPBUF_STACK,
  107|  1.04k|    };
  108|  1.04k|}
ofp-protocol.c:ofpbuf_pull:
  258|  1.04k|{
  259|  1.04k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  1.04k|#define ovs_assert ovs_ignore
  ------------------
  260|  1.04k|    void *data = b->data;
  261|       |
  262|  1.04k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 1.04k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  1.04k|    b->data = (char*)b->data + size;
  267|  1.04k|    b->size = b->size - size;
  268|  1.04k|    return data;
  269|  1.04k|}
ofp-queue.c:ofpbuf_const_initializer:
   97|  44.0k|{
   98|  44.0k|    return (struct ofpbuf) {
   99|  44.0k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  44.0k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  44.0k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  44.0k|     (TYPE) (POINTER))
  ------------------
  100|  44.0k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  44.0k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  44.0k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  44.0k|     (TYPE) (POINTER))
  ------------------
  101|  44.0k|        .size = size,
  102|  44.0k|        .allocated = size,
  103|  44.0k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  44.0k|        .list_node = OVS_LIST_POISON,
  106|  44.0k|        .source = OFPBUF_STACK,
  107|  44.0k|    };
  108|  44.0k|}
ofp-queue.c:ofpbuf_pull:
  258|   101k|{
  259|   101k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|   101k|#define ovs_assert ovs_ignore
  ------------------
  260|   101k|    void *data = b->data;
  261|       |
  262|   101k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 11.6k, False: 90.0k]
  ------------------
  263|  11.6k|        return data;
  264|  11.6k|    }
  265|       |
  266|  90.0k|    b->data = (char*)b->data + size;
  267|  90.0k|    b->size = b->size - size;
  268|  90.0k|    return data;
  269|   101k|}
ofp-queue.c:ofpbuf_at_assert:
  195|  9.61k|{
  196|  9.61k|    ovs_assert(offset + size <= b->size);
  ------------------
  |  |   62|  9.61k|#define ovs_assert ovs_ignore
  ------------------
  197|  9.61k|    ovs_assert(b->data);
  ------------------
  |  |   62|  9.61k|#define ovs_assert ovs_ignore
  ------------------
  198|  9.61k|    return (char *) b->data + offset;
  199|  9.61k|}
ofp-queue.c:ofpbuf_try_pull:
  275|  71.5k|{
  276|  71.5k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 70.2k, False: 1.27k]
  ------------------
  277|  71.5k|}
ofp-switch.c:ofpbuf_pull:
  258|  11.2k|{
  259|  11.2k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  11.2k|#define ovs_assert ovs_ignore
  ------------------
  260|  11.2k|    void *data = b->data;
  261|       |
  262|  11.2k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 11.2k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  11.2k|    b->data = (char*)b->data + size;
  267|  11.2k|    b->size = b->size - size;
  268|  11.2k|    return data;
  269|  11.2k|}
ofp-switch.c:ofpbuf_const_initializer:
   97|  7.57k|{
   98|  7.57k|    return (struct ofpbuf) {
   99|  7.57k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  7.57k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  7.57k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  7.57k|     (TYPE) (POINTER))
  ------------------
  100|  7.57k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  7.57k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  7.57k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  7.57k|     (TYPE) (POINTER))
  ------------------
  101|  7.57k|        .size = size,
  102|  7.57k|        .allocated = size,
  103|  7.57k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  7.57k|        .list_node = OVS_LIST_POISON,
  106|  7.57k|        .source = OFPBUF_STACK,
  107|  7.57k|    };
  108|  7.57k|}
ofp-table.c:ofpbuf_const_initializer:
   97|  40.8k|{
   98|  40.8k|    return (struct ofpbuf) {
   99|  40.8k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  40.8k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  40.8k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  40.8k|     (TYPE) (POINTER))
  ------------------
  100|  40.8k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  40.8k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  40.8k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  40.8k|     (TYPE) (POINTER))
  ------------------
  101|  40.8k|        .size = size,
  102|  40.8k|        .allocated = size,
  103|  40.8k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  40.8k|        .list_node = OVS_LIST_POISON,
  106|  40.8k|        .source = OFPBUF_STACK,
  107|  40.8k|    };
  108|  40.8k|}
ofp-table.c:ofpbuf_pull:
  258|   145k|{
  259|   145k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|   145k|#define ovs_assert ovs_ignore
  ------------------
  260|   145k|    void *data = b->data;
  261|       |
  262|   145k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 2.77k, False: 142k]
  ------------------
  263|  2.77k|        return data;
  264|  2.77k|    }
  265|       |
  266|   142k|    b->data = (char*)b->data + size;
  267|   142k|    b->size = b->size - size;
  268|   142k|    return data;
  269|   145k|}
ofp-table.c:ofpbuf_try_pull:
  275|  46.3k|{
  276|  46.3k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 46.3k, False: 0]
  ------------------
  277|  46.3k|}
ofp-util.c:ofpbuf_const_initializer:
   97|  56.2k|{
   98|  56.2k|    return (struct ofpbuf) {
   99|  56.2k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  56.2k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  56.2k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  56.2k|     (TYPE) (POINTER))
  ------------------
  100|  56.2k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  56.2k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  56.2k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  56.2k|     (TYPE) (POINTER))
  ------------------
  101|  56.2k|        .size = size,
  102|  56.2k|        .allocated = size,
  103|  56.2k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  56.2k|        .list_node = OVS_LIST_POISON,
  106|  56.2k|        .source = OFPBUF_STACK,
  107|  56.2k|    };
  108|  56.2k|}
ofp-util.c:ofpbuf_pull:
  258|  75.2k|{
  259|  75.2k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  75.2k|#define ovs_assert ovs_ignore
  ------------------
  260|  75.2k|    void *data = b->data;
  261|       |
  262|  75.2k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 75.2k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  75.2k|    b->data = (char*)b->data + size;
  267|  75.2k|    b->size = b->size - size;
  268|  75.2k|    return data;
  269|  75.2k|}
ofp-util.c:ofpbuf_try_pull:
  275|  51.9k|{
  276|  51.9k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 19.0k, False: 32.9k]
  ------------------
  277|  51.9k|}
ofpbuf.c:ofpbuf_tailroom:
  228|  1.73M|{
  229|  1.73M|    return (char*)ofpbuf_end(b) - (char*)ofpbuf_tail(b);
  230|  1.73M|}
ofpbuf.c:ofpbuf_end:
  211|  1.73M|{
  212|  1.73M|    ovs_assert(b->base || !b->allocated);
  ------------------
  |  |   62|  1.73M|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (212:16): [True: 1.12M, False: 613k]
  |  Branch (212:27): [True: 613k, False: 0]
  ------------------
  213|  1.73M|    return b->base ? (char *) b->base + b->allocated : NULL;
  ------------------
  |  Branch (213:12): [True: 1.12M, False: 613k]
  ------------------
  214|  1.73M|}
ofpbuf.c:ofpbuf_headroom:
  221|  1.61M|{
  222|  1.61M|    return (char*)b->data - (char*)b->base;
  223|  1.61M|}
ofpbuf.c:ofpbuf_tail:
  203|  2.55M|{
  204|  2.55M|    ovs_assert(b->data || !b->size);
  ------------------
  |  |   62|  2.55M|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (204:16): [True: 1.91M, False: 643k]
  |  Branch (204:27): [True: 643k, False: 0]
  ------------------
  205|  2.55M|    return b->data ? (char *) b->data + b->size : NULL;
  ------------------
  |  Branch (205:12): [True: 1.91M, False: 643k]
  ------------------
  206|  2.55M|}
nx-match.c:ofpbuf_try_pull:
  275|   724k|{
  276|   724k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 675k, False: 48.3k]
  ------------------
  277|   724k|}
nx-match.c:ofpbuf_pull:
  258|  1.25M|{
  259|  1.25M|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  1.25M|#define ovs_assert ovs_ignore
  ------------------
  260|  1.25M|    void *data = b->data;
  261|       |
  262|  1.25M|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 230k, False: 1.02M]
  ------------------
  263|   230k|        return data;
  264|   230k|    }
  265|       |
  266|  1.02M|    b->data = (char*)b->data + size;
  267|  1.02M|    b->size = b->size - size;
  268|  1.02M|    return data;
  269|  1.25M|}
nx-match.c:ofpbuf_const_initializer:
   97|   259k|{
   98|   259k|    return (struct ofpbuf) {
   99|   259k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|   259k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   259k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   259k|     (TYPE) (POINTER))
  ------------------
  100|   259k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|   259k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   259k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   259k|     (TYPE) (POINTER))
  ------------------
  101|   259k|        .size = size,
  102|   259k|        .allocated = size,
  103|   259k|        .header = NULL,
  104|       |        .msg = NULL,
  105|   259k|        .list_node = OVS_LIST_POISON,
  106|   259k|        .source = OFPBUF_STACK,
  107|   259k|    };
  108|   259k|}
nx-match.c:ofpbuf_tail:
  203|  5.39k|{
  204|  5.39k|    ovs_assert(b->data || !b->size);
  ------------------
  |  |   62|  5.39k|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (204:16): [True: 5.39k, False: 0]
  |  Branch (204:27): [True: 0, False: 0]
  ------------------
  205|  5.39k|    return b->data ? (char *) b->data + b->size : NULL;
  ------------------
  |  Branch (205:12): [True: 5.39k, False: 0]
  ------------------
  206|  5.39k|}
ofp-actions.c:ofpbuf_clear:
  250|   292k|{
  251|   292k|    b->data = b->base;
  252|   292k|    b->size = 0;
  253|   292k|}
ofp-actions.c:ofpbuf_try_pull:
  275|   340k|{
  276|   340k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 337k, False: 3.34k]
  ------------------
  277|   340k|}
ofp-actions.c:ofpbuf_pull:
  258|   823k|{
  259|   823k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|   823k|#define ovs_assert ovs_ignore
  ------------------
  260|   823k|    void *data = b->data;
  261|       |
  262|   823k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 77.9k, False: 745k]
  ------------------
  263|  77.9k|        return data;
  264|  77.9k|    }
  265|       |
  266|   745k|    b->data = (char*)b->data + size;
  267|   745k|    b->size = b->size - size;
  268|   745k|    return data;
  269|   823k|}
ofp-actions.c:ofpbuf_const_initializer:
   97|  67.6k|{
   98|  67.6k|    return (struct ofpbuf) {
   99|  67.6k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  67.6k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  67.6k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  67.6k|     (TYPE) (POINTER))
  ------------------
  100|  67.6k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  67.6k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  67.6k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  67.6k|     (TYPE) (POINTER))
  ------------------
  101|  67.6k|        .size = size,
  102|  67.6k|        .allocated = size,
  103|  67.6k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  67.6k|        .list_node = OVS_LIST_POISON,
  106|  67.6k|        .source = OFPBUF_STACK,
  107|  67.6k|    };
  108|  67.6k|}
ofp-actions.c:ofpbuf_msgsize:
  244|    198|{
  245|    198|    return (char *)ofpbuf_tail(b) - (char *)b->msg;
  246|    198|}
ofp-actions.c:ofpbuf_at_assert:
  195|   133k|{
  196|   133k|    ovs_assert(offset + size <= b->size);
  ------------------
  |  |   62|   133k|#define ovs_assert ovs_ignore
  ------------------
  197|   133k|    ovs_assert(b->data);
  ------------------
  |  |   62|   133k|#define ovs_assert ovs_ignore
  ------------------
  198|   133k|    return (char *) b->data + offset;
  199|   133k|}
ofp-actions.c:ofpbuf_tail:
  203|   111k|{
  204|   111k|    ovs_assert(b->data || !b->size);
  ------------------
  |  |   62|   111k|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (204:16): [True: 111k, False: 0]
  |  Branch (204:27): [True: 0, False: 0]
  ------------------
  205|   111k|    return b->data ? (char *) b->data + b->size : NULL;
  ------------------
  |  Branch (205:12): [True: 111k, False: 0]
  ------------------
  206|   111k|}
ofp-bundle.c:ofpbuf_const_initializer:
   97|  9.04k|{
   98|  9.04k|    return (struct ofpbuf) {
   99|  9.04k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  9.04k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  9.04k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  9.04k|     (TYPE) (POINTER))
  ------------------
  100|  9.04k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  9.04k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  9.04k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  9.04k|     (TYPE) (POINTER))
  ------------------
  101|  9.04k|        .size = size,
  102|  9.04k|        .allocated = size,
  103|  9.04k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  9.04k|        .list_node = OVS_LIST_POISON,
  106|  9.04k|        .source = OFPBUF_STACK,
  107|  9.04k|    };
  108|  9.04k|}
ofp-bundle.c:ofpbuf_pull:
  258|  5.68k|{
  259|  5.68k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  5.68k|#define ovs_assert ovs_ignore
  ------------------
  260|  5.68k|    void *data = b->data;
  261|       |
  262|  5.68k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 5.68k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  5.68k|    b->data = (char*)b->data + size;
  267|  5.68k|    b->size = b->size - size;
  268|  5.68k|    return data;
  269|  5.68k|}
ofp-connection.c:ofpbuf_const_initializer:
   97|  36.3k|{
   98|  36.3k|    return (struct ofpbuf) {
   99|  36.3k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  36.3k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  36.3k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  36.3k|     (TYPE) (POINTER))
  ------------------
  100|  36.3k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  36.3k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  36.3k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  36.3k|     (TYPE) (POINTER))
  ------------------
  101|  36.3k|        .size = size,
  102|  36.3k|        .allocated = size,
  103|  36.3k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  36.3k|        .list_node = OVS_LIST_POISON,
  106|  36.3k|        .source = OFPBUF_STACK,
  107|  36.3k|    };
  108|  36.3k|}
ofp-ct.c:ofpbuf_const_initializer:
   97|  15.1k|{
   98|  15.1k|    return (struct ofpbuf) {
   99|  15.1k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  15.1k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  15.1k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  15.1k|     (TYPE) (POINTER))
  ------------------
  100|  15.1k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  15.1k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  15.1k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  15.1k|     (TYPE) (POINTER))
  ------------------
  101|  15.1k|        .size = size,
  102|  15.1k|        .allocated = size,
  103|  15.1k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  15.1k|        .list_node = OVS_LIST_POISON,
  106|  15.1k|        .source = OFPBUF_STACK,
  107|  15.1k|    };
  108|  15.1k|}
ofp-ct.c:ofpbuf_pull:
  258|  15.1k|{
  259|  15.1k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  15.1k|#define ovs_assert ovs_ignore
  ------------------
  260|  15.1k|    void *data = b->data;
  261|       |
  262|  15.1k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 15.1k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  15.1k|    b->data = (char*)b->data + size;
  267|  15.1k|    b->size = b->size - size;
  268|  15.1k|    return data;
  269|  15.1k|}
ofp-ct.c:ofpbuf_msgsize:
  244|  12.6k|{
  245|  12.6k|    return (char *)ofpbuf_tail(b) - (char *)b->msg;
  246|  12.6k|}
ofp-ct.c:ofpbuf_tail:
  203|  12.6k|{
  204|  12.6k|    ovs_assert(b->data || !b->size);
  ------------------
  |  |   62|  12.6k|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (204:16): [True: 12.6k, False: 0]
  |  Branch (204:27): [True: 0, False: 0]
  ------------------
  205|  12.6k|    return b->data ? (char *) b->data + b->size : NULL;
  ------------------
  |  Branch (205:12): [True: 12.6k, False: 0]
  ------------------
  206|  12.6k|}
ofp-errors.c:ofpbuf_const_initializer:
   97|  1.06M|{
   98|  1.06M|    return (struct ofpbuf) {
   99|  1.06M|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  1.06M|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  1.06M|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  1.06M|     (TYPE) (POINTER))
  ------------------
  100|  1.06M|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  1.06M|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  1.06M|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  1.06M|     (TYPE) (POINTER))
  ------------------
  101|  1.06M|        .size = size,
  102|  1.06M|        .allocated = size,
  103|  1.06M|        .header = NULL,
  104|       |        .msg = NULL,
  105|  1.06M|        .list_node = OVS_LIST_POISON,
  106|  1.06M|        .source = OFPBUF_STACK,
  107|  1.06M|    };
  108|  1.06M|}
ofp-errors.c:ofpbuf_pull:
  258|  1.32M|{
  259|  1.32M|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  1.32M|#define ovs_assert ovs_ignore
  ------------------
  260|  1.32M|    void *data = b->data;
  261|       |
  262|  1.32M|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 1.32M]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  1.32M|    b->data = (char*)b->data + size;
  267|  1.32M|    b->size = b->size - size;
  268|  1.32M|    return data;
  269|  1.32M|}
ofp-errors.c:ofpbuf_try_pull:
  275|   278k|{
  276|   278k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 263k, False: 14.6k]
  ------------------
  277|   278k|}
ofp-flow.c:ofpbuf_const_initializer:
   97|   153k|{
   98|   153k|    return (struct ofpbuf) {
   99|   153k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|   153k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   153k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   153k|     (TYPE) (POINTER))
  ------------------
  100|   153k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|   153k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   153k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   153k|     (TYPE) (POINTER))
  ------------------
  101|   153k|        .size = size,
  102|   153k|        .allocated = size,
  103|   153k|        .header = NULL,
  104|       |        .msg = NULL,
  105|   153k|        .list_node = OVS_LIST_POISON,
  106|   153k|        .source = OFPBUF_STACK,
  107|   153k|    };
  108|   153k|}
ofp-flow.c:ofpbuf_pull:
  258|   169k|{
  259|   169k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|   169k|#define ovs_assert ovs_ignore
  ------------------
  260|   169k|    void *data = b->data;
  261|       |
  262|   169k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 169k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|   169k|    b->data = (char*)b->data + size;
  267|   169k|    b->size = b->size - size;
  268|   169k|    return data;
  269|   169k|}
ofp-flow.c:ofpbuf_try_pull:
  275|  26.8k|{
  276|  26.8k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 21.3k, False: 5.51k]
  ------------------
  277|  26.8k|}
ofp-group.c:ofpbuf_const_initializer:
   97|  91.3k|{
   98|  91.3k|    return (struct ofpbuf) {
   99|  91.3k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  91.3k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  91.3k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  91.3k|     (TYPE) (POINTER))
  ------------------
  100|  91.3k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  91.3k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  91.3k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  91.3k|     (TYPE) (POINTER))
  ------------------
  101|  91.3k|        .size = size,
  102|  91.3k|        .allocated = size,
  103|  91.3k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  91.3k|        .list_node = OVS_LIST_POISON,
  106|  91.3k|        .source = OFPBUF_STACK,
  107|  91.3k|    };
  108|  91.3k|}
ofp-group.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: 17.4k, False: 128k]
  ------------------
  263|  17.4k|        return data;
  264|  17.4k|    }
  265|       |
  266|   128k|    b->data = (char*)b->data + size;
  267|   128k|    b->size = b->size - size;
  268|   128k|    return data;
  269|   146k|}
ofp-group.c:ofpbuf_try_pull:
  275|  68.0k|{
  276|  68.0k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 64.6k, False: 3.40k]
  ------------------
  277|  68.0k|}
ofp-ipfix.c:ofpbuf_try_pull:
  275|  14.3k|{
  276|  14.3k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 14.3k, False: 0]
  ------------------
  277|  14.3k|}
ofp-ipfix.c:ofpbuf_pull:
  258|  14.3k|{
  259|  14.3k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  14.3k|#define ovs_assert ovs_ignore
  ------------------
  260|  14.3k|    void *data = b->data;
  261|       |
  262|  14.3k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 14.3k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  14.3k|    b->data = (char*)b->data + size;
  267|  14.3k|    b->size = b->size - size;
  268|  14.3k|    return data;
  269|  14.3k|}
ofp-ipfix.c:ofpbuf_const_initializer:
   97|  2.44k|{
   98|  2.44k|    return (struct ofpbuf) {
   99|  2.44k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  2.44k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  2.44k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  2.44k|     (TYPE) (POINTER))
  ------------------
  100|  2.44k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  2.44k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  2.44k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  2.44k|     (TYPE) (POINTER))
  ------------------
  101|  2.44k|        .size = size,
  102|  2.44k|        .allocated = size,
  103|  2.44k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  2.44k|        .list_node = OVS_LIST_POISON,
  106|  2.44k|        .source = OFPBUF_STACK,
  107|  2.44k|    };
  108|  2.44k|}
ofp-match.c:ofpbuf_pull:
  258|  22.8k|{
  259|  22.8k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  22.8k|#define ovs_assert ovs_ignore
  ------------------
  260|  22.8k|    void *data = b->data;
  261|       |
  262|  22.8k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 22.8k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  22.8k|    b->data = (char*)b->data + size;
  267|  22.8k|    b->size = b->size - size;
  268|  22.8k|    return data;
  269|  22.8k|}
ofp-match.c:ofpbuf_const_initializer:
   97|  4.60k|{
   98|  4.60k|    return (struct ofpbuf) {
   99|  4.60k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  4.60k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  4.60k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  4.60k|     (TYPE) (POINTER))
  ------------------
  100|  4.60k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  4.60k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  4.60k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  4.60k|     (TYPE) (POINTER))
  ------------------
  101|  4.60k|        .size = size,
  102|  4.60k|        .allocated = size,
  103|  4.60k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  4.60k|        .list_node = OVS_LIST_POISON,
  106|  4.60k|        .source = OFPBUF_STACK,
  107|  4.60k|    };
  108|  4.60k|}
ofp-meter.c:ofpbuf_const_initializer:
   97|  13.5k|{
   98|  13.5k|    return (struct ofpbuf) {
   99|  13.5k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  13.5k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  13.5k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  13.5k|     (TYPE) (POINTER))
  ------------------
  100|  13.5k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  13.5k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  13.5k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  13.5k|     (TYPE) (POINTER))
  ------------------
  101|  13.5k|        .size = size,
  102|  13.5k|        .allocated = size,
  103|  13.5k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  13.5k|        .list_node = OVS_LIST_POISON,
  106|  13.5k|        .source = OFPBUF_STACK,
  107|  13.5k|    };
  108|  13.5k|}
ofp-meter.c:ofpbuf_pull:
  258|  31.5k|{
  259|  31.5k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  31.5k|#define ovs_assert ovs_ignore
  ------------------
  260|  31.5k|    void *data = b->data;
  261|       |
  262|  31.5k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 2.54k, False: 29.0k]
  ------------------
  263|  2.54k|        return data;
  264|  2.54k|    }
  265|       |
  266|  29.0k|    b->data = (char*)b->data + size;
  267|  29.0k|    b->size = b->size - size;
  268|  29.0k|    return data;
  269|  31.5k|}
ofp-meter.c:ofpbuf_try_pull:
  275|  21.7k|{
  276|  21.7k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 17.9k, False: 3.78k]
  ------------------
  277|  21.7k|}
ofp-meter.c:ofpbuf_clear:
  250|  6.33k|{
  251|  6.33k|    b->data = b->base;
  252|  6.33k|    b->size = 0;
  253|  6.33k|}
ofp-monitor.c:ofpbuf_const_initializer:
   97|  16.7k|{
   98|  16.7k|    return (struct ofpbuf) {
   99|  16.7k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  16.7k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  16.7k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  16.7k|     (TYPE) (POINTER))
  ------------------
  100|  16.7k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  16.7k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  16.7k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  16.7k|     (TYPE) (POINTER))
  ------------------
  101|  16.7k|        .size = size,
  102|  16.7k|        .allocated = size,
  103|  16.7k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  16.7k|        .list_node = OVS_LIST_POISON,
  106|  16.7k|        .source = OFPBUF_STACK,
  107|  16.7k|    };
  108|  16.7k|}
ofp-monitor.c:ofpbuf_pull:
  258|  48.9k|{
  259|  48.9k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  48.9k|#define ovs_assert ovs_ignore
  ------------------
  260|  48.9k|    void *data = b->data;
  261|       |
  262|  48.9k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 48.9k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  48.9k|    b->data = (char*)b->data + size;
  267|  48.9k|    b->size = b->size - size;
  268|  48.9k|    return data;
  269|  48.9k|}
ofp-monitor.c:ofpbuf_try_pull:
  275|  12.3k|{
  276|  12.3k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 11.1k, False: 1.22k]
  ------------------
  277|  12.3k|}
ofp-monitor.c:ofpbuf_clear:
  250|  52.1k|{
  251|  52.1k|    b->data = b->base;
  252|  52.1k|    b->size = 0;
  253|  52.1k|}
ofp-msgs.c:ofpbuf_const_initializer:
   97|  3.21M|{
   98|  3.21M|    return (struct ofpbuf) {
   99|  3.21M|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  3.21M|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  3.21M|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  3.21M|     (TYPE) (POINTER))
  ------------------
  100|  3.21M|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  3.21M|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  3.21M|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  3.21M|     (TYPE) (POINTER))
  ------------------
  101|  3.21M|        .size = size,
  102|  3.21M|        .allocated = size,
  103|  3.21M|        .header = NULL,
  104|       |        .msg = NULL,
  105|  3.21M|        .list_node = OVS_LIST_POISON,
  106|  3.21M|        .source = OFPBUF_STACK,
  107|  3.21M|    };
  108|  3.21M|}
ofp-msgs.c:ofpbuf_pull:
  258|  4.35M|{
  259|  4.35M|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  4.35M|#define ovs_assert ovs_ignore
  ------------------
  260|  4.35M|    void *data = b->data;
  261|       |
  262|  4.35M|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 4.35M]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  4.35M|    b->data = (char*)b->data + size;
  267|  4.35M|    b->size = b->size - size;
  268|  4.35M|    return data;
  269|  4.35M|}
ofp-packet.c:ofpbuf_const_initializer:
   97|   426k|{
   98|   426k|    return (struct ofpbuf) {
   99|   426k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|   426k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   426k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   426k|     (TYPE) (POINTER))
  ------------------
  100|   426k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|   426k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   426k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   426k|     (TYPE) (POINTER))
  ------------------
  101|   426k|        .size = size,
  102|   426k|        .allocated = size,
  103|   426k|        .header = NULL,
  104|       |        .msg = NULL,
  105|   426k|        .list_node = OVS_LIST_POISON,
  106|   426k|        .source = OFPBUF_STACK,
  107|   426k|    };
  108|   426k|}
ofp-packet.c:ofpbuf_pull:
  258|   467k|{
  259|   467k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|   467k|#define ovs_assert ovs_ignore
  ------------------
  260|   467k|    void *data = b->data;
  261|       |
  262|   467k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 467k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|   467k|    b->data = (char*)b->data + size;
  267|   467k|    b->size = b->size - size;
  268|   467k|    return data;
  269|   467k|}
ofp-packet.c:ofpbuf_try_pull:
  275|  76.9k|{
  276|  76.9k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 71.9k, False: 4.98k]
  ------------------
  277|  76.9k|}
ofp-packet.c:ofpbuf_msgsize:
  244|  40.5k|{
  245|  40.5k|    return (char *)ofpbuf_tail(b) - (char *)b->msg;
  246|  40.5k|}
ofp-packet.c:ofpbuf_tail:
  203|  40.5k|{
  204|  40.5k|    ovs_assert(b->data || !b->size);
  ------------------
  |  |   62|  40.5k|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (204:16): [True: 40.5k, False: 0]
  |  Branch (204:27): [True: 0, False: 0]
  ------------------
  205|  40.5k|    return b->data ? (char *) b->data + b->size : NULL;
  ------------------
  |  Branch (205:12): [True: 40.5k, False: 0]
  ------------------
  206|  40.5k|}
ofp-packet.c:ofpbuf_headersize:
  236|  26.7k|{
  237|  26.7k|    return (char *)b->msg - (char *)b->header;
  238|  26.7k|}
ofp-packet.c:ofpbuf_clear:
  250|   259k|{
  251|   259k|    b->data = b->base;
  252|   259k|    b->size = 0;
  253|   259k|}
ofp-port.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-port.c:ofpbuf_pull:
  258|   273k|{
  259|   273k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|   273k|#define ovs_assert ovs_ignore
  ------------------
  260|   273k|    void *data = b->data;
  261|       |
  262|   273k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 22.6k, False: 250k]
  ------------------
  263|  22.6k|        return data;
  264|  22.6k|    }
  265|       |
  266|   250k|    b->data = (char*)b->data + size;
  267|   250k|    b->size = b->size - size;
  268|   250k|    return data;
  269|   273k|}
ofp-port.c:ofpbuf_try_pull:
  275|   255k|{
  276|   255k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 245k, False: 9.68k]
  ------------------
  277|   255k|}
ofp-prop.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-prop.c:ofpbuf_msgsize:
  244|  54.5k|{
  245|  54.5k|    return (char *)ofpbuf_tail(b) - (char *)b->msg;
  246|  54.5k|}
ofp-prop.c:ofpbuf_tail:
  203|  54.5k|{
  204|  54.5k|    ovs_assert(b->data || !b->size);
  ------------------
  |  |   62|  54.5k|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (204:16): [True: 54.5k, False: 0]
  |  Branch (204:27): [True: 0, False: 0]
  ------------------
  205|  54.5k|    return b->data ? (char *) b->data + b->size : NULL;
  ------------------
  |  Branch (205:12): [True: 54.5k, False: 0]
  ------------------
  206|  54.5k|}
ofp-prop.c:ofpbuf_headersize:
  236|  34.6k|{
  237|  34.6k|    return (char *)b->msg - (char *)b->header;
  238|  34.6k|}
ox-stat.c:ofpbuf_try_pull:
  275|  14.8k|{
  276|  14.8k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 12.3k, False: 2.42k]
  ------------------
  277|  14.8k|}
ox-stat.c:ofpbuf_pull:
  258|  16.8k|{
  259|  16.8k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  16.8k|#define ovs_assert ovs_ignore
  ------------------
  260|  16.8k|    void *data = b->data;
  261|       |
  262|  16.8k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 2.15k, False: 14.6k]
  ------------------
  263|  2.15k|        return data;
  264|  2.15k|    }
  265|       |
  266|  14.6k|    b->data = (char*)b->data + size;
  267|  14.6k|    b->size = b->size - size;
  268|  14.6k|    return data;
  269|  16.8k|}
ox-stat.c:ofpbuf_const_initializer:
   97|  9.23k|{
   98|  9.23k|    return (struct ofpbuf) {
   99|  9.23k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  9.23k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  9.23k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  9.23k|     (TYPE) (POINTER))
  ------------------
  100|  9.23k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  9.23k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  9.23k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  9.23k|     (TYPE) (POINTER))
  ------------------
  101|  9.23k|        .size = size,
  102|  9.23k|        .allocated = size,
  103|  9.23k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  9.23k|        .list_node = OVS_LIST_POISON,
  106|  9.23k|        .source = OFPBUF_STACK,
  107|  9.23k|    };
  108|  9.23k|}

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

ofp-actions.c:is_pow2:
  399|  3.35k|{
  400|  3.35k|    return IS_POW2(x);
  ------------------
  |  |  312|  3.35k|#define IS_POW2(X) ((X) && !((X) & ((X) - 1)))
  |  |  ------------------
  |  |  |  Branch (312:21): [True: 3.35k, False: 0]
  |  |  |  Branch (312:28): [True: 2.44k, False: 912]
  |  |  ------------------
  ------------------
  401|  3.35k|}
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|  7.06k|{
   45|  7.06k|    return bitmap_n_longs(n_bits) * sizeof(unsigned long int);
   46|  7.06k|}
ofp-table.c:bitmap_n_longs:
   38|  7.06k|{
   39|  7.06k|    return BITMAP_N_LONGS(n_bits);
  ------------------
  |  |  424|  7.06k|#define BITMAP_N_LONGS(N_BITS) DIV_ROUND_UP(N_BITS, BITMAP_ULONG_BITS)
  |  |  ------------------
  |  |  |  |  300|  7.06k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
   40|  7.06k|}
ofp-table.c:bitmap_set1:
   96|   183k|{
   97|   183k|    *bitmap_unit__(bitmap, offset) |= bitmap_bit__(offset);
   98|   183k|    return bitmap;
   99|   183k|}
ofp-table.c:bitmap_bit__:
   32|   185k|{
   33|       |    return 1UL << (offset % BITMAP_ULONG_BITS);
  ------------------
  |  |  423|   185k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
   34|   185k|}
ofp-table.c:bitmap_unit__:
   26|  1.51M|{
   27|  1.51M|    return CONST_CAST(unsigned long *, &bitmap[offset / BITMAP_ULONG_BITS]);
  ------------------
  |  |   85|  1.51M|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  1.51M|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  1.51M|     (TYPE) (POINTER))
  ------------------
   28|  1.51M|}
ofp-table.c:bitmap_or:
  179|  41.7k|{
  180|  41.7k|    size_t i;
  181|       |
  182|   208k|    for (i = 0; i < BITMAP_N_LONGS(n); i++) {
  ------------------
  |  |  424|   208k|#define BITMAP_N_LONGS(N_BITS) DIV_ROUND_UP(N_BITS, BITMAP_ULONG_BITS)
  |  |  ------------------
  |  |  |  |  300|   208k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (182:17): [True: 167k, False: 41.7k]
  ------------------
  183|   167k|        dst[i] |= arg[i];
  184|   167k|    }
  185|  41.7k|    return dst;
  186|  41.7k|}
ofp-table.c:bitmap_and:
  167|  9.26k|{
  168|  9.26k|    size_t i;
  169|       |
  170|  46.3k|    for (i = 0; i < BITMAP_N_LONGS(n); i++) {
  ------------------
  |  |  424|  46.3k|#define BITMAP_N_LONGS(N_BITS) DIV_ROUND_UP(N_BITS, BITMAP_ULONG_BITS)
  |  |  ------------------
  |  |  |  |  300|  46.3k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (170:17): [True: 37.0k, False: 9.26k]
  ------------------
  171|  37.0k|        dst[i] &= arg[i];
  172|  37.0k|    }
  173|  9.26k|    return dst;
  174|  9.26k|}
ofp-table.c:bitmap_scan:
  227|   794k|{
  228|   794k|    if (OVS_LIKELY(start < end)) {
  ------------------
  |  |   65|   794k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 794k, False: 0]
  |  |  ------------------
  ------------------
  229|   794k|        unsigned long *p, unit;
  230|       |
  231|   794k|        p = bitmap_unit__(bitmap, start);
  232|   794k|        unit = (target ? *p : ~*p) >> (start % BITMAP_ULONG_BITS);
  ------------------
  |  |  423|   794k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (232:17): [True: 794k, False: 0]
  ------------------
  233|   794k|        if (!unit) {
  ------------------
  |  Branch (233:13): [True: 431k, False: 362k]
  ------------------
  234|   431k|            start -= start % BITMAP_ULONG_BITS; /* Round down. */
  ------------------
  |  |  423|   431k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  235|   431k|            start += BITMAP_ULONG_BITS; /* Start of the next unit. */
  ------------------
  |  |  423|   431k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  236|       |
  237|  1.11M|            for (; start < end; start += BITMAP_ULONG_BITS) {
  ------------------
  |  |  423|   681k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (237:20): [True: 866k, False: 246k]
  ------------------
  238|   866k|                unit = target ? *++p : ~*++p;
  ------------------
  |  Branch (238:24): [True: 866k, False: 0]
  ------------------
  239|   866k|                if (unit) {
  ------------------
  |  Branch (239:21): [True: 184k, False: 681k]
  ------------------
  240|   184k|                    goto found;
  241|   184k|                }
  242|   866k|            }
  243|   246k|            return end;
  244|   431k|        }
  245|   547k|found:
  246|   547k|        start += raw_ctz(unit);  /* unit != 0 */
  247|   547k|        if (OVS_LIKELY(start < end)) {
  ------------------
  |  |   65|   547k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 547k, False: 0]
  |  |  ------------------
  ------------------
  248|   547k|            return start;
  249|   547k|        }
  250|   547k|    }
  251|      0|    return end;
  252|   794k|}
ofp-table.c:bitmap_is_set:
   90|  1.74k|{
   91|  1.74k|    return (*bitmap_unit__(bitmap, offset) & bitmap_bit__(offset)) != 0;
   92|  1.74k|}
ofp-table.c:bitmap_is_all_zeros:
  273|   278k|{
  274|       |    return bitmap_scan(bitmap, true, 0, n) == n;
  275|   278k|}
ofp-table.c:bitmap_equal:
  207|   297k|{
  208|   297k|    if (memcmp(a, b, n / BITMAP_ULONG_BITS * sizeof(unsigned long))) {
  ------------------
  |  |  423|   297k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (208:9): [True: 28.0k, False: 269k]
  ------------------
  209|  28.0k|        return false;
  210|  28.0k|    }
  211|   269k|    if (n % BITMAP_ULONG_BITS) {
  ------------------
  |  |  423|   269k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (211:9): [True: 269k, False: 0]
  ------------------
  212|   269k|        unsigned long mask = (1UL << n % BITMAP_ULONG_BITS) - 1;
  ------------------
  |  |  423|   269k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  213|   269k|        unsigned long diff = *bitmap_unit__(a, n) ^ *bitmap_unit__(b, n);
  214|       |
  215|   269k|        return !(diff & mask);
  216|   269k|    }
  217|      0|    return true;
  218|   269k|}
meta-flow.c:bitmap_scan:
  227|  19.8k|{
  228|  19.8k|    if (OVS_LIKELY(start < end)) {
  ------------------
  |  |   65|  19.8k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 18.7k, False: 1.10k]
  |  |  ------------------
  ------------------
  229|  18.7k|        unsigned long *p, unit;
  230|       |
  231|  18.7k|        p = bitmap_unit__(bitmap, start);
  232|  18.7k|        unit = (target ? *p : ~*p) >> (start % BITMAP_ULONG_BITS);
  ------------------
  |  |  423|  18.7k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (232:17): [True: 18.7k, False: 0]
  ------------------
  233|  18.7k|        if (!unit) {
  ------------------
  |  Branch (233:13): [True: 14.3k, False: 4.37k]
  ------------------
  234|  14.3k|            start -= start % BITMAP_ULONG_BITS; /* Round down. */
  ------------------
  |  |  423|  14.3k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  235|  14.3k|            start += BITMAP_ULONG_BITS; /* Start of the next unit. */
  ------------------
  |  |  423|  14.3k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  236|       |
  237|  22.1k|            for (; start < end; start += BITMAP_ULONG_BITS) {
  ------------------
  |  |  423|  7.75k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (237:20): [True: 12.6k, False: 9.49k]
  ------------------
  238|  12.6k|                unit = target ? *++p : ~*++p;
  ------------------
  |  Branch (238:24): [True: 12.6k, False: 0]
  ------------------
  239|  12.6k|                if (unit) {
  ------------------
  |  Branch (239:21): [True: 4.87k, False: 7.75k]
  ------------------
  240|  4.87k|                    goto found;
  241|  4.87k|                }
  242|  12.6k|            }
  243|  9.49k|            return end;
  244|  14.3k|        }
  245|  9.24k|found:
  246|  9.24k|        start += raw_ctz(unit);  /* unit != 0 */
  247|  9.24k|        if (OVS_LIKELY(start < end)) {
  ------------------
  |  |   65|  9.24k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 8.30k, False: 945]
  |  |  ------------------
  ------------------
  248|  8.30k|            return start;
  249|  8.30k|        }
  250|  9.24k|    }
  251|  2.04k|    return end;
  252|  19.8k|}
meta-flow.c:bitmap_unit__:
   26|  41.8k|{
   27|  41.8k|    return CONST_CAST(unsigned long *, &bitmap[offset / BITMAP_ULONG_BITS]);
  ------------------
  |  |   85|  41.8k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  41.8k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  41.8k|     (TYPE) (POINTER))
  ------------------
   28|  41.8k|}
meta-flow.c:bitmap_is_set:
   90|  11.5k|{
   91|  11.5k|    return (*bitmap_unit__(bitmap, offset) & bitmap_bit__(offset)) != 0;
   92|  11.5k|}
meta-flow.c:bitmap_bit__:
   32|  23.0k|{
   33|       |    return 1UL << (offset % BITMAP_ULONG_BITS);
  ------------------
  |  |  423|  23.0k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
   34|  23.0k|}
meta-flow.c:bitmap_set1:
   96|  11.5k|{
   97|  11.5k|    *bitmap_unit__(bitmap, offset) |= bitmap_bit__(offset);
   98|  11.5k|    return bitmap;
   99|  11.5k|}
meta-flow.c:bitmap_and:
  167|   149k|{
  168|   149k|    size_t i;
  169|       |
  170|   745k|    for (i = 0; i < BITMAP_N_LONGS(n); i++) {
  ------------------
  |  |  424|   745k|#define BITMAP_N_LONGS(N_BITS) DIV_ROUND_UP(N_BITS, BITMAP_ULONG_BITS)
  |  |  ------------------
  |  |  |  |  300|   745k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (170:17): [True: 596k, False: 149k]
  ------------------
  171|   596k|        dst[i] &= arg[i];
  172|   596k|    }
  173|   149k|    return dst;
  174|   149k|}
meta-flow.c:bitmap_not:
  191|  74.5k|{
  192|  74.5k|    size_t i;
  193|       |
  194|   298k|    for (i = 0; i < n / BITMAP_ULONG_BITS; i++) {
  ------------------
  |  |  423|   298k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (194:17): [True: 223k, False: 74.5k]
  ------------------
  195|   223k|        dst[i] = ~dst[i];
  196|   223k|    }
  197|  74.5k|    if (n % BITMAP_ULONG_BITS) {
  ------------------
  |  |  423|  74.5k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (197:9): [True: 74.5k, False: 0]
  ------------------
  198|       |        dst[i] ^= (1UL << (n % BITMAP_ULONG_BITS)) - 1;
  ------------------
  |  |  423|  74.5k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  199|  74.5k|    }
  200|  74.5k|    return dst;
  201|  74.5k|}
nx-match.c:bitmap_is_set:
   90|  11.8k|{
   91|  11.8k|    return (*bitmap_unit__(bitmap, offset) & bitmap_bit__(offset)) != 0;
   92|  11.8k|}
nx-match.c:bitmap_unit__:
   26|   523k|{
   27|   523k|    return CONST_CAST(unsigned long *, &bitmap[offset / BITMAP_ULONG_BITS]);
  ------------------
  |  |   85|   523k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   523k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   523k|     (TYPE) (POINTER))
  ------------------
   28|   523k|}
nx-match.c:bitmap_bit__:
   32|   509k|{
   33|       |    return 1UL << (offset % BITMAP_ULONG_BITS);
  ------------------
  |  |  423|   509k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
   34|   509k|}
nx-match.c:bitmap_scan:
  227|  14.5k|{
  228|  14.5k|    if (OVS_LIKELY(start < end)) {
  ------------------
  |  |   65|  14.5k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 14.4k, False: 141]
  |  |  ------------------
  ------------------
  229|  14.4k|        unsigned long *p, unit;
  230|       |
  231|  14.4k|        p = bitmap_unit__(bitmap, start);
  232|  14.4k|        unit = (target ? *p : ~*p) >> (start % BITMAP_ULONG_BITS);
  ------------------
  |  |  423|  14.4k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (232:17): [True: 14.4k, False: 0]
  ------------------
  233|  14.4k|        if (!unit) {
  ------------------
  |  Branch (233:13): [True: 10.2k, False: 4.11k]
  ------------------
  234|  10.2k|            start -= start % BITMAP_ULONG_BITS; /* Round down. */
  ------------------
  |  |  423|  10.2k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  235|  10.2k|            start += BITMAP_ULONG_BITS; /* Start of the next unit. */
  ------------------
  |  |  423|  10.2k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  236|       |
  237|  15.3k|            for (; start < end; start += BITMAP_ULONG_BITS) {
  ------------------
  |  |  423|  5.05k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (237:20): [True: 11.6k, False: 3.73k]
  ------------------
  238|  11.6k|                unit = target ? *++p : ~*++p;
  ------------------
  |  Branch (238:24): [True: 11.6k, False: 0]
  ------------------
  239|  11.6k|                if (unit) {
  ------------------
  |  Branch (239:21): [True: 6.56k, False: 5.05k]
  ------------------
  240|  6.56k|                    goto found;
  241|  6.56k|                }
  242|  11.6k|            }
  243|  3.73k|            return end;
  244|  10.2k|        }
  245|  10.6k|found:
  246|  10.6k|        start += raw_ctz(unit);  /* unit != 0 */
  247|  10.6k|        if (OVS_LIKELY(start < end)) {
  ------------------
  |  |   65|  10.6k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 10.6k, False: 0]
  |  |  ------------------
  ------------------
  248|  10.6k|            return start;
  249|  10.6k|        }
  250|  10.6k|    }
  251|    141|    return end;
  252|  14.5k|}
nx-match.c:bitmap_set1:
   96|   497k|{
   97|   497k|    *bitmap_unit__(bitmap, offset) |= bitmap_bit__(offset);
   98|   497k|    return bitmap;
   99|   497k|}
ofp-group.c:bitmap_count1:
  153|  4.66k|{
  154|  4.66k|    size_t i;
  155|  4.66k|    size_t count = 0;
  156|       |
  157|  4.66k|    BUILD_ASSERT(ULONG_MAX <= UINT64_MAX);
  ------------------
  |  |  271|  4.66k|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  ------------------
  158|  23.3k|    for (i = 0; i < BITMAP_N_LONGS(n); i++) {
  ------------------
  |  |  424|  23.3k|#define BITMAP_N_LONGS(N_BITS) DIV_ROUND_UP(N_BITS, BITMAP_ULONG_BITS)
  |  |  ------------------
  |  |  |  |  300|  23.3k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (158:17): [True: 18.6k, False: 4.66k]
  ------------------
  159|  18.6k|        count += count_1bits(bitmap[i]);
  160|  18.6k|    }
  161|  4.66k|    return count;
  162|  4.66k|}

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

ofp-queue.c:ntohll:
   35|  71.0k|{
   36|  71.0k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 71.0k]
  ------------------
   37|  71.0k|}
ofp-switch.c:ntohll:
   35|  3.71k|{
   36|  3.71k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 3.71k]
  ------------------
   37|  3.71k|}
ofp-table.c:ntohll:
   35|   124k|{
   36|   124k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 124k]
  ------------------
   37|   124k|}
util.c:htonll:
   29|  12.5k|{
   30|  12.5k|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 12.5k]
  ------------------
   31|  12.5k|}
util.c:ntohll:
   35|  3.59k|{
   36|  3.59k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 3.59k]
  ------------------
   37|  3.59k|}
flow.c:be32_to_be16:
  135|  96.7k|static inline ovs_be16 be32_to_be16(ovs_be32 x) { return x >> 16; }
flow.c:bytes_to_be32:
  110|  24.8k|{
  111|       |#if WORDS_BIGENDIAN
  112|       |    uint32_t x = ((uint32_t) b0 << 24) | (b1 << 16) | (b2 << 8) | b3;
  113|       |#else
  114|  24.8k|    uint32_t x = ((uint32_t) b3 << 24) | (b2 << 16) | (b1 << 8) | b0;
  115|  24.8k|#endif
  116|  24.8k|    return (OVS_FORCE ovs_be32) x;
  117|  24.8k|}
match.c:hton128:
   48|  1.48k|{
   49|  1.48k|    ovs_be128 dst;
   50|       |
   51|  1.48k|    dst.be64.hi = htonll(src.u64.hi);
   52|  1.48k|    dst.be64.lo = htonll(src.u64.lo);
   53|  1.48k|    return dst;
   54|  1.48k|}
match.c:htonll:
   29|   641k|{
   30|   641k|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 641k]
  ------------------
   31|   641k|}
match.c:be32_to_be16:
  135|  43.5k|static inline ovs_be16 be32_to_be16(ovs_be32 x) { return x >> 16; }
match.c:ntohll:
   35|  11.4k|{
   36|  11.4k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 11.4k]
  ------------------
   37|  11.4k|}
meta-flow.c:be32_to_be16:
  135|  15.6k|static inline ovs_be16 be32_to_be16(ovs_be32 x) { return x >> 16; }
meta-flow.c:hton128:
   48|     76|{
   49|     76|    ovs_be128 dst;
   50|       |
   51|     76|    dst.be64.hi = htonll(src.u64.hi);
   52|     76|    dst.be64.lo = htonll(src.u64.lo);
   53|     76|    return dst;
   54|     76|}
meta-flow.c:htonll:
   29|  4.07k|{
   30|  4.07k|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 4.07k]
  ------------------
   31|  4.07k|}
meta-flow.c:ntoh128:
   58|  5.59k|{
   59|  5.59k|    ovs_u128 dst;
   60|       |
   61|  5.59k|    dst.u64.hi = ntohll(src.be64.hi);
   62|  5.59k|    dst.u64.lo = ntohll(src.be64.lo);
   63|  5.59k|    return dst;
   64|  5.59k|}
meta-flow.c:ntohll:
   35|  21.4k|{
   36|  21.4k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 21.4k]
  ------------------
   37|  21.4k|}
nx-match.c:ntohll:
   35|  18.7k|{
   36|  18.7k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 18.7k]
  ------------------
   37|  18.7k|}
nx-match.c:htonll:
   29|  2.19M|{
   30|  2.19M|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 2.19M]
  ------------------
   31|  2.19M|}
ofp-actions.c:ntohll:
   35|  22.0k|{
   36|  22.0k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 22.0k]
  ------------------
   37|  22.0k|}
ofp-actions.c:be32_to_be16:
  135|  29.9k|static inline ovs_be16 be32_to_be16(ovs_be32 x) { return x >> 16; }
ofp-connection.c:ntohll:
   35|  6.14k|{
   36|  6.14k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 6.14k]
  ------------------
   37|  6.14k|}
ofp-ct.c:hton128:
   48|  2.69k|{
   49|  2.69k|    ovs_be128 dst;
   50|       |
   51|  2.69k|    dst.be64.hi = htonll(src.u64.hi);
   52|  2.69k|    dst.be64.lo = htonll(src.u64.lo);
   53|  2.69k|    return dst;
   54|  2.69k|}
ofp-ct.c:htonll:
   29|  5.38k|{
   30|  5.38k|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 5.38k]
  ------------------
   31|  5.38k|}
ofp-flow.c:htonll:
   29|   338k|{
   30|   338k|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 338k]
  ------------------
   31|   338k|}
ofp-flow.c:ntohll:
   35|  85.7k|{
   36|  85.7k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 85.7k]
  ------------------
   37|  85.7k|}
ofp-group.c:ntohll:
   35|   120k|{
   36|   120k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 120k]
  ------------------
   37|   120k|}
ofp-ipfix.c:ntohll:
   35|   143k|{
   36|   143k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 143k]
  ------------------
   37|   143k|}
ofp-meter.c:ntohll:
   35|  8.35k|{
   36|  8.35k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 8.35k]
  ------------------
   37|  8.35k|}
ofp-monitor.c:ntohll:
   35|  17.2k|{
   36|  17.2k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 17.2k]
  ------------------
   37|  17.2k|}
ofp-monitor.c:htonll:
   29|  5.27k|{
   30|  5.27k|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 5.27k]
  ------------------
   31|  5.27k|}
ofp-packet.c:ntohll:
   35|  5.87k|{
   36|  5.87k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 5.87k]
  ------------------
   37|  5.87k|}
ofp-port.c:ntohll:
   35|   353k|{
   36|   353k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 353k]
  ------------------
   37|   353k|}
ofp-prop.c:ntohll:
   35|  2.72k|{
   36|  2.72k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 2.72k]
  ------------------
   37|  2.72k|}
ofp-prop.c:ntoh128:
   58|  1.36k|{
   59|  1.36k|    ovs_u128 dst;
   60|       |
   61|  1.36k|    dst.u64.hi = ntohll(src.be64.hi);
   62|  1.36k|    dst.u64.lo = ntohll(src.be64.lo);
   63|  1.36k|    return dst;
   64|  1.36k|}
ox-stat.c:ntohll:
   35|  1.31k|{
   36|  1.31k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 1.31k]
  ------------------
   37|  1.31k|}
learn.c:ntohll:
   35|  22.4k|{
   36|  22.4k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 22.4k]
  ------------------
   37|  22.4k|}

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|  15.4M|        {                                                               \
   73|  15.4M|            *counter_##COUNTER##_get() += n;                            \
   74|  15.4M|        }                                                               \
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|   100k|        {                                                               \
   73|   100k|            *counter_##COUNTER##_get() += n;                            \
   74|   100k|        }                                                               \
flow.c:miniflow_extract_ipv4_pkt_too_short_add:
   72|     71|        {                                                               \
   73|     71|            *counter_##COUNTER##_get() += n;                            \
   74|     71|        }                                                               \
flow.c:miniflow_extract_ipv4_pkt_len_error_add:
   72|    467|        {                                                               \
   73|    467|            *counter_##COUNTER##_get() += n;                            \
   74|    467|        }                                                               \
flow.c:miniflow_extract_ipv6_pkt_too_short_add:
   72|    690|        {                                                               \
   73|    690|            *counter_##COUNTER##_get() += n;                            \
   74|    690|        }                                                               \
flow.c:miniflow_extract_ipv6_pkt_len_error_add:
   72|    726|        {                                                               \
   73|    726|            *counter_##COUNTER##_get() += n;                            \
   74|    726|        }                                                               \
flow.c:miniflow_malloc_add:
   72|  58.0k|        {                                                               \
   73|  58.0k|            *counter_##COUNTER##_get() += n;                            \
   74|  58.0k|        }                                                               \
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|   100k|{
  114|   100k|    dp_packet_use__(b, CONST_CAST(void *, data), size, DPBUF_STACK);
  ------------------
  |  |   85|   100k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   100k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   100k|     (TYPE) (POINTER))
  ------------------
  115|   100k|    dp_packet_set_size(b, size);
  116|   100k|}
dp-packet.c:dp_packet_use__:
   50|   100k|{
   51|   100k|    dp_packet_set_base(b, base);
   52|   100k|    dp_packet_set_data(b, base);
   53|   100k|    dp_packet_set_size(b, 0);
   54|       |
   55|   100k|    dp_packet_init__(b, allocated, source);
   56|   100k|}
dp-packet.c:dp_packet_init__:
   33|   100k|{
   34|   100k|    dp_packet_set_allocated(b, allocated);
   35|   100k|    b->source = source;
   36|   100k|    dp_packet_reset_offsets(b);
   37|   100k|    pkt_metadata_init(&b->md, 0);
   38|   100k|    dp_packet_reset_cutlen(b);
   39|   100k|    dp_packet_reset_offload(b);
   40|   100k|    dp_packet_set_tso_segsz(b, 0);
   41|       |    /* Initialize implementation-specific fields of dp_packet. */
   42|   100k|    dp_packet_init_specific(b);
   43|       |    /* By default assume the packet type to be Ethernet. */
   44|       |    b->packet_type = htonl(PT_ETH);
   45|   100k|}

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

ds_init:
   30|  3.67M|{
   31|       |    ds->string = NULL;
   32|  3.67M|    ds->length = 0;
   33|  3.67M|    ds->allocated = 0;
   34|  3.67M|}
ds_reserve:
   60|  17.7M|{
   61|  17.7M|    if (min_length > ds->allocated || !ds->string) {
  ------------------
  |  Branch (61:9): [True: 14.1M, False: 3.54M]
  |  Branch (61:39): [True: 0, False: 3.54M]
  ------------------
   62|  14.1M|        ds->allocated += MAX(min_length, ds->allocated);
  ------------------
  |  |   95|  14.1M|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (95:20): [True: 14.1M, False: 0]
  |  |  ------------------
  ------------------
   63|  14.1M|        ds->allocated = MAX(8, ds->allocated);
  ------------------
  |  |   95|  14.1M|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (95:20): [True: 31.3k, False: 14.1M]
  |  |  ------------------
  ------------------
   64|  14.1M|        ds->string = xrealloc(ds->string, ds->allocated + 1);
   65|  14.1M|    }
   66|  17.7M|}
ds_put_uninit:
   73|  9.30M|{
   74|  9.30M|    ds_reserve(ds, ds->length + n);
   75|  9.30M|    ds->length += n;
   76|  9.30M|    ds->string[ds->length] = '\0';
   77|  9.30M|    return &ds->string[ds->length - n];
   78|  9.30M|}
ds_put_char__:
   82|   709k|{
   83|   709k|    *ds_put_uninit(ds, 1) = c;
   84|   709k|}
ds_put_char_multiple:
  113|  14.3k|{
  114|  14.3k|    memset(ds_put_uninit(ds, n), c, n);
  115|  14.3k|}
ds_put_cstr:
  125|  8.58M|{
  126|  8.58M|    size_t s_len = strlen(s);
  127|  8.58M|    memcpy(ds_put_uninit(ds, s_len), s, s_len);
  128|  8.58M|}
ds_put_and_free_cstr:
  132|  2.50k|{
  133|  2.50k|    ds_put_cstr(ds, s);
  134|  2.50k|    free(s);
  135|  2.50k|}
ds_put_format:
  139|   165M|{
  140|   165M|    va_list args;
  141|       |
  142|   165M|    va_start(args, format);
  143|   165M|    ds_put_format_valist(ds, format, args);
  144|       |    va_end(args);
  145|   165M|}
ds_put_format_valist:
  149|   165M|{
  150|   165M|    va_list args;
  151|   165M|    size_t available;
  152|   165M|    int needed;
  153|       |
  154|   165M|    va_copy(args, args_);
  155|   165M|    available = ds->string ? ds->allocated - ds->length + 1 : 0;
  ------------------
  |  Branch (155:17): [True: 164M, False: 1.09M]
  ------------------
  156|   165M|    needed = vsnprintf(ds->string
  ------------------
  |  Branch (156:24): [True: 164M, False: 1.09M]
  ------------------
  157|   165M|                       ? &ds->string[ds->length]
  158|   165M|                       : NULL,
  159|   165M|                       available, format, args);
  160|   165M|    va_end(args);
  161|       |
  162|   165M|    if (needed < available) {
  ------------------
  |  Branch (162:9): [True: 157M, False: 8.31M]
  ------------------
  163|   157M|        ds->length += needed;
  164|   157M|    } else {
  165|  8.31M|        ds_reserve(ds, ds->length + needed);
  166|       |
  167|  8.31M|        va_copy(args, args_);
  168|  8.31M|        available = ds->allocated - ds->length + 1;
  169|  8.31M|        needed = vsnprintf(&ds->string[ds->length],
  170|  8.31M|                           available, format, args);
  171|  8.31M|        va_end(args);
  172|       |
  173|  8.31M|        ovs_assert(needed < available);
  ------------------
  |  |   62|  8.31M|#define ovs_assert ovs_ignore
  ------------------
  174|  8.31M|        ds->length += needed;
  175|  8.31M|    }
  176|   165M|}
ds_put_printable:
  180|  23.9k|{
  181|  23.9k|    ds_reserve(ds, ds->length + n);
  182|   780k|    while (n-- > 0) {
  ------------------
  |  Branch (182:12): [True: 756k, False: 23.9k]
  ------------------
  183|   756k|        unsigned char c = *s++;
  184|   756k|        if (c < 0x20 || c > 0x7e || c == '\\' || c == '"') {
  ------------------
  |  Branch (184:13): [True: 479k, False: 276k]
  |  Branch (184:25): [True: 144k, False: 132k]
  |  Branch (184:37): [True: 272, False: 132k]
  |  Branch (184:50): [True: 229, False: 132k]
  ------------------
  185|   624k|            ds_put_format(ds, "\\%03o", (int) c);
  186|   624k|        } else {
  187|   132k|            ds_put_char(ds, c);
  188|   132k|        }
  189|   756k|    }
  190|  23.9k|}
ds_cstr:
  343|  3.74M|{
  344|  3.74M|    if (!ds->string) {
  ------------------
  |  Branch (344:9): [True: 0, False: 3.74M]
  ------------------
  345|      0|        ds_reserve(ds, 0);
  346|      0|    }
  347|  3.74M|    ds->string[ds->length] = '\0';
  348|  3.74M|    return ds->string;
  349|  3.74M|}
ds_steal_cstr:
  362|  3.64M|{
  363|  3.64M|    char *s = ds_cstr(ds);
  364|  3.64M|    ds_init(ds);
  365|  3.64M|    return s;
  366|  3.64M|}
ds_destroy:
  370|    724|{
  371|    724|    free(ds->string);
  372|    724|}
ds_put_hex:
  385|  68.6k|{
  386|  68.6k|    const uint8_t *buf = buf_;
  387|  68.6k|    bool printed = false;
  388|  68.6k|    int i;
  389|       |
  390|  1.85M|    for (i = 0; i < size; i++) {
  ------------------
  |  Branch (390:17): [True: 1.78M, False: 68.6k]
  ------------------
  391|  1.78M|        uint8_t val = buf[i];
  392|  1.78M|        if (val || printed) {
  ------------------
  |  Branch (392:13): [True: 91.2k, False: 1.69M]
  |  Branch (392:20): [True: 25.8k, False: 1.66M]
  ------------------
  393|   117k|            if (!printed) {
  ------------------
  |  Branch (393:17): [True: 46.1k, False: 70.9k]
  ------------------
  394|  46.1k|                ds_put_format(ds, "0x%"PRIx8, val);
  395|  70.9k|            } else {
  396|  70.9k|                ds_put_format(ds, "%02"PRIx8, val);
  397|  70.9k|            }
  398|   117k|            printed = true;
  399|   117k|        }
  400|  1.78M|    }
  401|  68.6k|    if (!printed) {
  ------------------
  |  Branch (401:9): [True: 22.4k, False: 46.1k]
  ------------------
  402|  22.4k|        ds_put_char(ds, '0');
  403|  22.4k|    }
  404|  68.6k|}
ds_put_hex_with_delimiter:
  409|  6.49k|{
  410|  6.49k|    const uint8_t *buf = buf_;
  411|  6.49k|    size_t i;
  412|       |
  413|  49.2k|    for (i = 0; i < size; i++) {
  ------------------
  |  Branch (413:17): [True: 42.7k, False: 6.49k]
  ------------------
  414|  42.7k|        if (i && delimiter) {
  ------------------
  |  Branch (414:13): [True: 36.2k, False: 6.49k]
  |  Branch (414:18): [True: 36.2k, False: 0]
  ------------------
  415|  36.2k|            ds_put_format(ds, "%s", delimiter);
  416|  36.2k|        }
  417|       |        ds_put_format(ds, "%02" PRIx8, buf[i]);
  418|  42.7k|    }
  419|  6.49k|}
ds_put_hex_dump:
  484|  2.60M|{
  485|       |    ds_put_hex_dump__(ds, buf_, size, ofs, ascii, false);
  486|  2.60M|}
ds_last:
  499|  58.0k|{
  500|  58.0k|    return ds->length > 0 ? (unsigned char) ds->string[ds->length - 1] : EOF;
  ------------------
  |  Branch (500:12): [True: 58.0k, False: 0]
  ------------------
  501|  58.0k|}
ds_chomp:
  505|  1.62M|{
  506|  1.62M|    if (ds->length > 0 && ds->string[ds->length - 1] == (char) c) {
  ------------------
  |  Branch (506:9): [True: 1.62M, False: 0]
  |  Branch (506:27): [True: 377k, False: 1.24M]
  ------------------
  507|   377k|        ds->string[--ds->length] = '\0';
  508|   377k|        return true;
  509|  1.24M|    } else {
  510|       |        return false;
  511|  1.24M|    }
  512|  1.62M|}
dynamic-string.c:ds_put_hex_dump__:
  424|  2.60M|{
  425|  2.60M|    const uint8_t *buf = buf_;
  426|  2.60M|    const size_t per_line = 16; /* Maximum bytes per line. */
  427|       |
  428|  9.70M|    while (size > 0) {
  ------------------
  |  Branch (428:12): [True: 7.10M, False: 2.60M]
  ------------------
  429|  7.10M|        size_t start, end, n;
  430|  7.10M|        size_t i;
  431|       |
  432|       |        /* Number of bytes on this line. */
  433|  7.10M|        start = ofs % per_line;
  434|  7.10M|        end = per_line;
  435|  7.10M|        if (end - start > size)
  ------------------
  |  Branch (435:13): [True: 1.48M, False: 5.61M]
  ------------------
  436|  1.48M|            end = start + size;
  437|  7.10M|        n = end - start;
  438|       |
  439|  7.10M|        if (skip_zero_lines && is_all_zeros(&buf[start], n)) {
  ------------------
  |  Branch (439:13): [True: 0, False: 7.10M]
  |  Branch (439:32): [True: 0, False: 0]
  ------------------
  440|      0|            goto next;
  441|      0|        }
  442|       |
  443|       |        /* Print line. */
  444|  7.10M|        ds_put_format(ds, "%08"PRIxMAX"  ",
  445|  7.10M|                      (uintmax_t) ROUND_DOWN(ofs, per_line));
  ------------------
  |  |  309|  7.10M|#define ROUND_DOWN(X, Y) ((X) / (Y) * (Y))
  ------------------
  446|  7.10M|        for (i = 0; i < start; i++) {
  ------------------
  |  Branch (446:21): [True: 0, False: 7.10M]
  ------------------
  447|      0|            ds_put_format(ds, "   ");
  448|      0|        }
  449|   109M|        for (; i < end; i++) {
  ------------------
  |  Branch (449:16): [True: 102M, False: 7.10M]
  ------------------
  450|   102M|            ds_put_format(ds, "%02x%c",
  451|   102M|                          buf[i - start], i == per_line / 2 - 1? '-' : ' ');
  ------------------
  |  Branch (451:43): [True: 6.84M, False: 95.9M]
  ------------------
  452|   102M|        }
  453|  7.10M|        if (ascii) {
  ------------------
  |  Branch (453:13): [True: 7.10M, False: 0]
  ------------------
  454|  18.0M|            for (; i < per_line; i++)
  ------------------
  |  Branch (454:20): [True: 10.9M, False: 7.10M]
  ------------------
  455|  10.9M|                ds_put_format(ds, "   ");
  456|  7.10M|            ds_put_format(ds, "|");
  457|  7.10M|            for (i = 0; i < start; i++)
  ------------------
  |  Branch (457:25): [True: 0, False: 7.10M]
  ------------------
  458|      0|                ds_put_format(ds, " ");
  459|   109M|            for (; i < end; i++) {
  ------------------
  |  Branch (459:20): [True: 102M, False: 7.10M]
  ------------------
  460|   102M|                int c = buf[i - start];
  461|   102M|                ds_put_char(ds, c >= 32 && c < 127 ? c : '.');
  ------------------
  |  Branch (461:33): [True: 36.1M, False: 66.6M]
  |  Branch (461:44): [True: 17.5M, False: 18.6M]
  ------------------
  462|   102M|            }
  463|  18.0M|            for (; i < per_line; i++)
  ------------------
  |  Branch (463:20): [True: 10.9M, False: 7.10M]
  ------------------
  464|  10.9M|                ds_put_format(ds, " ");
  465|  7.10M|            ds_put_format(ds, "|");
  466|  7.10M|        } else {
  467|      0|            ds_chomp(ds, ' ');
  468|      0|        }
  469|  7.10M|        ds_put_format(ds, "\n");
  470|  7.10M|next:
  471|  7.10M|        ofs += n;
  472|  7.10M|        buf += n;
  473|  7.10M|        size -= n;
  474|  7.10M|    }
  475|  2.60M|}

parse_ipv6_ext_hdrs:
  605|  24.4k|{
  606|  24.4k|    return parse_ipv6_ext_hdrs__(datap, sizep, nw_proto, nw_frag,
  607|  24.4k|                                 frag_hdr, rt_hdr);
  608|  24.4k|}
parse_nsh:
  612|  13.4k|{
  613|  13.4k|    const struct nsh_hdr *nsh = (const struct nsh_hdr *) *datap;
  614|  13.4k|    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|  13.4k|    if (OVS_UNLIKELY(*sizep < NSH_BASE_HDR_LEN)) {
  ------------------
  |  |   66|  13.4k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 861, False: 12.5k]
  |  |  ------------------
  ------------------
  620|    861|        return false;
  621|    861|    }
  622|       |
  623|  12.5k|    version = nsh_get_ver(nsh);
  624|  12.5k|    flags = nsh_get_flags(nsh);
  625|  12.5k|    length = nsh_hdr_len(nsh);
  626|  12.5k|    ttl = nsh_get_ttl(nsh);
  627|       |
  628|  12.5k|    if (OVS_UNLIKELY(length > *sizep || version != 0)) {
  ------------------
  |  |   66|  21.1k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 4.03k, False: 8.53k]
  |  |  |  Branch (66:53): [True: 4.03k, False: 8.53k]
  |  |  |  Branch (66:53): [True: 3, False: 8.53k]
  |  |  ------------------
  ------------------
  629|  4.03k|        return false;
  630|  4.03k|    }
  631|       |
  632|  8.53k|    key->flags = flags;
  633|  8.53k|    key->ttl = ttl;
  634|  8.53k|    key->mdtype = nsh->md_type;
  635|  8.53k|    key->np = nsh->next_proto;
  636|  8.53k|    key->path_hdr = nsh_get_path_hdr(nsh);
  637|       |
  638|  8.53k|    switch (key->mdtype) {
  639|  1.42k|        case NSH_M_TYPE1:
  ------------------
  |  |  251|  1.42k|#define NSH_M_TYPE1     0x01
  ------------------
  |  Branch (639:9): [True: 1.42k, False: 7.10k]
  ------------------
  640|  1.42k|            if (length != NSH_M_TYPE1_LEN) {
  ------------------
  |  |  263|  1.42k|#define NSH_M_TYPE1_LEN   24
  ------------------
  |  Branch (640:17): [True: 1.27k, False: 157]
  ------------------
  641|  1.27k|                return false;
  642|  1.27k|            }
  643|    785|            for (size_t i = 0; i < 4; i++) {
  ------------------
  |  Branch (643:32): [True: 628, False: 157]
  ------------------
  644|    628|                key->context[i] = get_16aligned_be32(&nsh->md1.context[i]);
  645|    628|            }
  646|    157|            break;
  647|    415|        case NSH_M_TYPE2:
  ------------------
  |  |  252|    415|#define NSH_M_TYPE2     0x02
  ------------------
  |  Branch (647:9): [True: 415, False: 8.11k]
  ------------------
  648|       |            /* Don't support MD type 2 metedata parsing yet */
  649|    415|            if (length < NSH_BASE_HDR_LEN) {
  ------------------
  |  |  260|    415|#define NSH_BASE_HDR_LEN  8
  ------------------
  |  Branch (649:17): [True: 35, False: 380]
  ------------------
  650|     35|                return false;
  651|     35|            }
  652|       |
  653|    380|            memset(key->context, 0, sizeof(key->context));
  654|    380|            break;
  655|  6.69k|        default:
  ------------------
  |  Branch (655:9): [True: 6.69k, False: 1.84k]
  ------------------
  656|       |            /* We don't parse other context headers yet. */
  657|  6.69k|            memset(key->context, 0, sizeof(key->context));
  658|  6.69k|            break;
  659|  8.53k|    }
  660|       |
  661|  7.22k|    data_pull(datap, sizep, length);
  662|       |
  663|       |    return true;
  664|  8.53k|}
flow_extract:
  670|   100k|{
  671|   100k|    struct {
  672|   100k|        struct miniflow mf;
  673|   100k|        uint64_t buf[FLOW_U64S];
  674|   100k|    } m;
  675|       |
  676|   100k|    COVERAGE_INC(flow_extract);
  ------------------
  |  |   83|   100k|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|   100k|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  677|       |
  678|   100k|    miniflow_extract(packet, &m.mf);
  679|   100k|    miniflow_expand(&m.mf, flow);
  680|   100k|}
miniflow_extract:
  797|   100k|{
  798|       |    /* Add code to this function (or its callees) to extract new fields. */
  799|   100k|    BUILD_ASSERT_DECL(FLOW_WC_SEQ == 43);
  ------------------
  |  |  270|   100k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  ------------------
  800|       |
  801|   100k|    const struct pkt_metadata *md = &packet->md;
  802|   100k|    const void *data = dp_packet_data(packet);
  803|   100k|    size_t size = dp_packet_size(packet);
  804|   100k|    ovs_be32 packet_type = packet->packet_type;
  805|   100k|    uint64_t *values = miniflow_values(dst);
  806|   100k|    struct mf_ctx mf = { FLOWMAP_EMPTY_INITIALIZER, values,
  ------------------
  |  |  286|   100k|#define FLOWMAP_EMPTY_INITIALIZER { { 0 } }
  ------------------
  807|   100k|                         values + FLOW_U64S };
  ------------------
  |  |  165|   100k|#define FLOW_U64S (sizeof(struct flow) / sizeof(uint64_t))
  ------------------
  808|   100k|    const char *frame;
  809|   100k|    ovs_be16 dl_type = OVS_BE16_MAX;
  ------------------
  |  |   42|   100k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  810|   100k|    uint8_t nw_frag, nw_tos, nw_ttl, nw_proto;
  811|   100k|    uint8_t *ct_nw_proto_p = NULL;
  812|   100k|    ovs_be16 ct_tp_src = 0, ct_tp_dst = 0;
  813|       |
  814|       |    /* Metadata. */
  815|   100k|    if (flow_tnl_dst_is_set(&md->tunnel)) {
  ------------------
  |  Branch (815:9): [True: 0, False: 100k]
  ------------------
  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|   100k|    if (md->skb_priority || md->pkt_mark) {
  ------------------
  |  Branch (837:9): [True: 0, False: 100k]
  |  Branch (837:29): [True: 0, False: 100k]
  ------------------
  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|   100k|    miniflow_push_uint32(mf, dp_hash, md->dp_hash);
  ------------------
  |  |  297|   100k|    miniflow_push_uint32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  179|   100k|    {                                           \
  |  |  |  |  180|   100k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  181|   100k|                                                \
  |  |  |  |  182|   100k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (182:9): [True: 100k, Folded]
  |  |  |  |  ------------------
  |  |  |  |  183|   100k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|   100k|    {                                        \
  |  |  |  |  |  |  160|   100k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|   100k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|   100k|{                                                                       \
  |  |  |  |  |  |  |  |  151|   100k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|   100k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|   200k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|   100k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|   200k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|   200k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 100k, False: 100k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|   100k|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|   100k|    }                                                                   \
  |  |  |  |  |  |  |  |  156|   100k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|   100k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|   100k|}
  |  |  |  |  ------------------
  |  |  |  |  184|   100k|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  185|   100k|    } 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|   100k|}
  |  |  ------------------
  ------------------
  842|   100k|    miniflow_push_uint32(mf, in_port, odp_to_u32(md->in_port.odp_port));
  ------------------
  |  |  297|   100k|    miniflow_push_uint32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  179|   100k|    {                                           \
  |  |  |  |  180|   100k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  181|   100k|                                                \
  |  |  |  |  182|   100k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (182:9): [Folded, False: 100k]
  |  |  |  |  ------------------
  |  |  |  |  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|   100k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:16): [True: 100k, Folded]
  |  |  |  |  ------------------
  |  |  |  |  186|   100k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|   100k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|   100k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|   100k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|   100k|{                                                                       \
  |  |  |  |  |  |  |  |  151|   100k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|   100k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|   200k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|   100k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|   200k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|   200k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 100k, False: 100k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|   100k|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|   100k|    }                                                                   \
  |  |  |  |  |  |  |  |  156|   100k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|   100k|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  188|   100k|        MF.data++;                              \
  |  |  |  |  189|   100k|    }                                           \
  |  |  |  |  190|   100k|}
  |  |  ------------------
  ------------------
  843|   100k|    if (md->ct_state) {
  ------------------
  |  Branch (843:9): [True: 0, False: 100k]
  ------------------
  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|   100k|    } else {
  856|   100k|        if (md->recirc_id) {
  ------------------
  |  Branch (856:13): [True: 0, False: 100k]
  ------------------
  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|   100k|        miniflow_pad_from_64(mf, packet_type);
  ------------------
  |  |  315|   100k|    miniflow_pad_from_64_(MF, offsetof(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  241|   100k|#define miniflow_pad_from_64_(MF, OFS)                          \
  |  |  |  |  242|   100k|{                                                               \
  |  |  |  |  243|   100k|    MINIFLOW_ASSERT(MF.data < MF.end);                          \
  |  |  |  |  244|   100k|                                                                \
  |  |  |  |  245|   100k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  246|   100k|    miniflow_set_map(MF, OFS / 8);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|   100k|    {                                        \
  |  |  |  |  |  |  160|   100k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|   100k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|   100k|{                                                                       \
  |  |  |  |  |  |  |  |  151|   100k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|   100k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|   200k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|   100k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|   200k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|   200k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 100k, False: 100k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|   100k|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|   100k|    }                                                                   \
  |  |  |  |  |  |  |  |  156|   100k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|   100k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|   100k|}
  |  |  |  |  ------------------
  |  |  |  |  247|   100k|                                                                \
  |  |  |  |  248|   100k|    memset((uint8_t *)MF.data, 0, (OFS) % 8);                   \
  |  |  |  |  249|   100k|}
  |  |  ------------------
  ------------------
  861|   100k|        miniflow_push_be32(mf, packet_type, packet_type);
  ------------------
  |  |  300|   100k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|   100k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|   100k|    {                                           \
  |  |  |  |  |  |  180|   100k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|   100k|                                                \
  |  |  |  |  |  |  182|   100k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded, False: 100k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|   100k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [True: 100k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|   100k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|   100k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|   100k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|   100k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|   100k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|   100k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|   100k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|   100k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|   100k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|   100k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|   100k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 100k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|   100k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|   100k|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|   100k|        MF.data++;                              \
  |  |  |  |  |  |  189|   100k|    }                                           \
  |  |  |  |  |  |  190|   100k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  862|   100k|    }
  863|       |
  864|       |    /* Initialize packet's layer pointer and offsets. */
  865|   100k|    frame = data;
  866|   100k|    if (dp_packet_tunnel(packet)) {
  ------------------
  |  Branch (866:9): [True: 0, False: 100k]
  ------------------
  867|       |        /* Preserve inner offsets from previous circulation. */
  868|      0|        dp_packet_reset_outer_offsets(packet);
  869|   100k|    } else {
  870|   100k|        dp_packet_reset_offsets(packet);
  871|   100k|    }
  872|       |
  873|   100k|    if (packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (873:9): [True: 84.2k, False: 16.0k]
  ------------------
  874|       |        /* Must have full Ethernet header to proceed. */
  875|  84.2k|        if (OVS_UNLIKELY(size < sizeof(struct eth_header))) {
  ------------------
  |  |   66|  84.2k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 43.8k, False: 40.3k]
  |  |  ------------------
  ------------------
  876|  43.8k|            goto out;
  877|  43.8k|        } else {
  878|       |            /* Link layer. */
  879|  40.3k|            ASSERT_SEQUENTIAL(dl_dst, dl_src);
  ------------------
  |  |   71|  40.3k|    BUILD_ASSERT_DECL(offsetof(struct flow, f0)         \
  |  |  ------------------
  |  |  |  |  270|  40.3k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  |  |  ------------------
  |  |   72|  40.3k|                      + MEMBER_SIZEOF(struct flow, f0)  \
  |  |   73|  40.3k|                      == offsetof(struct flow, f1))
  ------------------
  880|  40.3k|            miniflow_push_macs(mf, dl_dst, data);
  ------------------
  |  |  324|  40.3k|    miniflow_push_macs_(MF, offsetof(struct flow, FIELD), VALUEP)
  |  |  ------------------
  |  |  |  |  289|  40.3k|#define miniflow_push_macs_(MF, OFS, VALUEP)                    \
  |  |  |  |  290|  40.3k|{                                                               \
  |  |  |  |  291|  40.3k|    miniflow_set_maps(MF, (OFS) / 8, 2);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|  40.3k|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|  40.3k|{                                                               \
  |  |  |  |  |  |  259|  40.3k|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|  40.3k|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|  40.3k|                                                                \
  |  |  |  |  |  |  262|  40.3k|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|  40.3k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  40.3k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  40.3k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  40.3k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  40.3k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  40.3k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  40.3k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  40.3k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  40.3k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 40.3k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  40.3k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  40.3k|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|  40.3k|}
  |  |  |  |  ------------------
  |  |  |  |  292|  40.3k|    memcpy(MF.data, (VALUEP), 2 * ETH_ADDR_LEN);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  205|  40.3k|#define ETH_ADDR_LEN           6
  |  |  |  |  ------------------
  |  |  |  |  293|  40.3k|    MF.data += 1;                   /* First word only. */      \
  |  |  |  |  294|  40.3k|}
  |  |  ------------------
  ------------------
  881|       |
  882|       |            /* VLAN */
  883|  40.3k|            union flow_vlan_hdr vlans[FLOW_MAX_VLAN_HEADERS];
  884|  40.3k|            size_t num_vlans = parse_vlan(&data, &size, vlans);
  885|       |
  886|  40.3k|            dl_type = parse_ethertype(&data, &size);
  887|  40.3k|            miniflow_push_be16(mf, dl_type, dl_type);
  ------------------
  |  |  306|  40.3k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  40.3k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  40.3k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  40.3k|{                                               \
  |  |  |  |  |  |  197|  40.3k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  40.3k|                                                \
  |  |  |  |  |  |  199|  40.3k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 40.3k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  40.3k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 40.3k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  40.3k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 40.3k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|  40.3k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  40.3k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  40.3k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  40.3k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  40.3k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  40.3k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  40.3k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  40.3k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  40.3k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  40.3k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  40.3k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 40.3k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  40.3k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|  40.3k|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|  40.3k|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|  40.3k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  888|  40.3k|            miniflow_pad_to_64(mf, dl_type);
  ------------------
  |  |  312|  40.3k|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|  40.3k|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|  40.3k|{                                                               \
  |  |  |  |  234|  40.3k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|  40.3k|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|  40.3k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|  40.3k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  40.3k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  40.3k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  40.3k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  40.3k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  40.3k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  40.3k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  40.3k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  40.3k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 40.3k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  40.3k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|  40.3k|                                                                \
  |  |  |  |  237|  40.3k|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|  40.3k|    MF.data++;                                                  \
  |  |  |  |  239|  40.3k|}
  |  |  ------------------
  ------------------
  889|  40.3k|            if (num_vlans > 0) {
  ------------------
  |  Branch (889:17): [True: 987, False: 39.4k]
  ------------------
  890|    987|                miniflow_push_words_32(mf, vlans, vlans, num_vlans);
  ------------------
  |  |  321|    987|    miniflow_push_words_32_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  277|    987|#define miniflow_push_words_32_(MF, OFS, VALUEP, N_WORDS)               \
  |  |  |  |  278|    987|{                                                                       \
  |  |  |  |  279|    987|    miniflow_set_maps(MF, (OFS) / 8, DIV_ROUND_UP(N_WORDS, 2));         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|    987|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|    987|{                                                               \
  |  |  |  |  |  |  259|    987|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|    987|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|    987|                                                                \
  |  |  |  |  |  |  262|    987|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|    987|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    987|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    987|{                                                                       \
  |  |  |  |  |  |  |  |  151|    987|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    987|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    987|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    987|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    987|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    987|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 987]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    987|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    987|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|    987|}
  |  |  |  |  ------------------
  |  |  |  |  280|    987|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof(uint32_t));            \
  |  |  |  |  281|    987|    MF.data += DIV_ROUND_UP(N_WORDS, 2);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|    987|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  |  |  282|    987|    if ((N_WORDS) & 1) {                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (282:9): [True: 403, False: 584]
  |  |  |  |  ------------------
  |  |  |  |  283|    403|        *((uint32_t *)MF.data - 1) = 0;                                 \
  |  |  |  |  284|    403|    }                                                                   \
  |  |  |  |  285|    987|}
  |  |  ------------------
  ------------------
  891|    987|            }
  892|       |
  893|  40.3k|        }
  894|  84.2k|    } else {
  895|       |        /* Take dl_type from packet_type. */
  896|  16.0k|        dl_type = pt_ns_type_be(packet_type);
  897|  16.0k|        miniflow_pad_from_64(mf, dl_type);
  ------------------
  |  |  315|  16.0k|    miniflow_pad_from_64_(MF, offsetof(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  241|  16.0k|#define miniflow_pad_from_64_(MF, OFS)                          \
  |  |  |  |  242|  16.0k|{                                                               \
  |  |  |  |  243|  16.0k|    MINIFLOW_ASSERT(MF.data < MF.end);                          \
  |  |  |  |  244|  16.0k|                                                                \
  |  |  |  |  245|  16.0k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  246|  16.0k|    miniflow_set_map(MF, OFS / 8);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|  16.0k|    {                                        \
  |  |  |  |  |  |  160|  16.0k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  16.0k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  16.0k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  16.0k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  16.0k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  16.0k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  16.0k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  16.0k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  16.0k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 16.0k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  16.0k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|  16.0k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|  16.0k|}
  |  |  |  |  ------------------
  |  |  |  |  247|  16.0k|                                                                \
  |  |  |  |  248|  16.0k|    memset((uint8_t *)MF.data, 0, (OFS) % 8);                   \
  |  |  |  |  249|  16.0k|}
  |  |  ------------------
  ------------------
  898|  16.0k|        miniflow_push_be16(mf, dl_type, dl_type);
  ------------------
  |  |  306|  16.0k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  16.0k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  16.0k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  16.0k|{                                               \
  |  |  |  |  |  |  197|  16.0k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  16.0k|                                                \
  |  |  |  |  |  |  199|  16.0k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 16.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|  16.0k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 16.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|  16.0k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 16.0k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|  16.0k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  16.0k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  16.0k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  16.0k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  16.0k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  16.0k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  16.0k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  16.0k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  16.0k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  16.0k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  16.0k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 16.0k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  16.0k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|  16.0k|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|  16.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|  16.0k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  899|       |        /* Do not push vlan_tci, pad instead */
  900|  16.0k|        miniflow_pad_to_64(mf, dl_type);
  ------------------
  |  |  312|  16.0k|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|  16.0k|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|  16.0k|{                                                               \
  |  |  |  |  234|  16.0k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|  16.0k|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|  16.0k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|  16.0k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  16.0k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  16.0k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  16.0k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  16.0k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  16.0k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  16.0k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  16.0k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  16.0k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 16.0k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  16.0k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|  16.0k|                                                                \
  |  |  |  |  237|  16.0k|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|  16.0k|    MF.data++;                                                  \
  |  |  |  |  239|  16.0k|}
  |  |  ------------------
  ------------------
  901|  16.0k|    }
  902|       |
  903|       |    /* Parse mpls. */
  904|  56.4k|    if (OVS_UNLIKELY(eth_type_mpls(dl_type))) {
  ------------------
  |  |   66|  56.4k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 898, False: 55.5k]
  |  |  ------------------
  ------------------
  905|    898|        int count;
  906|    898|        const void *mpls = data;
  907|       |
  908|    898|        packet->l2_5_ofs = (char *)data - frame;
  909|    898|        count = parse_mpls(&data, &size);
  910|    898|        miniflow_push_words_32(mf, mpls_lse, mpls, count);
  ------------------
  |  |  321|    898|    miniflow_push_words_32_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  277|    898|#define miniflow_push_words_32_(MF, OFS, VALUEP, N_WORDS)               \
  |  |  |  |  278|    898|{                                                                       \
  |  |  |  |  279|    898|    miniflow_set_maps(MF, (OFS) / 8, DIV_ROUND_UP(N_WORDS, 2));         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|    898|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|    898|{                                                               \
  |  |  |  |  |  |  259|    898|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|    898|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|    898|                                                                \
  |  |  |  |  |  |  262|    898|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|    898|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    898|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    898|{                                                                       \
  |  |  |  |  |  |  |  |  151|    898|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    898|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    898|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    898|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    898|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    898|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 898]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    898|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    898|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|    898|}
  |  |  |  |  ------------------
  |  |  |  |  280|    898|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof(uint32_t));            \
  |  |  |  |  281|    898|    MF.data += DIV_ROUND_UP(N_WORDS, 2);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|    898|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  |  |  282|    898|    if ((N_WORDS) & 1) {                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (282:9): [True: 184, False: 714]
  |  |  |  |  ------------------
  |  |  |  |  283|    184|        *((uint32_t *)MF.data - 1) = 0;                                 \
  |  |  |  |  284|    184|    }                                                                   \
  |  |  |  |  285|    898|}
  |  |  ------------------
  ------------------
  911|    898|    }
  912|       |
  913|       |    /* Network layer. */
  914|  56.4k|    packet->l3_ofs = (char *)data - frame;
  915|       |
  916|  56.4k|    nw_frag = 0;
  917|  56.4k|    if (OVS_LIKELY(dl_type == htons(ETH_TYPE_IP))) {
  ------------------
  |  |   65|  56.4k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 3.61k, False: 52.7k]
  |  |  ------------------
  ------------------
  918|  3.61k|        const struct ip_header *nh = data;
  919|  3.61k|        int ip_len;
  920|  3.61k|        uint16_t tot_len;
  921|       |
  922|  3.61k|        if (OVS_UNLIKELY(!ipv4_sanity_check(nh, size, &ip_len, &tot_len))) {
  ------------------
  |  |   66|  3.61k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 538, False: 3.07k]
  |  |  ------------------
  ------------------
  923|    538|            if (OVS_UNLIKELY(VLOG_IS_DBG_ENABLED())) {
  ------------------
  |  |   66|    538|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 0, False: 538]
  |  |  ------------------
  ------------------
  924|      0|                dump_invalid_packet(packet, "ipv4_sanity_check");
  925|      0|            }
  926|    538|            goto out;
  927|    538|        }
  928|  3.07k|        dp_packet_set_l2_pad_size(packet, size - tot_len);
  929|  3.07k|        size = tot_len;   /* Never pull padding. */
  930|       |
  931|       |        /* Push both source and destination address at once. */
  932|  3.07k|        miniflow_push_words(mf, nw_src, &nh->ip_src, 1);
  ------------------
  |  |  318|  3.07k|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|  3.07k|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|  3.07k|{                                                               \
  |  |  |  |  270|  3.07k|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|  3.07k|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|  3.07k|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|  3.07k|{                                                               \
  |  |  |  |  |  |  259|  3.07k|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|  3.07k|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|  3.07k|                                                                \
  |  |  |  |  |  |  262|  3.07k|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|  3.07k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  3.07k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  3.07k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  3.07k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  3.07k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  3.07k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  3.07k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  3.07k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  3.07k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 3.07k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  3.07k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  3.07k|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|  3.07k|}
  |  |  |  |  ------------------
  |  |  |  |  272|  3.07k|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|  3.07k|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|  3.07k|}
  |  |  ------------------
  ------------------
  933|  3.07k|        if (ct_nw_proto_p && !md->ct_orig_tuple_ipv6) {
  ------------------
  |  Branch (933:13): [True: 0, False: 3.07k]
  |  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|  3.07k|        miniflow_push_be32(mf, ipv6_label, 0); /* Padding for IPv4. */
  ------------------
  |  |  300|  3.07k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  3.07k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  3.07k|    {                                           \
  |  |  |  |  |  |  180|  3.07k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  3.07k|                                                \
  |  |  |  |  |  |  182|  3.07k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 3.07k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|  3.07k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  3.07k|    {                                        \
  |  |  |  |  |  |  |  |  160|  3.07k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  3.07k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  3.07k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  3.07k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  3.07k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  3.07k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  3.07k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  3.07k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  3.07k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 3.07k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  3.07k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  3.07k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  3.07k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|  3.07k|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|  3.07k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  |  |  190|  3.07k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  944|       |
  945|  3.07k|        nw_tos = nh->ip_tos;
  946|  3.07k|        nw_ttl = nh->ip_ttl;
  947|  3.07k|        nw_proto = nh->ip_proto;
  948|  3.07k|        nw_frag = ipv4_get_nw_frag(nh);
  949|  3.07k|        data_pull(&data, &size, ip_len);
  950|  52.7k|    } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (950:16): [True: 25.8k, False: 26.9k]
  ------------------
  951|  25.8k|        const struct ovs_16aligned_ip6_hdr *nh = data;
  952|  25.8k|        ovs_be32 tc_flow;
  953|  25.8k|        uint16_t plen;
  954|       |
  955|  25.8k|        if (OVS_UNLIKELY(!ipv6_sanity_check(nh, size))) {
  ------------------
  |  |   66|  25.8k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 1.41k, False: 24.4k]
  |  |  ------------------
  ------------------
  956|  1.41k|            if (OVS_UNLIKELY(VLOG_IS_DBG_ENABLED())) {
  ------------------
  |  |   66|  1.41k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 0, False: 1.41k]
  |  |  ------------------
  ------------------
  957|      0|                dump_invalid_packet(packet, "ipv6_sanity_check");
  958|      0|            }
  959|  1.41k|            goto out;
  960|  1.41k|        }
  961|  24.4k|        data_pull(&data, &size, sizeof *nh);
  962|  24.4k|        plen = ntohs(nh->ip6_plen);
  963|  24.4k|        dp_packet_set_l2_pad_size(packet, size - plen);
  964|  24.4k|        size = plen;   /* Never pull padding. */
  965|       |
  966|  24.4k|        miniflow_push_words(mf, ipv6_src, &nh->ip6_src,
  ------------------
  |  |  318|  24.4k|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|  24.4k|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|  24.4k|{                                                               \
  |  |  |  |  270|  24.4k|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|  24.4k|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|  24.4k|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|  24.4k|{                                                               \
  |  |  |  |  |  |  259|  24.4k|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|  24.4k|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|  24.4k|                                                                \
  |  |  |  |  |  |  262|  24.4k|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|  24.4k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  24.4k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  24.4k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  24.4k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  24.4k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  24.4k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  24.4k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  24.4k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  24.4k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 24.4k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  24.4k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  24.4k|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|  24.4k|}
  |  |  |  |  ------------------
  |  |  |  |  272|  24.4k|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|  24.4k|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|  24.4k|}
  |  |  ------------------
  ------------------
  967|  24.4k|                            sizeof nh->ip6_src / 8);
  968|  24.4k|        miniflow_push_words(mf, ipv6_dst, &nh->ip6_dst,
  ------------------
  |  |  318|  24.4k|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|  24.4k|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|  24.4k|{                                                               \
  |  |  |  |  270|  24.4k|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|  24.4k|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|  24.4k|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|  24.4k|{                                                               \
  |  |  |  |  |  |  259|  24.4k|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|  24.4k|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|  24.4k|                                                                \
  |  |  |  |  |  |  262|  24.4k|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|  24.4k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  24.4k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  24.4k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  24.4k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  24.4k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  24.4k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  24.4k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  24.4k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  24.4k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 24.4k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  24.4k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  24.4k|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|  24.4k|}
  |  |  |  |  ------------------
  |  |  |  |  272|  24.4k|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|  24.4k|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|  24.4k|}
  |  |  ------------------
  ------------------
  969|  24.4k|                            sizeof nh->ip6_dst / 8);
  970|  24.4k|        if (ct_nw_proto_p && md->ct_orig_tuple_ipv6) {
  ------------------
  |  Branch (970:13): [True: 0, False: 24.4k]
  |  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|  24.4k|        tc_flow = get_16aligned_be32(&nh->ip6_flow);
  983|  24.4k|        nw_tos = ntohl(tc_flow) >> 20;
  984|  24.4k|        nw_ttl = nh->ip6_hlim;
  985|  24.4k|        nw_proto = nh->ip6_nxt;
  986|       |
  987|  24.4k|        if (!parse_ipv6_ext_hdrs(&data, &size, &nw_proto, &nw_frag,
  ------------------
  |  Branch (987:13): [True: 2.64k, False: 21.8k]
  ------------------
  988|  24.4k|                                 NULL, NULL)) {
  989|  2.64k|            goto out;
  990|  2.64k|        }
  991|       |
  992|       |        /* This needs to be after the parse_ipv6_ext_hdrs__() call because it
  993|       |         * leaves the nw_frag word uninitialized. */
  994|  21.8k|        ASSERT_SEQUENTIAL(ipv6_label, nw_frag);
  ------------------
  |  |   71|  21.8k|    BUILD_ASSERT_DECL(offsetof(struct flow, f0)         \
  |  |  ------------------
  |  |  |  |  270|  21.8k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  |  |  ------------------
  |  |   72|  21.8k|                      + MEMBER_SIZEOF(struct flow, f0)  \
  |  |   73|  21.8k|                      == offsetof(struct flow, f1))
  ------------------
  995|  21.8k|        ovs_be32 label = tc_flow & htonl(IPV6_LABEL_MASK);
  996|  21.8k|        miniflow_push_be32(mf, ipv6_label, label);
  ------------------
  |  |  300|  21.8k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  21.8k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  21.8k|    {                                           \
  |  |  |  |  |  |  180|  21.8k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  21.8k|                                                \
  |  |  |  |  |  |  182|  21.8k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 21.8k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|  21.8k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  21.8k|    {                                        \
  |  |  |  |  |  |  |  |  160|  21.8k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  21.8k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  21.8k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  21.8k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  21.8k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  21.8k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  21.8k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  21.8k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  21.8k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 21.8k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  21.8k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  21.8k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  21.8k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|  21.8k|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|  21.8k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  |  |  190|  21.8k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  997|  26.9k|    } else {
  998|  26.9k|        if (dl_type == htons(ETH_TYPE_ARP) ||
  ------------------
  |  Branch (998:13): [True: 496, False: 26.4k]
  ------------------
  999|  26.4k|            dl_type == htons(ETH_TYPE_RARP)) {
  ------------------
  |  Branch (999:13): [True: 767, False: 25.6k]
  ------------------
 1000|  1.26k|            struct eth_addr arp_buf[2];
 1001|  1.26k|            const struct arp_eth_header *arp = (const struct arp_eth_header *)
 1002|  1.26k|                data_try_pull(&data, &size, ARP_ETH_HEADER_LEN);
  ------------------
  |  |  957|  1.26k|#define ARP_ETH_HEADER_LEN 28
  ------------------
 1003|       |
 1004|  1.26k|            if (OVS_LIKELY(arp) && OVS_LIKELY(arp->ar_hrd == htons(1))
  ------------------
  |  |   65|  2.52k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 759, False: 504]
  |  |  ------------------
  ------------------
                          if (OVS_LIKELY(arp) && OVS_LIKELY(arp->ar_hrd == htons(1))
  ------------------
  |  |   65|  2.02k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 668, False: 91]
  |  |  ------------------
  ------------------
 1005|    668|                && OVS_LIKELY(arp->ar_pro == htons(ETH_TYPE_IP))
  ------------------
  |  |   65|  1.93k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 648, False: 20]
  |  |  ------------------
  ------------------
 1006|    648|                && OVS_LIKELY(arp->ar_hln == ETH_ADDR_LEN)
  ------------------
  |  |   65|  1.91k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 581, False: 67]
  |  |  ------------------
  ------------------
 1007|    581|                && OVS_LIKELY(arp->ar_pln == 4)) {
  ------------------
  |  |   65|    581|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 471, False: 110]
  |  |  ------------------
  ------------------
 1008|    471|                miniflow_push_be32(mf, nw_src,
  ------------------
  |  |  300|    471|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|    471|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|    471|    {                                           \
  |  |  |  |  |  |  180|    471|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|    471|                                                \
  |  |  |  |  |  |  182|    471|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 471, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|    471|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    471|    {                                        \
  |  |  |  |  |  |  |  |  160|    471|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    471|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    471|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    471|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    471|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    471|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    471|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    471|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    471|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 471]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    471|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    471|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    471|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|    471|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|    471|    } 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|    471|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1009|    471|                                   get_16aligned_be32(&arp->ar_spa));
 1010|    471|                miniflow_push_be32(mf, nw_dst,
  ------------------
  |  |  300|    471|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|    471|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|    471|    {                                           \
  |  |  |  |  |  |  180|    471|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|    471|                                                \
  |  |  |  |  |  |  182|    471|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded, False: 471]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    471|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [True: 471, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|    471|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    471|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    471|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    471|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    471|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    471|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    471|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    471|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    471|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    471|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    471|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 471]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    471|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|    471|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|    471|        MF.data++;                              \
  |  |  |  |  |  |  189|    471|    }                                           \
  |  |  |  |  |  |  190|    471|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1011|    471|                                   get_16aligned_be32(&arp->ar_tpa));
 1012|       |
 1013|       |                /* We only match on the lower 8 bits of the opcode. */
 1014|    471|                if (OVS_LIKELY(ntohs(arp->ar_op) <= 0xff)) {
  ------------------
  |  |   65|    471|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 10, False: 461]
  |  |  ------------------
  ------------------
 1015|     10|                    miniflow_push_be32(mf, ipv6_label, 0); /* Pad with ARP. */
  ------------------
  |  |  300|     10|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|     10|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|     10|    {                                           \
  |  |  |  |  |  |  180|     10|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|     10|                                                \
  |  |  |  |  |  |  182|     10|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 10, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|     10|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|     10|    {                                        \
  |  |  |  |  |  |  |  |  160|     10|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     10|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     10|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     10|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     10|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     10|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     10|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     10|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     10|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 10]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     10|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|     10|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|     10|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|     10|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|     10|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [Folded, 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|     10|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1016|     10|                    miniflow_push_be32(mf, nw_frag, htonl(ntohs(arp->ar_op)));
  ------------------
  |  |  300|     10|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|     10|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|     10|    {                                           \
  |  |  |  |  |  |  180|     10|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|     10|                                                \
  |  |  |  |  |  |  182|     10|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded, False: 10]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|     10|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [True: 10, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|     10|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|     10|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|     10|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     10|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     10|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     10|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     10|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     10|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     10|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     10|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     10|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 10]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     10|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|     10|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|     10|        MF.data++;                              \
  |  |  |  |  |  |  189|     10|    }                                           \
  |  |  |  |  |  |  190|     10|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1017|     10|                }
 1018|       |
 1019|       |                /* Must be adjacent. */
 1020|    471|                ASSERT_SEQUENTIAL(arp_sha, arp_tha);
  ------------------
  |  |   71|    471|    BUILD_ASSERT_DECL(offsetof(struct flow, f0)         \
  |  |  ------------------
  |  |  |  |  270|    471|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  |  |  ------------------
  |  |   72|    471|                      + MEMBER_SIZEOF(struct flow, f0)  \
  |  |   73|    471|                      == offsetof(struct flow, f1))
  ------------------
 1021|       |
 1022|    471|                arp_buf[0] = arp->ar_sha;
 1023|    471|                arp_buf[1] = arp->ar_tha;
 1024|    471|                miniflow_push_macs(mf, arp_sha, arp_buf);
  ------------------
  |  |  324|    471|    miniflow_push_macs_(MF, offsetof(struct flow, FIELD), VALUEP)
  |  |  ------------------
  |  |  |  |  289|    471|#define miniflow_push_macs_(MF, OFS, VALUEP)                    \
  |  |  |  |  290|    471|{                                                               \
  |  |  |  |  291|    471|    miniflow_set_maps(MF, (OFS) / 8, 2);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|    471|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|    471|{                                                               \
  |  |  |  |  |  |  259|    471|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|    471|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|    471|                                                                \
  |  |  |  |  |  |  262|    471|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|    471|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    471|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    471|{                                                                       \
  |  |  |  |  |  |  |  |  151|    471|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    471|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    471|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    471|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    471|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    471|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 471]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    471|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    471|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|    471|}
  |  |  |  |  ------------------
  |  |  |  |  292|    471|    memcpy(MF.data, (VALUEP), 2 * ETH_ADDR_LEN);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  205|    471|#define ETH_ADDR_LEN           6
  |  |  |  |  ------------------
  |  |  |  |  293|    471|    MF.data += 1;                   /* First word only. */      \
  |  |  |  |  294|    471|}
  |  |  ------------------
  ------------------
 1025|    471|                miniflow_pad_to_64(mf, arp_tha);
  ------------------
  |  |  312|    471|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|    471|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|    471|{                                                               \
  |  |  |  |  234|    471|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|    471|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|    471|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|    471|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    471|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    471|{                                                                       \
  |  |  |  |  |  |  |  |  151|    471|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    471|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    471|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    471|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    471|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    471|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 471]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    471|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|    471|                                                                \
  |  |  |  |  237|    471|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|    471|    MF.data++;                                                  \
  |  |  |  |  239|    471|}
  |  |  ------------------
  ------------------
 1026|    471|            }
 1027|  25.6k|        } else if (dl_type == htons(ETH_TYPE_NSH)) {
  ------------------
  |  Branch (1027:20): [True: 13.4k, False: 12.2k]
  ------------------
 1028|  13.4k|            struct ovs_key_nsh nsh;
 1029|       |
 1030|  13.4k|            if (OVS_LIKELY(parse_nsh(&data, &size, &nsh))) {
  ------------------
  |  |   65|  13.4k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 7.22k, False: 6.20k]
  |  |  ------------------
  ------------------
 1031|  7.22k|                miniflow_push_words(mf, nsh, &nsh,
  ------------------
  |  |  318|  7.22k|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|  7.22k|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|  7.22k|{                                                               \
  |  |  |  |  270|  7.22k|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|  7.22k|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|  7.22k|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|  7.22k|{                                                               \
  |  |  |  |  |  |  259|  7.22k|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|  7.22k|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|  7.22k|                                                                \
  |  |  |  |  |  |  262|  7.22k|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|  7.22k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  7.22k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  7.22k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  7.22k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  7.22k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  7.22k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  7.22k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  7.22k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  7.22k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 7.22k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  7.22k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  7.22k|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|  7.22k|}
  |  |  |  |  ------------------
  |  |  |  |  272|  7.22k|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|  7.22k|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|  7.22k|}
  |  |  ------------------
  ------------------
 1032|  7.22k|                                    sizeof(struct ovs_key_nsh) /
 1033|  7.22k|                                    sizeof(uint64_t));
 1034|  7.22k|            }
 1035|  13.4k|        }
 1036|  26.9k|        goto out;
 1037|  26.9k|    }
 1038|       |
 1039|  24.8k|    packet->l4_ofs = (char *)data - frame;
 1040|  24.8k|    miniflow_push_be32(mf, nw_frag,
  ------------------
  |  |  300|  24.8k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  24.8k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  24.8k|    {                                           \
  |  |  |  |  |  |  180|  24.8k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  24.8k|                                                \
  |  |  |  |  |  |  182|  24.8k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded, False: 24.8k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|  24.8k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [True: 24.8k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|  24.8k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  24.8k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  24.8k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  24.8k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  24.8k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  24.8k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  24.8k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  24.8k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  24.8k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  24.8k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  24.8k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 24.8k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  24.8k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|  24.8k|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|  24.8k|        MF.data++;                              \
  |  |  |  |  |  |  189|  24.8k|    }                                           \
  |  |  |  |  |  |  190|  24.8k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1041|  24.8k|                       bytes_to_be32(nw_frag, nw_tos, nw_ttl, nw_proto));
 1042|       |
 1043|  24.8k|    if (OVS_LIKELY(!(nw_frag & FLOW_NW_FRAG_LATER))) {
  ------------------
  |  |   65|  24.8k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 24.7k, False: 168]
  |  |  ------------------
  ------------------
 1044|  24.7k|        if (OVS_LIKELY(nw_proto == IPPROTO_TCP)) {
  ------------------
  |  |   65|  24.7k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 13.2k, False: 11.4k]
  |  |  ------------------
  ------------------
 1045|  13.2k|            if (OVS_LIKELY(size >= TCP_HEADER_LEN)) {
  ------------------
  |  |   65|  13.2k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 13.2k, False: 73]
  |  |  ------------------
  ------------------
 1046|  13.2k|                const struct tcp_header *tcp = data;
 1047|  13.2k|                size_t tcp_hdr_len = TCP_OFFSET(tcp->tcp_ctl) * 4;
  ------------------
  |  |  906|  13.2k|#define TCP_OFFSET(tcp_ctl) (ntohs(tcp_ctl) >> 12)
  ------------------
 1048|       |
 1049|  13.2k|                if (OVS_LIKELY(tcp_hdr_len >= TCP_HEADER_LEN)
  ------------------
  |  |   65|  26.4k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 11.5k, False: 1.63k]
  |  |  ------------------
  ------------------
 1050|  11.5k|                    && OVS_LIKELY(size >= tcp_hdr_len)) {
  ------------------
  |  |   65|  11.5k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 11.5k, False: 31]
  |  |  ------------------
  ------------------
 1051|       |                    /* tcp_flags are not at the beginning of the block. */
 1052|  11.5k|                    miniflow_pad_from_64(mf, tcp_flags);
  ------------------
  |  |  315|  11.5k|    miniflow_pad_from_64_(MF, offsetof(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  241|  11.5k|#define miniflow_pad_from_64_(MF, OFS)                          \
  |  |  |  |  242|  11.5k|{                                                               \
  |  |  |  |  243|  11.5k|    MINIFLOW_ASSERT(MF.data < MF.end);                          \
  |  |  |  |  244|  11.5k|                                                                \
  |  |  |  |  245|  11.5k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  246|  11.5k|    miniflow_set_map(MF, OFS / 8);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|  11.5k|    {                                        \
  |  |  |  |  |  |  160|  11.5k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  11.5k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  11.5k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  11.5k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  11.5k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  11.5k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  11.5k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  11.5k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  11.5k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 11.5k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  11.5k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|  11.5k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|  11.5k|}
  |  |  |  |  ------------------
  |  |  |  |  247|  11.5k|                                                                \
  |  |  |  |  248|  11.5k|    memset((uint8_t *)MF.data, 0, (OFS) % 8);                   \
  |  |  |  |  249|  11.5k|}
  |  |  ------------------
  ------------------
 1053|  11.5k|                    miniflow_push_be32(mf, tcp_flags,
  ------------------
  |  |  300|  11.5k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  11.5k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  11.5k|    {                                           \
  |  |  |  |  |  |  180|  11.5k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  11.5k|                                                \
  |  |  |  |  |  |  182|  11.5k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded, False: 11.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|  11.5k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [True: 11.5k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|  11.5k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  11.5k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  11.5k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  11.5k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  11.5k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  11.5k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  11.5k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  11.5k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  11.5k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  11.5k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  11.5k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 11.5k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  11.5k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|  11.5k|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|  11.5k|        MF.data++;                              \
  |  |  |  |  |  |  189|  11.5k|    }                                           \
  |  |  |  |  |  |  190|  11.5k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1054|  11.5k|                                       TCP_FLAGS_BE32(tcp->tcp_ctl));
 1055|  11.5k|                    miniflow_push_be16(mf, tp_src, tcp->tcp_src);
  ------------------
  |  |  306|  11.5k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  11.5k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  11.5k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  11.5k|{                                               \
  |  |  |  |  |  |  197|  11.5k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  11.5k|                                                \
  |  |  |  |  |  |  199|  11.5k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 11.5k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|  11.5k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  11.5k|    {                                        \
  |  |  |  |  |  |  |  |  160|  11.5k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  11.5k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  11.5k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  11.5k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  11.5k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  11.5k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  11.5k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  11.5k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  11.5k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 11.5k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  11.5k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  11.5k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  11.5k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|  11.5k|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  11.5k|    } 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|  11.5k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1056|  11.5k|                    miniflow_push_be16(mf, tp_dst, tcp->tcp_dst);
  ------------------
  |  |  306|  11.5k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  11.5k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  11.5k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  11.5k|{                                               \
  |  |  |  |  |  |  197|  11.5k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  11.5k|                                                \
  |  |  |  |  |  |  199|  11.5k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 11.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|  11.5k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 11.5k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|  11.5k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  11.5k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  11.5k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  11.5k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  11.5k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  11.5k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  11.5k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  11.5k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  11.5k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  11.5k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  11.5k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 11.5k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  11.5k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|  11.5k|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  11.5k|    } 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|  11.5k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1057|  11.5k|                    miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|  11.5k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  11.5k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  11.5k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  11.5k|{                                               \
  |  |  |  |  |  |  197|  11.5k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  11.5k|                                                \
  |  |  |  |  |  |  199|  11.5k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 11.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|  11.5k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 11.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|  11.5k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 11.5k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|  11.5k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  11.5k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  11.5k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  11.5k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  11.5k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  11.5k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  11.5k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  11.5k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  11.5k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  11.5k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  11.5k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 11.5k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  11.5k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|  11.5k|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|  11.5k|    } 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|  11.5k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1058|  11.5k|                    miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|  11.5k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  11.5k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  11.5k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  11.5k|{                                               \
  |  |  |  |  |  |  197|  11.5k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  11.5k|                                                \
  |  |  |  |  |  |  199|  11.5k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 11.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|  11.5k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 11.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|  11.5k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 11.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|  11.5k|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [True: 11.5k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|  11.5k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  11.5k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  11.5k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  11.5k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  11.5k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  11.5k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  11.5k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  11.5k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  11.5k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  11.5k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  11.5k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 11.5k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  11.5k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|  11.5k|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|  11.5k|        MF.data++;                              \
  |  |  |  |  |  |  212|  11.5k|    }                                           \
  |  |  |  |  |  |  213|  11.5k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1059|  11.5k|                    if (dl_type == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (1059:25): [True: 1.50k, False: 10.0k]
  ------------------
 1060|  1.50k|                        dp_packet_update_rss_hash_ipv4_tcp_udp(packet);
 1061|  10.0k|                    } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1061:32): [True: 10.0k, False: 0]
  ------------------
 1062|  10.0k|                        dp_packet_update_rss_hash_ipv6_tcp_udp(packet);
 1063|  10.0k|                    }
 1064|  11.5k|                    dp_packet_l4_proto_set_tcp(packet);
 1065|  11.5k|                }
 1066|  13.2k|            }
 1067|  13.2k|        } else if (OVS_LIKELY(nw_proto == IPPROTO_UDP)) {
  ------------------
  |  |   65|  11.4k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 1.17k, False: 10.2k]
  |  |  ------------------
  ------------------
 1068|  1.17k|            if (OVS_LIKELY(size >= UDP_HEADER_LEN)) {
  ------------------
  |  |   65|  1.17k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 1.10k, False: 77]
  |  |  ------------------
  ------------------
 1069|  1.10k|                const struct udp_header *udp = data;
 1070|       |
 1071|  1.10k|                miniflow_push_be16(mf, tp_src, udp->udp_src);
  ------------------
  |  |  306|  1.10k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  1.10k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  1.10k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  1.10k|{                                               \
  |  |  |  |  |  |  197|  1.10k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  1.10k|                                                \
  |  |  |  |  |  |  199|  1.10k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 1.10k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|  1.10k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  1.10k|    {                                        \
  |  |  |  |  |  |  |  |  160|  1.10k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  1.10k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  1.10k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  1.10k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  1.10k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  1.10k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  1.10k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  1.10k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  1.10k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.10k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  1.10k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  1.10k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  1.10k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|  1.10k|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  1.10k|    } 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.10k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1072|  1.10k|                miniflow_push_be16(mf, tp_dst, udp->udp_dst);
  ------------------
  |  |  306|  1.10k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  1.10k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  1.10k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  1.10k|{                                               \
  |  |  |  |  |  |  197|  1.10k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  1.10k|                                                \
  |  |  |  |  |  |  199|  1.10k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 1.10k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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.10k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 1.10k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|  1.10k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  1.10k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  1.10k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  1.10k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  1.10k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  1.10k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  1.10k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  1.10k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  1.10k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  1.10k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  1.10k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.10k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  1.10k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|  1.10k|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  1.10k|    } 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.10k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1073|  1.10k|                miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|  1.10k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  1.10k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  1.10k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  1.10k|{                                               \
  |  |  |  |  |  |  197|  1.10k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  1.10k|                                                \
  |  |  |  |  |  |  199|  1.10k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 1.10k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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.10k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 1.10k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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.10k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 1.10k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|  1.10k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  1.10k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  1.10k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  1.10k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  1.10k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  1.10k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  1.10k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  1.10k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  1.10k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  1.10k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  1.10k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.10k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  1.10k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|  1.10k|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|  1.10k|    } 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.10k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1074|  1.10k|                miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|  1.10k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  1.10k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  1.10k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  1.10k|{                                               \
  |  |  |  |  |  |  197|  1.10k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  1.10k|                                                \
  |  |  |  |  |  |  199|  1.10k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 1.10k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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.10k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 1.10k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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.10k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 1.10k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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.10k|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [True: 1.10k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|  1.10k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  1.10k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  1.10k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  1.10k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  1.10k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  1.10k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  1.10k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  1.10k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  1.10k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  1.10k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  1.10k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.10k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  1.10k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|  1.10k|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|  1.10k|        MF.data++;                              \
  |  |  |  |  |  |  212|  1.10k|    }                                           \
  |  |  |  |  |  |  213|  1.10k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1075|  1.10k|                if (dl_type == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (1075:21): [True: 587, False: 515]
  ------------------
 1076|    587|                    dp_packet_update_rss_hash_ipv4_tcp_udp(packet);
 1077|    587|                } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1077:28): [True: 515, False: 0]
  ------------------
 1078|    515|                    dp_packet_update_rss_hash_ipv6_tcp_udp(packet);
 1079|    515|                }
 1080|  1.10k|                dp_packet_l4_proto_set_udp(packet);
 1081|  1.10k|            }
 1082|  10.2k|        } else if (OVS_LIKELY(nw_proto == IPPROTO_SCTP)) {
  ------------------
  |  |   65|  10.2k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 1.11k, False: 9.16k]
  |  |  ------------------
  ------------------
 1083|  1.11k|            if (OVS_LIKELY(size >= SCTP_HEADER_LEN)) {
  ------------------
  |  |   65|  1.11k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 910, False: 201]
  |  |  ------------------
  ------------------
 1084|    910|                const struct sctp_header *sctp = data;
 1085|       |
 1086|    910|                miniflow_push_be16(mf, tp_src, sctp->sctp_src);
  ------------------
  |  |  306|    910|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    910|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    910|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    910|{                                               \
  |  |  |  |  |  |  197|    910|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    910|                                                \
  |  |  |  |  |  |  199|    910|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 910, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|    910|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    910|    {                                        \
  |  |  |  |  |  |  |  |  160|    910|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    910|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    910|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    910|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    910|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    910|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    910|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    910|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    910|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 910]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    910|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    910|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    910|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|    910|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    910|    } 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|    910|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1087|    910|                miniflow_push_be16(mf, tp_dst, sctp->sctp_dst);
  ------------------
  |  |  306|    910|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    910|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    910|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    910|{                                               \
  |  |  |  |  |  |  197|    910|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    910|                                                \
  |  |  |  |  |  |  199|    910|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 910]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    910|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 910, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|    910|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    910|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    910|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    910|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    910|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    910|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    910|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    910|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    910|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    910|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    910|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 910]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    910|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|    910|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    910|    } 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|    910|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1088|    910|                miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|    910|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    910|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    910|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    910|{                                               \
  |  |  |  |  |  |  197|    910|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    910|                                                \
  |  |  |  |  |  |  199|    910|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 910]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    910|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 910]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    910|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 910, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|    910|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    910|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    910|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    910|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    910|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    910|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    910|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    910|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    910|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    910|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    910|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 910]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    910|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|    910|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|    910|    } 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|    910|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1089|    910|                miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|    910|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    910|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    910|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    910|{                                               \
  |  |  |  |  |  |  197|    910|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    910|                                                \
  |  |  |  |  |  |  199|    910|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 910]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    910|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 910]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    910|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 910]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    910|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [True: 910, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|    910|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    910|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    910|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    910|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    910|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    910|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    910|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    910|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    910|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    910|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    910|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 910]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    910|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|    910|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|    910|        MF.data++;                              \
  |  |  |  |  |  |  212|    910|    }                                           \
  |  |  |  |  |  |  213|    910|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1090|    910|                dp_packet_l4_proto_set_sctp(packet);
 1091|    910|            }
 1092|  9.16k|        } else if (OVS_LIKELY(nw_proto == IPPROTO_ICMP)) {
  ------------------
  |  |   65|  9.16k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 4.46k, False: 4.69k]
  |  |  ------------------
  ------------------
 1093|  4.46k|            if (OVS_LIKELY(size >= ICMP_HEADER_LEN)) {
  ------------------
  |  |   65|  4.46k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 4.21k, False: 255]
  |  |  ------------------
  ------------------
 1094|  4.21k|                const struct icmp_header *icmp = data;
 1095|       |
 1096|  4.21k|                miniflow_push_be16(mf, tp_src, htons(icmp->icmp_type));
  ------------------
  |  |  306|  4.21k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  4.21k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  4.21k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  4.21k|{                                               \
  |  |  |  |  |  |  197|  4.21k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  4.21k|                                                \
  |  |  |  |  |  |  199|  4.21k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 4.21k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|  4.21k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  4.21k|    {                                        \
  |  |  |  |  |  |  |  |  160|  4.21k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  4.21k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  4.21k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  4.21k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  4.21k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  4.21k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  4.21k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  4.21k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  4.21k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 4.21k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  4.21k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  4.21k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  4.21k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|  4.21k|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  4.21k|    } 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.21k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1097|  4.21k|                miniflow_push_be16(mf, tp_dst, htons(icmp->icmp_code));
  ------------------
  |  |  306|  4.21k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  4.21k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  4.21k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  4.21k|{                                               \
  |  |  |  |  |  |  197|  4.21k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  4.21k|                                                \
  |  |  |  |  |  |  199|  4.21k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 4.21k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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.21k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 4.21k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|  4.21k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  4.21k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  4.21k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  4.21k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  4.21k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  4.21k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  4.21k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  4.21k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  4.21k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  4.21k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  4.21k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 4.21k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  4.21k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|  4.21k|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  4.21k|    } 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.21k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1098|  4.21k|                miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|  4.21k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  4.21k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  4.21k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  4.21k|{                                               \
  |  |  |  |  |  |  197|  4.21k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  4.21k|                                                \
  |  |  |  |  |  |  199|  4.21k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 4.21k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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.21k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 4.21k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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.21k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 4.21k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|  4.21k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  4.21k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  4.21k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  4.21k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  4.21k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  4.21k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  4.21k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  4.21k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  4.21k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  4.21k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  4.21k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 4.21k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  4.21k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|  4.21k|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|  4.21k|    } 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.21k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1099|  4.21k|                miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|  4.21k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  4.21k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  4.21k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  4.21k|{                                               \
  |  |  |  |  |  |  197|  4.21k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  4.21k|                                                \
  |  |  |  |  |  |  199|  4.21k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 4.21k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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.21k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 4.21k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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.21k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 4.21k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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.21k|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [True: 4.21k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|  4.21k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  4.21k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  4.21k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  4.21k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  4.21k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  4.21k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  4.21k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  4.21k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  4.21k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  4.21k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  4.21k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 4.21k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  4.21k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|  4.21k|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|  4.21k|        MF.data++;                              \
  |  |  |  |  |  |  212|  4.21k|    }                                           \
  |  |  |  |  |  |  213|  4.21k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1100|  4.21k|            }
 1101|  4.69k|        } else if (OVS_LIKELY(nw_proto == IPPROTO_IGMP)) {
  ------------------
  |  |   65|  4.69k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 3.18k, False: 1.51k]
  |  |  ------------------
  ------------------
 1102|  3.18k|            if (OVS_LIKELY(size >= IGMP_HEADER_LEN)) {
  ------------------
  |  |   65|  3.18k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 3.14k, False: 45]
  |  |  ------------------
  ------------------
 1103|  3.14k|                const struct igmp_header *igmp = data;
 1104|       |
 1105|  3.14k|                miniflow_push_be16(mf, tp_src, htons(igmp->igmp_type));
  ------------------
  |  |  306|  3.14k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  3.14k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  3.14k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  3.14k|{                                               \
  |  |  |  |  |  |  197|  3.14k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  3.14k|                                                \
  |  |  |  |  |  |  199|  3.14k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 3.14k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|  3.14k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  3.14k|    {                                        \
  |  |  |  |  |  |  |  |  160|  3.14k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  3.14k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  3.14k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  3.14k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  3.14k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  3.14k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  3.14k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  3.14k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  3.14k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 3.14k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  3.14k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  3.14k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  3.14k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|  3.14k|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  3.14k|    } 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|  3.14k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1106|  3.14k|                miniflow_push_be16(mf, tp_dst, htons(igmp->igmp_code));
  ------------------
  |  |  306|  3.14k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  3.14k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  3.14k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  3.14k|{                                               \
  |  |  |  |  |  |  197|  3.14k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  3.14k|                                                \
  |  |  |  |  |  |  199|  3.14k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 3.14k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|  3.14k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 3.14k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|  3.14k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  3.14k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  3.14k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  3.14k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  3.14k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  3.14k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  3.14k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  3.14k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  3.14k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  3.14k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  3.14k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 3.14k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  3.14k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|  3.14k|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  3.14k|    } 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|  3.14k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1107|       |                /* ct_tp_src/dst are not extracted for IGMP. */
 1108|  3.14k|                miniflow_pad_to_64(mf, tp_dst);
  ------------------
  |  |  312|  3.14k|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|  3.14k|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|  3.14k|{                                                               \
  |  |  |  |  234|  3.14k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|  3.14k|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|  3.14k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|  3.14k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  3.14k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  3.14k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  3.14k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  3.14k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  3.14k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  3.14k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  3.14k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  3.14k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 3.14k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  3.14k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|  3.14k|                                                                \
  |  |  |  |  237|  3.14k|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|  3.14k|    MF.data++;                                                  \
  |  |  |  |  239|  3.14k|}
  |  |  ------------------
  ------------------
 1109|  3.14k|                miniflow_push_be32(mf, igmp_group_ip4,
  ------------------
  |  |  300|  3.14k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  3.14k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  3.14k|    {                                           \
  |  |  |  |  |  |  180|  3.14k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  3.14k|                                                \
  |  |  |  |  |  |  182|  3.14k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 3.14k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|  3.14k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  3.14k|    {                                        \
  |  |  |  |  |  |  |  |  160|  3.14k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  3.14k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  3.14k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  3.14k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  3.14k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  3.14k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  3.14k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  3.14k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  3.14k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 3.14k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  3.14k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  3.14k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  3.14k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|  3.14k|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|  3.14k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  |  |  190|  3.14k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1110|  3.14k|                                   get_16aligned_be32(&igmp->group));
 1111|  3.14k|                miniflow_pad_to_64(mf, igmp_group_ip4);
  ------------------
  |  |  312|  3.14k|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|  3.14k|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|  3.14k|{                                                               \
  |  |  |  |  234|  3.14k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|  3.14k|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|  3.14k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|  3.14k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  3.14k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  3.14k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  3.14k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  3.14k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  3.14k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  3.14k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  3.14k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  3.14k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 3.14k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  3.14k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|  3.14k|                                                                \
  |  |  |  |  237|  3.14k|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|  3.14k|    MF.data++;                                                  \
  |  |  |  |  239|  3.14k|}
  |  |  ------------------
  ------------------
 1112|  3.14k|            }
 1113|  3.18k|        } else if (OVS_LIKELY(nw_proto == IPPROTO_ICMPV6)) {
  ------------------
  |  |   65|  1.51k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 1.09k, False: 417]
  |  |  ------------------
  ------------------
 1114|  1.09k|            if (OVS_LIKELY(size >= sizeof(struct icmp6_data_header))) {
  ------------------
  |  |   65|  1.09k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 1.00k, False: 85]
  |  |  ------------------
  ------------------
 1115|  1.00k|                const union ovs_16aligned_in6_addr *nd_target;
 1116|  1.00k|                struct eth_addr arp_buf[2];
 1117|       |                /* This will populate whether we received Option 1
 1118|       |                 * or Option 2. */
 1119|  1.00k|                uint8_t opt_type;
 1120|       |                /* This holds the ND Reserved field. */
 1121|  1.00k|                ovs_be32 rso_flags;
 1122|  1.00k|                const struct icmp6_data_header *icmp6;
 1123|       |
 1124|  1.00k|                icmp6 = data_pull(&data, &size, sizeof *icmp6);
 1125|  1.00k|                if (parse_icmpv6(&data, &size, icmp6,
  ------------------
  |  Branch (1125:21): [True: 790, False: 218]
  ------------------
 1126|  1.00k|                                 &rso_flags, &nd_target, arp_buf, &opt_type)) {
 1127|    790|                    if (nd_target) {
  ------------------
  |  Branch (1127:25): [True: 485, False: 305]
  ------------------
 1128|    485|                        miniflow_push_words(mf, nd_target, nd_target,
  ------------------
  |  |  318|    485|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|    485|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|    485|{                                                               \
  |  |  |  |  270|    485|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|    485|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|    485|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|    485|{                                                               \
  |  |  |  |  |  |  259|    485|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|    485|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|    485|                                                                \
  |  |  |  |  |  |  262|    485|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|    485|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    485|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    485|{                                                                       \
  |  |  |  |  |  |  |  |  151|    485|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    485|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    485|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    485|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    485|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    485|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 485]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    485|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    485|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|    485|}
  |  |  |  |  ------------------
  |  |  |  |  272|    485|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|    485|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|    485|}
  |  |  ------------------
  ------------------
 1129|    485|                                            sizeof *nd_target / sizeof(uint64_t));
 1130|    485|                    }
 1131|    790|                    miniflow_push_macs(mf, arp_sha, arp_buf);
  ------------------
  |  |  324|    790|    miniflow_push_macs_(MF, offsetof(struct flow, FIELD), VALUEP)
  |  |  ------------------
  |  |  |  |  289|    790|#define miniflow_push_macs_(MF, OFS, VALUEP)                    \
  |  |  |  |  290|    790|{                                                               \
  |  |  |  |  291|    790|    miniflow_set_maps(MF, (OFS) / 8, 2);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|    790|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|    790|{                                                               \
  |  |  |  |  |  |  259|    790|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|    790|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|    790|                                                                \
  |  |  |  |  |  |  262|    790|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|    790|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    790|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    790|{                                                                       \
  |  |  |  |  |  |  |  |  151|    790|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    790|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    790|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    790|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    790|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    790|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 790]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    790|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    790|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|    790|}
  |  |  |  |  ------------------
  |  |  |  |  292|    790|    memcpy(MF.data, (VALUEP), 2 * ETH_ADDR_LEN);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  205|    790|#define ETH_ADDR_LEN           6
  |  |  |  |  ------------------
  |  |  |  |  293|    790|    MF.data += 1;                   /* First word only. */      \
  |  |  |  |  294|    790|}
  |  |  ------------------
  ------------------
 1132|       |                    /* Populate options field and set the padding
 1133|       |                     * accordingly. */
 1134|    790|                    if (opt_type != 0) {
  ------------------
  |  Branch (1134:25): [True: 135, False: 655]
  ------------------
 1135|    135|                        miniflow_push_be16(mf, tcp_flags, htons(opt_type));
  ------------------
  |  |  306|    135|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    135|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    135|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    135|{                                               \
  |  |  |  |  |  |  197|    135|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    135|                                                \
  |  |  |  |  |  |  199|    135|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 135]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    135|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 135]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    135|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 135, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|    135|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    135|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    135|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    135|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    135|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    135|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    135|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    135|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    135|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    135|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    135|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 135]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    135|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|    135|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|    135|    } 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|    135|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1136|       |                        /* Pad to align with 64 bits.
 1137|       |                         * This will zero out the pad3 field. */
 1138|    135|                        miniflow_pad_to_64(mf, tcp_flags);
  ------------------
  |  |  312|    135|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|    135|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|    135|{                                                               \
  |  |  |  |  234|    135|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|    135|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|    135|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|    135|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    135|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    135|{                                                                       \
  |  |  |  |  |  |  |  |  151|    135|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    135|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    135|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    135|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    135|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    135|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 135]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    135|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|    135|                                                                \
  |  |  |  |  237|    135|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|    135|    MF.data++;                                                  \
  |  |  |  |  239|    135|}
  |  |  ------------------
  ------------------
 1139|    655|                    } else {
 1140|       |                        /* Pad to align with 64 bits.
 1141|       |                         * This will zero out the tcp_flags & pad3 field. */
 1142|    655|                        miniflow_pad_to_64(mf, arp_tha);
  ------------------
  |  |  312|    655|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|    655|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|    655|{                                                               \
  |  |  |  |  234|    655|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|    655|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|    655|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|    655|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    655|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    655|{                                                                       \
  |  |  |  |  |  |  |  |  151|    655|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    655|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    655|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    655|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    655|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    655|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 655]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    655|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|    655|                                                                \
  |  |  |  |  237|    655|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|    655|    MF.data++;                                                  \
  |  |  |  |  239|    655|}
  |  |  ------------------
  ------------------
 1143|    655|                    }
 1144|    790|                    miniflow_push_be16(mf, tp_src,
  ------------------
  |  |  306|    790|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    790|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    790|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    790|{                                               \
  |  |  |  |  |  |  197|    790|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    790|                                                \
  |  |  |  |  |  |  199|    790|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 790, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|    790|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    790|    {                                        \
  |  |  |  |  |  |  |  |  160|    790|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    790|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    790|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    790|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    790|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    790|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    790|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    790|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    790|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 790]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    790|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    790|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    790|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|    790|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    790|    } 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|    790|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1145|    790|                                       htons(icmp6->icmp6_base.icmp6_type));
 1146|    790|                    miniflow_push_be16(mf, tp_dst,
  ------------------
  |  |  306|    790|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    790|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    790|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    790|{                                               \
  |  |  |  |  |  |  197|    790|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    790|                                                \
  |  |  |  |  |  |  199|    790|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 790]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    790|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 790, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|    790|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    790|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    790|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    790|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    790|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    790|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    790|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    790|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    790|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    790|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    790|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 790]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    790|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|    790|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    790|    } 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|    790|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1147|    790|                                       htons(icmp6->icmp6_base.icmp6_code));
 1148|    790|                    miniflow_pad_to_64(mf, tp_dst);
  ------------------
  |  |  312|    790|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|    790|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|    790|{                                                               \
  |  |  |  |  234|    790|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|    790|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|    790|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|    790|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    790|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    790|{                                                                       \
  |  |  |  |  |  |  |  |  151|    790|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    790|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    790|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    790|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    790|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    790|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 790]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    790|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|    790|                                                                \
  |  |  |  |  237|    790|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|    790|    MF.data++;                                                  \
  |  |  |  |  239|    790|}
  |  |  ------------------
  ------------------
 1149|       |                    /* Fill ND reserved field. */
 1150|    790|                    miniflow_push_be32(mf, igmp_group_ip4, rso_flags);
  ------------------
  |  |  300|    790|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|    790|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|    790|    {                                           \
  |  |  |  |  |  |  180|    790|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|    790|                                                \
  |  |  |  |  |  |  182|    790|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 790, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|    790|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    790|    {                                        \
  |  |  |  |  |  |  |  |  160|    790|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    790|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    790|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    790|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    790|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    790|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    790|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    790|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    790|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 790]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    790|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    790|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    790|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|    790|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|    790|    } 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|    790|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1151|    790|                    miniflow_pad_to_64(mf, igmp_group_ip4);
  ------------------
  |  |  312|    790|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|    790|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|    790|{                                                               \
  |  |  |  |  234|    790|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|    790|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|    790|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|    790|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    790|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    790|{                                                                       \
  |  |  |  |  |  |  |  |  151|    790|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    790|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    790|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    790|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    790|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    790|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 790]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    790|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|    790|                                                                \
  |  |  |  |  237|    790|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|    790|    MF.data++;                                                  \
  |  |  |  |  239|    790|}
  |  |  ------------------
  ------------------
 1152|    790|                } else {
 1153|       |                    /* ICMPv6 but not ND. */
 1154|    218|                    miniflow_push_be16(mf, tp_src,
  ------------------
  |  |  306|    218|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    218|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    218|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    218|{                                               \
  |  |  |  |  |  |  197|    218|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    218|                                                \
  |  |  |  |  |  |  199|    218|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 218, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|    218|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    218|    {                                        \
  |  |  |  |  |  |  |  |  160|    218|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    218|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    218|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    218|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    218|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    218|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    218|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    218|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    218|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 218]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    218|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    218|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    218|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|    218|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    218|    } 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|    218|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1155|    218|                                       htons(icmp6->icmp6_base.icmp6_type));
 1156|    218|                    miniflow_push_be16(mf, tp_dst,
  ------------------
  |  |  306|    218|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    218|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    218|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    218|{                                               \
  |  |  |  |  |  |  197|    218|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    218|                                                \
  |  |  |  |  |  |  199|    218|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 218]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    218|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 218, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|    218|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    218|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    218|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    218|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    218|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    218|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    218|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    218|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    218|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    218|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    218|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 218]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    218|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|    218|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    218|    } 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|    218|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1157|    218|                                       htons(icmp6->icmp6_base.icmp6_code));
 1158|    218|                    miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|    218|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    218|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    218|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    218|{                                               \
  |  |  |  |  |  |  197|    218|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    218|                                                \
  |  |  |  |  |  |  199|    218|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 218]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    218|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 218]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    218|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 218, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|    218|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    218|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    218|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    218|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    218|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    218|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    218|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    218|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    218|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    218|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    218|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 218]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    218|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|    218|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|    218|    } 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|    218|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1159|    218|                    miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|    218|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    218|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    218|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    218|{                                               \
  |  |  |  |  |  |  197|    218|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    218|                                                \
  |  |  |  |  |  |  199|    218|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 218]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    218|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 218]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    218|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 218]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    218|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [True: 218, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|    218|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    218|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    218|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    218|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    218|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    218|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    218|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    218|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    218|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    218|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    218|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 218]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    218|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|    218|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|    218|        MF.data++;                              \
  |  |  |  |  |  |  212|    218|    }                                           \
  |  |  |  |  |  |  213|    218|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1160|    218|                }
 1161|  1.00k|            }
 1162|  1.09k|        }
 1163|  24.7k|    } else if (ct_nw_proto_p &&
  ------------------
  |  Branch (1163:16): [True: 0, False: 168]
  ------------------
 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|   100k| out:
 1174|   100k|    dst->map = mf.map;
 1175|   100k|}
flow_zero_wildcards:
 1288|   164k|{
 1289|   164k|    uint64_t *flow_u64 = (uint64_t *) flow;
 1290|   164k|    const uint64_t *wc_u64 = (const uint64_t *) &wildcards->masks;
 1291|   164k|    size_t i;
 1292|       |
 1293|  15.3M|    for (i = 0; i < FLOW_U64S; i++) {
  ------------------
  |  |  165|  15.3M|#define FLOW_U64S (sizeof(struct flow) / sizeof(uint64_t))
  ------------------
  |  Branch (1293:17): [True: 15.1M, False: 164k]
  ------------------
 1294|  15.1M|        flow_u64[i] &= wc_u64[i];
 1295|  15.1M|    }
 1296|   164k|}
ct_state_to_string:
 1416|  55.7k|{
 1417|  55.7k|    switch (state) {
 1418|      0|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
 1419|      0|        CS_STATES
  ------------------
  |  |  926|  1.94k|    CS_STATE(NEW,         0, "new")             \
  |  |  ------------------
  |  |  |  | 1418|  1.94k|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1418:37): [True: 1.94k, False: 53.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  927|  2.03k|    CS_STATE(ESTABLISHED, 1, "est")             \
  |  |  ------------------
  |  |  |  | 1418|  2.03k|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1418:37): [True: 2.03k, False: 53.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  928|  2.06k|    CS_STATE(RELATED,     2, "rel")             \
  |  |  ------------------
  |  |  |  | 1418|  2.06k|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1418:37): [True: 2.06k, False: 53.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  929|  2.06k|    CS_STATE(REPLY_DIR,   3, "rpl")             \
  |  |  ------------------
  |  |  |  | 1418|  1.96k|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1418:37): [True: 1.96k, False: 53.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  930|  2.08k|    CS_STATE(INVALID,     4, "inv")             \
  |  |  ------------------
  |  |  |  | 1418|  2.08k|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1418:37): [True: 2.08k, False: 53.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  931|  2.08k|    CS_STATE(TRACKED,     5, "trk")             \
  |  |  ------------------
  |  |  |  | 1418|  1.97k|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1418:37): [True: 1.97k, False: 53.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  932|  1.97k|    CS_STATE(SRC_NAT,     6, "snat")            \
  |  |  ------------------
  |  |  |  | 1418|  1.94k|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1418:37): [True: 1.94k, False: 53.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  933|  1.94k|    CS_STATE(DST_NAT,     7, "dnat")
  |  |  ------------------
  |  |  |  | 1418|  1.94k|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1418:37): [True: 1.94k, False: 53.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1420|      0|#undef CS_STATE
 1421|  39.7k|    default:
  ------------------
  |  Branch (1421:5): [True: 39.7k, False: 15.9k]
  ------------------
 1422|       |        return NULL;
 1423|  55.7k|    }
 1424|  55.7k|}
flow_tun_flag_to_string:
 1539|  3.18k|{
 1540|  3.18k|    switch (flags) {
 1541|    131|    case FLOW_TNL_F_DONT_FRAGMENT:
  ------------------
  |  |   61|    131|#define FLOW_TNL_F_DONT_FRAGMENT (1 << 1)
  ------------------
  |  Branch (1541:5): [True: 131, False: 3.05k]
  ------------------
 1542|    131|        return "df";
 1543|    134|    case FLOW_TNL_F_CSUM:
  ------------------
  |  |   62|    134|#define FLOW_TNL_F_CSUM (1 << 2)
  ------------------
  |  Branch (1543:5): [True: 134, False: 3.05k]
  ------------------
 1544|    134|        return "csum";
 1545|    486|    case FLOW_TNL_F_KEY:
  ------------------
  |  |   63|    486|#define FLOW_TNL_F_KEY (1 << 3)
  ------------------
  |  Branch (1545:5): [True: 486, False: 2.70k]
  ------------------
 1546|    486|        return "key";
 1547|    859|    case FLOW_TNL_F_OAM:
  ------------------
  |  |   56|    859|#define FLOW_TNL_F_OAM (1 << 0)
  ------------------
  |  Branch (1547:5): [True: 859, False: 2.33k]
  ------------------
 1548|    859|        return "oam";
 1549|  1.57k|    default:
  ------------------
  |  Branch (1549:5): [True: 1.57k, False: 1.61k]
  ------------------
 1550|       |        return NULL;
 1551|  3.18k|    }
 1552|  3.18k|}
format_flags:
 1557|  16.6k|{
 1558|  16.6k|    uint32_t bad = 0;
 1559|       |
 1560|  16.6k|    if (!flags) {
  ------------------
  |  Branch (1560:9): [True: 1.97k, False: 14.6k]
  ------------------
 1561|  1.97k|        ds_put_char(ds, '0');
 1562|  1.97k|        return;
 1563|  1.97k|    }
 1564|  78.7k|    while (flags) {
  ------------------
  |  Branch (1564:12): [True: 64.1k, False: 14.6k]
  ------------------
 1565|  64.1k|        uint32_t bit = rightmost_1bit(flags);
 1566|  64.1k|        const char *s;
 1567|       |
 1568|  64.1k|        s = bit_to_string(bit);
 1569|  64.1k|        if (s) {
  ------------------
  |  Branch (1569:13): [True: 60.2k, False: 3.83k]
  ------------------
 1570|  60.2k|            ds_put_format(ds, "%s%c", s, del);
 1571|  60.2k|        } else {
 1572|  3.83k|            bad |= bit;
 1573|  3.83k|        }
 1574|       |
 1575|  64.1k|        flags &= ~bit;
 1576|  64.1k|    }
 1577|       |
 1578|  14.6k|    if (bad) {
  ------------------
  |  Branch (1578:9): [True: 1.93k, False: 12.7k]
  ------------------
 1579|  1.93k|        ds_put_format(ds, "0x%"PRIx32"%c", bad, del);
 1580|  1.93k|    }
 1581|  14.6k|    ds_chomp(ds, del);
 1582|  14.6k|}
format_flags_masked:
 1588|  18.6k|{
 1589|  18.6k|    if (name) {
  ------------------
  |  Branch (1589:9): [True: 13.8k, False: 4.83k]
  ------------------
 1590|  13.8k|        ds_put_format(ds, "%s%s=%s", colors.param, name, colors.end);
 1591|  13.8k|    }
 1592|       |
 1593|  18.6k|    if (mask == max_mask) {
  ------------------
  |  Branch (1593:9): [True: 16.3k, False: 2.30k]
  ------------------
 1594|  16.3k|        format_flags(ds, bit_to_string, flags, '|');
 1595|  16.3k|        return;
 1596|  16.3k|    }
 1597|       |
 1598|  2.30k|    if (!mask) {
  ------------------
  |  Branch (1598:9): [True: 66, False: 2.23k]
  ------------------
 1599|     66|        ds_put_cstr(ds, "0/0");
 1600|     66|        return;
 1601|     66|    }
 1602|       |
 1603|  56.5k|    while (mask) {
  ------------------
  |  Branch (1603:12): [True: 54.2k, False: 2.23k]
  ------------------
 1604|  54.2k|        uint32_t bit = rightmost_1bit(mask);
 1605|  54.2k|        const char *s = bit_to_string(bit);
 1606|       |
 1607|  54.2k|        ds_put_format(ds, "%s%s", (flags & bit) ? "+" : "-",
  ------------------
  |  Branch (1607:35): [True: 14.7k, False: 39.5k]
  ------------------
 1608|  54.2k|                      s ? s : "[Unknown]");
  ------------------
  |  Branch (1608:23): [True: 14.5k, False: 39.7k]
  ------------------
 1609|  54.2k|        mask &= ~bit;
 1610|  54.2k|    }
 1611|  2.23k|}
format_packet_type_masked:
 1633|  32.6k|{
 1634|  32.6k|    if (value == htonl(PT_ETH) && mask == OVS_BE32_MAX) {
  ------------------
  |  |   43|    355|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  |  Branch (1634:9): [True: 355, False: 32.2k]
  |  Branch (1634:35): [True: 355, False: 0]
  ------------------
 1635|    355|        ds_put_cstr(s, "eth");
 1636|  32.2k|    } else {
 1637|  32.2k|        ds_put_cstr(s, "packet_type=(");
 1638|  32.2k|        put_u16_masked(s, pt_ns(value), pt_ns(mask));
 1639|  32.2k|        ds_put_char(s, ',');
 1640|  32.2k|        put_u16_masked(s, pt_ns_type(value), pt_ns_type(mask));
 1641|  32.2k|        ds_put_char(s, ')');
 1642|  32.2k|    }
 1643|  32.6k|}
flow_format:
 1807|   100k|{
 1808|   100k|    struct match match;
 1809|   100k|    struct flow_wildcards *wc = &match.wc;
 1810|       |
 1811|   100k|    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|   100k|    if (!flow->in_port.ofp_port) {
  ------------------
  |  Branch (1820:9): [True: 100k, False: 0]
  ------------------
 1821|   100k|        WC_UNMASK_FIELD(wc, in_port);
  ------------------
  |  |  205|   100k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1822|   100k|    }
 1823|   100k|    if (!flow->skb_priority) {
  ------------------
  |  Branch (1823:9): [True: 100k, False: 0]
  ------------------
 1824|   100k|        WC_UNMASK_FIELD(wc, skb_priority);
  ------------------
  |  |  205|   100k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1825|   100k|    }
 1826|   100k|    if (!flow->pkt_mark) {
  ------------------
  |  Branch (1826:9): [True: 100k, False: 0]
  ------------------
 1827|   100k|        WC_UNMASK_FIELD(wc, pkt_mark);
  ------------------
  |  |  205|   100k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1828|   100k|    }
 1829|   100k|    if (!flow->recirc_id) {
  ------------------
  |  Branch (1829:9): [True: 100k, False: 0]
  ------------------
 1830|   100k|        WC_UNMASK_FIELD(wc, recirc_id);
  ------------------
  |  |  205|   100k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1831|   100k|    }
 1832|   100k|    if (!flow->dp_hash) {
  ------------------
  |  Branch (1832:9): [True: 100k, False: 0]
  ------------------
 1833|   100k|        WC_UNMASK_FIELD(wc, dp_hash);
  ------------------
  |  |  205|   100k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1834|   100k|    }
 1835|   100k|    if (!flow->ct_state) {
  ------------------
  |  Branch (1835:9): [True: 100k, False: 0]
  ------------------
 1836|   100k|        WC_UNMASK_FIELD(wc, ct_state);
  ------------------
  |  |  205|   100k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1837|   100k|    }
 1838|   100k|    if (!flow->ct_zone) {
  ------------------
  |  Branch (1838:9): [True: 100k, False: 0]
  ------------------
 1839|   100k|        WC_UNMASK_FIELD(wc, ct_zone);
  ------------------
  |  |  205|   100k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1840|   100k|    }
 1841|   100k|    if (!flow->ct_mark) {
  ------------------
  |  Branch (1841:9): [True: 100k, False: 0]
  ------------------
 1842|   100k|        WC_UNMASK_FIELD(wc, ct_mark);
  ------------------
  |  |  205|   100k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1843|   100k|    }
 1844|   100k|    if (ovs_u128_is_zero(flow->ct_label)) {
  ------------------
  |  Branch (1844:9): [True: 100k, False: 0]
  ------------------
 1845|   100k|        WC_UNMASK_FIELD(wc, ct_label);
  ------------------
  |  |  205|   100k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1846|   100k|    }
 1847|   100k|    if (!is_ct_valid(flow, &match.wc, NULL) || !flow->ct_nw_proto) {
  ------------------
  |  Branch (1847:9): [True: 100k, False: 0]
  |  Branch (1847:48): [True: 0, False: 0]
  ------------------
 1848|   100k|        WC_UNMASK_FIELD(wc, ct_nw_proto);
  ------------------
  |  |  205|   100k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1849|   100k|        WC_UNMASK_FIELD(wc, ct_tp_src);
  ------------------
  |  |  205|   100k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1850|   100k|        WC_UNMASK_FIELD(wc, ct_tp_dst);
  ------------------
  |  |  205|   100k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1851|   100k|        if (flow->dl_type == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (1851:13): [True: 3.61k, False: 96.6k]
  ------------------
 1852|  3.61k|            WC_UNMASK_FIELD(wc, ct_nw_src);
  ------------------
  |  |  205|  3.61k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1853|  3.61k|            WC_UNMASK_FIELD(wc, ct_nw_dst);
  ------------------
  |  |  205|  3.61k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1854|  96.6k|        } else if (flow->dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1854:20): [True: 25.8k, False: 70.7k]
  ------------------
 1855|  25.8k|            WC_UNMASK_FIELD(wc, ct_ipv6_src);
  ------------------
  |  |  205|  25.8k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1856|  25.8k|            WC_UNMASK_FIELD(wc, ct_ipv6_dst);
  ------------------
  |  |  205|  25.8k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1857|  25.8k|        }
 1858|   100k|    }
 1859|  3.30M|    for (int i = 0; i < FLOW_N_REGS; i++) {
  ------------------
  |  |   33|  3.30M|#define FLOW_N_REGS 32
  ------------------
  |  Branch (1859:21): [True: 3.20M, False: 100k]
  ------------------
 1860|  3.20M|        if (!flow->regs[i]) {
  ------------------
  |  Branch (1860:13): [True: 3.20M, False: 0]
  ------------------
 1861|  3.20M|            WC_UNMASK_FIELD(wc, regs[i]);
  ------------------
  |  |  205|  3.20M|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1862|  3.20M|        }
 1863|  3.20M|    }
 1864|   100k|    if (!flow->metadata) {
  ------------------
  |  Branch (1864:9): [True: 100k, False: 0]
  ------------------
 1865|   100k|        WC_UNMASK_FIELD(wc, metadata);
  ------------------
  |  |  205|   100k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1866|   100k|    }
 1867|       |
 1868|   100k|    match_format(&match, port_map, ds, OFP_DEFAULT_PRIORITY);
  ------------------
  |  |  138|   100k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
 1869|   100k|}
flow_wildcards_init_catchall:
 1885|   695k|{
 1886|   695k|    memset(&wc->masks, 0, sizeof wc->masks);
 1887|   695k|}
flow_wildcards_init_for_packet:
 1896|   100k|{
 1897|   100k|    ovs_be16 dl_type = OVS_BE16_MAX;
  ------------------
  |  |   42|   100k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
 1898|       |
 1899|   100k|    memset(&wc->masks, 0x0, sizeof wc->masks);
 1900|       |
 1901|       |    /* Update this function whenever struct flow changes. */
 1902|   100k|    BUILD_ASSERT_DECL(FLOW_WC_SEQ == 43);
  ------------------
  |  |  270|   100k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  ------------------
 1903|       |
 1904|   100k|    if (flow_tnl_dst_is_set(&flow->tunnel)) {
  ------------------
  |  Branch (1904:9): [True: 0, False: 100k]
  ------------------
 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|   100k|    } else if (flow->tunnel.tun_id) {
  ------------------
  |  Branch (1938:16): [True: 0, False: 100k]
  ------------------
 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|   100k|    WC_MASK_FIELD(wc, skb_priority);
  ------------------
  |  |  201|   100k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1945|   100k|    WC_MASK_FIELD(wc, pkt_mark);
  ------------------
  |  |  201|   100k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1946|   100k|    WC_MASK_FIELD(wc, ct_state);
  ------------------
  |  |  201|   100k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1947|   100k|    WC_MASK_FIELD(wc, ct_zone);
  ------------------
  |  |  201|   100k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1948|   100k|    WC_MASK_FIELD(wc, ct_mark);
  ------------------
  |  |  201|   100k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1949|   100k|    WC_MASK_FIELD(wc, ct_label);
  ------------------
  |  |  201|   100k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1950|   100k|    WC_MASK_FIELD(wc, recirc_id);
  ------------------
  |  |  201|   100k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1951|   100k|    WC_MASK_FIELD(wc, dp_hash);
  ------------------
  |  |  201|   100k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1952|   100k|    WC_MASK_FIELD(wc, in_port);
  ------------------
  |  |  201|   100k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1953|       |
 1954|       |    /* actset_output wildcarded. */
 1955|       |
 1956|   100k|    WC_MASK_FIELD(wc, packet_type);
  ------------------
  |  |  201|   100k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1957|   100k|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (1957:9): [True: 84.2k, False: 16.0k]
  ------------------
 1958|  84.2k|        WC_MASK_FIELD(wc, dl_dst);
  ------------------
  |  |  201|  84.2k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1959|  84.2k|        WC_MASK_FIELD(wc, dl_src);
  ------------------
  |  |  201|  84.2k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1960|  84.2k|        WC_MASK_FIELD(wc, dl_type);
  ------------------
  |  |  201|  84.2k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1961|       |        /* No need to set mask of inner VLANs that don't exist. */
 1962|  85.7k|        for (int i = 0; i < FLOW_MAX_VLAN_HEADERS; i++) {
  ------------------
  |  |   75|  85.7k|#define FLOW_MAX_VLAN_HEADERS 2
  ------------------
  |  Branch (1962:25): [True: 85.2k, False: 584]
  ------------------
 1963|       |            /* Always show the first zero VLAN. */
 1964|  85.2k|            WC_MASK_FIELD(wc, vlans[i]);
  ------------------
  |  |  201|  85.2k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1965|  85.2k|            if (flow->vlans[i].tci == htons(0)) {
  ------------------
  |  Branch (1965:17): [True: 83.6k, False: 1.57k]
  ------------------
 1966|  83.6k|                break;
 1967|  83.6k|            }
 1968|  85.2k|        }
 1969|  84.2k|        dl_type = flow->dl_type;
 1970|  84.2k|    } else {
 1971|  16.0k|        dl_type = pt_ns_type_be(flow->packet_type);
 1972|  16.0k|    }
 1973|       |
 1974|   100k|    if (dl_type == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (1974:9): [True: 3.61k, False: 96.6k]
  ------------------
 1975|  3.61k|        WC_MASK_FIELD(wc, nw_src);
  ------------------
  |  |  201|  3.61k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1976|  3.61k|        WC_MASK_FIELD(wc, nw_dst);
  ------------------
  |  |  201|  3.61k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1977|  3.61k|        WC_MASK_FIELD(wc, ct_nw_src);
  ------------------
  |  |  201|  3.61k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1978|  3.61k|        WC_MASK_FIELD(wc, ct_nw_dst);
  ------------------
  |  |  201|  3.61k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1979|  96.6k|    } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1979:16): [True: 25.8k, False: 70.7k]
  ------------------
 1980|  25.8k|        WC_MASK_FIELD(wc, ipv6_src);
  ------------------
  |  |  201|  25.8k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1981|  25.8k|        WC_MASK_FIELD(wc, ipv6_dst);
  ------------------
  |  |  201|  25.8k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1982|  25.8k|        WC_MASK_FIELD(wc, ipv6_label);
  ------------------
  |  |  201|  25.8k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1983|  25.8k|        if (is_nd(flow, wc)) {
  ------------------
  |  Branch (1983:13): [True: 580, False: 25.2k]
  ------------------
 1984|    580|            WC_MASK_FIELD(wc, arp_sha);
  ------------------
  |  |  201|    580|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1985|    580|            WC_MASK_FIELD(wc, arp_tha);
  ------------------
  |  |  201|    580|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1986|    580|            WC_MASK_FIELD(wc, nd_target);
  ------------------
  |  |  201|    580|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1987|  25.2k|        } else {
 1988|  25.2k|            WC_MASK_FIELD(wc, ct_ipv6_src);
  ------------------
  |  |  201|  25.2k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1989|  25.2k|            WC_MASK_FIELD(wc, ct_ipv6_dst);
  ------------------
  |  |  201|  25.2k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1990|  25.2k|        }
 1991|  70.7k|    } else if (dl_type == htons(ETH_TYPE_ARP) ||
  ------------------
  |  Branch (1991:16): [True: 496, False: 70.2k]
  ------------------
 1992|  70.2k|               dl_type == htons(ETH_TYPE_RARP)) {
  ------------------
  |  Branch (1992:16): [True: 767, False: 69.4k]
  ------------------
 1993|  1.26k|        WC_MASK_FIELD(wc, nw_src);
  ------------------
  |  |  201|  1.26k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1994|  1.26k|        WC_MASK_FIELD(wc, nw_dst);
  ------------------
  |  |  201|  1.26k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1995|  1.26k|        WC_MASK_FIELD(wc, nw_proto);
  ------------------
  |  |  201|  1.26k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1996|  1.26k|        WC_MASK_FIELD(wc, arp_sha);
  ------------------
  |  |  201|  1.26k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1997|  1.26k|        WC_MASK_FIELD(wc, arp_tha);
  ------------------
  |  |  201|  1.26k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1998|  1.26k|        return;
 1999|  69.4k|    } else if (eth_type_mpls(dl_type)) {
  ------------------
  |  Branch (1999:16): [True: 898, False: 68.5k]
  ------------------
 2000|  2.41k|        for (int i = 0; i < FLOW_MAX_MPLS_LABELS; i++) {
  ------------------
  |  |   66|  2.41k|#define FLOW_MAX_MPLS_LABELS 3
  ------------------
  |  Branch (2000:25): [True: 2.05k, False: 364]
  ------------------
 2001|  2.05k|            WC_MASK_FIELD(wc, mpls_lse[i]);
  ------------------
  |  |  201|  2.05k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2002|  2.05k|            if (flow->mpls_lse[i] & htonl(MPLS_BOS_MASK)) {
  ------------------
  |  Branch (2002:17): [True: 534, False: 1.51k]
  ------------------
 2003|    534|                break;
 2004|    534|            }
 2005|  2.05k|        }
 2006|    898|        return;
 2007|  68.5k|    } else if (flow->dl_type == htons(ETH_TYPE_NSH)) {
  ------------------
  |  Branch (2007:16): [True: 13.4k, False: 55.1k]
  ------------------
 2008|  13.4k|        WC_MASK_FIELD(wc, nsh.flags);
  ------------------
  |  |  201|  13.4k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2009|  13.4k|        WC_MASK_FIELD(wc, nsh.ttl);
  ------------------
  |  |  201|  13.4k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2010|  13.4k|        WC_MASK_FIELD(wc, nsh.mdtype);
  ------------------
  |  |  201|  13.4k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2011|  13.4k|        WC_MASK_FIELD(wc, nsh.np);
  ------------------
  |  |  201|  13.4k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2012|  13.4k|        WC_MASK_FIELD(wc, nsh.path_hdr);
  ------------------
  |  |  201|  13.4k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2013|  13.4k|        WC_MASK_FIELD(wc, nsh.context);
  ------------------
  |  |  201|  13.4k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2014|  55.1k|    } else {
 2015|  55.1k|        return; /* Unknown ethertype. */
 2016|  55.1k|    }
 2017|       |
 2018|       |    /* IPv4 or IPv6. */
 2019|  42.9k|    WC_MASK_FIELD_MASK(wc, nw_frag, FLOW_NW_FRAG_MASK);
  ------------------
  |  |  203|  42.9k|    ((WC)->masks.FIELD |= (MASK))
  ------------------
 2020|  42.9k|    WC_MASK_FIELD(wc, nw_tos);
  ------------------
  |  |  201|  42.9k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2021|  42.9k|    WC_MASK_FIELD(wc, nw_ttl);
  ------------------
  |  |  201|  42.9k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2022|  42.9k|    WC_MASK_FIELD(wc, nw_proto);
  ------------------
  |  |  201|  42.9k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2023|  42.9k|    WC_MASK_FIELD(wc, ct_nw_proto);
  ------------------
  |  |  201|  42.9k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2024|  42.9k|    WC_MASK_FIELD(wc, ct_tp_src);
  ------------------
  |  |  201|  42.9k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2025|  42.9k|    WC_MASK_FIELD(wc, ct_tp_dst);
  ------------------
  |  |  201|  42.9k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2026|       |
 2027|       |    /* No transport layer header in later fragments. */
 2028|  42.9k|    if (!(flow->nw_frag & FLOW_NW_FRAG_LATER) &&
  ------------------
  |  |   55|  42.9k|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  |  Branch (2028:9): [True: 42.7k, False: 168]
  ------------------
 2029|  42.7k|        (flow->nw_proto == IPPROTO_ICMP ||
  ------------------
  |  Branch (2029:10): [True: 4.46k, False: 38.2k]
  ------------------
 2030|  38.2k|         flow->nw_proto == IPPROTO_ICMPV6 ||
  ------------------
  |  Branch (2030:10): [True: 1.09k, False: 37.2k]
  ------------------
 2031|  37.2k|         flow->nw_proto == IPPROTO_TCP ||
  ------------------
  |  Branch (2031:10): [True: 13.2k, False: 23.9k]
  ------------------
 2032|  23.9k|         flow->nw_proto == IPPROTO_UDP ||
  ------------------
  |  Branch (2032:10): [True: 1.17k, False: 22.7k]
  ------------------
 2033|  22.7k|         flow->nw_proto == IPPROTO_SCTP ||
  ------------------
  |  Branch (2033:10): [True: 1.11k, False: 21.6k]
  ------------------
 2034|  24.3k|         flow->nw_proto == IPPROTO_IGMP)) {
  ------------------
  |  Branch (2034:10): [True: 3.18k, False: 18.4k]
  ------------------
 2035|  24.3k|        WC_MASK_FIELD(wc, tp_src);
  ------------------
  |  |  201|  24.3k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2036|  24.3k|        WC_MASK_FIELD(wc, tp_dst);
  ------------------
  |  |  201|  24.3k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2037|       |
 2038|  24.3k|        if (flow->nw_proto == IPPROTO_TCP) {
  ------------------
  |  Branch (2038:13): [True: 13.2k, False: 11.0k]
  ------------------
 2039|  13.2k|            WC_MASK_FIELD(wc, tcp_flags);
  ------------------
  |  |  201|  13.2k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2040|  13.2k|        } else if (flow->nw_proto == IPPROTO_IGMP) {
  ------------------
  |  Branch (2040:20): [True: 3.18k, False: 7.85k]
  ------------------
 2041|  3.18k|            WC_MASK_FIELD(wc, igmp_group_ip4);
  ------------------
  |  |  201|  3.18k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2042|  3.18k|        }
 2043|  24.3k|    }
 2044|  42.9k|}
flow_wildcards_equal:
 2230|  84.7k|{
 2231|  84.7k|    return flow_equal(&a->masks, &b->masks);
 2232|  84.7k|}
flow_wildcards_set_reg_mask:
 2275|  24.2k|{
 2276|  24.2k|    wc->masks.regs[idx] = mask;
 2277|  24.2k|}
flow_wildcards_set_xreg_mask:
 2283|  9.46k|{
 2284|  9.46k|    flow_set_xreg(&wc->masks, idx, mask);
 2285|  9.46k|}
flow_wildcards_set_xxreg_mask:
 2292|  7.61k|{
 2293|  7.61k|    flow_set_xxreg(&wc->masks, idx, mask);
 2294|  7.61k|}
flow_hash_fields_to_str:
 2723|  4.25k|{
 2724|  4.25k|    switch (fields) {
 2725|  1.02k|    case NX_HASH_FIELDS_ETH_SRC: return "eth_src";
  ------------------
  |  Branch (2725:5): [True: 1.02k, False: 3.23k]
  ------------------
 2726|    744|    case NX_HASH_FIELDS_SYMMETRIC_L4: return "symmetric_l4";
  ------------------
  |  Branch (2726:5): [True: 744, False: 3.51k]
  ------------------
 2727|    540|    case NX_HASH_FIELDS_SYMMETRIC_L3L4: return "symmetric_l3l4";
  ------------------
  |  Branch (2727:5): [True: 540, False: 3.71k]
  ------------------
 2728|    614|    case NX_HASH_FIELDS_SYMMETRIC_L3L4_UDP: return "symmetric_l3l4+udp";
  ------------------
  |  Branch (2728:5): [True: 614, False: 3.64k]
  ------------------
 2729|     81|    case NX_HASH_FIELDS_NW_SRC: return "nw_src";
  ------------------
  |  Branch (2729:5): [True: 81, False: 4.17k]
  ------------------
 2730|    457|    case NX_HASH_FIELDS_NW_DST: return "nw_dst";
  ------------------
  |  Branch (2730:5): [True: 457, False: 3.79k]
  ------------------
 2731|    314|    case NX_HASH_FIELDS_SYMMETRIC_L3: return "symmetric_l3";
  ------------------
  |  Branch (2731:5): [True: 314, False: 3.94k]
  ------------------
 2732|    484|    default: return "<unknown>";
  ------------------
  |  Branch (2732:5): [True: 484, False: 3.77k]
  ------------------
 2733|  4.25k|    }
 2734|  4.25k|}
flow_hash_fields_valid:
 2739|  9.61k|{
 2740|  9.61k|    return fields == NX_HASH_FIELDS_ETH_SRC
  ------------------
  |  Branch (2740:12): [True: 1.45k, False: 8.16k]
  ------------------
 2741|  8.16k|        || fields == NX_HASH_FIELDS_SYMMETRIC_L4
  ------------------
  |  Branch (2741:12): [True: 1.18k, False: 6.97k]
  ------------------
 2742|  6.97k|        || fields == NX_HASH_FIELDS_SYMMETRIC_L3L4
  ------------------
  |  Branch (2742:12): [True: 1.63k, False: 5.33k]
  ------------------
 2743|  5.33k|        || fields == NX_HASH_FIELDS_SYMMETRIC_L3L4_UDP
  ------------------
  |  Branch (2743:12): [True: 656, False: 4.68k]
  ------------------
 2744|  4.68k|        || fields == NX_HASH_FIELDS_NW_SRC
  ------------------
  |  Branch (2744:12): [True: 100, False: 4.58k]
  ------------------
 2745|  4.58k|        || fields == NX_HASH_FIELDS_NW_DST
  ------------------
  |  Branch (2745:12): [True: 854, False: 3.72k]
  ------------------
 2746|  3.72k|        || fields == NX_HASH_FIELDS_SYMMETRIC_L3;
  ------------------
  |  Branch (2746:12): [True: 318, False: 3.41k]
  ------------------
 2747|  9.61k|}
flow_set_vlan_vid:
 2805|    414|{
 2806|       |    ovs_be16 mask = htons(VLAN_VID_MASK | VLAN_CFI);
 2807|    414|    flow->vlans[0].tci &= ~mask;
 2808|    414|    flow->vlans[0].tci |= vid & mask;
 2809|    414|}
flow_set_vlan_pcp:
 2820|    379|{
 2821|    379|    pcp &= 0x07;
 2822|    379|    flow->vlans[id].tci &= ~htons(VLAN_PCP_MASK);
 2823|       |    flow->vlans[id].tci |= htons((pcp << VLAN_PCP_SHIFT) | VLAN_CFI);
 2824|    379|}
flow_count_vlan_headers:
 2829|  8.82k|{
 2830|  8.82k|    int i;
 2831|       |
 2832|  13.9k|    for (i = 0; i < FLOW_MAX_VLAN_HEADERS; i++) {
  ------------------
  |  |   75|  13.9k|#define FLOW_MAX_VLAN_HEADERS 2
  ------------------
  |  Branch (2832:17): [True: 13.3k, False: 555]
  ------------------
 2833|  13.3k|        if (!(flow->vlans[i].tci & htons(VLAN_CFI))) {
  ------------------
  |  Branch (2833:13): [True: 8.26k, False: 5.12k]
  ------------------
 2834|  8.26k|            break;
 2835|  8.26k|        }
 2836|  13.3k|    }
 2837|  8.82k|    return i;
 2838|  8.82k|}
flow_pop_vlan:
 2860|  8.82k|{
 2861|  8.82k|    int n = flow_count_vlan_headers(flow);
 2862|  8.82k|    if (n > 1) {
  ------------------
  |  Branch (2862:9): [True: 555, False: 8.26k]
  ------------------
 2863|    555|        if (wc) {
  ------------------
  |  Branch (2863:13): [True: 0, False: 555]
  ------------------
 2864|      0|            memset(&wc->masks.vlans[1], 0xff,
 2865|      0|                   sizeof(union flow_vlan_hdr) * (n - 1));
 2866|      0|        }
 2867|    555|        memmove(&flow->vlans[0], &flow->vlans[1],
 2868|    555|                sizeof(union flow_vlan_hdr) * (n - 1));
 2869|    555|    }
 2870|  8.82k|    if (n > 0) {
  ------------------
  |  Branch (2870:9): [True: 4.57k, False: 4.24k]
  ------------------
 2871|  4.57k|        memset(&flow->vlans[n - 1], 0, sizeof(union flow_vlan_hdr));
 2872|  4.57k|    }
 2873|  8.82k|}
flow_push_vlan_uninit:
 2877|  2.37k|{
 2878|  2.37k|    if (wc) {
  ------------------
  |  Branch (2878:9): [True: 0, False: 2.37k]
  ------------------
 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|  2.37k|    memmove(&flow->vlans[1], &flow->vlans[0],
 2885|  2.37k|            sizeof(union flow_vlan_hdr) * (FLOW_MAX_VLAN_HEADERS - 1));
  ------------------
  |  |   75|  2.37k|#define FLOW_MAX_VLAN_HEADERS 2
  ------------------
 2886|  2.37k|    memset(&flow->vlans[0], 0, sizeof(union flow_vlan_hdr));
 2887|  2.37k|}
flow_set_mpls_label:
 3076|  2.84k|{
 3077|  2.84k|    set_mpls_lse_label(&flow->mpls_lse[idx], label);
 3078|  2.84k|}
flow_set_mpls_ttl:
 3084|    891|{
 3085|    891|    set_mpls_lse_ttl(&flow->mpls_lse[idx], ttl);
 3086|    891|}
flow_set_mpls_tc:
 3092|  1.72k|{
 3093|  1.72k|    set_mpls_lse_tc(&flow->mpls_lse[idx], tc);
 3094|  1.72k|}
flow_set_mpls_bos:
 3099|    293|{
 3100|    293|    set_mpls_lse_bos(&flow->mpls_lse[idx], bos);
 3101|    293|}
miniflow_init:
 3474|   116k|{
 3475|   116k|    uint64_t *dst_u64 = miniflow_values(dst);
 3476|   116k|    size_t idx;
 3477|       |
 3478|   380k|    FLOWMAP_FOR_EACH_INDEX(idx, dst->map) {
  ------------------
  |  |  337|   116k|    for (struct flowmap_aux aux__ = FLOWMAP_AUX_INITIALIZER(MAP);   \
  |  |  ------------------
  |  |  |  |  331|   116k|#define FLOWMAP_AUX_INITIALIZER(FLOWMAP) { .unit = 0, .map = (FLOWMAP) }
  |  |  ------------------
  |  |  338|   496k|         flowmap_next_index(&aux__, &(IDX));)
  |  |  ------------------
  |  |  |  Branch (338:10): [True: 380k, False: 116k]
  |  |  ------------------
  ------------------
 3479|   380k|        *dst_u64++ = flow_u64_value(src, idx);
 3480|   380k|    }
 3481|   116k|}
miniflow_map_init:
 3486|  58.0k|{
 3487|       |    /* Initialize map, counting the number of nonzero elements. */
 3488|  58.0k|    flowmap_init(&flow->map);
 3489|  5.40M|    for (size_t i = 0; i < FLOW_U64S; i++) {
  ------------------
  |  |  165|  5.40M|#define FLOW_U64S (sizeof(struct flow) / sizeof(uint64_t))
  ------------------
  |  Branch (3489:24): [True: 5.34M, False: 58.0k]
  ------------------
 3490|  5.34M|        if (flow_u64_value(src, i)) {
  ------------------
  |  Branch (3490:13): [True: 190k, False: 5.15M]
  ------------------
 3491|   190k|            flowmap_set(&flow->map, i, 1);
 3492|   190k|        }
 3493|  5.34M|    }
 3494|  58.0k|}
miniflow_alloc:
 3501|  58.0k|{
 3502|  58.0k|    size_t n_values = miniflow_n_values(src);
 3503|  58.0k|    size_t data_size = MINIFLOW_VALUES_SIZE(n_values);
  ------------------
  |  |  527|  58.0k|#define MINIFLOW_VALUES_SIZE(COUNT) ((COUNT) * sizeof(uint64_t))
  ------------------
 3504|  58.0k|    struct miniflow *dst = xmalloc(n * (sizeof *src + data_size));
 3505|  58.0k|    size_t i;
 3506|       |
 3507|  58.0k|    COVERAGE_INC(miniflow_malloc);
  ------------------
  |  |   83|  58.0k|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  58.0k|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
 3508|       |
 3509|   174k|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (3509:17): [True: 116k, False: 58.0k]
  ------------------
 3510|   116k|        *dst = *src;   /* Copy maps. */
 3511|   116k|        dsts[i] = dst;
 3512|   116k|        dst += 1;      /* Just past the maps. */
 3513|   116k|        dst = (struct miniflow *)((uint64_t *)dst + n_values); /* Skip data. */
 3514|   116k|    }
 3515|  58.0k|    return data_size;
 3516|  58.0k|}
miniflow_expand:
 3547|   216k|{
 3548|   216k|    memset(dst, 0, sizeof *dst);
 3549|   216k|    flow_union_with_miniflow(dst, src);
 3550|   216k|}
minimask_init:
 3616|  58.0k|{
 3617|  58.0k|    miniflow_init(&mask->masks, &wc->masks);
 3618|  58.0k|}
minimask_expand:
 3660|  58.0k|{
 3661|  58.0k|    miniflow_expand(&mask->masks, &wc->masks);
 3662|  58.0k|}
flow.c:parse_ipv6_ext_hdrs__:
  491|  24.4k|{
  492|  24.4k|    if (frag_hdr) {
  ------------------
  |  Branch (492:9): [True: 0, False: 24.4k]
  ------------------
  493|      0|        *frag_hdr = NULL;
  494|      0|    }
  495|       |
  496|  24.4k|    if (rt_hdr) {
  ------------------
  |  Branch (496:9): [True: 0, False: 24.4k]
  ------------------
  497|      0|        *rt_hdr = NULL;
  498|      0|    }
  499|       |
  500|  41.0k|    while (1) {
  ------------------
  |  Branch (500:12): [True: 41.0k, Folded]
  ------------------
  501|  41.0k|        if (OVS_LIKELY((*nw_proto != IPPROTO_HOPOPTS)
  ------------------
  |  |   65|   253k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 21.7k, False: 19.3k]
  |  |  |  Branch (65:51): [True: 22.4k, False: 18.6k]
  |  |  |  Branch (65:51): [True: 22.1k, False: 287]
  |  |  |  Branch (65:51): [True: 22.0k, False: 118]
  |  |  |  Branch (65:51): [True: 21.9k, False: 86]
  |  |  |  Branch (65:51): [True: 21.7k, False: 209]
  |  |  ------------------
  ------------------
  502|  41.0k|                       && (*nw_proto != IPPROTO_ROUTING)
  503|  41.0k|                       && (*nw_proto != IPPROTO_DSTOPTS)
  504|  41.0k|                       && (*nw_proto != IPPROTO_AH)
  505|  41.0k|                       && (*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|  21.7k|            return true;
  510|  21.7k|        }
  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|  19.3k|        if (OVS_UNLIKELY(*sizep < 8)) {
  ------------------
  |  |   66|  19.3k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 263, False: 19.0k]
  |  |  ------------------
  ------------------
  518|    263|            return false;
  519|    263|        }
  520|       |
  521|  19.0k|        if ((*nw_proto == IPPROTO_HOPOPTS)
  ------------------
  |  Branch (521:13): [True: 18.3k, False: 671]
  ------------------
  522|  18.4k|            || (*nw_proto == IPPROTO_DSTOPTS)) {
  ------------------
  |  Branch (522:16): [True: 114, False: 557]
  ------------------
  523|       |            /* These headers, while different, have the fields we care
  524|       |             * about in the same location and with the same
  525|       |             * interpretation. */
  526|  18.4k|            const struct ip6_ext *ext_hdr = *datap;
  527|  18.4k|            *nw_proto = ext_hdr->ip6e_nxt;
  528|  18.4k|            if (OVS_UNLIKELY(!data_try_pull(datap, sizep,
  ------------------
  |  |   66|  18.4k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 2.28k, False: 16.2k]
  |  |  ------------------
  ------------------
  529|  18.4k|                                            (ext_hdr->ip6e_len + 1) * 8))) {
  530|  2.28k|                return false;
  531|  2.28k|            }
  532|  18.4k|        } else if (*nw_proto == IPPROTO_ROUTING) {
  ------------------
  |  Branch (532:20): [True: 283, False: 274]
  ------------------
  533|    283|            const struct ip6_rt_hdr *tmp;
  534|    283|            if (!rt_hdr) {
  ------------------
  |  Branch (534:17): [True: 118, False: 165]
  ------------------
  535|    118|                rt_hdr = &tmp;
  536|    118|            }
  537|       |
  538|    283|            *rt_hdr = *datap;
  539|    283|            *nw_proto = (*rt_hdr)->nexthdr;
  540|    283|            if (OVS_UNLIKELY(!data_try_pull(datap, sizep,
  ------------------
  |  |   66|    283|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 58, False: 225]
  |  |  ------------------
  ------------------
  541|    283|                                            ((*rt_hdr)->hdrlen + 1) * 8))) {
  542|     58|                return false;
  543|     58|            }
  544|    283|        } else if (*nw_proto == IPPROTO_AH) {
  ------------------
  |  Branch (544:20): [True: 65, False: 209]
  ------------------
  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|     65|            const struct ip6_ext *ext_hdr = *datap;
  550|     65|            *nw_proto = ext_hdr->ip6e_nxt;
  551|     65|            if (OVS_UNLIKELY(!data_try_pull(datap, sizep,
  ------------------
  |  |   66|     65|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 35, False: 30]
  |  |  ------------------
  ------------------
  552|     65|                                            (ext_hdr->ip6e_len + 2) * 4))) {
  553|     35|                return false;
  554|     35|            }
  555|    209|        } else if (*nw_proto == IPPROTO_FRAGMENT) {
  ------------------
  |  Branch (555:20): [True: 209, False: 0]
  ------------------
  556|    209|            const struct ovs_16aligned_ip6_frag *tmp;
  557|    209|            if (!frag_hdr) {
  ------------------
  |  Branch (557:17): [True: 74, False: 135]
  ------------------
  558|     74|                frag_hdr = &tmp;
  559|     74|            }
  560|       |
  561|    209|            *frag_hdr = *datap;
  562|       |
  563|    209|            *nw_proto = (*frag_hdr)->ip6f_nxt;
  564|    209|            if (!data_try_pull(datap, sizep, sizeof **frag_hdr)) {
  ------------------
  |  Branch (564:17): [True: 0, False: 209]
  ------------------
  565|      0|                return false;
  566|      0|            }
  567|       |
  568|       |            /* We only process the first fragment. */
  569|    209|            if ((*frag_hdr)->ip6f_offlg != htons(0)) {
  ------------------
  |  Branch (569:17): [True: 164, False: 45]
  ------------------
  570|    164|                *nw_frag = FLOW_NW_FRAG_ANY;
  ------------------
  |  |   54|    164|#define FLOW_NW_FRAG_ANY   (1 << 0) /* Set for any IP frag. */
  ------------------
  571|    164|                if (((*frag_hdr)->ip6f_offlg & IP6F_OFF_MASK) != htons(0)) {
  ------------------
  |  Branch (571:21): [True: 43, False: 121]
  ------------------
  572|     43|                    *nw_frag |= FLOW_NW_FRAG_LATER;
  ------------------
  |  |   55|     43|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  573|     43|                    *nw_proto = IPPROTO_FRAGMENT;
  574|       |                    return true;
  575|     43|                }
  576|    164|            }
  577|    209|        }
  578|  19.0k|    }
  579|  24.4k|}
flow.c:data_pull:
  110|   138k|{
  111|   138k|    const char *data = *datap;
  112|   138k|    *datap = data + size;
  113|   138k|    *sizep -= size;
  114|   138k|    return data;
  115|   138k|}
flow.c:parse_vlan:
  350|  40.3k|{
  351|  40.3k|    const ovs_be16 *eth_type;
  352|       |
  353|  40.3k|    data_pull(datap, sizep, ETH_ADDR_LEN * 2);
  ------------------
  |  |  205|  40.3k|#define ETH_ADDR_LEN           6
  ------------------
  354|       |
  355|  40.3k|    eth_type = *datap;
  356|       |
  357|  40.3k|    size_t n;
  358|  41.9k|    for (n = 0; eth_type_vlan(*eth_type) && n < flow_vlan_limit; n++) {
  ------------------
  |  Branch (358:17): [True: 2.18k, False: 39.7k]
  |  Branch (358:45): [True: 1.63k, False: 546]
  ------------------
  359|  1.63k|        if (OVS_UNLIKELY(*sizep < sizeof(ovs_be32) + sizeof(ovs_be16))) {
  ------------------
  |  |   66|  1.63k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 66, False: 1.57k]
  |  |  ------------------
  ------------------
  360|     66|            break;
  361|     66|        }
  362|       |
  363|  1.57k|        memset(vlan_hdrs + n, 0, sizeof(union flow_vlan_hdr));
  364|  1.57k|        const ovs_16aligned_be32 *qp = data_pull(datap, sizep, sizeof *qp);
  365|  1.57k|        vlan_hdrs[n].qtag = get_16aligned_be32(qp);
  366|       |        vlan_hdrs[n].tci |= htons(VLAN_CFI);
  367|  1.57k|        eth_type = *datap;
  368|  1.57k|    }
  369|  40.3k|    return n;
  370|  40.3k|}
flow.c:parse_ethertype:
  374|  40.3k|{
  375|  40.3k|    const struct llc_snap_header *llc;
  376|  40.3k|    ovs_be16 proto;
  377|       |
  378|  40.3k|    proto = *(ovs_be16 *) data_pull(datap, sizep, sizeof proto);
  379|  40.3k|    if (OVS_LIKELY(ntohs(proto) >= ETH_TYPE_MIN)) {
  ------------------
  |  |   65|  40.3k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 37.6k, False: 2.74k]
  |  |  ------------------
  ------------------
  380|  37.6k|        return proto;
  381|  37.6k|    }
  382|       |
  383|  2.74k|    if (OVS_UNLIKELY(*sizep < sizeof *llc)) {
  ------------------
  |  |   66|  2.74k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 708, False: 2.04k]
  |  |  ------------------
  ------------------
  384|    708|        return htons(FLOW_DL_TYPE_NONE);
  385|    708|    }
  386|       |
  387|  2.04k|    llc = *datap;
  388|  2.04k|    if (OVS_UNLIKELY(llc->llc.llc_dsap != LLC_DSAP_SNAP
  ------------------
  |  |   66|  6.56k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 1.97k, False: 65]
  |  |  |  Branch (66:53): [True: 1.82k, False: 217]
  |  |  |  Branch (66:53): [True: 70, False: 147]
  |  |  |  Branch (66:53): [True: 66, False: 81]
  |  |  |  Branch (66:53): [True: 16, False: 65]
  |  |  ------------------
  ------------------
  389|  2.04k|                     || llc->llc.llc_ssap != LLC_SSAP_SNAP
  390|  2.04k|                     || llc->llc.llc_cntl != LLC_CNTL_SNAP
  391|  2.04k|                     || memcmp(llc->snap.snap_org, SNAP_ORG_ETHERNET,
  392|  2.04k|                               sizeof llc->snap.snap_org))) {
  393|  1.97k|        return htons(FLOW_DL_TYPE_NONE);
  394|  1.97k|    }
  395|       |
  396|     65|    data_pull(datap, sizep, sizeof *llc);
  397|       |
  398|     65|    if (OVS_LIKELY(ntohs(llc->snap.snap_type) >= ETH_TYPE_MIN)) {
  ------------------
  |  |   65|     65|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 47, False: 18]
  |  |  ------------------
  ------------------
  399|     47|        return llc->snap.snap_type;
  400|     47|    }
  401|       |
  402|     18|    return htons(FLOW_DL_TYPE_NONE);
  403|     65|}
flow.c:parse_mpls:
  334|    898|{
  335|    898|    const struct mpls_hdr *mh;
  336|    898|    int count = 0;
  337|       |
  338|  1.91k|    while ((mh = data_try_pull(datap, sizep, sizeof *mh))) {
  ------------------
  |  Branch (338:12): [True: 1.54k, False: 363]
  ------------------
  339|  1.54k|        count++;
  340|  1.54k|        if (mh->mpls_lse.lo & htons(1 << MPLS_BOS_SHIFT)) {
  ------------------
  |  Branch (340:13): [True: 535, False: 1.01k]
  ------------------
  341|    535|            break;
  342|    535|        }
  343|  1.54k|    }
  344|    898|    return MIN(count, FLOW_MAX_MPLS_LABELS);
  ------------------
  |  |   91|    898|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (91:20): [True: 826, False: 72]
  |  |  ------------------
  ------------------
  345|    898|}
flow.c:ipv4_sanity_check:
  685|  3.61k|{
  686|  3.61k|    int ip_len;
  687|  3.61k|    uint16_t tot_len;
  688|       |
  689|  3.61k|    if (OVS_UNLIKELY(size < IP_HEADER_LEN)) {
  ------------------
  |  |   66|  3.61k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 71, False: 3.54k]
  |  |  ------------------
  ------------------
  690|     71|        COVERAGE_INC(miniflow_extract_ipv4_pkt_too_short);
  ------------------
  |  |   83|     71|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|     71|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  691|     71|        return false;
  692|     71|    }
  693|  3.54k|    ip_len = IP_IHL(nh->ip_ihl_ver) * 4;
  ------------------
  |  |  694|  3.54k|#define IP_IHL(ip_ihl_ver) ((ip_ihl_ver) & 15)
  ------------------
  694|       |
  695|  3.54k|    if (OVS_UNLIKELY(ip_len < IP_HEADER_LEN || size < ip_len)) {
  ------------------
  |  |   66|  7.01k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 106, False: 3.44k]
  |  |  |  Branch (66:53): [True: 77, False: 3.46k]
  |  |  |  Branch (66:53): [True: 29, False: 3.44k]
  |  |  ------------------
  ------------------
  696|    106|        COVERAGE_INC(miniflow_extract_ipv4_pkt_len_error);
  ------------------
  |  |   83|    106|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|    106|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  697|    106|        return false;
  698|    106|    }
  699|       |
  700|  3.44k|    tot_len = ntohs(nh->ip_tot_len);
  701|  3.44k|    if (OVS_UNLIKELY(tot_len > size || ip_len > tot_len ||
  ------------------
  |  |   66|  13.1k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 361, False: 3.07k]
  |  |  |  Branch (66:53): [True: 276, False: 3.16k]
  |  |  |  Branch (66:53): [True: 85, False: 3.07k]
  |  |  |  Branch (66:53): [True: 0, False: 3.07k]
  |  |  ------------------
  ------------------
  702|  3.44k|                size - tot_len > UINT16_MAX)) {
  703|    361|        COVERAGE_INC(miniflow_extract_ipv4_pkt_len_error);
  ------------------
  |  |   83|    361|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|    361|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  704|    361|        return false;
  705|    361|    }
  706|       |
  707|  3.07k|    *ip_lenp = ip_len;
  708|  3.07k|    *tot_lenp = tot_len;
  709|       |
  710|       |    return true;
  711|  3.44k|}
flow.c:ipv4_get_nw_frag:
  715|  3.07k|{
  716|  3.07k|    uint8_t nw_frag = 0;
  717|       |
  718|  3.07k|    if (OVS_UNLIKELY(IP_IS_FRAGMENT(nh->ip_frag_off))) {
  ------------------
  |  |   66|  3.07k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 158, False: 2.92k]
  |  |  ------------------
  ------------------
  719|    158|        nw_frag = FLOW_NW_FRAG_ANY;
  ------------------
  |  |   54|    158|#define FLOW_NW_FRAG_ANY   (1 << 0) /* Set for any IP frag. */
  ------------------
  720|    158|        if (nh->ip_frag_off & htons(IP_FRAG_OFF_MASK)) {
  ------------------
  |  Branch (720:13): [True: 125, False: 33]
  ------------------
  721|    125|            nw_frag |= FLOW_NW_FRAG_LATER;
  ------------------
  |  |   55|    125|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  722|    125|        }
  723|    158|    }
  724|       |
  725|  3.07k|    return nw_frag;
  726|  3.07k|}
flow.c:ipv6_sanity_check:
  730|  25.8k|{
  731|  25.8k|    uint16_t plen;
  732|       |
  733|  25.8k|    if (OVS_UNLIKELY(size < sizeof *nh)) {
  ------------------
  |  |   66|  25.8k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 690, False: 25.1k]
  |  |  ------------------
  ------------------
  734|    690|        COVERAGE_INC(miniflow_extract_ipv6_pkt_too_short);
  ------------------
  |  |   83|    690|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|    690|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  735|    690|        return false;
  736|    690|    }
  737|       |
  738|  25.1k|    plen = ntohs(nh->ip6_plen);
  739|  25.1k|    if (OVS_UNLIKELY(plen + IPV6_HEADER_LEN > size)) {
  ------------------
  |  |   66|  25.1k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 726, False: 24.4k]
  |  |  ------------------
  ------------------
  740|    726|        COVERAGE_INC(miniflow_extract_ipv6_pkt_len_error);
  ------------------
  |  |   83|    726|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|    726|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  741|    726|        return false;
  742|    726|    }
  743|       |
  744|  24.4k|    if (OVS_UNLIKELY(size - (plen + IPV6_HEADER_LEN) > UINT16_MAX)) {
  ------------------
  |  |   66|  24.4k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 0, False: 24.4k]
  |  |  ------------------
  ------------------
  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|  24.4k|    return true;
  750|  24.4k|}
flow.c:data_try_pull:
  122|  23.6k|{
  123|  23.6k|    return OVS_LIKELY(*sizep >= size) ? data_pull(datap, sizep, size) : NULL;
  ------------------
  |  |   65|  23.6k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 20.1k, False: 3.52k]
  |  |  ------------------
  ------------------
  124|  23.6k|}
flow.c:parse_icmpv6:
  422|  1.00k|{
  423|  1.00k|    if (!icmp6_is_nd(icmp6)) {
  ------------------
  |  Branch (423:9): [True: 218, False: 790]
  ------------------
  424|    218|        return false;
  425|    218|    }
  426|       |
  427|    790|    arp_buf[0] = eth_addr_zero;
  428|    790|    arp_buf[1] = eth_addr_zero;
  429|    790|    *opt_type = 0;
  430|       |
  431|    790|    *rso_flags = get_16aligned_be32(icmp6->icmp6_data.be32);
  432|       |
  433|    790|    *nd_target = data_try_pull(datap, sizep, sizeof **nd_target);
  434|    790|    if (OVS_UNLIKELY(!*nd_target)) {
  ------------------
  |  |   66|    790|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 277, False: 513]
  |  |  ------------------
  ------------------
  435|    277|        return true;
  436|    277|    }
  437|       |
  438|  1.12k|    while (*sizep >= 8) {
  ------------------
  |  Branch (438:12): [True: 1.02k, False: 101]
  ------------------
  439|       |        /* The minimum size of an option is 8 bytes, which also is
  440|       |         * the size of Ethernet link-layer options. */
  441|  1.02k|        const struct ovs_nd_lla_opt *lla_opt = *datap;
  442|  1.02k|        int opt_len = lla_opt->len * ND_LLA_OPT_LEN;
  ------------------
  |  | 1044|  1.02k|#define ND_LLA_OPT_LEN 8
  ------------------
  443|       |
  444|  1.02k|        if (!opt_len || opt_len > *sizep) {
  ------------------
  |  Branch (444:13): [True: 127, False: 899]
  |  Branch (444:25): [True: 257, False: 642]
  ------------------
  445|    384|            return true;
  446|    384|        }
  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|    642|        if (lla_opt->type == ND_OPT_SOURCE_LINKADDR && opt_len == 8) {
  ------------------
  |  Branch (451:13): [True: 123, False: 519]
  |  Branch (451:56): [True: 102, False: 21]
  ------------------
  452|    102|            if (OVS_LIKELY(eth_addr_is_zero(arp_buf[0]))) {
  ------------------
  |  |   65|    102|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 92, False: 10]
  |  |  ------------------
  ------------------
  453|     92|                arp_buf[0] = lla_opt->mac;
  454|       |                /* We use only first option type present in ND packet. */
  455|     92|                if (*opt_type == 0) {
  ------------------
  |  Branch (455:21): [True: 26, False: 66]
  ------------------
  456|     26|                    *opt_type = lla_opt->type;
  457|     26|                }
  458|     92|            } else {
  459|     10|                goto invalid;
  460|     10|            }
  461|    540|        } else if (lla_opt->type == ND_OPT_TARGET_LINKADDR && opt_len == 8) {
  ------------------
  |  Branch (461:20): [True: 153, False: 387]
  |  Branch (461:63): [True: 137, False: 16]
  ------------------
  462|    137|            if (OVS_LIKELY(eth_addr_is_zero(arp_buf[1]))) {
  ------------------
  |  |   65|    137|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 119, False: 18]
  |  |  ------------------
  ------------------
  463|    119|                arp_buf[1] = lla_opt->mac;
  464|       |                /* We use only first option type present in ND packet. */
  465|    119|                if (*opt_type == 0) {
  ------------------
  |  Branch (465:21): [True: 109, False: 10]
  ------------------
  466|    109|                    *opt_type = lla_opt->type;
  467|    109|                }
  468|    119|            } else {
  469|     18|                goto invalid;
  470|     18|            }
  471|    137|        }
  472|       |
  473|    614|        if (OVS_UNLIKELY(!data_try_pull(datap, sizep, opt_len))) {
  ------------------
  |  |   66|    614|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 0, False: 614]
  |  |  ------------------
  ------------------
  474|      0|            return true;
  475|      0|        }
  476|    614|    }
  477|    101|    return true;
  478|       |
  479|     28|invalid:
  480|     28|    *nd_target = NULL;
  481|     28|    arp_buf[0] = eth_addr_zero;
  482|     28|    arp_buf[1] = eth_addr_zero;
  483|       |    return true;
  484|    513|}
flow.c:icmp6_is_nd:
  407|  1.00k|{
  408|  1.00k|    return (icmp6->icmp6_base.icmp6_code == 0 &&
  ------------------
  |  Branch (408:13): [True: 891, False: 117]
  ------------------
  409|    891|            (icmp6->icmp6_base.icmp6_type == ND_NEIGHBOR_SOLICIT ||
  ------------------
  |  Branch (409:14): [True: 556, False: 335]
  ------------------
  410|    335|             icmp6->icmp6_base.icmp6_type == ND_NEIGHBOR_ADVERT));
  ------------------
  |  Branch (410:14): [True: 234, False: 101]
  ------------------
  411|  1.00k|}
flow.c:put_u16_masked:
 1615|  64.5k|{
 1616|  64.5k|    if (!mask) {
  ------------------
  |  Branch (1616:9): [True: 0, False: 64.5k]
  ------------------
 1617|      0|        ds_put_char(s, '*');
 1618|  64.5k|    } else {
 1619|  64.5k|        if (value > 9) {
  ------------------
  |  Branch (1619:13): [True: 40.5k, False: 24.0k]
  ------------------
 1620|  40.5k|            ds_put_format(s, "0x%"PRIx16, value);
 1621|  40.5k|        } else {
 1622|  24.0k|            ds_put_format(s, "%"PRIu16, value);
 1623|  24.0k|        }
 1624|       |
 1625|  64.5k|        if (mask != UINT16_MAX) {
  ------------------
  |  Branch (1625:13): [True: 0, False: 64.5k]
  ------------------
 1626|       |            ds_put_format(s, "/0x%"PRIx16, mask);
 1627|      0|        }
 1628|  64.5k|    }
 1629|  64.5k|}

ofp-queue.c:ofp_to_u16:
  196|  32.4k|{
  197|  32.4k|    return (OVS_FORCE uint16_t) ofp_port;
  198|  32.4k|}
ofp-queue.c:u16_to_ofp:
  214|  23.5k|{
  215|  23.5k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|  23.5k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|  23.5k|}
flow.c:miniflow_values:
  530|   216k|{
  531|   216k|    return (uint64_t *)(mf + 1);
  532|   216k|}
flow.c:flowmap_set:
  385|   572k|{
  386|   572k|    map_t n_bits_mask = (MAP_1 << n_bits) - 1;
  ------------------
  |  |  271|   572k|#define MAP_1 (map_t)1
  ------------------
  387|   572k|    size_t unit = idx / MAP_T_BITS;
  ------------------
  |  |  270|   572k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  388|       |
  389|   572k|    idx %= MAP_T_BITS;
  ------------------
  |  |  270|   572k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  390|       |
  391|   572k|    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|   572k|    if (unit + 1 < FLOWMAP_UNITS && idx + n_bits > MAP_T_BITS) {
  ------------------
  |  |  280|   572k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  ------------------
  |  |  |  |  300|  1.14M|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
                  if (unit + 1 < FLOWMAP_UNITS && idx + n_bits > MAP_T_BITS) {
  ------------------
  |  |  270|   268k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  |  Branch (394:9): [True: 268k, False: 304k]
  |  Branch (394:37): [True: 0, False: 268k]
  ------------------
  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|   572k|}
flow.c:odp_to_u32:
  202|   100k|{
  203|   100k|    return (OVS_FORCE uint32_t) odp_port;
  204|   100k|}
flow.c:is_ct_valid:
  954|   100k|{
  955|       |    /* Matches are checked with 'mask' and without 'wc'. */
  956|   100k|    if (mask && !wc) {
  ------------------
  |  Branch (956:9): [True: 100k, False: 0]
  |  Branch (956:17): [True: 100k, False: 0]
  ------------------
  957|       |        /* Must match at least one of the bits that implies a valid
  958|       |         * conntrack entry, or an explicit not-invalid. */
  959|   100k|        return flow->ct_state & (CS_NEW | CS_ESTABLISHED | CS_RELATED
  ------------------
  |  Branch (959:16): [True: 0, False: 100k]
  ------------------
  960|   100k|                                 | CS_REPLY_DIR | CS_SRC_NAT | CS_DST_NAT)
  961|   100k|            || (flow->ct_state & CS_TRACKED
  ------------------
  |  Branch (961:17): [True: 0, False: 100k]
  ------------------
  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|   100k|    }
  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|   100k|}
flow.c:is_nd:
 1119|  25.8k|{
 1120|  25.8k|    if (is_icmpv6(flow, wc)) {
  ------------------
  |  Branch (1120:9): [True: 742, False: 25.1k]
  ------------------
 1121|    742|        if (wc) {
  ------------------
  |  Branch (1121:13): [True: 742, False: 0]
  ------------------
 1122|    742|            memset(&wc->masks.tp_dst, 0xff, sizeof wc->masks.tp_dst);
 1123|    742|        }
 1124|    742|        if (flow->tp_dst != htons(0)) {
  ------------------
  |  Branch (1124:13): [True: 107, False: 635]
  ------------------
 1125|    107|            return false;
 1126|    107|        }
 1127|       |
 1128|    635|        if (wc) {
  ------------------
  |  Branch (1128:13): [True: 635, False: 0]
  ------------------
 1129|    635|            memset(&wc->masks.tp_src, 0xff, sizeof wc->masks.tp_src);
 1130|    635|        }
 1131|    635|        return (flow->tp_src == htons(ND_NEIGHBOR_SOLICIT) ||
  ------------------
  |  Branch (1131:17): [True: 554, False: 81]
  ------------------
 1132|     81|                flow->tp_src == htons(ND_NEIGHBOR_ADVERT));
  ------------------
  |  Branch (1132:17): [True: 26, False: 55]
  ------------------
 1133|    742|    }
 1134|  25.1k|    return false;
 1135|  25.8k|}
flow.c:is_icmpv6:
 1107|  25.8k|{
 1108|  25.8k|    if (get_dl_type(flow) == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1108:9): [True: 25.2k, False: 663]
  ------------------
 1109|  25.2k|        if (wc) {
  ------------------
  |  Branch (1109:13): [True: 25.2k, False: 0]
  ------------------
 1110|  25.2k|            memset(&wc->masks.nw_proto, 0xff, sizeof wc->masks.nw_proto);
 1111|  25.2k|        }
 1112|  25.2k|        return flow->nw_proto == IPPROTO_ICMPV6;
 1113|  25.2k|    }
 1114|    663|    return false;
 1115|  25.8k|}
flow.c:get_dl_type:
 1036|  25.8k|{
 1037|  25.8k|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (1037:9): [True: 25.0k, False: 801]
  ------------------
 1038|  25.0k|        return flow->dl_type;
 1039|  25.0k|    } else if (pt_ns(flow->packet_type) == OFPHTN_ETHERTYPE) {
  ------------------
  |  Branch (1039:16): [True: 138, False: 663]
  ------------------
 1040|    138|        return pt_ns_type_be(flow->packet_type);
 1041|    663|    } else {
 1042|       |        return htons(FLOW_DL_TYPE_NONE);
 1043|    663|    }
 1044|  25.8k|}
flow.c:flowmap_init:
  343|  58.0k|{
  344|  58.0k|    memset(fm, 0, sizeof *fm);
  345|  58.0k|}
flow.c:flow_equal:
  184|  84.7k|{
  185|  84.7k|    return !flow_compare_3way(a, b);
  186|  84.7k|}
flow.c:flow_compare_3way:
  178|  84.7k|{
  179|  84.7k|    return memcmp(a, b, sizeof *a);
  180|  84.7k|}
flow.c:flow_set_xreg:
  149|  9.46k|{
  150|  9.46k|    flow->regs[idx * 2] = value >> 32;
  151|  9.46k|    flow->regs[idx * 2 + 1] = value;
  152|  9.46k|}
flow.c:flow_set_xxreg:
  169|  7.61k|{
  170|  7.61k|    flow->regs[idx * 4] = value.u64.hi >> 32;
  171|  7.61k|    flow->regs[idx * 4 + 1] = value.u64.hi;
  172|  7.61k|    flow->regs[idx * 4 + 2] = value.u64.lo >> 32;
  173|  7.61k|    flow->regs[idx * 4 + 3] = value.u64.lo;
  174|  7.61k|}
flow.c:miniflow_get_values:
  535|   216k|{
  536|   216k|    return (const uint64_t *)(mf + 1);
  537|   216k|}
flow.c:flowmap_next_index:
  479|   496k|{
  480|   612k|    for (;;) {
  481|   612k|        map_t *map = &aux->map.bits[aux->unit];
  482|   612k|        if (*map) {
  ------------------
  |  Branch (482:13): [True: 380k, False: 232k]
  ------------------
  483|   380k|            *idx = aux->unit * MAP_T_BITS + raw_ctz(*map);
  ------------------
  |  |  270|   380k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  484|   380k|            *map = zero_rightmost_1bit(*map);
  485|   380k|            return true;
  486|   380k|        }
  487|   232k|        if (++aux->unit >= FLOWMAP_UNITS) {
  ------------------
  |  |  280|   232k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  ------------------
  |  |  |  |  300|   232k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (487:13): [True: 116k, False: 116k]
  ------------------
  488|       |            return false;
  489|   116k|        }
  490|   232k|    }
  491|   496k|}
flow.c:flow_u64_value:
  557|  5.72M|{
  558|  5.72M|    return ((uint64_t *)flow)[index];
  559|  5.72M|}
flow.c:miniflow_n_values:
  568|  58.0k|{
  569|  58.0k|    return flowmap_n_1bits(flow->map);
  570|  58.0k|}
flow.c:flowmap_n_1bits:
  462|  58.0k|{
  463|  58.0k|    unsigned int n_1bits = 0;
  464|  58.0k|    size_t unit;
  465|       |
  466|   116k|    FLOWMAP_FOR_EACH_UNIT (unit) {
  ------------------
  |  |  320|   174k|    for ((UNIT) = 0; (UNIT) < FLOWMAP_UNITS; (UNIT)++)
  |  |  ------------------
  |  |  |  |  280|   174k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|   174k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (320:22): [True: 116k, False: 58.0k]
  |  |  ------------------
  ------------------
  467|   116k|        n_1bits += count_1bits(fm.bits[unit]);
  468|   116k|    }
  469|  58.0k|    return n_1bits;
  470|  58.0k|}
flow.c:flow_union_with_miniflow:
  938|   216k|{
  939|   216k|    flow_union_with_miniflow_subset(dst, src, src->map);
  940|   216k|}
flow.c:flow_union_with_miniflow_subset:
  919|   216k|{
  920|   216k|    uint64_t *dst_u64 = (uint64_t *) dst;
  921|   216k|    const uint64_t *p = miniflow_get_values(src);
  922|   216k|    map_t map;
  923|       |
  924|   432k|    FLOWMAP_FOR_EACH_MAP (map, subset) {
  ------------------
  |  |  324|   216k|    for (size_t unit__ = 0;                                       \
  |  |  325|   649k|         unit__ < FLOWMAP_UNITS && ((MAP) = (FLOWMAP).bits[unit__], true); \
  |  |  ------------------
  |  |  |  |  280|   649k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|  1.29M|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (325:10): [True: 432k, False: 216k]
  |  |  |  Branch (325:36): [True: 432k, False: 0]
  |  |  ------------------
  |  |  326|   432k|         unit__++)
  ------------------
  925|   432k|        size_t idx;
  926|       |
  927|   868k|        MAP_FOR_EACH_INDEX(idx, map) {
  ------------------
  |  |  278|   432k|    ULLONG_FOR_EACH_1(IDX, MAP)
  |  |  ------------------
  |  |  |  |  285|   432k|    for (uint64_t map__ = (MAP);                    \
  |  |  |  |  286|  1.30M|         map__ && (((IDX) = raw_ctz(map__)), true); \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (286:10): [True: 868k, False: 432k]
  |  |  |  |  |  Branch (286:19): [True: 868k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  287|   868k|         map__ = zero_rightmost_1bit(map__))
  |  |  ------------------
  ------------------
  928|   868k|            dst_u64[idx] |= *p++;
  929|   868k|        }
  930|       |        dst_u64 += MAP_T_BITS;
  ------------------
  |  |  270|   432k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  931|   432k|    }
  932|   216k|}
match.c:flow_set_xreg:
  149|  9.46k|{
  150|  9.46k|    flow->regs[idx * 2] = value >> 32;
  151|  9.46k|    flow->regs[idx * 2 + 1] = value;
  152|  9.46k|}
match.c:flow_set_xxreg:
  169|  7.61k|{
  170|  7.61k|    flow->regs[idx * 4] = value.u64.hi >> 32;
  171|  7.61k|    flow->regs[idx * 4 + 1] = value.u64.hi;
  172|  7.61k|    flow->regs[idx * 4 + 2] = value.u64.lo >> 32;
  173|  7.61k|    flow->regs[idx * 4 + 3] = value.u64.lo;
  174|  7.61k|}
match.c:u16_to_ofp:
  214|   191k|{
  215|   191k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|   191k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|   191k|}
match.c:is_ip_any:
 1059|   319k|{
 1060|   319k|    return dl_type_is_ip_any(get_dl_type(flow));
 1061|   319k|}
match.c:get_dl_type:
 1036|   319k|{
 1037|   319k|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (1037:9): [True: 287k, False: 32.0k]
  ------------------
 1038|   287k|        return flow->dl_type;
 1039|   287k|    } else if (pt_ns(flow->packet_type) == OFPHTN_ETHERTYPE) {
  ------------------
  |  Branch (1039:16): [True: 21.7k, False: 10.2k]
  ------------------
 1040|  21.7k|        return pt_ns_type_be(flow->packet_type);
 1041|  21.7k|    } else {
 1042|       |        return htons(FLOW_DL_TYPE_NONE);
 1043|  10.2k|    }
 1044|   319k|}
meta-flow.c:flow_get_xreg:
  143|  11.2k|{
  144|  11.2k|    return ((uint64_t) flow->regs[idx * 2] << 32) | flow->regs[idx * 2 + 1];
  145|  11.2k|}
meta-flow.c:flow_get_xxreg:
  156|  7.77k|{
  157|  7.77k|    ovs_u128 value;
  158|       |
  159|  7.77k|    value.u64.hi = (uint64_t) flow->regs[idx * 4] << 32;
  160|  7.77k|    value.u64.hi |= flow->regs[idx * 4 + 1];
  161|  7.77k|    value.u64.lo = (uint64_t) flow->regs[idx * 4 + 2] << 32;
  162|  7.77k|    value.u64.lo |= flow->regs[idx * 4 + 3];
  163|       |
  164|  7.77k|    return value;
  165|  7.77k|}
meta-flow.c:get_dl_type:
 1036|  97.5k|{
 1037|  97.5k|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (1037:9): [True: 77.7k, False: 19.8k]
  ------------------
 1038|  77.7k|        return flow->dl_type;
 1039|  77.7k|    } else if (pt_ns(flow->packet_type) == OFPHTN_ETHERTYPE) {
  ------------------
  |  Branch (1039:16): [True: 15.6k, False: 4.13k]
  ------------------
 1040|  15.6k|        return pt_ns_type_be(flow->packet_type);
 1041|  15.6k|    } else {
 1042|       |        return htons(FLOW_DL_TYPE_NONE);
 1043|  4.13k|    }
 1044|  97.5k|}
meta-flow.c:is_ethernet:
 1028|  1.55k|{
 1029|  1.55k|    if (wc) {
  ------------------
  |  Branch (1029:9): [True: 0, False: 1.55k]
  ------------------
 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.55k|}
meta-flow.c:is_vlan:
 1048|    923|{
 1049|    923|    if (!is_ethernet(flow, wc)) {
  ------------------
  |  Branch (1049:9): [True: 135, False: 788]
  ------------------
 1050|    135|        return false;
 1051|    135|    }
 1052|    788|    if (wc) {
  ------------------
  |  Branch (1052:9): [True: 0, False: 788]
  ------------------
 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|    923|}
meta-flow.c:is_ct_valid:
  954|  2.01k|{
  955|       |    /* Matches are checked with 'mask' and without 'wc'. */
  956|  2.01k|    if (mask && !wc) {
  ------------------
  |  Branch (956:9): [True: 2.01k, False: 0]
  |  Branch (956:17): [True: 2.01k, False: 0]
  ------------------
  957|       |        /* Must match at least one of the bits that implies a valid
  958|       |         * conntrack entry, or an explicit not-invalid. */
  959|  2.01k|        return flow->ct_state & (CS_NEW | CS_ESTABLISHED | CS_RELATED
  ------------------
  |  Branch (959:16): [True: 860, False: 1.15k]
  ------------------
  960|  2.01k|                                 | CS_REPLY_DIR | CS_SRC_NAT | CS_DST_NAT)
  961|  1.15k|            || (flow->ct_state & CS_TRACKED
  ------------------
  |  Branch (961:17): [True: 866, False: 288]
  ------------------
  962|    866|                && mask->masks.ct_state & CS_INVALID
  ------------------
  |  Branch (962:20): [True: 863, False: 3]
  ------------------
  963|    863|                && !(flow->ct_state & CS_INVALID));
  ------------------
  |  Branch (963:20): [True: 861, False: 2]
  ------------------
  964|  2.01k|    }
  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|  2.01k|}
meta-flow.c:is_tcp:
 1077|  1.88k|{
 1078|       |    return is_ip_proto(flow, IPPROTO_TCP, wc);
 1079|  1.88k|}
meta-flow.c:is_ip_proto:
 1065|  4.08k|{
 1066|  4.08k|    if (is_ip_any(flow)) {
  ------------------
  |  Branch (1066:9): [True: 2.62k, False: 1.46k]
  ------------------
 1067|  2.62k|        if (wc) {
  ------------------
  |  Branch (1067:13): [True: 0, False: 2.62k]
  ------------------
 1068|      0|            WC_MASK_FIELD(wc, nw_proto);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1069|      0|        }
 1070|  2.62k|        return flow->nw_proto == ip_proto;
 1071|  2.62k|    }
 1072|  1.46k|    return false;
 1073|  4.08k|}
meta-flow.c:is_udp:
 1083|  1.64k|{
 1084|       |    return is_ip_proto(flow, IPPROTO_UDP, wc);
 1085|  1.64k|}
meta-flow.c:is_sctp:
 1089|    549|{
 1090|       |    return is_ip_proto(flow, IPPROTO_SCTP, wc);
 1091|    549|}
meta-flow.c:is_icmpv4:
 1095|    991|{
 1096|    991|    if (get_dl_type(flow) == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (1096:9): [True: 114, False: 877]
  ------------------
 1097|    114|        if (wc) {
  ------------------
  |  Branch (1097:13): [True: 0, False: 114]
  ------------------
 1098|      0|            memset(&wc->masks.nw_proto, 0xff, sizeof wc->masks.nw_proto);
 1099|      0|        }
 1100|    114|        return flow->nw_proto == IPPROTO_ICMP;
 1101|    114|    }
 1102|    877|    return false;
 1103|    991|}
meta-flow.c:is_icmpv6:
 1107|  4.31k|{
 1108|  4.31k|    if (get_dl_type(flow) == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1108:9): [True: 2.57k, False: 1.74k]
  ------------------
 1109|  2.57k|        if (wc) {
  ------------------
  |  Branch (1109:13): [True: 0, False: 2.57k]
  ------------------
 1110|      0|            memset(&wc->masks.nw_proto, 0xff, sizeof wc->masks.nw_proto);
 1111|      0|        }
 1112|  2.57k|        return flow->nw_proto == IPPROTO_ICMPV6;
 1113|  2.57k|    }
 1114|  1.74k|    return false;
 1115|  4.31k|}
meta-flow.c:is_nd:
 1119|  3.18k|{
 1120|  3.18k|    if (is_icmpv6(flow, wc)) {
  ------------------
  |  Branch (1120:9): [True: 757, False: 2.43k]
  ------------------
 1121|    757|        if (wc) {
  ------------------
  |  Branch (1121:13): [True: 0, False: 757]
  ------------------
 1122|      0|            memset(&wc->masks.tp_dst, 0xff, sizeof wc->masks.tp_dst);
 1123|      0|        }
 1124|    757|        if (flow->tp_dst != htons(0)) {
  ------------------
  |  Branch (1124:13): [True: 90, False: 667]
  ------------------
 1125|     90|            return false;
 1126|     90|        }
 1127|       |
 1128|    667|        if (wc) {
  ------------------
  |  Branch (1128:13): [True: 0, False: 667]
  ------------------
 1129|      0|            memset(&wc->masks.tp_src, 0xff, sizeof wc->masks.tp_src);
 1130|      0|        }
 1131|    667|        return (flow->tp_src == htons(ND_NEIGHBOR_SOLICIT) ||
  ------------------
  |  Branch (1131:17): [True: 296, False: 371]
  ------------------
 1132|    371|                flow->tp_src == htons(ND_NEIGHBOR_ADVERT));
  ------------------
  |  Branch (1132:17): [True: 351, False: 20]
  ------------------
 1133|    757|    }
 1134|  2.43k|    return false;
 1135|  3.18k|}
meta-flow.c:ofp_to_u16:
  196|    290|{
  197|    290|    return (OVS_FORCE uint16_t) ofp_port;
  198|    290|}
meta-flow.c:u16_to_ofp:
  214|  3.68k|{
  215|  3.68k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|  3.68k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|  3.68k|}
meta-flow.c:is_ip_any:
 1059|  8.63k|{
 1060|  8.63k|    return dl_type_is_ip_any(get_dl_type(flow));
 1061|  8.63k|}
ofp-actions.c:u16_to_ofp:
  214|  43.8k|{
  215|  43.8k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|  43.8k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|  43.8k|}
ofp-actions.c:ofp_to_u16:
  196|  72.6k|{
  197|  72.6k|    return (OVS_FORCE uint16_t) ofp_port;
  198|  72.6k|}
ofp-actions.c:get_dl_type:
 1036|  73.7k|{
 1037|  73.7k|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (1037:9): [True: 48.8k, False: 24.9k]
  ------------------
 1038|  48.8k|        return flow->dl_type;
 1039|  48.8k|    } else if (pt_ns(flow->packet_type) == OFPHTN_ETHERTYPE) {
  ------------------
  |  Branch (1039:16): [True: 14.7k, False: 10.1k]
  ------------------
 1040|  14.7k|        return pt_ns_type_be(flow->packet_type);
 1041|  14.7k|    } else {
 1042|       |        return htons(FLOW_DL_TYPE_NONE);
 1043|  10.1k|    }
 1044|  73.7k|}
ofp-actions.c:is_ip_any:
 1059|  34.5k|{
 1060|  34.5k|    return dl_type_is_ip_any(get_dl_type(flow));
 1061|  34.5k|}
ofp-actions.c:is_ct_valid:
  954|     11|{
  955|       |    /* Matches are checked with 'mask' and without 'wc'. */
  956|     11|    if (mask && !wc) {
  ------------------
  |  Branch (956:9): [True: 11, False: 0]
  |  Branch (956:17): [True: 11, False: 0]
  ------------------
  957|       |        /* Must match at least one of the bits that implies a valid
  958|       |         * conntrack entry, or an explicit not-invalid. */
  959|     11|        return flow->ct_state & (CS_NEW | CS_ESTABLISHED | CS_RELATED
  ------------------
  |  Branch (959:16): [True: 0, False: 11]
  ------------------
  960|     11|                                 | CS_REPLY_DIR | CS_SRC_NAT | CS_DST_NAT)
  961|     11|            || (flow->ct_state & CS_TRACKED
  ------------------
  |  Branch (961:17): [True: 0, False: 11]
  ------------------
  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|     11|    }
  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|     11|}
ofp-flow.c:u16_to_ofp:
  214|  91.0k|{
  215|  91.0k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|  91.0k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|  91.0k|}
ofp-match.c:u16_to_ofp:
  214|   160k|{
  215|   160k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|   160k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|   160k|}
ofp-monitor.c:u16_to_ofp:
  214|  5.27k|{
  215|  5.27k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|  5.27k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|  5.27k|}
ofp-packet.c:u16_to_ofp:
  214|   104k|{
  215|   104k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|   104k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|   104k|}
ofp-packet.c:u32_to_odp:
  220|    336|{
  221|    336|    return ODP_PORT_C(port);
  ------------------
  |  |  158|    336|#define ODP_PORT_C(X) ((OVS_FORCE odp_port_t) (X))
  ------------------
  222|    336|}
ofp-packet.c:ofp_to_u16:
  196|  68.6k|{
  197|  68.6k|    return (OVS_FORCE uint16_t) ofp_port;
  198|  68.6k|}
ofp-port.c:ofp_to_u16:
  196|   599k|{
  197|   599k|    return (OVS_FORCE uint16_t) ofp_port;
  198|   599k|}
ofp-port.c:u16_to_ofp:
  214|   240k|{
  215|   240k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|   240k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|   240k|}
ofp-port.c:ofp11_to_u32:
  208|  84.0k|{
  209|  84.0k|    return (OVS_FORCE uint32_t) ofp11_port;
  210|  84.0k|}

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|  42.1k|{
  114|  42.1k|    return hash_add(hash_add(hash, data), data >> 32);
  115|  42.1k|}
flow.c:hash_add:
  108|   113k|{
  109|   113k|    return mhash_add(hash, data);
  110|   113k|}
flow.c:mhash_add:
   77|   113k|{
   78|   113k|    hash = mhash_add__(hash, data);
   79|   113k|    hash = hash_rot(hash, 13);
   80|   113k|    return hash * 5 + 0xe6546b64;
   81|   113k|}
flow.c:mhash_add__:
   64|   113k|{
   65|       |    /* zero-valued 'data' will not change the 'hash' value */
   66|   113k|    if (!data) {
  ------------------
  |  Branch (66:9): [True: 22.9k, False: 90.8k]
  ------------------
   67|  22.9k|        return hash;
   68|  22.9k|    }
   69|       |
   70|  90.8k|    data *= 0xcc9e2d51;
   71|  90.8k|    data = hash_rot(data, 15);
   72|  90.8k|    data *= 0x1b873593;
   73|  90.8k|    return hash ^ data;
   74|   113k|}
flow.c:hash_rot:
   31|   204k|{
   32|   204k|    return (x << k) | (x >> (32 - k));
   33|   204k|}
flow.c:hash_finish:
  118|  12.6k|{
  119|  12.6k|    return mhash_finish(hash ^ final);
  120|  12.6k|}
flow.c:mhash_finish:
   84|  12.6k|{
   85|  12.6k|    hash ^= hash >> 16;
   86|  12.6k|    hash *= 0x85ebca6b;
   87|  12.6k|    hash ^= hash >> 13;
   88|  12.6k|    hash *= 0xc2b2ae35;
   89|  12.6k|    hash ^= hash >> 16;
   90|  12.6k|    return hash;
   91|  12.6k|}
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|  13.5M|{
  165|  13.5M|    return hash_uint64_basis(x, 0);
  166|  13.5M|}
nx-match.c:hash_uint64_basis:
  159|  13.5M|{
  160|  13.5M|    return hash_finish(hash_add64(basis, x), 8);
  161|  13.5M|}
nx-match.c:hash_finish:
  118|  13.5M|{
  119|  13.5M|    return mhash_finish(hash ^ final);
  120|  13.5M|}
nx-match.c:mhash_finish:
   84|  13.5M|{
   85|  13.5M|    hash ^= hash >> 16;
   86|  13.5M|    hash *= 0x85ebca6b;
   87|  13.5M|    hash ^= hash >> 13;
   88|  13.5M|    hash *= 0xc2b2ae35;
   89|  13.5M|    hash ^= hash >> 16;
   90|  13.5M|    return hash;
   91|  13.5M|}
nx-match.c:hash_add64:
  113|  13.5M|{
  114|  13.5M|    return hash_add(hash_add(hash, data), data >> 32);
  115|  13.5M|}
nx-match.c:hash_add:
  108|  27.1M|{
  109|  27.1M|    return mhash_add(hash, data);
  110|  27.1M|}
nx-match.c:mhash_add:
   77|  27.1M|{
   78|  27.1M|    hash = mhash_add__(hash, data);
   79|  27.1M|    hash = hash_rot(hash, 13);
   80|  27.1M|    return hash * 5 + 0xe6546b64;
   81|  27.1M|}
nx-match.c:mhash_add__:
   64|  27.1M|{
   65|       |    /* zero-valued 'data' will not change the 'hash' value */
   66|  27.1M|    if (!data) {
  ------------------
  |  Branch (66:9): [True: 11.3M, False: 15.7M]
  ------------------
   67|  11.3M|        return hash;
   68|  11.3M|    }
   69|       |
   70|  15.7M|    data *= 0xcc9e2d51;
   71|  15.7M|    data = hash_rot(data, 15);
   72|  15.7M|    data *= 0x1b873593;
   73|  15.7M|    return hash ^ data;
   74|  27.1M|}
nx-match.c:hash_rot:
   31|  42.9M|{
   32|  42.9M|    return (x << k) | (x >> (32 - k));
   33|  42.9M|}
ofp-actions.c:hash_2words:
  153|   434k|{
  154|   434k|    return hash_finish(hash_add(hash_add(x, 0), y), 8);
  155|   434k|}
ofp-actions.c:hash_finish:
  118|   434k|{
  119|   434k|    return mhash_finish(hash ^ final);
  120|   434k|}
ofp-actions.c:mhash_finish:
   84|   434k|{
   85|   434k|    hash ^= hash >> 16;
   86|   434k|    hash *= 0x85ebca6b;
   87|   434k|    hash ^= hash >> 13;
   88|   434k|    hash *= 0xc2b2ae35;
   89|   434k|    hash ^= hash >> 16;
   90|   434k|    return hash;
   91|   434k|}
ofp-actions.c:hash_add:
  108|   868k|{
  109|   868k|    return mhash_add(hash, data);
  110|   868k|}
ofp-actions.c:mhash_add:
   77|   868k|{
   78|   868k|    hash = mhash_add__(hash, data);
   79|   868k|    hash = hash_rot(hash, 13);
   80|   868k|    return hash * 5 + 0xe6546b64;
   81|   868k|}
ofp-actions.c:mhash_add__:
   64|   868k|{
   65|       |    /* zero-valued 'data' will not change the 'hash' value */
   66|   868k|    if (!data) {
  ------------------
  |  Branch (66:9): [True: 434k, False: 434k]
  ------------------
   67|   434k|        return hash;
   68|   434k|    }
   69|       |
   70|   434k|    data *= 0xcc9e2d51;
   71|   434k|    data = hash_rot(data, 15);
   72|   434k|    data *= 0x1b873593;
   73|   434k|    return hash ^ data;
   74|   868k|}
ofp-actions.c:hash_rot:
   31|  1.30M|{
   32|  1.30M|    return (x << k) | (x >> (32 - k));
   33|  1.30M|}
ofp-msgs.c:hash_finish:
  118|  5.20M|{
  119|  5.20M|    return mhash_finish(hash ^ final);
  120|  5.20M|}
ofp-msgs.c:mhash_finish:
   84|  5.20M|{
   85|  5.20M|    hash ^= hash >> 16;
   86|  5.20M|    hash *= 0x85ebca6b;
   87|  5.20M|    hash ^= hash >> 13;
   88|  5.20M|    hash *= 0xc2b2ae35;
   89|  5.20M|    hash ^= hash >> 16;
   90|  5.20M|    return hash;
   91|  5.20M|}
ofp-msgs.c:hash_add:
  108|  15.6M|{
  109|  15.6M|    return mhash_add(hash, data);
  110|  15.6M|}
ofp-msgs.c:mhash_add:
   77|  15.6M|{
   78|  15.6M|    hash = mhash_add__(hash, data);
   79|  15.6M|    hash = hash_rot(hash, 13);
   80|  15.6M|    return hash * 5 + 0xe6546b64;
   81|  15.6M|}
ofp-msgs.c:mhash_add__:
   64|  15.6M|{
   65|       |    /* zero-valued 'data' will not change the 'hash' value */
   66|  15.6M|    if (!data) {
  ------------------
  |  Branch (66:9): [True: 9.95M, False: 5.65M]
  ------------------
   67|  9.95M|        return hash;
   68|  9.95M|    }
   69|       |
   70|  5.65M|    data *= 0xcc9e2d51;
   71|  5.65M|    data = hash_rot(data, 15);
   72|  5.65M|    data *= 0x1b873593;
   73|  5.65M|    return hash ^ data;
   74|  15.6M|}
ofp-msgs.c:hash_rot:
   31|  21.2M|{
   32|  21.2M|    return (x << k) | (x >> (32 - k));
   33|  21.2M|}
ofp-msgs.c:hash_bytes32:
  392|  5.20M|{
  393|  5.20M|    return hash_words(p, n_bytes / 4, basis);
  394|  5.20M|}
ofp-msgs.c:hash_words:
  357|  5.20M|{
  358|  5.20M|    if (__builtin_constant_p(n_words)) {
  ------------------
  |  Branch (358:9): [True: 5.20M, False: 0]
  ------------------
  359|  5.20M|        return hash_words_inline(p, n_words, basis);
  360|  5.20M|    } else {
  361|      0|        return hash_words__(p, n_words, basis);
  362|      0|    }
  363|  5.20M|}
ofp-msgs.c:hash_words_inline:
  129|  5.20M|{
  130|  5.20M|    return hash_finish(hash_add_words(basis, p, n_words), n_words * 4);
  131|  5.20M|}
ofp-msgs.c:hash_add_words:
  428|  5.20M|{
  429|  20.8M|    for (size_t i = 0; i < n_words; i++) {
  ------------------
  |  Branch (429:24): [True: 15.6M, False: 5.20M]
  ------------------
  430|  15.6M|        hash = hash_add(hash, p[i]);
  431|  15.6M|    }
  432|  5.20M|    return hash;
  433|  5.20M|}

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|  24.5k|{
   43|  24.5k|    const struct ofpact_learn_spec *spec;
   44|  24.5k|    struct match dst_match;
   45|       |
   46|  24.5k|    match_init_catchall(&dst_match);
   47|  49.3k|    OFPACT_LEARN_SPEC_FOR_EACH (spec, learn) {
  ------------------
  |  |  900|  24.5k|    for ((SPEC) = (LEARN)->specs;               \
  |  |  901|  71.7k|         (SPEC) < ofpact_learn_spec_end(LEARN); \
  |  |  ------------------
  |  |  |  Branch (901:10): [True: 49.3k, False: 22.4k]
  |  |  ------------------
  |  |  902|  47.2k|         (SPEC) = ofpact_learn_spec_next(SPEC))
  ------------------
   48|  49.3k|        enum ofperr error;
   49|       |
   50|       |        /* Check the source. */
   51|  49.3k|        if (spec->src_type == NX_LEARN_SRC_FIELD) {
  ------------------
  |  |  821|  49.3k|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
  |  Branch (51:13): [True: 2.89k, False: 46.4k]
  ------------------
   52|  2.89k|            error = mf_check_src(&spec->src, src_match);
   53|  2.89k|            if (error) {
  ------------------
  |  Branch (53:17): [True: 360, False: 2.53k]
  ------------------
   54|    360|                return error;
   55|    360|            }
   56|  2.89k|        }
   57|       |
   58|       |        /* Check the destination. */
   59|  48.9k|        switch (spec->dst_type) {
  ------------------
  |  Branch (59:17): [True: 48.9k, False: 0]
  ------------------
   60|  44.7k|        case NX_LEARN_DST_MATCH:
  ------------------
  |  |  825|  44.7k|#define NX_LEARN_DST_MATCH     (0 << 11) /* Add match criterion. */
  ------------------
  |  Branch (60:9): [True: 44.7k, False: 4.23k]
  ------------------
   61|  44.7k|            error = mf_check_src(&spec->dst, &dst_match);
   62|  44.7k|            if (error) {
  ------------------
  |  Branch (62:17): [True: 1.69k, False: 43.0k]
  ------------------
   63|  1.69k|                return error;
   64|  1.69k|            }
   65|  43.0k|            if (spec->src_type & NX_LEARN_SRC_IMMEDIATE) {
  ------------------
  |  |  822|  43.0k|#define NX_LEARN_SRC_IMMEDIATE (1 << 13) /* Copy from immediate value. */
  ------------------
  |  Branch (65:17): [True: 42.8k, False: 184]
  ------------------
   66|  42.8k|                mf_write_subfield_value(&spec->dst,
   67|  42.8k|                                        ofpact_learn_spec_imm(spec),
   68|  42.8k|                                        &dst_match);
   69|  42.8k|            }
   70|  43.0k|            break;
   71|       |
   72|  1.88k|        case NX_LEARN_DST_LOAD:
  ------------------
  |  |  826|  1.88k|#define NX_LEARN_DST_LOAD      (1 << 11) /* Add NXAST_REG_LOAD action. */
  ------------------
  |  Branch (72:9): [True: 1.88k, False: 47.1k]
  ------------------
   73|  1.88k|            error = mf_check_dst(&spec->dst, &dst_match);
   74|  1.88k|            if (error) {
  ------------------
  |  Branch (74:17): [True: 82, False: 1.80k]
  ------------------
   75|     82|                return error;
   76|     82|            }
   77|  1.80k|            break;
   78|       |
   79|  2.34k|        case NX_LEARN_DST_OUTPUT:
  ------------------
  |  |  827|  2.34k|#define NX_LEARN_DST_OUTPUT    (2 << 11) /* Add OFPAT_OUTPUT action. */
  ------------------
  |  Branch (79:9): [True: 2.34k, False: 46.6k]
  ------------------
   80|       |            /* Nothing to do. */
   81|  2.34k|            break;
   82|  48.9k|        }
   83|  48.9k|    }
   84|  22.4k|    return 0;
   85|  24.5k|}
learn_format:
  494|  22.9k|{
  495|  22.9k|    const struct ofpact_learn_spec *spec;
  496|  22.9k|    struct match match;
  497|       |
  498|  22.9k|    match_init_catchall(&match);
  499|       |
  500|  22.9k|    ds_put_format(s, "%slearn(%s%stable=%s",
  501|  22.9k|                  colors.learn, colors.end, colors.special, colors.end);
  502|  22.9k|    ofputil_format_table(learn->table_id, table_map, s);
  503|  22.9k|    if (learn->idle_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  22.9k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (503:9): [True: 22.0k, False: 828]
  ------------------
  504|  22.0k|        ds_put_format(s, ",%sidle_timeout=%s%"PRIu16,
  505|  22.0k|                      colors.param, colors.end, learn->idle_timeout);
  506|  22.0k|    }
  507|  22.9k|    if (learn->hard_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  22.9k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (507:9): [True: 21.2k, False: 1.68k]
  ------------------
  508|  21.2k|        ds_put_format(s, ",%shard_timeout=%s%"PRIu16,
  509|  21.2k|                      colors.param, colors.end, learn->hard_timeout);
  510|  21.2k|    }
  511|  22.9k|    if (learn->fin_idle_timeout) {
  ------------------
  |  Branch (511:9): [True: 20.8k, False: 2.09k]
  ------------------
  512|  20.8k|        ds_put_format(s, ",%sfin_idle_timeout=%s%"PRIu16,
  513|  20.8k|                      colors.param, colors.end, learn->fin_idle_timeout);
  514|  20.8k|    }
  515|  22.9k|    if (learn->fin_hard_timeout) {
  ------------------
  |  Branch (515:9): [True: 20.6k, False: 2.25k]
  ------------------
  516|  20.6k|        ds_put_format(s, "%s,fin_hard_timeout=%s%"PRIu16,
  517|  20.6k|                      colors.param, colors.end, learn->fin_hard_timeout);
  518|  20.6k|    }
  519|  22.9k|    if (learn->priority != OFP_DEFAULT_PRIORITY) {
  ------------------
  |  |  138|  22.9k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
  |  Branch (519:9): [True: 20.2k, False: 2.65k]
  ------------------
  520|  20.2k|        ds_put_format(s, "%s,priority=%s%"PRIu16,
  521|  20.2k|                      colors.special, colors.end, learn->priority);
  522|  20.2k|    }
  523|  22.9k|    if (learn->flags & NX_LEARN_F_SEND_FLOW_REM) {
  ------------------
  |  Branch (523:9): [True: 7.27k, False: 15.6k]
  ------------------
  524|  7.27k|        ds_put_format(s, ",%ssend_flow_rem%s", colors.value, colors.end);
  525|  7.27k|    }
  526|  22.9k|    if (learn->flags & NX_LEARN_F_DELETE_LEARNED) {
  ------------------
  |  Branch (526:9): [True: 6.02k, False: 16.8k]
  ------------------
  527|  6.02k|        ds_put_format(s, ",%sdelete_learned%s", colors.value, colors.end);
  528|  6.02k|    }
  529|  22.9k|    if (learn->cookie != 0) {
  ------------------
  |  Branch (529:9): [True: 22.4k, False: 422]
  ------------------
  530|  22.4k|        ds_put_format(s, ",%scookie=%s%#"PRIx64,
  531|  22.4k|                      colors.param, colors.end, ntohll(learn->cookie));
  532|  22.4k|    }
  533|  22.9k|    if (learn->limit != 0) {
  ------------------
  |  Branch (533:9): [True: 87, False: 22.8k]
  ------------------
  534|     87|        ds_put_format(s, ",%slimit=%s%"PRIu32,
  535|     87|                      colors.param, colors.end, learn->limit);
  536|     87|    }
  537|  22.9k|    if (learn->flags & NX_LEARN_F_WRITE_RESULT) {
  ------------------
  |  Branch (537:9): [True: 67, False: 22.8k]
  ------------------
  538|     67|        ds_put_format(s, ",%sresult_dst=%s", colors.param, colors.end);
  539|     67|        mf_format_subfield(&learn->result_dst, s);
  540|     67|    }
  541|       |
  542|  45.5k|    OFPACT_LEARN_SPEC_FOR_EACH (spec, learn) {
  ------------------
  |  |  900|  22.9k|    for ((SPEC) = (LEARN)->specs;               \
  |  |  901|  68.4k|         (SPEC) < ofpact_learn_spec_end(LEARN); \
  |  |  ------------------
  |  |  |  Branch (901:10): [True: 45.5k, False: 22.9k]
  |  |  ------------------
  |  |  902|  45.5k|         (SPEC) = ofpact_learn_spec_next(SPEC))
  ------------------
  543|  45.5k|        unsigned int n_bytes = DIV_ROUND_UP(spec->n_bits, 8);
  ------------------
  |  |  300|  45.5k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  ------------------
  544|  45.5k|        ds_put_char(s, ',');
  545|       |
  546|  45.5k|        switch (spec->src_type | spec->dst_type) {
  ------------------
  |  Branch (546:17): [True: 45.5k, False: 0]
  ------------------
  547|  41.3k|        case NX_LEARN_SRC_IMMEDIATE | NX_LEARN_DST_MATCH: {
  ------------------
  |  |  822|  41.3k|#define NX_LEARN_SRC_IMMEDIATE (1 << 13) /* Copy from immediate value. */
  ------------------
                      case NX_LEARN_SRC_IMMEDIATE | NX_LEARN_DST_MATCH: {
  ------------------
  |  |  825|  41.3k|#define NX_LEARN_DST_MATCH     (0 << 11) /* Add match criterion. */
  ------------------
  |  Branch (547:9): [True: 41.3k, False: 4.13k]
  ------------------
  548|  41.3k|            if (spec->dst.ofs == 0
  ------------------
  |  Branch (548:17): [True: 16.7k, False: 24.6k]
  ------------------
  549|  16.7k|                && spec->dst.n_bits == spec->dst.field->n_bits) {
  ------------------
  |  Branch (549:20): [True: 2.84k, False: 13.8k]
  ------------------
  550|  2.84k|                union mf_value value;
  551|       |
  552|  2.84k|                memset(&value, 0, sizeof value);
  553|  2.84k|                memcpy(&value.b[spec->dst.field->n_bytes - n_bytes],
  554|  2.84k|                       ofpact_learn_spec_imm(spec), n_bytes);
  555|  2.84k|                ds_put_format(s, "%s%s=%s", colors.param,
  556|  2.84k|                              spec->dst.field->name, colors.end);
  557|  2.84k|                mf_format(spec->dst.field, &value, NULL, port_map, s);
  558|  38.5k|            } else {
  559|  38.5k|                ds_put_format(s, "%s", colors.param);
  560|  38.5k|                mf_format_subfield(&spec->dst, s);
  561|  38.5k|                ds_put_format(s, "=%s", colors.end);
  562|  38.5k|                ds_put_hex(s, ofpact_learn_spec_imm(spec), n_bytes);
  563|  38.5k|            }
  564|  41.3k|            break;
  565|      0|        }
  566|    272|        case NX_LEARN_SRC_FIELD | NX_LEARN_DST_MATCH:
  ------------------
  |  |  821|    272|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
                      case NX_LEARN_SRC_FIELD | NX_LEARN_DST_MATCH:
  ------------------
  |  |  825|    272|#define NX_LEARN_DST_MATCH     (0 << 11) /* Add match criterion. */
  ------------------
  |  Branch (566:9): [True: 272, False: 45.2k]
  ------------------
  567|    272|            ds_put_format(s, "%s", colors.param);
  568|    272|            mf_format_subfield(&spec->dst, s);
  569|    272|            ds_put_format(s, "%s", colors.end);
  570|    272|            if (spec->src.field != spec->dst.field ||
  ------------------
  |  Branch (570:17): [True: 185, False: 87]
  ------------------
  571|    206|                spec->src.ofs != spec->dst.ofs) {
  ------------------
  |  Branch (571:17): [True: 21, False: 66]
  ------------------
  572|    206|                ds_put_format(s, "%s=%s", colors.param, colors.end);
  573|    206|                mf_format_subfield(&spec->src, s);
  574|    206|            }
  575|    272|            break;
  576|       |
  577|  1.84k|        case NX_LEARN_SRC_IMMEDIATE | NX_LEARN_DST_LOAD:
  ------------------
  |  |  822|  1.84k|#define NX_LEARN_SRC_IMMEDIATE (1 << 13) /* Copy from immediate value. */
  ------------------
                      case NX_LEARN_SRC_IMMEDIATE | NX_LEARN_DST_LOAD:
  ------------------
  |  |  826|  1.84k|#define NX_LEARN_DST_LOAD      (1 << 11) /* Add NXAST_REG_LOAD action. */
  ------------------
  |  Branch (577:9): [True: 1.84k, False: 43.6k]
  ------------------
  578|  1.84k|            ds_put_format(s, "%sload:%s", colors.special, colors.end);
  579|  1.84k|            ds_put_hex(s, ofpact_learn_spec_imm(spec), n_bytes);
  580|  1.84k|            ds_put_format(s, "%s->%s", colors.special, colors.end);
  581|  1.84k|            mf_format_subfield(&spec->dst, s);
  582|  1.84k|            break;
  583|       |
  584|    109|        case NX_LEARN_SRC_FIELD | NX_LEARN_DST_LOAD:
  ------------------
  |  |  821|    109|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
                      case NX_LEARN_SRC_FIELD | NX_LEARN_DST_LOAD:
  ------------------
  |  |  826|    109|#define NX_LEARN_DST_LOAD      (1 << 11) /* Add NXAST_REG_LOAD action. */
  ------------------
  |  Branch (584:9): [True: 109, False: 45.4k]
  ------------------
  585|    109|            ds_put_format(s, "%sload:%s", colors.special, colors.end);
  586|    109|            mf_format_subfield(&spec->src, s);
  587|    109|            ds_put_format(s, "%s->%s", colors.special, colors.end);
  588|    109|            mf_format_subfield(&spec->dst, s);
  589|    109|            break;
  590|       |
  591|  1.90k|        case NX_LEARN_SRC_FIELD | NX_LEARN_DST_OUTPUT:
  ------------------
  |  |  821|  1.90k|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
                      case NX_LEARN_SRC_FIELD | NX_LEARN_DST_OUTPUT:
  ------------------
  |  |  827|  1.90k|#define NX_LEARN_DST_OUTPUT    (2 << 11) /* Add OFPAT_OUTPUT action. */
  ------------------
  |  Branch (591:9): [True: 1.90k, False: 43.6k]
  ------------------
  592|  1.90k|            ds_put_format(s, "%soutput:%s", colors.special, colors.end);
  593|  1.90k|            mf_format_subfield(&spec->src, s);
  594|  1.90k|            break;
  595|  45.5k|        }
  596|  45.5k|    }
  597|  22.9k|    ds_put_format(s, "%s)%s", colors.learn, colors.end);
  598|  22.9k|}

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

mf_subvalue_format:
  195|  2.69k|{
  196|  2.69k|    ds_put_hex(s, sv, sizeof *sv);
  197|  2.69k|}
mf_is_all_wild:
  206|   259k|{
  207|   259k|    switch (mf->id) {
  208|  1.65k|    case MFF_DP_HASH:
  ------------------
  |  Branch (208:5): [True: 1.65k, False: 258k]
  ------------------
  209|  1.65k|        return !wc->masks.dp_hash;
  210|  1.20k|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (210:5): [True: 1.20k, False: 258k]
  ------------------
  211|  1.20k|        return !wc->masks.recirc_id;
  212|  20.6k|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (212:5): [True: 20.6k, False: 239k]
  ------------------
  213|  20.6k|        return !wc->masks.packet_type;
  214|    249|    case MFF_CONJ_ID:
  ------------------
  |  Branch (214:5): [True: 249, False: 259k]
  ------------------
  215|    249|        return !wc->masks.conj_id;
  216|    848|    case MFF_TUN_SRC:
  ------------------
  |  Branch (216:5): [True: 848, False: 258k]
  ------------------
  217|    848|        return !wc->masks.tunnel.ip_src;
  218|    356|    case MFF_TUN_DST:
  ------------------
  |  Branch (218:5): [True: 356, False: 259k]
  ------------------
  219|    356|        return !wc->masks.tunnel.ip_dst;
  220|  1.71k|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (220:5): [True: 1.71k, False: 258k]
  ------------------
  221|  1.71k|        return ipv6_mask_is_any(&wc->masks.tunnel.ipv6_src);
  222|    963|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (222:5): [True: 963, False: 258k]
  ------------------
  223|    963|        return ipv6_mask_is_any(&wc->masks.tunnel.ipv6_dst);
  224|    536|    case MFF_TUN_ID:
  ------------------
  |  Branch (224:5): [True: 536, False: 259k]
  ------------------
  225|    536|        return !wc->masks.tunnel.tun_id;
  226|      0|    case MFF_TUN_TOS:
  ------------------
  |  Branch (226:5): [True: 0, False: 259k]
  ------------------
  227|      0|        return !wc->masks.tunnel.ip_tos;
  228|      0|    case MFF_TUN_TTL:
  ------------------
  |  Branch (228:5): [True: 0, False: 259k]
  ------------------
  229|      0|        return !wc->masks.tunnel.ip_ttl;
  230|    526|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (230:5): [True: 526, False: 259k]
  ------------------
  231|    526|        return !(wc->masks.tunnel.flags & FLOW_TNL_PUB_F_MASK);
  ------------------
  |  |   58|    526|#define FLOW_TNL_PUB_F_MASK ((1 << 1) - 1)
  ------------------
  232|    957|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (232:5): [True: 957, False: 258k]
  ------------------
  233|    957|        return !wc->masks.tunnel.gbp_id;
  234|  1.29k|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (234:5): [True: 1.29k, False: 258k]
  ------------------
  235|  1.29k|        return !wc->masks.tunnel.gbp_flags;
  236|    786|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (236:5): [True: 786, False: 258k]
  ------------------
  237|    786|        return !wc->masks.tunnel.erspan_ver;
  238|    207|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (238:5): [True: 207, False: 259k]
  ------------------
  239|    207|        return !wc->masks.tunnel.erspan_idx;
  240|    430|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (240:5): [True: 430, False: 259k]
  ------------------
  241|    430|        return !wc->masks.tunnel.erspan_dir;
  242|    739|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (242:5): [True: 739, False: 259k]
  ------------------
  243|    739|        return !wc->masks.tunnel.erspan_hwid;
  244|   122k|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2110|  6.85k|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2110:5): [True: 1.75k, False: 258k]
  |  |  |  Branch (2110:29): [True: 5.10k, False: 254k]
  |  |  ------------------
  |  | 2111|  10.8k|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2111:5): [True: 2.61k, False: 257k]
  |  |  |  Branch (2111:29): [True: 1.35k, False: 258k]
  |  |  ------------------
  |  | 2112|  15.3k|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2112:5): [True: 915, False: 258k]
  |  |  |  Branch (2112:29): [True: 3.64k, False: 256k]
  |  |  ------------------
  |  | 2113|  20.9k|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2113:5): [True: 4.81k, False: 254k]
  |  |  |  Branch (2113:29): [True: 747, False: 259k]
  |  |  ------------------
  |  | 2114|  24.5k|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2114:5): [True: 2.80k, False: 256k]
  |  |  |  Branch (2114:29): [True: 762, False: 258k]
  |  |  ------------------
  |  | 2115|  26.6k|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2115:5): [True: 1.88k, False: 257k]
  |  |  |  Branch (2115:30): [True: 238, False: 259k]
  |  |  ------------------
  |  | 2116|  33.0k|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2116:5): [True: 4.39k, False: 255k]
  |  |  |  Branch (2116:30): [True: 2.03k, False: 257k]
  |  |  ------------------
  |  | 2117|  37.8k|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2117:5): [True: 2.15k, False: 257k]
  |  |  |  Branch (2117:30): [True: 2.66k, False: 257k]
  |  |  ------------------
  |  | 2118|  41.4k|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2118:5): [True: 2.26k, False: 257k]
  |  |  |  Branch (2118:30): [True: 1.27k, False: 258k]
  |  |  ------------------
  |  | 2119|  49.9k|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2119:5): [True: 6.95k, False: 252k]
  |  |  |  Branch (2119:30): [True: 1.58k, False: 258k]
  |  |  ------------------
  |  | 2120|  55.3k|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2120:5): [True: 1.51k, False: 258k]
  |  |  |  Branch (2120:30): [True: 3.86k, False: 255k]
  |  |  ------------------
  |  | 2121|  58.5k|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2121:5): [True: 2.27k, False: 257k]
  |  |  |  Branch (2121:30): [True: 955, False: 258k]
  |  |  ------------------
  |  | 2122|  64.2k|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2122:5): [True: 2.03k, False: 257k]
  |  |  |  Branch (2122:30): [True: 3.58k, False: 256k]
  |  |  ------------------
  |  | 2123|  66.6k|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2123:5): [True: 1.68k, False: 258k]
  |  |  |  Branch (2123:30): [True: 739, False: 259k]
  |  |  ------------------
  |  | 2124|  68.8k|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2124:5): [True: 663, False: 259k]
  |  |  |  Branch (2124:30): [True: 1.56k, False: 258k]
  |  |  ------------------
  |  | 2125|  72.8k|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2125:5): [True: 1.37k, False: 258k]
  |  |  |  Branch (2125:30): [True: 2.65k, False: 257k]
  |  |  ------------------
  |  | 2126|  79.0k|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2126:5): [True: 2.55k, False: 257k]
  |  |  |  Branch (2126:30): [True: 3.56k, False: 256k]
  |  |  ------------------
  |  | 2127|  82.9k|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2127:5): [True: 2.66k, False: 257k]
  |  |  |  Branch (2127:30): [True: 1.26k, False: 258k]
  |  |  ------------------
  |  | 2128|  84.5k|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2128:5): [True: 346, False: 259k]
  |  |  |  Branch (2128:30): [True: 1.28k, False: 258k]
  |  |  ------------------
  |  | 2129|  86.4k|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2129:5): [True: 809, False: 258k]
  |  |  |  Branch (2129:30): [True: 1.09k, False: 258k]
  |  |  ------------------
  |  | 2130|  89.2k|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2130:5): [True: 1.16k, False: 258k]
  |  |  |  Branch (2130:30): [True: 1.59k, False: 258k]
  |  |  ------------------
  |  | 2131|  90.5k|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2131:5): [True: 379, False: 259k]
  |  |  |  Branch (2131:30): [True: 890, False: 258k]
  |  |  ------------------
  |  | 2132|  91.6k|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2132:5): [True: 158, False: 259k]
  |  |  |  Branch (2132:30): [True: 995, False: 258k]
  |  |  ------------------
  |  | 2133|  94.4k|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2133:5): [True: 1.85k, False: 257k]
  |  |  |  Branch (2133:30): [True: 879, False: 258k]
  |  |  ------------------
  |  | 2134|  98.7k|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2134:5): [True: 1.01k, False: 258k]
  |  |  |  Branch (2134:30): [True: 3.33k, False: 256k]
  |  |  ------------------
  |  | 2135|   101k|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2135:5): [True: 2.05k, False: 257k]
  |  |  |  Branch (2135:30): [True: 1.00k, False: 258k]
  |  |  ------------------
  |  | 2136|   105k|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2136:5): [True: 736, False: 259k]
  |  |  |  Branch (2136:30): [True: 2.69k, False: 257k]
  |  |  ------------------
  |  | 2137|   109k|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2137:5): [True: 1.17k, False: 258k]
  |  |  |  Branch (2137:30): [True: 3.24k, False: 256k]
  |  |  ------------------
  |  | 2138|   111k|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2138:5): [True: 578, False: 259k]
  |  |  |  Branch (2138:30): [True: 1.31k, False: 258k]
  |  |  ------------------
  |  | 2139|   114k|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2139:5): [True: 1.92k, False: 257k]
  |  |  |  Branch (2139:30): [True: 939, False: 258k]
  |  |  ------------------
  |  | 2140|   118k|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2140:5): [True: 2.45k, False: 257k]
  |  |  |  Branch (2140:30): [True: 2.04k, False: 257k]
  |  |  ------------------
  |  | 2141|   122k|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2141:5): [True: 917, False: 258k]
  |  |  ------------------
  ------------------
  245|   122k|        return !ULLONG_GET(wc->masks.tunnel.metadata.present.map,
  ------------------
  |  |  293|   122k|#define ULLONG_GET(MAP, OFFSET) !!((MAP) & (1ULL << (OFFSET)))
  ------------------
  246|  4.28M|                           mf->id - MFF_TUN_METADATA0);
  247|    474|    case MFF_METADATA:
  ------------------
  |  Branch (247:5): [True: 474, False: 259k]
  ------------------
  248|    474|        return !wc->masks.metadata;
  249|  3.58k|    case MFF_IN_PORT:
  ------------------
  |  Branch (249:5): [True: 3.58k, False: 256k]
  ------------------
  250|  4.34k|    case MFF_IN_PORT_OXM:
  ------------------
  |  Branch (250:5): [True: 766, False: 258k]
  ------------------
  251|  4.34k|        return !wc->masks.in_port.ofp_port;
  252|      0|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (252:5): [True: 0, False: 259k]
  ------------------
  253|      0|        return !wc->masks.skb_priority;
  254|  1.09k|    case MFF_PKT_MARK:
  ------------------
  |  Branch (254:5): [True: 1.09k, False: 258k]
  ------------------
  255|  1.09k|        return !wc->masks.pkt_mark;
  256|  1.03k|    case MFF_CT_STATE:
  ------------------
  |  Branch (256:5): [True: 1.03k, False: 258k]
  ------------------
  257|  1.03k|        return !wc->masks.ct_state;
  258|    384|    case MFF_CT_ZONE:
  ------------------
  |  Branch (258:5): [True: 384, False: 259k]
  ------------------
  259|    384|        return !wc->masks.ct_zone;
  260|    822|    case MFF_CT_MARK:
  ------------------
  |  Branch (260:5): [True: 822, False: 258k]
  ------------------
  261|    822|        return !wc->masks.ct_mark;
  262|  1.11k|    case MFF_CT_LABEL:
  ------------------
  |  Branch (262:5): [True: 1.11k, False: 258k]
  ------------------
  263|  1.11k|        return ovs_u128_is_zero(wc->masks.ct_label);
  264|    373|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (264:5): [True: 373, False: 259k]
  ------------------
  265|    373|        return !wc->masks.ct_nw_proto;
  266|    851|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (266:5): [True: 851, False: 258k]
  ------------------
  267|    851|        return !wc->masks.ct_nw_src;
  268|    687|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (268:5): [True: 687, False: 259k]
  ------------------
  269|    687|        return !wc->masks.ct_nw_dst;
  270|    470|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (270:5): [True: 470, False: 259k]
  ------------------
  271|    470|        return !wc->masks.ct_tp_src;
  272|    345|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (272:5): [True: 345, False: 259k]
  ------------------
  273|    345|        return !wc->masks.ct_tp_dst;
  274|    599|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (274:5): [True: 599, False: 259k]
  ------------------
  275|    599|        return ipv6_mask_is_any(&wc->masks.ct_ipv6_src);
  276|  1.81k|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (276:5): [True: 1.81k, False: 257k]
  ------------------
  277|  1.81k|        return ipv6_mask_is_any(&wc->masks.ct_ipv6_dst);
  278|  20.2k|    CASE_MFF_REGS:
  ------------------
  |  | 2065|  3.69k|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:     \
  |  |  ------------------
  |  |  |  Branch (2065:5): [True: 1.17k, False: 258k]
  |  |  |  Branch (2065:20): [True: 475, False: 259k]
  |  |  |  Branch (2065:35): [True: 1.25k, False: 258k]
  |  |  |  Branch (2065:50): [True: 786, False: 258k]
  |  |  ------------------
  |  | 2066|  6.42k|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:     \
  |  |  ------------------
  |  |  |  Branch (2066:5): [True: 383, False: 259k]
  |  |  |  Branch (2066:20): [True: 1.30k, False: 258k]
  |  |  |  Branch (2066:35): [True: 623, False: 259k]
  |  |  |  Branch (2066:50): [True: 416, False: 259k]
  |  |  ------------------
  |  | 2067|  12.6k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11:   \
  |  |  ------------------
  |  |  |  Branch (2067:5): [True: 531, False: 259k]
  |  |  |  Branch (2067:20): [True: 1.39k, False: 258k]
  |  |  |  Branch (2067:35): [True: 1.26k, False: 258k]
  |  |  |  Branch (2067:51): [True: 3.03k, False: 256k]
  |  |  ------------------
  |  | 2068|  17.3k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15: \
  |  |  ------------------
  |  |  |  Branch (2068:5): [True: 696, False: 259k]
  |  |  |  Branch (2068:21): [True: 1.15k, False: 258k]
  |  |  |  Branch (2068:37): [True: 1.36k, False: 258k]
  |  |  |  Branch (2068:53): [True: 1.53k, False: 258k]
  |  |  ------------------
  |  | 2069|  18.1k|    case MFF_REG16: case MFF_REG17: case MFF_REG18: case MFF_REG19: \
  |  |  ------------------
  |  |  |  Branch (2069:5): [True: 106, False: 259k]
  |  |  |  Branch (2069:21): [True: 370, False: 259k]
  |  |  |  Branch (2069:37): [True: 92, False: 259k]
  |  |  |  Branch (2069:53): [True: 170, False: 259k]
  |  |  ------------------
  |  | 2070|  18.9k|    case MFF_REG20: case MFF_REG21: case MFF_REG22: case MFF_REG23: \
  |  |  ------------------
  |  |  |  Branch (2070:5): [True: 55, False: 259k]
  |  |  |  Branch (2070:21): [True: 325, False: 259k]
  |  |  |  Branch (2070:37): [True: 349, False: 259k]
  |  |  |  Branch (2070:53): [True: 129, False: 259k]
  |  |  ------------------
  |  | 2071|  19.7k|    case MFF_REG24: case MFF_REG25: case MFF_REG26: case MFF_REG27: \
  |  |  ------------------
  |  |  |  Branch (2071:5): [True: 185, False: 259k]
  |  |  |  Branch (2071:21): [True: 206, False: 259k]
  |  |  |  Branch (2071:37): [True: 96, False: 259k]
  |  |  |  Branch (2071:53): [True: 315, False: 259k]
  |  |  ------------------
  |  | 2072|  20.2k|    case MFF_REG28: case MFF_REG29: case MFF_REG30: case MFF_REG31
  |  |  ------------------
  |  |  |  Branch (2072:5): [True: 216, False: 259k]
  |  |  |  Branch (2072:21): [True: 70, False: 259k]
  |  |  |  Branch (2072:37): [True: 125, False: 259k]
  |  |  ------------------
  ------------------
  279|  20.2k|        return !wc->masks.regs[mf->id - MFF_REG0];
  280|  7.76k|    CASE_MFF_XREGS:
  ------------------
  |  | 2081|  3.62k|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3:    \
  |  |  ------------------
  |  |  |  Branch (2081:5): [True: 202, False: 259k]
  |  |  |  Branch (2081:21): [True: 112, False: 259k]
  |  |  |  Branch (2081:37): [True: 1.24k, False: 258k]
  |  |  |  Branch (2081:53): [True: 2.06k, False: 257k]
  |  |  ------------------
  |  | 2082|  5.75k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7:    \
  |  |  ------------------
  |  |  |  Branch (2082:5): [True: 319, False: 259k]
  |  |  |  Branch (2082:21): [True: 711, False: 259k]
  |  |  |  Branch (2082:37): [True: 309, False: 259k]
  |  |  |  Branch (2082:53): [True: 791, False: 258k]
  |  |  ------------------
  |  | 2083|  6.56k|    case MFF_XREG8: case MFF_XREG9: case MFF_XREG10: case MFF_XREG11:  \
  |  |  ------------------
  |  |  |  Branch (2083:5): [True: 153, False: 259k]
  |  |  |  Branch (2083:21): [True: 275, False: 259k]
  |  |  |  Branch (2083:37): [True: 170, False: 259k]
  |  |  |  Branch (2083:54): [True: 212, False: 259k]
  |  |  ------------------
  |  | 2084|  7.76k|    case MFF_XREG12: case MFF_XREG13: case MFF_XREG14: case MFF_XREG15
  |  |  ------------------
  |  |  |  Branch (2084:5): [True: 365, False: 259k]
  |  |  |  Branch (2084:22): [True: 484, False: 259k]
  |  |  |  Branch (2084:39): [True: 202, False: 259k]
  |  |  ------------------
  ------------------
  281|  7.76k|        return !flow_get_xreg(&wc->masks, mf->id - MFF_XREG0);
  282|  7.71k|    CASE_MFF_XXREGS: {
  ------------------
  |  | 2093|  7.56k|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3: \
  |  |  ------------------
  |  |  |  Branch (2093:5): [True: 278, False: 259k]
  |  |  |  Branch (2093:22): [True: 423, False: 259k]
  |  |  |  Branch (2093:39): [True: 5.27k, False: 254k]
  |  |  |  Branch (2093:56): [True: 1.59k, False: 258k]
  |  |  ------------------
  |  | 2094|  7.71k|    case MFF_XXREG4: case MFF_XXREG5: case MFF_XXREG6: case MFF_XXREG7
  |  |  ------------------
  |  |  |  Branch (2094:5): [True: 66, False: 259k]
  |  |  |  Branch (2094:22): [True: 34, False: 259k]
  |  |  |  Branch (2094:39): [True: 10, False: 259k]
  |  |  ------------------
  ------------------
  283|  7.71k|        ovs_u128 value = flow_get_xxreg(&wc->masks, mf->id - MFF_XXREG0);
  284|  7.71k|        return ovs_u128_is_zero(value);
  285|  37.5k|    }
  286|    982|    case MFF_ACTSET_OUTPUT:
  ------------------
  |  Branch (286:5): [True: 982, False: 258k]
  ------------------
  287|    982|        return !wc->masks.actset_output;
  288|       |
  289|    449|    case MFF_ETH_SRC:
  ------------------
  |  Branch (289:5): [True: 449, False: 259k]
  ------------------
  290|    449|        return eth_addr_is_zero(wc->masks.dl_src);
  291|    483|    case MFF_ETH_DST:
  ------------------
  |  Branch (291:5): [True: 483, False: 259k]
  ------------------
  292|    483|        return eth_addr_is_zero(wc->masks.dl_dst);
  293|    437|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (293:5): [True: 437, False: 259k]
  ------------------
  294|    437|        return !wc->masks.dl_type;
  295|       |
  296|    138|    case MFF_ARP_SHA:
  ------------------
  |  Branch (296:5): [True: 138, False: 259k]
  ------------------
  297|    779|    case MFF_ND_SLL:
  ------------------
  |  Branch (297:5): [True: 641, False: 259k]
  ------------------
  298|    779|        return eth_addr_is_zero(wc->masks.arp_sha);
  299|       |
  300|    820|    case MFF_ARP_THA:
  ------------------
  |  Branch (300:5): [True: 820, False: 258k]
  ------------------
  301|  4.65k|    case MFF_ND_TLL:
  ------------------
  |  Branch (301:5): [True: 3.83k, False: 255k]
  ------------------
  302|  4.65k|        return eth_addr_is_zero(wc->masks.arp_tha);
  303|       |
  304|  1.46k|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (304:5): [True: 1.46k, False: 258k]
  ------------------
  305|  1.46k|        return !wc->masks.vlans[0].tci;
  306|      0|    case MFF_DL_VLAN:
  ------------------
  |  Branch (306:5): [True: 0, False: 259k]
  ------------------
  307|      0|        return !(wc->masks.vlans[0].tci & htons(VLAN_VID_MASK));
  308|  1.06k|    case MFF_VLAN_VID:
  ------------------
  |  Branch (308:5): [True: 1.06k, False: 258k]
  ------------------
  309|  1.06k|        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: 259k]
  ------------------
  311|  1.00k|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (311:5): [True: 1.00k, False: 258k]
  ------------------
  312|  1.00k|        return !(wc->masks.vlans[0].tci & htons(VLAN_PCP_MASK));
  313|       |
  314|  1.72k|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (314:5): [True: 1.72k, False: 258k]
  ------------------
  315|  1.72k|        return !(wc->masks.mpls_lse[0] & htonl(MPLS_LABEL_MASK));
  316|    533|    case MFF_MPLS_TC:
  ------------------
  |  Branch (316:5): [True: 533, False: 259k]
  ------------------
  317|    533|        return !(wc->masks.mpls_lse[0] & htonl(MPLS_TC_MASK));
  318|    502|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (318:5): [True: 502, False: 259k]
  ------------------
  319|    502|        return !(wc->masks.mpls_lse[0] & htonl(MPLS_BOS_MASK));
  320|  2.93k|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (320:5): [True: 2.93k, False: 256k]
  ------------------
  321|  2.93k|        return !(wc->masks.mpls_lse[0] & htonl(MPLS_TTL_MASK));
  322|       |
  323|    500|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (323:5): [True: 500, False: 259k]
  ------------------
  324|    500|        return !wc->masks.nw_src;
  325|  1.22k|    case MFF_IPV4_DST:
  ------------------
  |  Branch (325:5): [True: 1.22k, False: 258k]
  ------------------
  326|  1.22k|        return !wc->masks.nw_dst;
  327|       |
  328|    793|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (328:5): [True: 793, False: 258k]
  ------------------
  329|    793|        return ipv6_mask_is_any(&wc->masks.ipv6_src);
  330|  1.45k|    case MFF_IPV6_DST:
  ------------------
  |  Branch (330:5): [True: 1.45k, False: 258k]
  ------------------
  331|  1.45k|        return ipv6_mask_is_any(&wc->masks.ipv6_dst);
  332|       |
  333|    332|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (333:5): [True: 332, False: 259k]
  ------------------
  334|    332|        return !wc->masks.ipv6_label;
  335|       |
  336|  3.04k|    case MFF_IP_PROTO:
  ------------------
  |  Branch (336:5): [True: 3.04k, False: 256k]
  ------------------
  337|  3.04k|        return !wc->masks.nw_proto;
  338|    504|    case MFF_IP_DSCP:
  ------------------
  |  Branch (338:5): [True: 504, False: 259k]
  ------------------
  339|  2.48k|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (339:5): [True: 1.98k, False: 257k]
  ------------------
  340|  2.48k|        return !(wc->masks.nw_tos & IP_DSCP_MASK);
  ------------------
  |  |  724|  2.48k|#define IP_DSCP_MASK 0xfc
  ------------------
  341|  1.14k|    case MFF_IP_ECN:
  ------------------
  |  Branch (341:5): [True: 1.14k, False: 258k]
  ------------------
  342|  1.14k|        return !(wc->masks.nw_tos & IP_ECN_MASK);
  ------------------
  |  |  722|  1.14k|#define IP_ECN_MASK 0x03
  ------------------
  343|    794|    case MFF_IP_TTL:
  ------------------
  |  Branch (343:5): [True: 794, False: 258k]
  ------------------
  344|    794|        return !wc->masks.nw_ttl;
  345|       |
  346|  2.85k|    case MFF_ND_TARGET:
  ------------------
  |  Branch (346:5): [True: 2.85k, False: 256k]
  ------------------
  347|  2.85k|        return ipv6_mask_is_any(&wc->masks.nd_target);
  348|       |
  349|    756|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (349:5): [True: 756, False: 259k]
  ------------------
  350|    756|        return !wc->masks.igmp_group_ip4;
  351|  1.07k|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (351:5): [True: 1.07k, False: 258k]
  ------------------
  352|  1.07k|        return !wc->masks.tcp_flags;
  353|       |
  354|  1.03k|    case MFF_IP_FRAG:
  ------------------
  |  Branch (354:5): [True: 1.03k, False: 258k]
  ------------------
  355|  1.03k|        return !(wc->masks.nw_frag & FLOW_NW_FRAG_MASK);
  ------------------
  |  |   56|  1.03k|#define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   54|  1.03k|#define FLOW_NW_FRAG_ANY   (1 << 0) /* Set for any IP frag. */
  |  |  ------------------
  |  |               #define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   55|  1.03k|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  |  |  ------------------
  ------------------
  356|       |
  357|    399|    case MFF_ARP_OP:
  ------------------
  |  Branch (357:5): [True: 399, False: 259k]
  ------------------
  358|    399|        return !wc->masks.nw_proto;
  359|    802|    case MFF_ARP_SPA:
  ------------------
  |  Branch (359:5): [True: 802, False: 258k]
  ------------------
  360|    802|        return !wc->masks.nw_src;
  361|  1.38k|    case MFF_ARP_TPA:
  ------------------
  |  Branch (361:5): [True: 1.38k, False: 258k]
  ------------------
  362|  1.38k|        return !wc->masks.nw_dst;
  363|       |
  364|    949|    case MFF_TCP_SRC:
  ------------------
  |  Branch (364:5): [True: 949, False: 258k]
  ------------------
  365|  1.73k|    case MFF_UDP_SRC:
  ------------------
  |  Branch (365:5): [True: 790, False: 258k]
  ------------------
  366|  2.06k|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (366:5): [True: 330, False: 259k]
  ------------------
  367|  2.43k|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (367:5): [True: 364, False: 259k]
  ------------------
  368|  3.43k|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (368:5): [True: 1.00k, False: 258k]
  ------------------
  369|  3.43k|        return !wc->masks.tp_src;
  370|    359|    case MFF_TCP_DST:
  ------------------
  |  Branch (370:5): [True: 359, False: 259k]
  ------------------
  371|  1.40k|    case MFF_UDP_DST:
  ------------------
  |  Branch (371:5): [True: 1.04k, False: 258k]
  ------------------
  372|  2.32k|    case MFF_SCTP_DST:
  ------------------
  |  Branch (372:5): [True: 918, False: 258k]
  ------------------
  373|  2.77k|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (373:5): [True: 449, False: 259k]
  ------------------
  374|  3.10k|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (374:5): [True: 333, False: 259k]
  ------------------
  375|  3.10k|        return !wc->masks.tp_dst;
  376|  1.34k|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (376:5): [True: 1.34k, False: 258k]
  ------------------
  377|  1.34k|        return !wc->masks.tcp_flags;
  378|       |
  379|  1.88k|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (379:5): [True: 1.88k, False: 257k]
  ------------------
  380|  1.88k|        return !wc->masks.nsh.flags;
  381|    635|    case MFF_NSH_TTL:
  ------------------
  |  Branch (381:5): [True: 635, False: 259k]
  ------------------
  382|    635|        return !wc->masks.nsh.ttl;
  383|    272|    case MFF_NSH_MDTYPE:
  ------------------
  |  Branch (383:5): [True: 272, False: 259k]
  ------------------
  384|    272|        return !wc->masks.nsh.mdtype;
  385|  1.62k|    case MFF_NSH_NP:
  ------------------
  |  Branch (385:5): [True: 1.62k, False: 258k]
  ------------------
  386|  1.62k|        return !wc->masks.nsh.np;
  387|    292|    case MFF_NSH_SPI:
  ------------------
  |  Branch (387:5): [True: 292, False: 259k]
  ------------------
  388|    292|        return !(wc->masks.nsh.path_hdr & htonl(NSH_SPI_MASK));
  389|    967|    case MFF_NSH_SI:
  ------------------
  |  Branch (389:5): [True: 967, False: 258k]
  ------------------
  390|    967|        return !(wc->masks.nsh.path_hdr & htonl(NSH_SI_MASK));
  391|    528|    case MFF_NSH_C1:
  ------------------
  |  Branch (391:5): [True: 528, False: 259k]
  ------------------
  392|  1.07k|    case MFF_NSH_C2:
  ------------------
  |  Branch (392:5): [True: 549, False: 259k]
  ------------------
  393|  1.58k|    case MFF_NSH_C3:
  ------------------
  |  Branch (393:5): [True: 508, False: 259k]
  ------------------
  394|  1.95k|    case MFF_NSH_C4:
  ------------------
  |  Branch (394:5): [True: 367, False: 259k]
  ------------------
  395|  1.95k|        return !wc->masks.nsh.context[mf->id - MFF_NSH_C1];
  396|    739|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (396:5): [True: 739, False: 259k]
  ------------------
  397|    739|        return !wc->masks.tunnel.gtpu_flags;
  398|    667|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (398:5): [True: 667, False: 259k]
  ------------------
  399|    667|        return !wc->masks.tunnel.gtpu_msgtype;
  400|       |
  401|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (401:5): [True: 0, False: 259k]
  ------------------
  402|      0|    default:
  ------------------
  |  Branch (402:5): [True: 0, False: 259k]
  ------------------
  403|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  404|   259k|    }
  405|   259k|}
mf_get_mask:
  416|  42.8k|{
  417|  42.8k|    mf_get_value(mf, &wc->masks, mask);
  418|  42.8k|}
mf_is_mask_valid:
  424|   278k|{
  425|   278k|    switch (mf->maskable) {
  ------------------
  |  Branch (425:13): [True: 278k, False: 0]
  ------------------
  426|  55.1k|    case MFM_NONE:
  ------------------
  |  Branch (426:5): [True: 55.1k, False: 223k]
  ------------------
  427|  55.1k|        return (is_all_zeros(mask, mf->n_bytes) ||
  ------------------
  |  Branch (427:17): [True: 7.70k, False: 47.4k]
  ------------------
  428|  47.4k|                is_all_ones(mask, mf->n_bytes));
  ------------------
  |  Branch (428:17): [True: 46.3k, False: 1.02k]
  ------------------
  429|       |
  430|   223k|    case MFM_FULLY:
  ------------------
  |  Branch (430:5): [True: 223k, False: 55.1k]
  ------------------
  431|   223k|        return true;
  432|   278k|    }
  433|       |
  434|      0|    OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  435|   278k|}
mf_are_prereqs_ok:
  496|  4.55k|{
  497|       |    return mf_are_prereqs_ok__(mf, flow, NULL, wc);
  498|  4.55k|}
mf_are_match_prereqs_ok:
  504|  79.0k|{
  505|       |    return mf_are_prereqs_ok__(mf, &match->flow, &match->wc, NULL);
  506|  79.0k|}
mf_is_value_valid:
  520|   284k|{
  521|   284k|    switch (mf->id) {
  522|  1.65k|    case MFF_DP_HASH:
  ------------------
  |  Branch (522:5): [True: 1.65k, False: 283k]
  ------------------
  523|  2.85k|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (523:5): [True: 1.20k, False: 283k]
  ------------------
  524|  23.5k|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (524:5): [True: 20.6k, False: 264k]
  ------------------
  525|  23.7k|    case MFF_CONJ_ID:
  ------------------
  |  Branch (525:5): [True: 249, False: 284k]
  ------------------
  526|  24.3k|    case MFF_TUN_ID:
  ------------------
  |  Branch (526:5): [True: 536, False: 284k]
  ------------------
  527|  25.1k|    case MFF_TUN_SRC:
  ------------------
  |  Branch (527:5): [True: 848, False: 284k]
  ------------------
  528|  25.5k|    case MFF_TUN_DST:
  ------------------
  |  Branch (528:5): [True: 356, False: 284k]
  ------------------
  529|  27.2k|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (529:5): [True: 1.71k, False: 283k]
  ------------------
  530|  28.2k|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (530:5): [True: 963, False: 283k]
  ------------------
  531|  28.2k|    case MFF_TUN_TOS:
  ------------------
  |  Branch (531:5): [True: 0, False: 284k]
  ------------------
  532|  28.2k|    case MFF_TUN_TTL:
  ------------------
  |  Branch (532:5): [True: 0, False: 284k]
  ------------------
  533|  29.1k|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (533:5): [True: 957, False: 283k]
  ------------------
  534|  30.4k|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (534:5): [True: 1.29k, False: 283k]
  ------------------
  535|  30.6k|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (535:5): [True: 207, False: 284k]
  ------------------
  536|  31.4k|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (536:5): [True: 786, False: 284k]
  ------------------
  537|  31.8k|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (537:5): [True: 430, False: 284k]
  ------------------
  538|  32.6k|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (538:5): [True: 739, False: 284k]
  ------------------
  539|  33.3k|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (539:5): [True: 739, False: 284k]
  ------------------
  540|  34.0k|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (540:5): [True: 667, False: 284k]
  ------------------
  541|  7.20M|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2110|  40.8k|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2110:5): [True: 1.75k, False: 283k]
  |  |  |  Branch (2110:29): [True: 5.10k, False: 279k]
  |  |  ------------------
  |  | 2111|  44.8k|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2111:5): [True: 2.61k, False: 282k]
  |  |  |  Branch (2111:29): [True: 1.35k, False: 283k]
  |  |  ------------------
  |  | 2112|  52.7k|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2112:5): [True: 4.27k, False: 280k]
  |  |  |  Branch (2112:29): [True: 3.64k, False: 281k]
  |  |  ------------------
  |  | 2113|  58.3k|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2113:5): [True: 4.81k, False: 280k]
  |  |  |  Branch (2113:29): [True: 747, False: 284k]
  |  |  ------------------
  |  | 2114|  64.0k|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2114:5): [True: 4.99k, False: 279k]
  |  |  |  Branch (2114:29): [True: 762, False: 284k]
  |  |  ------------------
  |  | 2115|  66.4k|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2115:5): [True: 1.88k, False: 282k]
  |  |  |  Branch (2115:30): [True: 488, False: 284k]
  |  |  ------------------
  |  | 2116|  72.8k|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2116:5): [True: 4.39k, False: 280k]
  |  |  |  Branch (2116:30): [True: 2.03k, False: 282k]
  |  |  ------------------
  |  | 2117|  77.7k|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2117:5): [True: 2.16k, False: 282k]
  |  |  |  Branch (2117:30): [True: 2.66k, False: 282k]
  |  |  ------------------
  |  | 2118|  83.2k|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2118:5): [True: 2.27k, False: 282k]
  |  |  |  Branch (2118:30): [True: 3.26k, False: 281k]
  |  |  ------------------
  |  | 2119|  91.8k|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2119:5): [True: 6.95k, False: 277k]
  |  |  |  Branch (2119:30): [True: 1.58k, False: 283k]
  |  |  ------------------
  |  | 2120|  97.1k|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2120:5): [True: 1.51k, False: 283k]
  |  |  |  Branch (2120:30): [True: 3.86k, False: 280k]
  |  |  ------------------
  |  | 2121|   100k|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2121:5): [True: 2.27k, False: 282k]
  |  |  |  Branch (2121:30): [True: 955, False: 283k]
  |  |  ------------------
  |  | 2122|   107k|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2122:5): [True: 3.30k, False: 281k]
  |  |  |  Branch (2122:30): [True: 3.58k, False: 281k]
  |  |  ------------------
  |  | 2123|   109k|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2123:5): [True: 1.68k, False: 283k]
  |  |  |  Branch (2123:30): [True: 739, False: 284k]
  |  |  ------------------
  |  | 2124|   111k|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2124:5): [True: 663, False: 284k]
  |  |  |  Branch (2124:30): [True: 1.59k, False: 283k]
  |  |  ------------------
  |  | 2125|   116k|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2125:5): [True: 1.37k, False: 283k]
  |  |  |  Branch (2125:30): [True: 2.65k, False: 282k]
  |  |  ------------------
  |  | 2126|   124k|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2126:5): [True: 2.55k, False: 282k]
  |  |  |  Branch (2126:30): [True: 6.29k, False: 278k]
  |  |  ------------------
  |  | 2127|   128k|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2127:5): [True: 2.66k, False: 282k]
  |  |  |  Branch (2127:30): [True: 1.26k, False: 283k]
  |  |  ------------------
  |  | 2128|   130k|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2128:5): [True: 346, False: 284k]
  |  |  |  Branch (2128:30): [True: 1.28k, False: 283k]
  |  |  ------------------
  |  | 2129|   132k|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2129:5): [True: 809, False: 284k]
  |  |  |  Branch (2129:30): [True: 1.09k, False: 283k]
  |  |  ------------------
  |  | 2130|   135k|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2130:5): [True: 1.16k, False: 283k]
  |  |  |  Branch (2130:30): [True: 1.59k, False: 283k]
  |  |  ------------------
  |  | 2131|   136k|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2131:5): [True: 379, False: 284k]
  |  |  |  Branch (2131:30): [True: 890, False: 283k]
  |  |  ------------------
  |  | 2132|   137k|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2132:5): [True: 158, False: 284k]
  |  |  |  Branch (2132:30): [True: 996, False: 283k]
  |  |  ------------------
  |  | 2133|   140k|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2133:5): [True: 1.85k, False: 282k]
  |  |  |  Branch (2133:30): [True: 879, False: 283k]
  |  |  ------------------
  |  | 2134|   144k|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2134:5): [True: 1.01k, False: 283k]
  |  |  |  Branch (2134:30): [True: 3.33k, False: 281k]
  |  |  ------------------
  |  | 2135|   147k|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2135:5): [True: 2.05k, False: 282k]
  |  |  |  Branch (2135:30): [True: 1.00k, False: 283k]
  |  |  ------------------
  |  | 2136|   151k|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2136:5): [True: 736, False: 284k]
  |  |  |  Branch (2136:30): [True: 2.69k, False: 282k]
  |  |  ------------------
  |  | 2137|   155k|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2137:5): [True: 1.17k, False: 283k]
  |  |  |  Branch (2137:30): [True: 3.24k, False: 281k]
  |  |  ------------------
  |  | 2138|   163k|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2138:5): [True: 3.42k, False: 281k]
  |  |  |  Branch (2138:30): [True: 4.74k, False: 280k]
  |  |  ------------------
  |  | 2139|   166k|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2139:5): [True: 1.92k, False: 282k]
  |  |  |  Branch (2139:30): [True: 939, False: 283k]
  |  |  ------------------
  |  | 2140|   171k|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2140:5): [True: 2.45k, False: 282k]
  |  |  |  Branch (2140:30): [True: 2.04k, False: 282k]
  |  |  ------------------
  |  | 2141|   174k|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2141:5): [True: 917, False: 283k]
  |  |  ------------------
  ------------------
  542|  7.20M|    case MFF_METADATA:
  ------------------
  |  Branch (542:5): [True: 474, False: 284k]
  ------------------
  543|   178k|    case MFF_IN_PORT:
  ------------------
  |  Branch (543:5): [True: 3.58k, False: 281k]
  ------------------
  544|   178k|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (544:5): [True: 0, False: 284k]
  ------------------
  545|   179k|    case MFF_PKT_MARK:
  ------------------
  |  Branch (545:5): [True: 1.09k, False: 283k]
  ------------------
  546|   180k|    case MFF_CT_ZONE:
  ------------------
  |  Branch (546:5): [True: 384, False: 284k]
  ------------------
  547|   180k|    case MFF_CT_MARK:
  ------------------
  |  Branch (547:5): [True: 822, False: 284k]
  ------------------
  548|   182k|    case MFF_CT_LABEL:
  ------------------
  |  Branch (548:5): [True: 1.11k, False: 283k]
  ------------------
  549|   182k|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (549:5): [True: 388, False: 284k]
  ------------------
  550|   183k|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (550:5): [True: 851, False: 283k]
  ------------------
  551|   183k|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (551:5): [True: 688, False: 284k]
  ------------------
  552|   184k|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (552:5): [True: 599, False: 284k]
  ------------------
  553|   186k|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (553:5): [True: 1.81k, False: 283k]
  ------------------
  554|   186k|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (554:5): [True: 473, False: 284k]
  ------------------
  555|   187k|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (555:5): [True: 345, False: 284k]
  ------------------
  556|  6.42M|    CASE_MFF_REGS:
  ------------------
  |  | 2065|   190k|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:     \
  |  |  ------------------
  |  |  |  Branch (2065:5): [True: 1.17k, False: 283k]
  |  |  |  Branch (2065:20): [True: 475, False: 284k]
  |  |  |  Branch (2065:35): [True: 1.25k, False: 283k]
  |  |  |  Branch (2065:50): [True: 786, False: 284k]
  |  |  ------------------
  |  | 2066|   193k|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:     \
  |  |  ------------------
  |  |  |  Branch (2066:5): [True: 383, False: 284k]
  |  |  |  Branch (2066:20): [True: 1.30k, False: 283k]
  |  |  |  Branch (2066:35): [True: 623, False: 284k]
  |  |  |  Branch (2066:50): [True: 416, False: 284k]
  |  |  ------------------
  |  | 2067|   199k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11:   \
  |  |  ------------------
  |  |  |  Branch (2067:5): [True: 531, False: 284k]
  |  |  |  Branch (2067:20): [True: 1.39k, False: 283k]
  |  |  |  Branch (2067:35): [True: 1.26k, False: 283k]
  |  |  |  Branch (2067:51): [True: 3.03k, False: 281k]
  |  |  ------------------
  |  | 2068|   204k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15: \
  |  |  ------------------
  |  |  |  Branch (2068:5): [True: 696, False: 284k]
  |  |  |  Branch (2068:21): [True: 1.15k, False: 283k]
  |  |  |  Branch (2068:37): [True: 1.36k, False: 283k]
  |  |  |  Branch (2068:53): [True: 1.53k, False: 283k]
  |  |  ------------------
  |  | 2069|   205k|    case MFF_REG16: case MFF_REG17: case MFF_REG18: case MFF_REG19: \
  |  |  ------------------
  |  |  |  Branch (2069:5): [True: 106, False: 284k]
  |  |  |  Branch (2069:21): [True: 370, False: 284k]
  |  |  |  Branch (2069:37): [True: 92, False: 284k]
  |  |  |  Branch (2069:53): [True: 170, False: 284k]
  |  |  ------------------
  |  | 2070|   206k|    case MFF_REG20: case MFF_REG21: case MFF_REG22: case MFF_REG23: \
  |  |  ------------------
  |  |  |  Branch (2070:5): [True: 55, False: 284k]
  |  |  |  Branch (2070:21): [True: 325, False: 284k]
  |  |  |  Branch (2070:37): [True: 349, False: 284k]
  |  |  |  Branch (2070:53): [True: 129, False: 284k]
  |  |  ------------------
  |  | 2071|   206k|    case MFF_REG24: case MFF_REG25: case MFF_REG26: case MFF_REG27: \
  |  |  ------------------
  |  |  |  Branch (2071:5): [True: 185, False: 284k]
  |  |  |  Branch (2071:21): [True: 206, False: 284k]
  |  |  |  Branch (2071:37): [True: 96, False: 284k]
  |  |  |  Branch (2071:53): [True: 315, False: 284k]
  |  |  ------------------
  |  | 2072|   207k|    case MFF_REG28: case MFF_REG29: case MFF_REG30: case MFF_REG31
  |  |  ------------------
  |  |  |  Branch (2072:5): [True: 216, False: 284k]
  |  |  |  Branch (2072:21): [True: 70, False: 284k]
  |  |  |  Branch (2072:37): [True: 125, False: 284k]
  |  |  ------------------
  ------------------
  557|  6.42M|    CASE_MFF_XREGS:
  ------------------
  |  | 2081|   211k|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3:    \
  |  |  ------------------
  |  |  |  Branch (2081:5): [True: 202, False: 284k]
  |  |  |  Branch (2081:21): [True: 112, False: 284k]
  |  |  |  Branch (2081:37): [True: 1.24k, False: 283k]
  |  |  |  Branch (2081:53): [True: 2.06k, False: 282k]
  |  |  ------------------
  |  | 2082|   213k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7:    \
  |  |  ------------------
  |  |  |  Branch (2082:5): [True: 319, False: 284k]
  |  |  |  Branch (2082:21): [True: 711, False: 284k]
  |  |  |  Branch (2082:37): [True: 309, False: 284k]
  |  |  |  Branch (2082:53): [True: 791, False: 284k]
  |  |  ------------------
  |  | 2083|   214k|    case MFF_XREG8: case MFF_XREG9: case MFF_XREG10: case MFF_XREG11:  \
  |  |  ------------------
  |  |  |  Branch (2083:5): [True: 153, False: 284k]
  |  |  |  Branch (2083:21): [True: 275, False: 284k]
  |  |  |  Branch (2083:37): [True: 170, False: 284k]
  |  |  |  Branch (2083:54): [True: 212, False: 284k]
  |  |  ------------------
  |  | 2084|   215k|    case MFF_XREG12: case MFF_XREG13: case MFF_XREG14: case MFF_XREG15
  |  |  ------------------
  |  |  |  Branch (2084:5): [True: 365, False: 284k]
  |  |  |  Branch (2084:22): [True: 484, False: 284k]
  |  |  |  Branch (2084:39): [True: 202, False: 284k]
  |  |  ------------------
  ------------------
  558|  3.39M|    CASE_MFF_XXREGS:
  ------------------
  |  | 2093|   222k|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3: \
  |  |  ------------------
  |  |  |  Branch (2093:5): [True: 278, False: 284k]
  |  |  |  Branch (2093:22): [True: 423, False: 284k]
  |  |  |  Branch (2093:39): [True: 5.27k, False: 279k]
  |  |  |  Branch (2093:56): [True: 1.59k, False: 283k]
  |  |  ------------------
  |  | 2094|   222k|    case MFF_XXREG4: case MFF_XXREG5: case MFF_XXREG6: case MFF_XXREG7
  |  |  ------------------
  |  |  |  Branch (2094:5): [True: 66, False: 284k]
  |  |  |  Branch (2094:22): [True: 34, False: 284k]
  |  |  |  Branch (2094:39): [True: 10, False: 284k]
  |  |  ------------------
  ------------------
  559|  1.76M|    case MFF_ETH_SRC:
  ------------------
  |  Branch (559:5): [True: 515, False: 284k]
  ------------------
  560|   223k|    case MFF_ETH_DST:
  ------------------
  |  Branch (560:5): [True: 483, False: 284k]
  ------------------
  561|   224k|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (561:5): [True: 437, False: 284k]
  ------------------
  562|   225k|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (562:5): [True: 1.47k, False: 283k]
  ------------------
  563|   228k|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (563:5): [True: 2.93k, False: 281k]
  ------------------
  564|   229k|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (564:5): [True: 501, False: 284k]
  ------------------
  565|   230k|    case MFF_IPV4_DST:
  ------------------
  |  Branch (565:5): [True: 1.24k, False: 283k]
  ------------------
  566|   231k|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (566:5): [True: 793, False: 284k]
  ------------------
  567|   232k|    case MFF_IPV6_DST:
  ------------------
  |  Branch (567:5): [True: 1.45k, False: 283k]
  ------------------
  568|   236k|    case MFF_IP_PROTO:
  ------------------
  |  Branch (568:5): [True: 4.10k, False: 280k]
  ------------------
  569|   237k|    case MFF_IP_TTL:
  ------------------
  |  Branch (569:5): [True: 794, False: 284k]
  ------------------
  570|   238k|    case MFF_ARP_SPA:
  ------------------
  |  Branch (570:5): [True: 806, False: 284k]
  ------------------
  571|   239k|    case MFF_ARP_TPA:
  ------------------
  |  Branch (571:5): [True: 1.38k, False: 283k]
  ------------------
  572|   240k|    case MFF_ARP_SHA:
  ------------------
  |  Branch (572:5): [True: 139, False: 284k]
  ------------------
  573|   240k|    case MFF_ARP_THA:
  ------------------
  |  Branch (573:5): [True: 820, False: 284k]
  ------------------
  574|   241k|    case MFF_TCP_SRC:
  ------------------
  |  Branch (574:5): [True: 1.07k, False: 283k]
  ------------------
  575|   242k|    case MFF_TCP_DST:
  ------------------
  |  Branch (575:5): [True: 362, False: 284k]
  ------------------
  576|   243k|    case MFF_UDP_SRC:
  ------------------
  |  Branch (576:5): [True: 847, False: 284k]
  ------------------
  577|   244k|    case MFF_UDP_DST:
  ------------------
  |  Branch (577:5): [True: 1.17k, False: 283k]
  ------------------
  578|   244k|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (578:5): [True: 363, False: 284k]
  ------------------
  579|   245k|    case MFF_SCTP_DST:
  ------------------
  |  Branch (579:5): [True: 1.01k, False: 283k]
  ------------------
  580|   246k|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (580:5): [True: 365, False: 284k]
  ------------------
  581|   247k|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (581:5): [True: 1.22k, False: 283k]
  ------------------
  582|   248k|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (582:5): [True: 1.08k, False: 283k]
  ------------------
  583|   248k|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (583:5): [True: 348, False: 284k]
  ------------------
  584|   251k|    case MFF_ND_TARGET:
  ------------------
  |  Branch (584:5): [True: 2.95k, False: 281k]
  ------------------
  585|   253k|    case MFF_ND_SLL:
  ------------------
  |  Branch (585:5): [True: 2.08k, False: 282k]
  ------------------
  586|   258k|    case MFF_ND_TLL:
  ------------------
  |  Branch (586:5): [True: 4.87k, False: 279k]
  ------------------
  587|   259k|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (587:5): [True: 756, False: 284k]
  ------------------
  588|   260k|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (588:5): [True: 1.14k, False: 283k]
  ------------------
  589|   260k|        return true;
  590|       |
  591|    784|    case MFF_IN_PORT_OXM:
  ------------------
  |  Branch (591:5): [True: 784, False: 284k]
  ------------------
  592|  1.76k|    case MFF_ACTSET_OUTPUT: {
  ------------------
  |  Branch (592:5): [True: 983, False: 283k]
  ------------------
  593|  1.76k|        ofp_port_t port;
  594|  1.76k|        return !ofputil_port_from_ofp11(value->be32, &port);
  595|    784|    }
  596|       |
  597|    507|    case MFF_IP_DSCP:
  ------------------
  |  Branch (597:5): [True: 507, False: 284k]
  ------------------
  598|    507|        return !(value->u8 & ~IP_DSCP_MASK);
  ------------------
  |  |  724|    507|#define IP_DSCP_MASK 0xfc
  ------------------
  599|  2.11k|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (599:5): [True: 2.11k, False: 282k]
  ------------------
  600|  2.11k|        return !(value->u8 & (~IP_DSCP_MASK >> 2));
  ------------------
  |  |  724|  2.11k|#define IP_DSCP_MASK 0xfc
  ------------------
  601|  1.15k|    case MFF_IP_ECN:
  ------------------
  |  Branch (601:5): [True: 1.15k, False: 283k]
  ------------------
  602|  1.15k|        return !(value->u8 & ~IP_ECN_MASK);
  ------------------
  |  |  722|  1.15k|#define IP_ECN_MASK 0x03
  ------------------
  603|  1.03k|    case MFF_IP_FRAG:
  ------------------
  |  Branch (603:5): [True: 1.03k, False: 283k]
  ------------------
  604|  1.03k|        return !(value->u8 & ~FLOW_NW_FRAG_MASK);
  ------------------
  |  |   56|  1.03k|#define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   54|  1.03k|#define FLOW_NW_FRAG_ANY   (1 << 0) /* Set for any IP frag. */
  |  |  ------------------
  |  |               #define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   55|  1.03k|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  |  |  ------------------
  ------------------
  605|  1.34k|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (605:5): [True: 1.34k, False: 283k]
  ------------------
  606|  1.34k|        return !(value->be16 & ~htons(0x0fff));
  607|       |
  608|    404|    case MFF_ARP_OP:
  ------------------
  |  Branch (608:5): [True: 404, False: 284k]
  ------------------
  609|    404|        return !(value->be16 & htons(0xff00));
  610|       |
  611|      0|    case MFF_DL_VLAN:
  ------------------
  |  Branch (611:5): [True: 0, False: 284k]
  ------------------
  612|      0|        return !(value->be16 & htons(VLAN_CFI | VLAN_PCP_MASK));
  613|  1.85k|    case MFF_VLAN_VID:
  ------------------
  |  Branch (613:5): [True: 1.85k, False: 282k]
  ------------------
  614|  1.85k|        return !(value->be16 & htons(VLAN_PCP_MASK));
  615|       |
  616|      0|    case MFF_DL_VLAN_PCP:
  ------------------
  |  Branch (616:5): [True: 0, False: 284k]
  ------------------
  617|  1.10k|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (617:5): [True: 1.10k, False: 283k]
  ------------------
  618|  1.10k|        return !(value->u8 & ~(VLAN_PCP_MASK >> VLAN_PCP_SHIFT));
  ------------------
  |  |  497|  1.10k|#define VLAN_PCP_MASK 0xe000
  ------------------
                      return !(value->u8 & ~(VLAN_PCP_MASK >> VLAN_PCP_SHIFT));
  ------------------
  |  |  498|  1.10k|#define VLAN_PCP_SHIFT 13
  ------------------
  619|       |
  620|    350|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (620:5): [True: 350, False: 284k]
  ------------------
  621|    350|        return !(value->be32 & ~htonl(IPV6_LABEL_MASK));
  622|       |
  623|  1.73k|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (623:5): [True: 1.73k, False: 283k]
  ------------------
  624|  1.73k|        return !(value->be32 & ~htonl(MPLS_LABEL_MASK >> MPLS_LABEL_SHIFT));
  625|       |
  626|    628|    case MFF_MPLS_TC:
  ------------------
  |  Branch (626:5): [True: 628, False: 284k]
  ------------------
  627|    628|        return !(value->u8 & ~(MPLS_TC_MASK >> MPLS_TC_SHIFT));
  ------------------
  |  |  551|    628|#define MPLS_TC_MASK        0x00000e00
  ------------------
                      return !(value->u8 & ~(MPLS_TC_MASK >> MPLS_TC_SHIFT));
  ------------------
  |  |  552|    628|#define MPLS_TC_SHIFT       9
  ------------------
  628|       |
  629|    505|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (629:5): [True: 505, False: 284k]
  ------------------
  630|    505|        return !(value->u8 & ~(MPLS_BOS_MASK >> MPLS_BOS_SHIFT));
  ------------------
  |  |  548|    505|#define MPLS_BOS_MASK       0x00000100
  ------------------
                      return !(value->u8 & ~(MPLS_BOS_MASK >> MPLS_BOS_SHIFT));
  ------------------
  |  |  549|    505|#define MPLS_BOS_SHIFT      8
  ------------------
  631|       |
  632|    542|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (632:5): [True: 542, False: 284k]
  ------------------
  633|    542|        return !(value->be16 & ~htons(FLOW_TNL_PUB_F_MASK));
  634|       |
  635|  1.05k|    case MFF_CT_STATE:
  ------------------
  |  Branch (635:5): [True: 1.05k, False: 283k]
  ------------------
  636|  1.05k|        return !(value->be32 & ~htonl(CS_SUPPORTED_MASK));
  637|       |
  638|  1.98k|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (638:5): [True: 1.98k, False: 282k]
  ------------------
  639|  1.98k|        return true;
  640|    930|    case MFF_NSH_TTL:
  ------------------
  |  Branch (640:5): [True: 930, False: 283k]
  ------------------
  641|    930|        return (value->u8 <= 63);
  642|    477|    case MFF_NSH_MDTYPE:
  ------------------
  |  Branch (642:5): [True: 477, False: 284k]
  ------------------
  643|    477|        return (value->u8 == 1 || value->u8 == 2);
  ------------------
  |  Branch (643:17): [True: 195, False: 282]
  |  Branch (643:35): [True: 77, False: 205]
  ------------------
  644|  1.62k|    case MFF_NSH_NP:
  ------------------
  |  Branch (644:5): [True: 1.62k, False: 283k]
  ------------------
  645|  1.62k|        return true;
  646|    300|    case MFF_NSH_SPI:
  ------------------
  |  Branch (646:5): [True: 300, False: 284k]
  ------------------
  647|    300|        return !(value->be32 & htonl(0xFF000000));
  648|    967|    case MFF_NSH_SI:
  ------------------
  |  Branch (648:5): [True: 967, False: 283k]
  ------------------
  649|  1.49k|    case MFF_NSH_C1:
  ------------------
  |  Branch (649:5): [True: 528, False: 284k]
  ------------------
  650|  2.04k|    case MFF_NSH_C2:
  ------------------
  |  Branch (650:5): [True: 549, False: 284k]
  ------------------
  651|  2.55k|    case MFF_NSH_C3:
  ------------------
  |  Branch (651:5): [True: 508, False: 284k]
  ------------------
  652|  2.91k|    case MFF_NSH_C4:
  ------------------
  |  Branch (652:5): [True: 367, False: 284k]
  ------------------
  653|  2.91k|        return true;
  654|       |
  655|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (655:5): [True: 0, False: 284k]
  ------------------
  656|      0|    default:
  ------------------
  |  Branch (656:5): [True: 0, False: 284k]
  ------------------
  657|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  658|   284k|    }
  659|   284k|}
mf_get_value:
  666|  85.7k|{
  667|  85.7k|    switch (mf->id) {
  668|  1.03k|    case MFF_DP_HASH:
  ------------------
  |  Branch (668:5): [True: 1.03k, False: 84.7k]
  ------------------
  669|  1.03k|        value->be32 = htonl(flow->dp_hash);
  670|  1.03k|        break;
  671|  1.11k|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (671:5): [True: 1.11k, False: 84.6k]
  ------------------
  672|  1.11k|        value->be32 = htonl(flow->recirc_id);
  673|  1.11k|        break;
  674|  1.08k|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (674:5): [True: 1.08k, False: 84.6k]
  ------------------
  675|  1.08k|        value->be32 = flow->packet_type;
  676|  1.08k|        break;
  677|  1.38k|    case MFF_CONJ_ID:
  ------------------
  |  Branch (677:5): [True: 1.38k, False: 84.3k]
  ------------------
  678|  1.38k|        value->be32 = htonl(flow->conj_id);
  679|  1.38k|        break;
  680|  2.31k|    case MFF_TUN_ID:
  ------------------
  |  Branch (680:5): [True: 2.31k, False: 83.4k]
  ------------------
  681|  2.31k|        value->be64 = flow->tunnel.tun_id;
  682|  2.31k|        break;
  683|     30|    case MFF_TUN_SRC:
  ------------------
  |  Branch (683:5): [True: 30, False: 85.7k]
  ------------------
  684|     30|        value->be32 = flow->tunnel.ip_src;
  685|     30|        break;
  686|     30|    case MFF_TUN_DST:
  ------------------
  |  Branch (686:5): [True: 30, False: 85.7k]
  ------------------
  687|     30|        value->be32 = flow->tunnel.ip_dst;
  688|     30|        break;
  689|     16|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (689:5): [True: 16, False: 85.7k]
  ------------------
  690|     16|        value->ipv6 = flow->tunnel.ipv6_src;
  691|     16|        break;
  692|    494|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (692:5): [True: 494, False: 85.2k]
  ------------------
  693|    494|        value->ipv6 = flow->tunnel.ipv6_dst;
  694|    494|        break;
  695|    696|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (695:5): [True: 696, False: 85.0k]
  ------------------
  696|    696|        value->be16 = htons(flow->tunnel.flags & FLOW_TNL_PUB_F_MASK);
  697|    696|        break;
  698|     14|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (698:5): [True: 14, False: 85.7k]
  ------------------
  699|     14|        value->be16 = flow->tunnel.gbp_id;
  700|     14|        break;
  701|  2.07k|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (701:5): [True: 2.07k, False: 83.6k]
  ------------------
  702|  2.07k|        value->u8 = flow->tunnel.gbp_flags;
  703|  2.07k|        break;
  704|      0|    case MFF_TUN_TTL:
  ------------------
  |  Branch (704:5): [True: 0, False: 85.7k]
  ------------------
  705|      0|        value->u8 = flow->tunnel.ip_ttl;
  706|      0|        break;
  707|      0|    case MFF_TUN_TOS:
  ------------------
  |  Branch (707:5): [True: 0, False: 85.7k]
  ------------------
  708|      0|        value->u8 = flow->tunnel.ip_tos;
  709|      0|        break;
  710|      0|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (710:5): [True: 0, False: 85.7k]
  ------------------
  711|      0|        value->u8 = flow->tunnel.erspan_ver;
  712|      0|        break;
  713|      0|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (713:5): [True: 0, False: 85.7k]
  ------------------
  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: 85.7k]
  ------------------
  717|      0|        value->u8 = flow->tunnel.erspan_dir;
  718|      0|        break;
  719|      0|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (719:5): [True: 0, False: 85.7k]
  ------------------
  720|      0|        value->u8 = flow->tunnel.erspan_hwid;
  721|      0|        break;
  722|      0|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (722:5): [True: 0, False: 85.7k]
  ------------------
  723|      0|        value->u8 = flow->tunnel.gtpu_flags;
  724|      0|        break;
  725|      0|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (725:5): [True: 0, False: 85.7k]
  ------------------
  726|      0|        value->u8 = flow->tunnel.gtpu_msgtype;
  727|      0|        break;
  728|  46.1k|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2110|    558|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2110:5): [True: 18, False: 85.7k]
  |  |  |  Branch (2110:29): [True: 540, False: 85.2k]
  |  |  ------------------
  |  | 2111|  3.54k|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2111:5): [True: 974, False: 84.7k]
  |  |  |  Branch (2111:29): [True: 2.01k, False: 83.7k]
  |  |  ------------------
  |  | 2112|  3.82k|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2112:5): [True: 14, False: 85.7k]
  |  |  |  Branch (2112:29): [True: 268, False: 85.4k]
  |  |  ------------------
  |  | 2113|  6.75k|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2113:5): [True: 2.82k, False: 82.9k]
  |  |  |  Branch (2113:29): [True: 100, False: 85.6k]
  |  |  ------------------
  |  | 2114|  7.61k|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2114:5): [True: 14, False: 85.7k]
  |  |  |  Branch (2114:29): [True: 852, False: 84.9k]
  |  |  ------------------
  |  | 2115|  8.01k|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2115:5): [True: 34, False: 85.7k]
  |  |  |  Branch (2115:30): [True: 362, False: 85.3k]
  |  |  ------------------
  |  | 2116|  8.92k|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2116:5): [True: 662, False: 85.0k]
  |  |  |  Branch (2116:30): [True: 248, False: 85.5k]
  |  |  ------------------
  |  | 2117|  9.20k|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2117:5): [True: 62, False: 85.6k]
  |  |  |  Branch (2117:30): [True: 218, False: 85.5k]
  |  |  ------------------
  |  | 2118|  9.43k|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2118:5): [True: 32, False: 85.7k]
  |  |  |  Branch (2118:30): [True: 202, False: 85.5k]
  |  |  ------------------
  |  | 2119|  10.6k|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2119:5): [True: 678, False: 85.0k]
  |  |  |  Branch (2119:30): [True: 562, False: 85.1k]
  |  |  ------------------
  |  | 2120|  11.4k|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2120:5): [True: 70, False: 85.6k]
  |  |  |  Branch (2120:30): [True: 670, False: 85.0k]
  |  |  ------------------
  |  | 2121|  14.3k|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2121:5): [True: 1.73k, False: 84.0k]
  |  |  |  Branch (2121:30): [True: 1.24k, False: 84.5k]
  |  |  ------------------
  |  | 2122|  23.2k|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2122:5): [True: 1.22k, False: 84.5k]
  |  |  |  Branch (2122:30): [True: 7.62k, False: 78.1k]
  |  |  ------------------
  |  | 2123|  24.2k|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2123:5): [True: 50, False: 85.7k]
  |  |  |  Branch (2123:30): [True: 974, False: 84.7k]
  |  |  ------------------
  |  | 2124|  24.8k|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2124:5): [True: 48, False: 85.7k]
  |  |  |  Branch (2124:30): [True: 582, False: 85.1k]
  |  |  ------------------
  |  | 2125|  25.8k|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2125:5): [True: 858, False: 84.8k]
  |  |  |  Branch (2125:30): [True: 64, False: 85.6k]
  |  |  ------------------
  |  | 2126|  26.1k|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2126:5): [True: 238, False: 85.5k]
  |  |  |  Branch (2126:30): [True: 80, False: 85.6k]
  |  |  ------------------
  |  | 2127|  26.2k|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2127:5): [True: 110, False: 85.6k]
  |  |  |  Branch (2127:30): [True: 20, False: 85.7k]
  |  |  ------------------
  |  | 2128|  26.3k|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2128:5): [True: 32, False: 85.7k]
  |  |  |  Branch (2128:30): [True: 16, False: 85.7k]
  |  |  ------------------
  |  | 2129|  26.3k|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2129:5): [True: 42, False: 85.7k]
  |  |  |  Branch (2129:30): [True: 30, False: 85.7k]
  |  |  ------------------
  |  | 2130|  27.4k|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2130:5): [True: 1.03k, False: 84.7k]
  |  |  |  Branch (2130:30): [True: 34, False: 85.7k]
  |  |  ------------------
  |  | 2131|  29.5k|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2131:5): [True: 2.05k, False: 83.7k]
  |  |  |  Branch (2131:30): [True: 16, False: 85.7k]
  |  |  ------------------
  |  | 2132|  33.1k|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2132:5): [True: 3.54k, False: 82.2k]
  |  |  |  Branch (2132:30): [True: 64, False: 85.6k]
  |  |  ------------------
  |  | 2133|  34.8k|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2133:5): [True: 292, False: 85.4k]
  |  |  |  Branch (2133:30): [True: 1.43k, False: 84.3k]
  |  |  ------------------
  |  | 2134|  34.9k|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2134:5): [True: 68, False: 85.6k]
  |  |  |  Branch (2134:30): [True: 54, False: 85.7k]
  |  |  ------------------
  |  | 2135|  37.3k|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2135:5): [True: 2.02k, False: 83.7k]
  |  |  |  Branch (2135:30): [True: 358, False: 85.3k]
  |  |  ------------------
  |  | 2136|  39.6k|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2136:5): [True: 450, False: 85.3k]
  |  |  |  Branch (2136:30): [True: 1.85k, False: 83.8k]
  |  |  ------------------
  |  | 2137|  39.7k|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2137:5): [True: 18, False: 85.7k]
  |  |  |  Branch (2137:30): [True: 62, False: 85.6k]
  |  |  ------------------
  |  | 2138|  41.6k|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2138:5): [True: 926, False: 84.8k]
  |  |  |  Branch (2138:30): [True: 954, False: 84.8k]
  |  |  ------------------
  |  | 2139|  41.6k|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2139:5): [True: 6, False: 85.7k]
  |  |  |  Branch (2139:30): [True: 18, False: 85.7k]
  |  |  ------------------
  |  | 2140|  45.3k|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2140:5): [True: 608, False: 85.1k]
  |  |  |  Branch (2140:30): [True: 3.14k, False: 82.6k]
  |  |  ------------------
  |  | 2141|  46.1k|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2141:5): [True: 72, False: 85.6k]
  |  |  ------------------
  ------------------
  729|  46.1k|        tun_metadata_read(&flow->tunnel, mf, value);
  730|  46.1k|        break;
  731|       |
  732|      6|    case MFF_METADATA:
  ------------------
  |  Branch (732:5): [True: 6, False: 85.7k]
  ------------------
  733|      6|        value->be64 = flow->metadata;
  734|      6|        break;
  735|       |
  736|    290|    case MFF_IN_PORT:
  ------------------
  |  Branch (736:5): [True: 290, False: 85.4k]
  ------------------
  737|    290|        value->be16 = htons(ofp_to_u16(flow->in_port.ofp_port));
  738|    290|        break;
  739|  2.57k|    case MFF_IN_PORT_OXM:
  ------------------
  |  Branch (739:5): [True: 2.57k, False: 83.1k]
  ------------------
  740|  2.57k|        value->be32 = ofputil_port_to_ofp11(flow->in_port.ofp_port);
  741|  2.57k|        break;
  742|    660|    case MFF_ACTSET_OUTPUT:
  ------------------
  |  Branch (742:5): [True: 660, False: 85.0k]
  ------------------
  743|    660|        value->be32 = ofputil_port_to_ofp11(flow->actset_output);
  744|    660|        break;
  745|       |
  746|      0|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (746:5): [True: 0, False: 85.7k]
  ------------------
  747|      0|        value->be32 = htonl(flow->skb_priority);
  748|      0|        break;
  749|       |
  750|    500|    case MFF_PKT_MARK:
  ------------------
  |  Branch (750:5): [True: 500, False: 85.2k]
  ------------------
  751|    500|        value->be32 = htonl(flow->pkt_mark);
  752|    500|        break;
  753|       |
  754|  3.49k|    case MFF_CT_STATE:
  ------------------
  |  Branch (754:5): [True: 3.49k, False: 82.2k]
  ------------------
  755|  3.49k|        value->be32 = htonl(flow->ct_state);
  756|  3.49k|        break;
  757|       |
  758|     76|    case MFF_CT_ZONE:
  ------------------
  |  Branch (758:5): [True: 76, False: 85.6k]
  ------------------
  759|     76|        value->be16 = htons(flow->ct_zone);
  760|     76|        break;
  761|       |
  762|  5.15k|    case MFF_CT_MARK:
  ------------------
  |  Branch (762:5): [True: 5.15k, False: 80.6k]
  ------------------
  763|  5.15k|        value->be32 = htonl(flow->ct_mark);
  764|  5.15k|        break;
  765|       |
  766|     14|    case MFF_CT_LABEL:
  ------------------
  |  Branch (766:5): [True: 14, False: 85.7k]
  ------------------
  767|     14|        value->be128 = hton128(flow->ct_label);
  768|     14|        break;
  769|       |
  770|  1.58k|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (770:5): [True: 1.58k, False: 84.1k]
  ------------------
  771|  1.58k|        value->u8 = flow->ct_nw_proto;
  772|  1.58k|        break;
  773|       |
  774|      6|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (774:5): [True: 6, False: 85.7k]
  ------------------
  775|      6|        value->be32 = flow->ct_nw_src;
  776|      6|        break;
  777|       |
  778|      8|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (778:5): [True: 8, False: 85.7k]
  ------------------
  779|      8|        value->be32 = flow->ct_nw_dst;
  780|      8|        break;
  781|       |
  782|      6|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (782:5): [True: 6, False: 85.7k]
  ------------------
  783|      6|        value->ipv6 = flow->ct_ipv6_src;
  784|      6|        break;
  785|       |
  786|    294|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (786:5): [True: 294, False: 85.4k]
  ------------------
  787|    294|        value->ipv6 = flow->ct_ipv6_dst;
  788|    294|        break;
  789|       |
  790|    254|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (790:5): [True: 254, False: 85.5k]
  ------------------
  791|    254|        value->be16 = flow->ct_tp_src;
  792|    254|        break;
  793|       |
  794|  1.13k|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (794:5): [True: 1.13k, False: 84.6k]
  ------------------
  795|  1.13k|        value->be16 = flow->ct_tp_dst;
  796|  1.13k|        break;
  797|       |
  798|  9.52k|    CASE_MFF_REGS:
  ------------------
  |  | 2065|  4.50k|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:     \
  |  |  ------------------
  |  |  |  Branch (2065:5): [True: 2.55k, False: 83.1k]
  |  |  |  Branch (2065:20): [True: 210, False: 85.5k]
  |  |  |  Branch (2065:35): [True: 1.72k, False: 84.0k]
  |  |  |  Branch (2065:50): [True: 16, False: 85.7k]
  |  |  ------------------
  |  | 2066|  5.36k|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:     \
  |  |  ------------------
  |  |  |  Branch (2066:5): [True: 66, False: 85.6k]
  |  |  |  Branch (2066:20): [True: 14, False: 85.7k]
  |  |  |  Branch (2066:35): [True: 734, False: 85.0k]
  |  |  |  Branch (2066:50): [True: 40, False: 85.7k]
  |  |  ------------------
  |  | 2067|  8.44k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11:   \
  |  |  ------------------
  |  |  |  Branch (2067:5): [True: 912, False: 84.8k]
  |  |  |  Branch (2067:20): [True: 1.44k, False: 84.3k]
  |  |  |  Branch (2067:35): [True: 696, False: 85.0k]
  |  |  |  Branch (2067:51): [True: 36, False: 85.7k]
  |  |  ------------------
  |  | 2068|  9.52k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15: \
  |  |  ------------------
  |  |  |  Branch (2068:5): [True: 546, False: 85.2k]
  |  |  |  Branch (2068:21): [True: 276, False: 85.4k]
  |  |  |  Branch (2068:37): [True: 62, False: 85.6k]
  |  |  |  Branch (2068:53): [True: 194, False: 85.5k]
  |  |  ------------------
  |  | 2069|  9.52k|    case MFF_REG16: case MFF_REG17: case MFF_REG18: case MFF_REG19: \
  |  |  ------------------
  |  |  |  Branch (2069:5): [True: 0, False: 85.7k]
  |  |  |  Branch (2069:21): [True: 0, False: 85.7k]
  |  |  |  Branch (2069:37): [True: 0, False: 85.7k]
  |  |  |  Branch (2069:53): [True: 0, False: 85.7k]
  |  |  ------------------
  |  | 2070|  9.52k|    case MFF_REG20: case MFF_REG21: case MFF_REG22: case MFF_REG23: \
  |  |  ------------------
  |  |  |  Branch (2070:5): [True: 0, False: 85.7k]
  |  |  |  Branch (2070:21): [True: 0, False: 85.7k]
  |  |  |  Branch (2070:37): [True: 0, False: 85.7k]
  |  |  |  Branch (2070:53): [True: 0, False: 85.7k]
  |  |  ------------------
  |  | 2071|  9.52k|    case MFF_REG24: case MFF_REG25: case MFF_REG26: case MFF_REG27: \
  |  |  ------------------
  |  |  |  Branch (2071:5): [True: 0, False: 85.7k]
  |  |  |  Branch (2071:21): [True: 0, False: 85.7k]
  |  |  |  Branch (2071:37): [True: 0, False: 85.7k]
  |  |  |  Branch (2071:53): [True: 0, False: 85.7k]
  |  |  ------------------
  |  | 2072|  9.52k|    case MFF_REG28: case MFF_REG29: case MFF_REG30: case MFF_REG31
  |  |  ------------------
  |  |  |  Branch (2072:5): [True: 0, False: 85.7k]
  |  |  |  Branch (2072:21): [True: 0, False: 85.7k]
  |  |  |  Branch (2072:37): [True: 0, False: 85.7k]
  |  |  ------------------
  ------------------
  799|  9.52k|        value->be32 = htonl(flow->regs[mf->id - MFF_REG0]);
  800|  9.52k|        break;
  801|       |
  802|  3.53k|    CASE_MFF_XREGS:
  ------------------
  |  | 2081|  1.53k|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3:    \
  |  |  ------------------
  |  |  |  Branch (2081:5): [True: 8, False: 85.7k]
  |  |  |  Branch (2081:21): [True: 1.50k, False: 84.2k]
  |  |  |  Branch (2081:37): [True: 6, False: 85.7k]
  |  |  |  Branch (2081:53): [True: 8, False: 85.7k]
  |  |  ------------------
  |  | 2082|  3.35k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7:    \
  |  |  ------------------
  |  |  |  Branch (2082:5): [True: 126, False: 85.6k]
  |  |  |  Branch (2082:21): [True: 368, False: 85.3k]
  |  |  |  Branch (2082:37): [True: 1.31k, False: 84.4k]
  |  |  |  Branch (2082:53): [True: 14, False: 85.7k]
  |  |  ------------------
  |  | 2083|  3.46k|    case MFF_XREG8: case MFF_XREG9: case MFF_XREG10: case MFF_XREG11:  \
  |  |  ------------------
  |  |  |  Branch (2083:5): [True: 8, False: 85.7k]
  |  |  |  Branch (2083:21): [True: 14, False: 85.7k]
  |  |  |  Branch (2083:37): [True: 32, False: 85.7k]
  |  |  |  Branch (2083:54): [True: 62, False: 85.6k]
  |  |  ------------------
  |  | 2084|  3.53k|    case MFF_XREG12: case MFF_XREG13: case MFF_XREG14: case MFF_XREG15
  |  |  ------------------
  |  |  |  Branch (2084:5): [True: 32, False: 85.7k]
  |  |  |  Branch (2084:22): [True: 14, False: 85.7k]
  |  |  |  Branch (2084:39): [True: 14, False: 85.7k]
  |  |  ------------------
  ------------------
  803|  3.53k|        value->be64 = htonll(flow_get_xreg(flow, mf->id - MFF_XREG0));
  804|  3.53k|        break;
  805|       |
  806|     62|    CASE_MFF_XXREGS:
  ------------------
  |  | 2093|     62|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3: \
  |  |  ------------------
  |  |  |  Branch (2093:5): [True: 14, False: 85.7k]
  |  |  |  Branch (2093:22): [True: 20, False: 85.7k]
  |  |  |  Branch (2093:39): [True: 14, False: 85.7k]
  |  |  |  Branch (2093:56): [True: 14, False: 85.7k]
  |  |  ------------------
  |  | 2094|     62|    case MFF_XXREG4: case MFF_XXREG5: case MFF_XXREG6: case MFF_XXREG7
  |  |  ------------------
  |  |  |  Branch (2094:5): [True: 0, False: 85.7k]
  |  |  |  Branch (2094:22): [True: 0, False: 85.7k]
  |  |  |  Branch (2094:39): [True: 0, False: 85.7k]
  |  |  ------------------
  ------------------
  807|     62|        value->be128 = hton128(flow_get_xxreg(flow, mf->id - MFF_XXREG0));
  808|     62|        break;
  809|       |
  810|     62|    case MFF_ETH_SRC:
  ------------------
  |  Branch (810:5): [True: 62, False: 85.6k]
  ------------------
  811|     62|        value->mac = flow->dl_src;
  812|     62|        break;
  813|       |
  814|     14|    case MFF_ETH_DST:
  ------------------
  |  Branch (814:5): [True: 14, False: 85.7k]
  ------------------
  815|     14|        value->mac = flow->dl_dst;
  816|     14|        break;
  817|       |
  818|     22|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (818:5): [True: 22, False: 85.7k]
  ------------------
  819|     22|        value->be16 = flow->dl_type;
  820|     22|        break;
  821|       |
  822|     30|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (822:5): [True: 30, False: 85.7k]
  ------------------
  823|     30|        value->be16 = flow->vlans[0].tci;
  824|     30|        break;
  825|       |
  826|      0|    case MFF_DL_VLAN:
  ------------------
  |  Branch (826:5): [True: 0, False: 85.7k]
  ------------------
  827|      0|        value->be16 = flow->vlans[0].tci & htons(VLAN_VID_MASK);
  828|      0|        break;
  829|      6|    case MFF_VLAN_VID:
  ------------------
  |  Branch (829:5): [True: 6, False: 85.7k]
  ------------------
  830|      6|        value->be16 = flow->vlans[0].tci & htons(VLAN_VID_MASK | VLAN_CFI);
  831|      6|        break;
  832|       |
  833|      0|    case MFF_DL_VLAN_PCP:
  ------------------
  |  Branch (833:5): [True: 0, False: 85.7k]
  ------------------
  834|      0|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (834:5): [True: 0, False: 85.7k]
  ------------------
  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: 85.7k]
  ------------------
  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: 85.7k]
  ------------------
  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: 85.7k]
  ------------------
  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: 85.7k]
  ------------------
  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: 85.7k]
  ------------------
  855|      0|        value->be32 = flow->nw_src;
  856|      0|        break;
  857|       |
  858|      0|    case MFF_IPV4_DST:
  ------------------
  |  Branch (858:5): [True: 0, False: 85.7k]
  ------------------
  859|      0|        value->be32 = flow->nw_dst;
  860|      0|        break;
  861|       |
  862|      0|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (862:5): [True: 0, False: 85.7k]
  ------------------
  863|      0|        value->ipv6 = flow->ipv6_src;
  864|      0|        break;
  865|       |
  866|      0|    case MFF_IPV6_DST:
  ------------------
  |  Branch (866:5): [True: 0, False: 85.7k]
  ------------------
  867|      0|        value->ipv6 = flow->ipv6_dst;
  868|      0|        break;
  869|       |
  870|      0|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (870:5): [True: 0, False: 85.7k]
  ------------------
  871|      0|        value->be32 = flow->ipv6_label;
  872|      0|        break;
  873|       |
  874|      0|    case MFF_IP_PROTO:
  ------------------
  |  Branch (874:5): [True: 0, False: 85.7k]
  ------------------
  875|      0|        value->u8 = flow->nw_proto;
  876|      0|        break;
  877|       |
  878|      0|    case MFF_IP_DSCP:
  ------------------
  |  Branch (878:5): [True: 0, False: 85.7k]
  ------------------
  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: 85.7k]
  ------------------
  883|      0|        value->u8 = flow->nw_tos >> 2;
  884|      0|        break;
  885|       |
  886|      0|    case MFF_IP_ECN:
  ------------------
  |  Branch (886:5): [True: 0, False: 85.7k]
  ------------------
  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: 85.7k]
  ------------------
  891|      0|        value->u8 = flow->nw_ttl;
  892|      0|        break;
  893|       |
  894|      0|    case MFF_IP_FRAG:
  ------------------
  |  Branch (894:5): [True: 0, False: 85.7k]
  ------------------
  895|      0|        value->u8 = flow->nw_frag;
  896|      0|        break;
  897|       |
  898|      0|    case MFF_ARP_OP:
  ------------------
  |  Branch (898:5): [True: 0, False: 85.7k]
  ------------------
  899|      0|        value->be16 = htons(flow->nw_proto);
  900|      0|        break;
  901|       |
  902|      0|    case MFF_ARP_SPA:
  ------------------
  |  Branch (902:5): [True: 0, False: 85.7k]
  ------------------
  903|      0|        value->be32 = flow->nw_src;
  904|      0|        break;
  905|       |
  906|      0|    case MFF_ARP_TPA:
  ------------------
  |  Branch (906:5): [True: 0, False: 85.7k]
  ------------------
  907|      0|        value->be32 = flow->nw_dst;
  908|      0|        break;
  909|       |
  910|      0|    case MFF_ARP_SHA:
  ------------------
  |  Branch (910:5): [True: 0, False: 85.7k]
  ------------------
  911|      0|    case MFF_ND_SLL:
  ------------------
  |  Branch (911:5): [True: 0, False: 85.7k]
  ------------------
  912|      0|        value->mac = flow->arp_sha;
  913|      0|        break;
  914|       |
  915|      0|    case MFF_ARP_THA:
  ------------------
  |  Branch (915:5): [True: 0, False: 85.7k]
  ------------------
  916|      0|    case MFF_ND_TLL:
  ------------------
  |  Branch (916:5): [True: 0, False: 85.7k]
  ------------------
  917|      0|        value->mac = flow->arp_tha;
  918|      0|        break;
  919|       |
  920|      0|    case MFF_TCP_SRC:
  ------------------
  |  Branch (920:5): [True: 0, False: 85.7k]
  ------------------
  921|      0|    case MFF_UDP_SRC:
  ------------------
  |  Branch (921:5): [True: 0, False: 85.7k]
  ------------------
  922|      0|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (922:5): [True: 0, False: 85.7k]
  ------------------
  923|      0|        value->be16 = flow->tp_src;
  924|      0|        break;
  925|       |
  926|      0|    case MFF_TCP_DST:
  ------------------
  |  Branch (926:5): [True: 0, False: 85.7k]
  ------------------
  927|      0|    case MFF_UDP_DST:
  ------------------
  |  Branch (927:5): [True: 0, False: 85.7k]
  ------------------
  928|      0|    case MFF_SCTP_DST:
  ------------------
  |  Branch (928:5): [True: 0, False: 85.7k]
  ------------------
  929|      0|        value->be16 = flow->tp_dst;
  930|      0|        break;
  931|       |
  932|      0|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (932:5): [True: 0, False: 85.7k]
  ------------------
  933|      0|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (933:5): [True: 0, False: 85.7k]
  ------------------
  934|      0|        value->be16 = flow->tcp_flags;
  935|      0|        break;
  936|       |
  937|      0|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (937:5): [True: 0, False: 85.7k]
  ------------------
  938|      0|        value->be32 = flow->igmp_group_ip4;
  939|      0|        break;
  940|       |
  941|      0|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (941:5): [True: 0, False: 85.7k]
  ------------------
  942|      0|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (942:5): [True: 0, False: 85.7k]
  ------------------
  943|      0|        value->u8 = ntohs(flow->tp_src);
  944|      0|        break;
  945|       |
  946|      0|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (946:5): [True: 0, False: 85.7k]
  ------------------
  947|      0|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (947:5): [True: 0, False: 85.7k]
  ------------------
  948|      0|        value->u8 = ntohs(flow->tp_dst);
  949|      0|        break;
  950|       |
  951|      0|    case MFF_ND_TARGET:
  ------------------
  |  Branch (951:5): [True: 0, False: 85.7k]
  ------------------
  952|      0|        value->ipv6 = flow->nd_target;
  953|      0|        break;
  954|       |
  955|      0|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (955:5): [True: 0, False: 85.7k]
  ------------------
  956|      0|        value->u8 = flow->nsh.flags;
  957|      0|        break;
  958|      0|    case MFF_NSH_TTL:
  ------------------
  |  Branch (958:5): [True: 0, False: 85.7k]
  ------------------
  959|      0|        value->u8 = flow->nsh.ttl;
  960|      0|        break;
  961|      0|    case MFF_NSH_MDTYPE:
  ------------------
  |  Branch (961:5): [True: 0, False: 85.7k]
  ------------------
  962|      0|        value->u8 = flow->nsh.mdtype;
  963|      0|        break;
  964|      0|    case MFF_NSH_NP:
  ------------------
  |  Branch (964:5): [True: 0, False: 85.7k]
  ------------------
  965|      0|        value->u8 = flow->nsh.np;
  966|      0|        break;
  967|      0|    case MFF_NSH_SPI:
  ------------------
  |  Branch (967:5): [True: 0, False: 85.7k]
  ------------------
  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: 85.7k]
  ------------------
  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: 85.7k]
  ------------------
  977|      0|    case MFF_NSH_C2:
  ------------------
  |  Branch (977:5): [True: 0, False: 85.7k]
  ------------------
  978|      0|    case MFF_NSH_C3:
  ------------------
  |  Branch (978:5): [True: 0, False: 85.7k]
  ------------------
  979|      0|    case MFF_NSH_C4:
  ------------------
  |  Branch (979:5): [True: 0, False: 85.7k]
  ------------------
  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: 85.7k]
  ------------------
  984|      0|    default:
  ------------------
  |  Branch (984:5): [True: 0, False: 85.7k]
  ------------------
  985|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  986|  85.7k|    }
  987|  85.7k|}
mf_set_value:
  999|   119k|{
 1000|   119k|    if (err_str) {
  ------------------
  |  Branch (1000:9): [True: 116k, False: 2.62k]
  ------------------
 1001|   116k|        *err_str = NULL;
 1002|   116k|    }
 1003|       |
 1004|   119k|    switch (mf->id) {
 1005|     79|    case MFF_DP_HASH:
  ------------------
  |  Branch (1005:5): [True: 79, False: 119k]
  ------------------
 1006|     79|        match_set_dp_hash(match, ntohl(value->be32));
 1007|     79|        break;
 1008|    517|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (1008:5): [True: 517, False: 118k]
  ------------------
 1009|    517|        match_set_recirc_id(match, ntohl(value->be32));
 1010|    517|        break;
 1011|  20.9k|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (1011:5): [True: 20.9k, False: 98.2k]
  ------------------
 1012|  20.9k|        match_set_packet_type(match, value->be32);
 1013|  20.9k|        break;
 1014|     38|    case MFF_CONJ_ID:
  ------------------
  |  Branch (1014:5): [True: 38, False: 119k]
  ------------------
 1015|     38|        match_set_conj_id(match, ntohl(value->be32));
 1016|     38|        break;
 1017|    119|    case MFF_TUN_ID:
  ------------------
  |  Branch (1017:5): [True: 119, False: 119k]
  ------------------
 1018|    119|        match_set_tun_id(match, value->be64);
 1019|    119|        break;
 1020|    459|    case MFF_TUN_SRC:
  ------------------
  |  Branch (1020:5): [True: 459, False: 118k]
  ------------------
 1021|    459|        match_set_tun_src(match, value->be32);
 1022|    459|        break;
 1023|     75|    case MFF_TUN_DST:
  ------------------
  |  Branch (1023:5): [True: 75, False: 119k]
  ------------------
 1024|     75|        match_set_tun_dst(match, value->be32);
 1025|     75|        break;
 1026|    357|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (1026:5): [True: 357, False: 118k]
  ------------------
 1027|    357|        match_set_tun_ipv6_src(match, &value->ipv6);
 1028|    357|        break;
 1029|     67|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (1029:5): [True: 67, False: 119k]
  ------------------
 1030|     67|        match_set_tun_ipv6_dst(match, &value->ipv6);
 1031|     67|        break;
 1032|    145|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (1032:5): [True: 145, False: 119k]
  ------------------
 1033|    145|        match_set_tun_flags(match, ntohs(value->be16));
 1034|    145|        break;
 1035|     19|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (1035:5): [True: 19, False: 119k]
  ------------------
 1036|     19|         match_set_tun_gbp_id(match, value->be16);
 1037|     19|         break;
 1038|    137|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (1038:5): [True: 137, False: 119k]
  ------------------
 1039|    137|         match_set_tun_gbp_flags(match, value->u8);
 1040|    137|         break;
 1041|      0|    case MFF_TUN_TOS:
  ------------------
  |  Branch (1041:5): [True: 0, False: 119k]
  ------------------
 1042|      0|        match_set_tun_tos(match, value->u8);
 1043|      0|        break;
 1044|      0|    case MFF_TUN_TTL:
  ------------------
  |  Branch (1044:5): [True: 0, False: 119k]
  ------------------
 1045|      0|        match_set_tun_ttl(match, value->u8);
 1046|      0|        break;
 1047|    211|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (1047:5): [True: 211, False: 119k]
  ------------------
 1048|    211|        match_set_tun_erspan_ver(match, value->u8);
 1049|    211|        break;
 1050|     98|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (1050:5): [True: 98, False: 119k]
  ------------------
 1051|     98|        match_set_tun_erspan_idx(match, ntohl(value->be32));
 1052|     98|        break;
 1053|    133|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (1053:5): [True: 133, False: 119k]
  ------------------
 1054|    133|        match_set_tun_erspan_dir(match, value->u8);
 1055|    133|        break;
 1056|    232|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (1056:5): [True: 232, False: 119k]
  ------------------
 1057|    232|        match_set_tun_erspan_hwid(match, value->u8);
 1058|    232|        break;
 1059|    521|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (1059:5): [True: 521, False: 118k]
  ------------------
 1060|    521|        match_set_tun_gtpu_flags(match, value->u8);
 1061|    521|        break;
 1062|     45|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (1062:5): [True: 45, False: 119k]
  ------------------
 1063|     45|        match_set_tun_gtpu_msgtype(match, value->u8);
 1064|     45|        break;
 1065|  59.7k|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2110|  1.55k|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2110:5): [True: 174, False: 119k]
  |  |  |  Branch (2110:29): [True: 1.38k, False: 117k]
  |  |  ------------------
  |  | 2111|  4.58k|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2111:5): [True: 2.15k, False: 117k]
  |  |  |  Branch (2111:29): [True: 872, False: 118k]
  |  |  ------------------
  |  | 2112|  6.44k|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2112:5): [True: 826, False: 118k]
  |  |  |  Branch (2112:29): [True: 1.03k, False: 118k]
  |  |  ------------------
  |  | 2113|  7.63k|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2113:5): [True: 1.06k, False: 118k]
  |  |  |  Branch (2113:29): [True: 130, False: 119k]
  |  |  ------------------
  |  | 2114|  8.55k|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2114:5): [True: 311, False: 118k]
  |  |  |  Branch (2114:29): [True: 605, False: 118k]
  |  |  ------------------
  |  | 2115|  8.97k|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2115:5): [True: 322, False: 118k]
  |  |  |  Branch (2115:30): [True: 98, False: 119k]
  |  |  ------------------
  |  | 2116|  14.0k|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2116:5): [True: 3.16k, False: 116k]
  |  |  |  Branch (2116:30): [True: 1.94k, False: 117k]
  |  |  ------------------
  |  | 2117|  15.7k|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2117:5): [True: 1.18k, False: 118k]
  |  |  |  Branch (2117:30): [True: 513, False: 118k]
  |  |  ------------------
  |  | 2118|  16.9k|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2118:5): [True: 635, False: 118k]
  |  |  |  Branch (2118:30): [True: 540, False: 118k]
  |  |  ------------------
  |  | 2119|  21.5k|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2119:5): [True: 4.42k, False: 114k]
  |  |  |  Branch (2119:30): [True: 207, False: 119k]
  |  |  ------------------
  |  | 2120|  24.2k|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2120:5): [True: 860, False: 118k]
  |  |  |  Branch (2120:30): [True: 1.79k, False: 117k]
  |  |  ------------------
  |  | 2121|  27.0k|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2121:5): [True: 2.20k, False: 117k]
  |  |  |  Branch (2121:30): [True: 629, False: 118k]
  |  |  ------------------
  |  | 2122|  28.2k|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2122:5): [True: 323, False: 118k]
  |  |  |  Branch (2122:30): [True: 894, False: 118k]
  |  |  ------------------
  |  | 2123|  29.5k|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2123:5): [True: 888, False: 118k]
  |  |  |  Branch (2123:30): [True: 378, False: 118k]
  |  |  ------------------
  |  | 2124|  30.7k|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2124:5): [True: 275, False: 119k]
  |  |  |  Branch (2124:30): [True: 937, False: 118k]
  |  |  ------------------
  |  | 2125|  34.3k|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2125:5): [True: 1.35k, False: 117k]
  |  |  |  Branch (2125:30): [True: 2.22k, False: 117k]
  |  |  ------------------
  |  | 2126|  36.5k|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2126:5): [True: 631, False: 118k]
  |  |  |  Branch (2126:30): [True: 1.62k, False: 117k]
  |  |  ------------------
  |  | 2127|  37.8k|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2127:5): [True: 363, False: 118k]
  |  |  |  Branch (2127:30): [True: 886, False: 118k]
  |  |  ------------------
  |  | 2128|  38.6k|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2128:5): [True: 206, False: 119k]
  |  |  |  Branch (2128:30): [True: 579, False: 118k]
  |  |  ------------------
  |  | 2129|  39.2k|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2129:5): [True: 320, False: 118k]
  |  |  |  Branch (2129:30): [True: 269, False: 119k]
  |  |  ------------------
  |  | 2130|  40.6k|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2130:5): [True: 496, False: 118k]
  |  |  |  Branch (2130:30): [True: 931, False: 118k]
  |  |  ------------------
  |  | 2131|  41.1k|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2131:5): [True: 228, False: 119k]
  |  |  |  Branch (2131:30): [True: 298, False: 118k]
  |  |  ------------------
  |  | 2132|  41.7k|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2132:5): [True: 132, False: 119k]
  |  |  |  Branch (2132:30): [True: 495, False: 118k]
  |  |  ------------------
  |  | 2133|  43.6k|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2133:5): [True: 1.51k, False: 117k]
  |  |  |  Branch (2133:30): [True: 297, False: 118k]
  |  |  ------------------
  |  | 2134|  46.6k|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2134:5): [True: 245, False: 119k]
  |  |  |  Branch (2134:30): [True: 2.78k, False: 116k]
  |  |  ------------------
  |  | 2135|  48.8k|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2135:5): [True: 1.66k, False: 117k]
  |  |  |  Branch (2135:30): [True: 570, False: 118k]
  |  |  ------------------
  |  | 2136|  52.0k|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2136:5): [True: 631, False: 118k]
  |  |  |  Branch (2136:30): [True: 2.56k, False: 116k]
  |  |  ------------------
  |  | 2137|  54.1k|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2137:5): [True: 575, False: 118k]
  |  |  |  Branch (2137:30): [True: 1.47k, False: 117k]
  |  |  ------------------
  |  | 2138|  55.3k|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2138:5): [True: 339, False: 118k]
  |  |  |  Branch (2138:30): [True: 926, False: 118k]
  |  |  ------------------
  |  | 2139|  56.5k|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2139:5): [True: 885, False: 118k]
  |  |  |  Branch (2139:30): [True: 298, False: 118k]
  |  |  ------------------
  |  | 2140|  58.9k|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2140:5): [True: 374, False: 118k]
  |  |  |  Branch (2140:30): [True: 2.02k, False: 117k]
  |  |  ------------------
  |  | 2141|  59.7k|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2141:5): [True: 593, False: 118k]
  |  |  ------------------
  ------------------
 1066|  59.7k|        tun_metadata_set_match(mf, value, NULL, match, err_str);
 1067|  59.7k|        break;
 1068|       |
 1069|    163|    case MFF_METADATA:
  ------------------
  |  Branch (1069:5): [True: 163, False: 119k]
  ------------------
 1070|    163|        match_set_metadata(match, value->be64);
 1071|    163|        break;
 1072|       |
 1073|  3.49k|    case MFF_IN_PORT:
  ------------------
  |  Branch (1073:5): [True: 3.49k, False: 115k]
  ------------------
 1074|  3.49k|        match_set_in_port(match, u16_to_ofp(ntohs(value->be16)));
 1075|  3.49k|        break;
 1076|       |
 1077|    891|    case MFF_IN_PORT_OXM: {
  ------------------
  |  Branch (1077:5): [True: 891, False: 118k]
  ------------------
 1078|    891|        ofp_port_t port;
 1079|    891|        ofputil_port_from_ofp11(value->be32, &port);
 1080|    891|        match_set_in_port(match, port);
 1081|    891|        break;
 1082|  1.97M|    }
 1083|  1.04k|    case MFF_ACTSET_OUTPUT: {
  ------------------
  |  Branch (1083:5): [True: 1.04k, False: 118k]
  ------------------
 1084|  1.04k|        ofp_port_t port;
 1085|  1.04k|        ofputil_port_from_ofp11(value->be32, &port);
 1086|  1.04k|        match_set_actset_output(match, port);
 1087|  1.04k|        break;
 1088|  1.97M|    }
 1089|       |
 1090|      0|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (1090:5): [True: 0, False: 119k]
  ------------------
 1091|      0|        match_set_skb_priority(match, ntohl(value->be32));
 1092|      0|        break;
 1093|       |
 1094|    267|    case MFF_PKT_MARK:
  ------------------
  |  Branch (1094:5): [True: 267, False: 119k]
  ------------------
 1095|    267|        match_set_pkt_mark(match, ntohl(value->be32));
 1096|    267|        break;
 1097|       |
 1098|  1.95k|    case MFF_CT_STATE:
  ------------------
  |  Branch (1098:5): [True: 1.95k, False: 117k]
  ------------------
 1099|  1.95k|        match_set_ct_state(match, ntohl(value->be32));
 1100|  1.95k|        break;
 1101|       |
 1102|    283|    case MFF_CT_ZONE:
  ------------------
  |  Branch (1102:5): [True: 283, False: 119k]
  ------------------
 1103|    283|        match_set_ct_zone(match, ntohs(value->be16));
 1104|    283|        break;
 1105|       |
 1106|     88|    case MFF_CT_MARK:
  ------------------
  |  Branch (1106:5): [True: 88, False: 119k]
  ------------------
 1107|     88|        match_set_ct_mark(match, ntohl(value->be32));
 1108|     88|        break;
 1109|       |
 1110|    227|    case MFF_CT_LABEL:
  ------------------
  |  Branch (1110:5): [True: 227, False: 119k]
  ------------------
 1111|    227|        match_set_ct_label(match, ntoh128(value->be128));
 1112|    227|        break;
 1113|       |
 1114|    143|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (1114:5): [True: 143, False: 119k]
  ------------------
 1115|    143|        match_set_ct_nw_proto(match, value->u8);
 1116|    143|        break;
 1117|       |
 1118|    216|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (1118:5): [True: 216, False: 119k]
  ------------------
 1119|    216|        match_set_ct_nw_src(match, value->be32);
 1120|    216|        break;
 1121|       |
 1122|    335|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (1122:5): [True: 335, False: 118k]
  ------------------
 1123|    335|        match_set_ct_nw_dst(match, value->be32);
 1124|    335|        break;
 1125|       |
 1126|     35|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (1126:5): [True: 35, False: 119k]
  ------------------
 1127|     35|        match_set_ct_ipv6_src(match, &value->ipv6);
 1128|     35|        break;
 1129|       |
 1130|    199|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (1130:5): [True: 199, False: 119k]
  ------------------
 1131|    199|        match_set_ct_ipv6_dst(match, &value->ipv6);
 1132|    199|        break;
 1133|       |
 1134|    197|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (1134:5): [True: 197, False: 119k]
  ------------------
 1135|    197|        match_set_ct_tp_src(match, value->be16);
 1136|    197|        break;
 1137|       |
 1138|    195|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (1138:5): [True: 195, False: 119k]
  ------------------
 1139|    195|        match_set_ct_tp_dst(match, value->be16);
 1140|    195|        break;
 1141|       |
 1142|  6.61k|    CASE_MFF_REGS:
  ------------------
  |  | 2065|  1.93k|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:     \
  |  |  ------------------
  |  |  |  Branch (2065:5): [True: 325, False: 118k]
  |  |  |  Branch (2065:20): [True: 174, False: 119k]
  |  |  |  Branch (2065:35): [True: 1.10k, False: 118k]
  |  |  |  Branch (2065:50): [True: 333, False: 118k]
  |  |  ------------------
  |  | 2066|  2.57k|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:     \
  |  |  ------------------
  |  |  |  Branch (2066:5): [True: 243, False: 119k]
  |  |  |  Branch (2066:20): [True: 125, False: 119k]
  |  |  |  Branch (2066:35): [True: 70, False: 119k]
  |  |  |  Branch (2066:50): [True: 207, False: 119k]
  |  |  ------------------
  |  | 2067|  5.05k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11:   \
  |  |  ------------------
  |  |  |  Branch (2067:5): [True: 74, False: 119k]
  |  |  |  Branch (2067:20): [True: 132, False: 119k]
  |  |  |  Branch (2067:35): [True: 35, False: 119k]
  |  |  |  Branch (2067:51): [True: 2.23k, False: 117k]
  |  |  ------------------
  |  | 2068|  5.86k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15: \
  |  |  ------------------
  |  |  |  Branch (2068:5): [True: 216, False: 119k]
  |  |  |  Branch (2068:21): [True: 67, False: 119k]
  |  |  |  Branch (2068:37): [True: 335, False: 118k]
  |  |  |  Branch (2068:53): [True: 187, False: 119k]
  |  |  ------------------
  |  | 2069|  6.09k|    case MFF_REG16: case MFF_REG17: case MFF_REG18: case MFF_REG19: \
  |  |  ------------------
  |  |  |  Branch (2069:5): [True: 68, False: 119k]
  |  |  |  Branch (2069:21): [True: 66, False: 119k]
  |  |  |  Branch (2069:37): [True: 66, False: 119k]
  |  |  |  Branch (2069:53): [True: 34, False: 119k]
  |  |  ------------------
  |  | 2070|  6.30k|    case MFF_REG20: case MFF_REG21: case MFF_REG22: case MFF_REG23: \
  |  |  ------------------
  |  |  |  Branch (2070:5): [True: 35, False: 119k]
  |  |  |  Branch (2070:21): [True: 35, False: 119k]
  |  |  |  Branch (2070:37): [True: 105, False: 119k]
  |  |  |  Branch (2070:53): [True: 34, False: 119k]
  |  |  ------------------
  |  | 2071|  6.51k|    case MFF_REG24: case MFF_REG25: case MFF_REG26: case MFF_REG27: \
  |  |  ------------------
  |  |  |  Branch (2071:5): [True: 67, False: 119k]
  |  |  |  Branch (2071:21): [True: 95, False: 119k]
  |  |  |  Branch (2071:37): [True: 11, False: 119k]
  |  |  |  Branch (2071:53): [True: 35, False: 119k]
  |  |  ------------------
  |  | 2072|  6.61k|    case MFF_REG28: case MFF_REG29: case MFF_REG30: case MFF_REG31
  |  |  ------------------
  |  |  |  Branch (2072:5): [True: 35, False: 119k]
  |  |  |  Branch (2072:21): [True: 34, False: 119k]
  |  |  |  Branch (2072:37): [True: 18, False: 119k]
  |  |  ------------------
  ------------------
 1143|  6.61k|        match_set_reg(match, mf->id - MFF_REG0, ntohl(value->be32));
 1144|  6.61k|        break;
 1145|       |
 1146|  3.37k|    CASE_MFF_XREGS:
  ------------------
  |  | 2081|  1.70k|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3:    \
  |  |  ------------------
  |  |  |  Branch (2081:5): [True: 40, False: 119k]
  |  |  |  Branch (2081:21): [True: 35, False: 119k]
  |  |  |  Branch (2081:37): [True: 945, False: 118k]
  |  |  |  Branch (2081:53): [True: 685, False: 118k]
  |  |  ------------------
  |  | 2082|  2.58k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7:    \
  |  |  ------------------
  |  |  |  Branch (2082:5): [True: 209, False: 119k]
  |  |  |  Branch (2082:21): [True: 460, False: 118k]
  |  |  |  Branch (2082:37): [True: 196, False: 119k]
  |  |  |  Branch (2082:53): [True: 12, False: 119k]
  |  |  ------------------
  |  | 2083|  3.02k|    case MFF_XREG8: case MFF_XREG9: case MFF_XREG10: case MFF_XREG11:  \
  |  |  ------------------
  |  |  |  Branch (2083:5): [True: 19, False: 119k]
  |  |  |  Branch (2083:21): [True: 258, False: 119k]
  |  |  |  Branch (2083:37): [True: 37, False: 119k]
  |  |  |  Branch (2083:54): [True: 131, False: 119k]
  |  |  ------------------
  |  | 2084|  3.37k|    case MFF_XREG12: case MFF_XREG13: case MFF_XREG14: case MFF_XREG15
  |  |  ------------------
  |  |  |  Branch (2084:5): [True: 67, False: 119k]
  |  |  |  Branch (2084:22): [True: 147, False: 119k]
  |  |  |  Branch (2084:39): [True: 67, False: 119k]
  |  |  ------------------
  ------------------
 1147|  3.37k|        match_set_xreg(match, mf->id - MFF_XREG0, ntohll(value->be64));
 1148|  3.37k|        break;
 1149|       |
 1150|    346|    CASE_MFF_XXREGS:
  ------------------
  |  | 2093|    202|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3: \
  |  |  ------------------
  |  |  |  Branch (2093:5): [True: 79, False: 119k]
  |  |  |  Branch (2093:22): [True: 53, False: 119k]
  |  |  |  Branch (2093:39): [True: 60, False: 119k]
  |  |  |  Branch (2093:56): [True: 10, False: 119k]
  |  |  ------------------
  |  | 2094|    346|    case MFF_XXREG4: case MFF_XXREG5: case MFF_XXREG6: case MFF_XXREG7
  |  |  ------------------
  |  |  |  Branch (2094:5): [True: 66, False: 119k]
  |  |  |  Branch (2094:22): [True: 34, False: 119k]
  |  |  |  Branch (2094:39): [True: 10, False: 119k]
  |  |  ------------------
  ------------------
 1151|    346|        match_set_xxreg(match, mf->id - MFF_XXREG0, ntoh128(value->be128));
 1152|    346|        break;
 1153|       |
 1154|     79|    case MFF_ETH_SRC:
  ------------------
  |  Branch (1154:5): [True: 79, False: 119k]
  ------------------
 1155|     79|        match_set_dl_src(match, value->mac);
 1156|     79|        break;
 1157|       |
 1158|     33|    case MFF_ETH_DST:
  ------------------
  |  Branch (1158:5): [True: 33, False: 119k]
  ------------------
 1159|     33|        match_set_dl_dst(match, value->mac);
 1160|     33|        break;
 1161|       |
 1162|    186|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (1162:5): [True: 186, False: 119k]
  ------------------
 1163|    186|        match_set_dl_type(match, value->be16);
 1164|    186|        break;
 1165|       |
 1166|     82|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (1166:5): [True: 82, False: 119k]
  ------------------
 1167|     82|        match_set_dl_tci(match, value->be16);
 1168|     82|        break;
 1169|       |
 1170|      0|    case MFF_DL_VLAN:
  ------------------
  |  Branch (1170:5): [True: 0, False: 119k]
  ------------------
 1171|      0|        match_set_dl_vlan(match, value->be16, 0);
 1172|      0|        break;
 1173|    322|    case MFF_VLAN_VID:
  ------------------
  |  Branch (1173:5): [True: 322, False: 118k]
  ------------------
 1174|    322|        match_set_vlan_vid(match, value->be16);
 1175|    322|        break;
 1176|       |
 1177|      0|    case MFF_DL_VLAN_PCP:
  ------------------
  |  Branch (1177:5): [True: 0, False: 119k]
  ------------------
 1178|    379|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (1178:5): [True: 379, False: 118k]
  ------------------
 1179|    379|        match_set_dl_vlan_pcp(match, value->u8, 0);
 1180|    379|        break;
 1181|       |
 1182|    198|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (1182:5): [True: 198, False: 119k]
  ------------------
 1183|    198|        match_set_mpls_label(match, 0, value->be32);
 1184|    198|        break;
 1185|       |
 1186|    206|    case MFF_MPLS_TC:
  ------------------
  |  Branch (1186:5): [True: 206, False: 119k]
  ------------------
 1187|    206|        match_set_mpls_tc(match, 0, value->u8);
 1188|    206|        break;
 1189|       |
 1190|    256|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (1190:5): [True: 256, False: 119k]
  ------------------
 1191|    256|        match_set_mpls_bos(match, 0, value->u8);
 1192|    256|        break;
 1193|       |
 1194|    266|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (1194:5): [True: 266, False: 119k]
  ------------------
 1195|    266|        match_set_mpls_ttl(match, 0, value->u8);
 1196|    266|        break;
 1197|       |
 1198|     71|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (1198:5): [True: 71, False: 119k]
  ------------------
 1199|     71|        match_set_nw_src(match, value->be32);
 1200|     71|        break;
 1201|       |
 1202|    946|    case MFF_IPV4_DST:
  ------------------
  |  Branch (1202:5): [True: 946, False: 118k]
  ------------------
 1203|    946|        match_set_nw_dst(match, value->be32);
 1204|    946|        break;
 1205|       |
 1206|     75|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (1206:5): [True: 75, False: 119k]
  ------------------
 1207|     75|        match_set_ipv6_src(match, &value->ipv6);
 1208|     75|        break;
 1209|       |
 1210|     94|    case MFF_IPV6_DST:
  ------------------
  |  Branch (1210:5): [True: 94, False: 119k]
  ------------------
 1211|     94|        match_set_ipv6_dst(match, &value->ipv6);
 1212|     94|        break;
 1213|       |
 1214|    202|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (1214:5): [True: 202, False: 119k]
  ------------------
 1215|    202|        match_set_ipv6_label(match, value->be32);
 1216|    202|        break;
 1217|       |
 1218|  2.25k|    case MFF_IP_PROTO:
  ------------------
  |  Branch (1218:5): [True: 2.25k, False: 117k]
  ------------------
 1219|  2.25k|        match_set_nw_proto(match, value->u8);
 1220|  2.25k|        break;
 1221|       |
 1222|    218|    case MFF_IP_DSCP:
  ------------------
  |  Branch (1222:5): [True: 218, False: 119k]
  ------------------
 1223|    218|        match_set_nw_dscp(match, value->u8);
 1224|    218|        break;
 1225|       |
 1226|    293|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (1226:5): [True: 293, False: 118k]
  ------------------
 1227|    293|        match_set_nw_dscp(match, value->u8 << 2);
 1228|    293|        break;
 1229|       |
 1230|    260|    case MFF_IP_ECN:
  ------------------
  |  Branch (1230:5): [True: 260, False: 119k]
  ------------------
 1231|    260|        match_set_nw_ecn(match, value->u8);
 1232|    260|        break;
 1233|       |
 1234|    386|    case MFF_IP_TTL:
  ------------------
  |  Branch (1234:5): [True: 386, False: 118k]
  ------------------
 1235|    386|        match_set_nw_ttl(match, value->u8);
 1236|    386|        break;
 1237|       |
 1238|     45|    case MFF_IP_FRAG:
  ------------------
  |  Branch (1238:5): [True: 45, False: 119k]
  ------------------
 1239|     45|        match_set_nw_frag(match, value->u8);
 1240|     45|        break;
 1241|       |
 1242|    136|    case MFF_ARP_OP:
  ------------------
  |  Branch (1242:5): [True: 136, False: 119k]
  ------------------
 1243|    136|        match_set_nw_proto(match, ntohs(value->be16));
 1244|    136|        break;
 1245|       |
 1246|    213|    case MFF_ARP_SPA:
  ------------------
  |  Branch (1246:5): [True: 213, False: 119k]
  ------------------
 1247|    213|        match_set_nw_src(match, value->be32);
 1248|    213|        break;
 1249|       |
 1250|     69|    case MFF_ARP_TPA:
  ------------------
  |  Branch (1250:5): [True: 69, False: 119k]
  ------------------
 1251|     69|        match_set_nw_dst(match, value->be32);
 1252|     69|        break;
 1253|       |
 1254|     19|    case MFF_ARP_SHA:
  ------------------
  |  Branch (1254:5): [True: 19, False: 119k]
  ------------------
 1255|    167|    case MFF_ND_SLL:
  ------------------
  |  Branch (1255:5): [True: 148, False: 119k]
  ------------------
 1256|    167|        match_set_arp_sha(match, value->mac);
 1257|    167|        break;
 1258|       |
 1259|    230|    case MFF_ARP_THA:
  ------------------
  |  Branch (1259:5): [True: 230, False: 119k]
  ------------------
 1260|    459|    case MFF_ND_TLL:
  ------------------
  |  Branch (1260:5): [True: 229, False: 119k]
  ------------------
 1261|    459|        match_set_arp_tha(match, value->mac);
 1262|    459|        break;
 1263|       |
 1264|    384|    case MFF_TCP_SRC:
  ------------------
  |  Branch (1264:5): [True: 384, False: 118k]
  ------------------
 1265|    742|    case MFF_UDP_SRC:
  ------------------
  |  Branch (1265:5): [True: 358, False: 118k]
  ------------------
 1266|    943|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (1266:5): [True: 201, False: 119k]
  ------------------
 1267|    943|        match_set_tp_src(match, value->be16);
 1268|    943|        break;
 1269|       |
 1270|     66|    case MFF_TCP_DST:
  ------------------
  |  Branch (1270:5): [True: 66, False: 119k]
  ------------------
 1271|    361|    case MFF_UDP_DST:
  ------------------
  |  Branch (1271:5): [True: 295, False: 118k]
  ------------------
 1272|    638|    case MFF_SCTP_DST:
  ------------------
  |  Branch (1272:5): [True: 277, False: 119k]
  ------------------
 1273|    638|        match_set_tp_dst(match, value->be16);
 1274|    638|        break;
 1275|       |
 1276|    261|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (1276:5): [True: 261, False: 119k]
  ------------------
 1277|    261|        match_set_tcp_flags(match, value->be16);
 1278|    261|        break;
 1279|       |
 1280|     66|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (1280:5): [True: 66, False: 119k]
  ------------------
 1281|    568|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (1281:5): [True: 502, False: 118k]
  ------------------
 1282|    568|        match_set_icmp_type(match, value->u8);
 1283|    568|        break;
 1284|       |
 1285|    207|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (1285:5): [True: 207, False: 119k]
  ------------------
 1286|    418|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (1286:5): [True: 211, False: 119k]
  ------------------
 1287|    418|        match_set_icmp_code(match, value->u8);
 1288|    418|        break;
 1289|       |
 1290|     73|    case MFF_ND_TARGET:
  ------------------
  |  Branch (1290:5): [True: 73, False: 119k]
  ------------------
 1291|     73|        match_set_nd_target(match, &value->ipv6);
 1292|     73|        break;
 1293|       |
 1294|    361|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (1294:5): [True: 361, False: 118k]
  ------------------
 1295|    361|        match_set_nd_reserved(match, value->be32);
 1296|    361|        break;
 1297|       |
 1298|    300|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (1298:5): [True: 300, False: 118k]
  ------------------
 1299|    300|        match_set_nd_options_type(match, value->u8);
 1300|    300|        break;
 1301|       |
 1302|    434|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (1302:5): [True: 434, False: 118k]
  ------------------
 1303|    434|        MATCH_SET_FIELD_UINT8(match, nsh.flags, value->u8);
  ------------------
  |  |   56|    434|    MATCH_SET_FIELD_MASKED(match, field, value, UINT8_MAX)
  |  |  ------------------
  |  |  |  |   50|    434|    do {                                                      \
  |  |  |  |   51|    434|        (match)->wc.masks.field = (msk);                      \
  |  |  |  |   52|    434|        (match)->flow.field = (value) & (msk);                \
  |  |  |  |   53|    434|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (53:14): [Folded, False: 434]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1304|    434|        break;
 1305|    297|    case MFF_NSH_TTL:
  ------------------
  |  Branch (1305:5): [True: 297, False: 118k]
  ------------------
 1306|    297|        MATCH_SET_FIELD_UINT8(match, nsh.ttl, value->u8);
  ------------------
  |  |   56|    297|    MATCH_SET_FIELD_MASKED(match, field, value, UINT8_MAX)
  |  |  ------------------
  |  |  |  |   50|    297|    do {                                                      \
  |  |  |  |   51|    297|        (match)->wc.masks.field = (msk);                      \
  |  |  |  |   52|    297|        (match)->flow.field = (value) & (msk);                \
  |  |  |  |   53|    297|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (53:14): [Folded, False: 297]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1307|    297|        break;
 1308|    194|    case MFF_NSH_MDTYPE:
  ------------------
  |  Branch (1308:5): [True: 194, False: 119k]
  ------------------
 1309|    194|        MATCH_SET_FIELD_UINT8(match, nsh.mdtype, value->u8);
  ------------------
  |  |   56|    194|    MATCH_SET_FIELD_MASKED(match, field, value, UINT8_MAX)
  |  |  ------------------
  |  |  |  |   50|    194|    do {                                                      \
  |  |  |  |   51|    194|        (match)->wc.masks.field = (msk);                      \
  |  |  |  |   52|    194|        (match)->flow.field = (value) & (msk);                \
  |  |  |  |   53|    194|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (53:14): [Folded, False: 194]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1310|    194|        break;
 1311|  1.35k|    case MFF_NSH_NP:
  ------------------
  |  Branch (1311:5): [True: 1.35k, False: 117k]
  ------------------
 1312|  1.35k|        MATCH_SET_FIELD_UINT8(match, nsh.np, value->u8);
  ------------------
  |  |   56|  1.35k|    MATCH_SET_FIELD_MASKED(match, field, value, UINT8_MAX)
  |  |  ------------------
  |  |  |  |   50|  1.35k|    do {                                                      \
  |  |  |  |   51|  1.35k|        (match)->wc.masks.field = (msk);                      \
  |  |  |  |   52|  1.35k|        (match)->flow.field = (value) & (msk);                \
  |  |  |  |   53|  1.35k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (53:14): [Folded, False: 1.35k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1313|  1.35k|        break;
 1314|    201|    case MFF_NSH_SPI:
  ------------------
  |  Branch (1314:5): [True: 201, False: 119k]
  ------------------
 1315|    201|        match->wc.masks.nsh.path_hdr |= htonl(NSH_SPI_MASK);
 1316|    201|        nsh_path_hdr_set_spi(&match->flow.nsh.path_hdr, value->be32);
 1317|    201|        break;
 1318|    792|    case MFF_NSH_SI:
  ------------------
  |  Branch (1318:5): [True: 792, False: 118k]
  ------------------
 1319|    792|        match->wc.masks.nsh.path_hdr |= htonl(NSH_SI_MASK);
 1320|    792|        nsh_path_hdr_set_si(&match->flow.nsh.path_hdr, value->u8);
 1321|    792|        break;
 1322|     66|    case MFF_NSH_C1:
  ------------------
  |  Branch (1322:5): [True: 66, False: 119k]
  ------------------
 1323|    132|    case MFF_NSH_C2:
  ------------------
  |  Branch (1323:5): [True: 66, False: 119k]
  ------------------
 1324|    328|    case MFF_NSH_C3:
  ------------------
  |  Branch (1324:5): [True: 196, False: 119k]
  ------------------
 1325|    522|    case MFF_NSH_C4:
  ------------------
  |  Branch (1325:5): [True: 194, False: 119k]
  ------------------
 1326|    522|        MATCH_SET_FIELD_BE32(match, nsh.context[mf->id - MFF_NSH_C1],
  ------------------
  |  |   59|    522|    MATCH_SET_FIELD_MASKED(match, field, value, OVS_BE32_MAX)
  |  |  ------------------
  |  |  |  |   50|    522|    do {                                                      \
  |  |  |  |   51|    522|        (match)->wc.masks.field = (msk);                      \
  |  |  |  |   52|    522|        (match)->flow.field = (value) & (msk);                \
  |  |  |  |   53|    522|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (53:14): [Folded, False: 522]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1327|    522|                             value->be32);
 1328|    522|        break;
 1329|       |
 1330|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (1330:5): [True: 0, False: 119k]
  ------------------
 1331|      0|    default:
  ------------------
  |  Branch (1331:5): [True: 0, False: 119k]
  ------------------
 1332|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1333|   119k|    }
 1334|   119k|}
mf_field_len:
 1403|   138k|{
 1404|   138k|    int len, mask_len;
 1405|   138k|    bool is_masked = mask && !is_all_ones(mask, mf->n_bytes);
  ------------------
  |  Branch (1405:22): [True: 79.1k, False: 59.7k]
  |  Branch (1405:30): [True: 79.1k, False: 0]
  ------------------
 1406|       |
 1407|   138k|    len = field_len(mf, value);
 1408|   138k|    if (is_masked) {
  ------------------
  |  Branch (1408:9): [True: 79.1k, False: 59.7k]
  ------------------
 1409|  79.1k|        mask_len = field_len(mf, mask);
 1410|  79.1k|        len = MAX(len, mask_len);
  ------------------
  |  |   95|  79.1k|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (95:20): [True: 0, False: 79.1k]
  |  |  ------------------
  ------------------
 1411|  79.1k|    }
 1412|       |
 1413|   138k|    if (is_masked_) {
  ------------------
  |  Branch (1413:9): [True: 138k, False: 0]
  ------------------
 1414|   138k|        *is_masked_ = is_masked;
 1415|   138k|    }
 1416|       |
 1417|   138k|    return len;
 1418|   138k|}
mf_is_tun_metadata:
 1897|  85.8k|{
 1898|  85.8k|    return mf->id >= MFF_TUN_METADATA0 &&
  ------------------
  |  Branch (1898:12): [True: 81.5k, False: 4.22k]
  ------------------
 1899|  81.5k|           mf->id < MFF_TUN_METADATA0 + TUN_METADATA_NUM_OPTS;
  ------------------
  |  |   26|   167k|#define TUN_METADATA_NUM_OPTS 64
  ------------------
  |  Branch (1899:12): [True: 49.6k, False: 31.9k]
  ------------------
 1900|  85.8k|}
mf_is_pipeline_field:
 2026|   134k|{
 2027|   134k|    switch (mf->id) {
 2028|    234|    case MFF_TUN_ID:
  ------------------
  |  Branch (2028:5): [True: 234, False: 134k]
  ------------------
 2029|    624|    case MFF_TUN_SRC:
  ------------------
  |  Branch (2029:5): [True: 390, False: 134k]
  ------------------
 2030|    841|    case MFF_TUN_DST:
  ------------------
  |  Branch (2030:5): [True: 217, False: 134k]
  ------------------
 2031|  1.65k|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (2031:5): [True: 809, False: 133k]
  ------------------
 2032|  1.88k|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (2032:5): [True: 239, False: 134k]
  ------------------
 2033|  2.04k|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (2033:5): [True: 153, False: 134k]
  ------------------
 2034|  2.95k|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (2034:5): [True: 917, False: 133k]
  ------------------
 2035|  3.21k|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (2035:5): [True: 255, False: 134k]
  ------------------
 2036|  3.79k|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (2036:5): [True: 585, False: 133k]
  ------------------
 2037|  3.81k|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (2037:5): [True: 13, False: 134k]
  ------------------
 2038|  3.92k|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (2038:5): [True: 117, False: 134k]
  ------------------
 2039|  4.04k|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (2039:5): [True: 115, False: 134k]
  ------------------
 2040|  4.26k|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (2040:5): [True: 216, False: 134k]
  ------------------
 2041|  4.32k|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (2041:5): [True: 60, False: 134k]
  ------------------
 2042|  3.57M|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2110|  9.31k|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2110:5): [True: 1.69k, False: 132k]
  |  |  |  Branch (2110:29): [True: 3.29k, False: 131k]
  |  |  ------------------
  |  | 2111|  12.8k|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2111:5): [True: 2.48k, False: 131k]
  |  |  |  Branch (2111:29): [True: 1.09k, False: 133k]
  |  |  ------------------
  |  | 2112|  17.3k|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2112:5): [True: 841, False: 133k]
  |  |  |  Branch (2112:29): [True: 3.57k, False: 130k]
  |  |  ------------------
  |  | 2113|  22.0k|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2113:5): [True: 4.53k, False: 129k]
  |  |  |  Branch (2113:29): [True: 222, False: 134k]
  |  |  ------------------
  |  | 2114|  22.7k|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2114:5): [True: 106, False: 134k]
  |  |  |  Branch (2114:29): [True: 606, False: 133k]
  |  |  ------------------
  |  | 2115|  23.1k|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2115:5): [True: 286, False: 134k]
  |  |  |  Branch (2115:30): [True: 144, False: 134k]
  |  |  ------------------
  |  | 2116|  29.4k|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2116:5): [True: 4.36k, False: 130k]
  |  |  |  Branch (2116:30): [True: 1.92k, False: 132k]
  |  |  ------------------
  |  | 2117|  32.9k|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2117:5): [True: 819, False: 133k]
  |  |  |  Branch (2117:30): [True: 2.61k, False: 131k]
  |  |  ------------------
  |  | 2118|  35.7k|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2118:5): [True: 1.64k, False: 132k]
  |  |  |  Branch (2118:30): [True: 1.19k, False: 133k]
  |  |  ------------------
  |  | 2119|  43.4k|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2119:5): [True: 6.35k, False: 128k]
  |  |  |  Branch (2119:30): [True: 1.33k, False: 133k]
  |  |  ------------------
  |  | 2120|  47.8k|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2120:5): [True: 1.48k, False: 132k]
  |  |  |  Branch (2120:30): [True: 2.89k, False: 131k]
  |  |  ------------------
  |  | 2121|  50.2k|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2121:5): [True: 2.21k, False: 132k]
  |  |  |  Branch (2121:30): [True: 244, False: 134k]
  |  |  ------------------
  |  | 2122|  52.6k|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2122:5): [True: 1.79k, False: 132k]
  |  |  |  Branch (2122:30): [True: 581, False: 133k]
  |  |  ------------------
  |  | 2123|  54.7k|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2123:5): [True: 1.65k, False: 132k]
  |  |  |  Branch (2123:30): [True: 412, False: 133k]
  |  |  ------------------
  |  | 2124|  55.8k|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2124:5): [True: 122, False: 134k]
  |  |  |  Branch (2124:30): [True: 1.04k, False: 133k]
  |  |  ------------------
  |  | 2125|  59.5k|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2125:5): [True: 1.35k, False: 133k]
  |  |  |  Branch (2125:30): [True: 2.34k, False: 132k]
  |  |  ------------------
  |  | 2126|  63.0k|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2126:5): [True: 1.87k, False: 132k]
  |  |  |  Branch (2126:30): [True: 1.58k, False: 132k]
  |  |  ------------------
  |  | 2127|  66.7k|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2127:5): [True: 2.55k, False: 131k]
  |  |  |  Branch (2127:30): [True: 1.13k, False: 133k]
  |  |  ------------------
  |  | 2128|  67.4k|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2128:5): [True: 143, False: 134k]
  |  |  |  Branch (2128:30): [True: 546, False: 133k]
  |  |  ------------------
  |  | 2129|  69.0k|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2129:5): [True: 710, False: 133k]
  |  |  |  Branch (2129:30): [True: 918, False: 133k]
  |  |  ------------------
  |  | 2130|  70.7k|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2130:5): [True: 1.09k, False: 133k]
  |  |  |  Branch (2130:30): [True: 625, False: 133k]
  |  |  ------------------
  |  | 2131|  71.7k|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2131:5): [True: 201, False: 134k]
  |  |  |  Branch (2131:30): [True: 802, False: 133k]
  |  |  ------------------
  |  | 2132|  72.5k|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2132:5): [True: 143, False: 134k]
  |  |  |  Branch (2132:30): [True: 596, False: 133k]
  |  |  ------------------
  |  | 2133|  74.2k|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2133:5): [True: 1.25k, False: 133k]
  |  |  |  Branch (2133:30): [True: 478, False: 133k]
  |  |  ------------------
  |  | 2134|  78.5k|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2134:5): [True: 952, False: 133k]
  |  |  |  Branch (2134:30): [True: 3.31k, False: 131k]
  |  |  ------------------
  |  | 2135|  80.7k|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2135:5): [True: 1.75k, False: 132k]
  |  |  |  Branch (2135:30): [True: 483, False: 133k]
  |  |  ------------------
  |  | 2136|  81.3k|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2136:5): [True: 476, False: 133k]
  |  |  |  Branch (2136:30): [True: 139, False: 134k]
  |  |  ------------------
  |  | 2137|  83.5k|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2137:5): [True: 874, False: 133k]
  |  |  |  Branch (2137:30): [True: 1.30k, False: 133k]
  |  |  ------------------
  |  | 2138|  85.1k|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2138:5): [True: 502, False: 133k]
  |  |  |  Branch (2138:30): [True: 1.13k, False: 133k]
  |  |  ------------------
  |  | 2139|  87.1k|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2139:5): [True: 1.89k, False: 132k]
  |  |  |  Branch (2139:30): [True: 39, False: 134k]
  |  |  ------------------
  |  | 2140|  91.4k|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2140:5): [True: 2.29k, False: 132k]
  |  |  |  Branch (2140:30): [True: 2.03k, False: 132k]
  |  |  ------------------
  |  | 2141|  94.0k|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2141:5): [True: 243, False: 134k]
  |  |  ------------------
  ------------------
 2043|  3.57M|    case MFF_METADATA:
  ------------------
  |  Branch (2043:5): [True: 139, False: 134k]
  ------------------
 2044|  97.7k|    case MFF_IN_PORT:
  ------------------
  |  Branch (2044:5): [True: 3.48k, False: 130k]
  ------------------
 2045|  97.9k|    case MFF_IN_PORT_OXM:
  ------------------
  |  Branch (2045:5): [True: 201, False: 134k]
  ------------------
 2046|  3.42M|    CASE_MFF_REGS:
  ------------------
  |  | 2065|   100k|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:     \
  |  |  ------------------
  |  |  |  Branch (2065:5): [True: 840, False: 133k]
  |  |  |  Branch (2065:20): [True: 124, False: 134k]
  |  |  |  Branch (2065:35): [True: 1.04k, False: 133k]
  |  |  |  Branch (2065:50): [True: 250, False: 134k]
  |  |  ------------------
  |  | 2066|   102k|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:     \
  |  |  ------------------
  |  |  |  Branch (2066:5): [True: 231, False: 134k]
  |  |  |  Branch (2066:20): [True: 1.25k, False: 133k]
  |  |  |  Branch (2066:35): [True: 606, False: 133k]
  |  |  |  Branch (2066:50): [True: 195, False: 134k]
  |  |  ------------------
  |  | 2067|   105k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11:   \
  |  |  ------------------
  |  |  |  Branch (2067:5): [True: 70, False: 134k]
  |  |  |  Branch (2067:20): [True: 866, False: 133k]
  |  |  |  Branch (2067:35): [True: 37, False: 134k]
  |  |  |  Branch (2067:51): [True: 1.99k, False: 132k]
  |  |  ------------------
  |  | 2068|   109k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15: \
  |  |  ------------------
  |  |  |  Branch (2068:5): [True: 502, False: 133k]
  |  |  |  Branch (2068:21): [True: 1.11k, False: 133k]
  |  |  |  Branch (2068:37): [True: 1.25k, False: 133k]
  |  |  |  Branch (2068:53): [True: 1.41k, False: 132k]
  |  |  ------------------
  |  | 2069|   110k|    case MFF_REG16: case MFF_REG17: case MFF_REG18: case MFF_REG19: \
  |  |  ------------------
  |  |  |  Branch (2069:5): [True: 23, False: 134k]
  |  |  |  Branch (2069:21): [True: 252, False: 134k]
  |  |  |  Branch (2069:37): [True: 25, False: 134k]
  |  |  |  Branch (2069:53): [True: 120, False: 134k]
  |  |  ------------------
  |  | 2070|   110k|    case MFF_REG20: case MFF_REG21: case MFF_REG22: case MFF_REG23: \
  |  |  ------------------
  |  |  |  Branch (2070:5): [True: 15, False: 134k]
  |  |  |  Branch (2070:21): [True: 290, False: 134k]
  |  |  |  Branch (2070:37): [True: 202, False: 134k]
  |  |  |  Branch (2070:53): [True: 94, False: 134k]
  |  |  ------------------
  |  | 2071|   111k|    case MFF_REG24: case MFF_REG25: case MFF_REG26: case MFF_REG27: \
  |  |  ------------------
  |  |  |  Branch (2071:5): [True: 117, False: 134k]
  |  |  |  Branch (2071:21): [True: 46, False: 134k]
  |  |  |  Branch (2071:37): [True: 21, False: 134k]
  |  |  |  Branch (2071:53): [True: 276, False: 134k]
  |  |  ------------------
  |  | 2072|   111k|    case MFF_REG28: case MFF_REG29: case MFF_REG30: case MFF_REG31
  |  |  ------------------
  |  |  |  Branch (2072:5): [True: 168, False: 134k]
  |  |  |  Branch (2072:21): [True: 36, False: 134k]
  |  |  |  Branch (2072:37): [True: 106, False: 134k]
  |  |  ------------------
  ------------------
 2047|  3.42M|    CASE_MFF_XREGS:
  ------------------
  |  | 2081|   113k|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3:    \
  |  |  ------------------
  |  |  |  Branch (2081:5): [True: 178, False: 134k]
  |  |  |  Branch (2081:21): [True: 107, False: 134k]
  |  |  |  Branch (2081:37): [True: 132, False: 134k]
  |  |  |  Branch (2081:53): [True: 1.96k, False: 132k]
  |  |  ------------------
  |  | 2082|   114k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7:    \
  |  |  ------------------
  |  |  |  Branch (2082:5): [True: 221, False: 134k]
  |  |  |  Branch (2082:21): [True: 189, False: 134k]
  |  |  |  Branch (2082:37): [True: 196, False: 134k]
  |  |  |  Branch (2082:53): [True: 375, False: 134k]
  |  |  ------------------
  |  | 2083|   115k|    case MFF_XREG8: case MFF_XREG9: case MFF_XREG10: case MFF_XREG11:  \
  |  |  ------------------
  |  |  |  Branch (2083:5): [True: 18, False: 134k]
  |  |  |  Branch (2083:21): [True: 258, False: 134k]
  |  |  |  Branch (2083:37): [True: 39, False: 134k]
  |  |  |  Branch (2083:54): [True: 139, False: 134k]
  |  |  ------------------
  |  | 2084|   115k|    case MFF_XREG12: case MFF_XREG13: case MFF_XREG14: case MFF_XREG15
  |  |  ------------------
  |  |  |  Branch (2084:5): [True: 355, False: 134k]
  |  |  |  Branch (2084:22): [True: 156, False: 134k]
  |  |  |  Branch (2084:39): [True: 66, False: 134k]
  |  |  ------------------
  ------------------
 2048|  1.83M|    CASE_MFF_XXREGS:
  ------------------
  |  | 2093|   122k|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3: \
  |  |  ------------------
  |  |  |  Branch (2093:5): [True: 89, False: 134k]
  |  |  |  Branch (2093:22): [True: 41, False: 134k]
  |  |  |  Branch (2093:39): [True: 4.85k, False: 129k]
  |  |  |  Branch (2093:56): [True: 1.50k, False: 132k]
  |  |  ------------------
  |  | 2094|   122k|    case MFF_XXREG4: case MFF_XXREG5: case MFF_XXREG6: case MFF_XXREG7
  |  |  ------------------
  |  |  |  Branch (2094:5): [True: 66, False: 134k]
  |  |  |  Branch (2094:22): [True: 34, False: 134k]
  |  |  |  Branch (2094:39): [True: 10, False: 134k]
  |  |  ------------------
  ------------------
 2049|   966k|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (2049:5): [True: 66, False: 134k]
  ------------------
 2050|   122k|        return true;
 2051|       |
 2052|     34|    case MFF_DP_HASH:
  ------------------
  |  Branch (2052:5): [True: 34, False: 134k]
  ------------------
 2053|    588|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (2053:5): [True: 554, False: 133k]
  ------------------
 2054|    782|    case MFF_CONJ_ID:
  ------------------
  |  Branch (2054:5): [True: 194, False: 134k]
  ------------------
 2055|    782|    case MFF_TUN_TTL:
  ------------------
  |  Branch (2055:5): [True: 0, False: 134k]
  ------------------
 2056|    782|    case MFF_TUN_TOS:
  ------------------
  |  Branch (2056:5): [True: 0, False: 134k]
  ------------------
 2057|    848|    case MFF_ACTSET_OUTPUT:
  ------------------
  |  Branch (2057:5): [True: 66, False: 134k]
  ------------------
 2058|    848|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (2058:5): [True: 0, False: 134k]
  ------------------
 2059|    914|    case MFF_PKT_MARK:
  ------------------
  |  Branch (2059:5): [True: 66, False: 134k]
  ------------------
 2060|  1.22k|    case MFF_CT_STATE:
  ------------------
  |  Branch (2060:5): [True: 309, False: 134k]
  ------------------
 2061|  1.25k|    case MFF_CT_ZONE:
  ------------------
  |  Branch (2061:5): [True: 34, False: 134k]
  ------------------
 2062|  1.48k|    case MFF_CT_MARK:
  ------------------
  |  Branch (2062:5): [True: 225, False: 134k]
  ------------------
 2063|  1.58k|    case MFF_CT_LABEL:
  ------------------
  |  Branch (2063:5): [True: 105, False: 134k]
  ------------------
 2064|  1.78k|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (2064:5): [True: 194, False: 134k]
  ------------------
 2065|  1.97k|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (2065:5): [True: 198, False: 134k]
  ------------------
 2066|  2.09k|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (2066:5): [True: 119, False: 134k]
  ------------------
 2067|  2.16k|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (2067:5): [True: 66, False: 134k]
  ------------------
 2068|  2.17k|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (2068:5): [True: 10, False: 134k]
  ------------------
 2069|  2.24k|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (2069:5): [True: 66, False: 134k]
  ------------------
 2070|  2.30k|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (2070:5): [True: 66, False: 134k]
  ------------------
 2071|  2.34k|    case MFF_ETH_SRC:
  ------------------
  |  Branch (2071:5): [True: 34, False: 134k]
  ------------------
 2072|  2.40k|    case MFF_ETH_DST:
  ------------------
  |  Branch (2072:5): [True: 66, False: 134k]
  ------------------
 2073|  2.52k|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (2073:5): [True: 115, False: 134k]
  ------------------
 2074|  3.25k|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (2074:5): [True: 729, False: 133k]
  ------------------
 2075|  3.25k|    case MFF_DL_VLAN:
  ------------------
  |  Branch (2075:5): [True: 0, False: 134k]
  ------------------
 2076|  3.31k|    case MFF_VLAN_VID:
  ------------------
  |  Branch (2076:5): [True: 66, False: 134k]
  ------------------
 2077|  3.31k|    case MFF_DL_VLAN_PCP:
  ------------------
  |  Branch (2077:5): [True: 0, False: 134k]
  ------------------
 2078|  3.51k|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (2078:5): [True: 194, False: 134k]
  ------------------
 2079|  3.60k|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (2079:5): [True: 96, False: 134k]
  ------------------
 2080|  3.64k|    case MFF_MPLS_TC:
  ------------------
  |  Branch (2080:5): [True: 34, False: 134k]
  ------------------
 2081|  3.83k|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (2081:5): [True: 194, False: 134k]
  ------------------
 2082|  5.70k|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (2082:5): [True: 1.87k, False: 132k]
  ------------------
 2083|  5.80k|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (2083:5): [True: 104, False: 134k]
  ------------------
 2084|  5.87k|    case MFF_IPV4_DST:
  ------------------
  |  Branch (2084:5): [True: 66, False: 134k]
  ------------------
 2085|  5.94k|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (2085:5): [True: 66, False: 134k]
  ------------------
 2086|  6.13k|    case MFF_IPV6_DST:
  ------------------
  |  Branch (2086:5): [True: 191, False: 134k]
  ------------------
 2087|  6.15k|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (2087:5): [True: 18, False: 134k]
  ------------------
 2088|  6.34k|    case MFF_IP_PROTO:
  ------------------
  |  Branch (2088:5): [True: 194, False: 134k]
  ------------------
 2089|  6.54k|    case MFF_IP_DSCP:
  ------------------
  |  Branch (2089:5): [True: 198, False: 134k]
  ------------------
 2090|  6.75k|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (2090:5): [True: 210, False: 134k]
  ------------------
 2091|  7.37k|    case MFF_IP_ECN:
  ------------------
  |  Branch (2091:5): [True: 621, False: 133k]
  ------------------
 2092|  7.56k|    case MFF_IP_TTL:
  ------------------
  |  Branch (2092:5): [True: 195, False: 134k]
  ------------------
 2093|  7.78k|    case MFF_IP_FRAG:
  ------------------
  |  Branch (2093:5): [True: 212, False: 134k]
  ------------------
 2094|  7.84k|    case MFF_ARP_OP:
  ------------------
  |  Branch (2094:5): [True: 66, False: 134k]
  ------------------
 2095|  8.17k|    case MFF_ARP_SPA:
  ------------------
  |  Branch (2095:5): [True: 332, False: 134k]
  ------------------
 2096|  8.55k|    case MFF_ARP_TPA:
  ------------------
  |  Branch (2096:5): [True: 378, False: 134k]
  ------------------
 2097|  8.59k|    case MFF_ARP_SHA:
  ------------------
  |  Branch (2097:5): [True: 34, False: 134k]
  ------------------
 2098|  8.78k|    case MFF_ARP_THA:
  ------------------
  |  Branch (2098:5): [True: 197, False: 134k]
  ------------------
 2099|  9.02k|    case MFF_TCP_SRC:
  ------------------
  |  Branch (2099:5): [True: 240, False: 134k]
  ------------------
 2100|  9.22k|    case MFF_TCP_DST:
  ------------------
  |  Branch (2100:5): [True: 195, False: 134k]
  ------------------
 2101|  9.24k|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (2101:5): [True: 18, False: 134k]
  ------------------
 2102|  9.31k|    case MFF_UDP_SRC:
  ------------------
  |  Branch (2102:5): [True: 70, False: 134k]
  ------------------
 2103|  9.64k|    case MFF_UDP_DST:
  ------------------
  |  Branch (2103:5): [True: 335, False: 134k]
  ------------------
 2104|  9.65k|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (2104:5): [True: 10, False: 134k]
  ------------------
 2105|  9.72k|    case MFF_SCTP_DST:
  ------------------
  |  Branch (2105:5): [True: 66, False: 134k]
  ------------------
 2106|  9.75k|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (2106:5): [True: 34, False: 134k]
  ------------------
 2107|  9.78k|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (2107:5): [True: 34, False: 134k]
  ------------------
 2108|  9.82k|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (2108:5): [True: 34, False: 134k]
  ------------------
 2109|  9.83k|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (2109:5): [True: 10, False: 134k]
  ------------------
 2110|  9.85k|    case MFF_ND_TARGET:
  ------------------
  |  Branch (2110:5): [True: 18, False: 134k]
  ------------------
 2111|  9.91k|    case MFF_ND_SLL:
  ------------------
  |  Branch (2111:5): [True: 66, False: 134k]
  ------------------
 2112|  10.1k|    case MFF_ND_TLL:
  ------------------
  |  Branch (2112:5): [True: 196, False: 134k]
  ------------------
 2113|  10.1k|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (2113:5): [True: 66, False: 134k]
  ------------------
 2114|  10.5k|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (2114:5): [True: 347, False: 134k]
  ------------------
 2115|  10.5k|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (2115:5): [True: 34, False: 134k]
  ------------------
 2116|  10.7k|    case MFF_NSH_TTL:
  ------------------
  |  Branch (2116:5): [True: 197, False: 134k]
  ------------------
 2117|  10.8k|    case MFF_NSH_MDTYPE:
  ------------------
  |  Branch (2117:5): [True: 78, False: 134k]
  ------------------
 2118|  10.9k|    case MFF_NSH_NP:
  ------------------
  |  Branch (2118:5): [True: 66, False: 134k]
  ------------------
 2119|  10.9k|    case MFF_NSH_SPI:
  ------------------
  |  Branch (2119:5): [True: 66, False: 134k]
  ------------------
 2120|  11.0k|    case MFF_NSH_SI:
  ------------------
  |  Branch (2120:5): [True: 66, False: 134k]
  ------------------
 2121|  11.2k|    case MFF_NSH_C1:
  ------------------
  |  Branch (2121:5): [True: 194, False: 134k]
  ------------------
 2122|  11.4k|    case MFF_NSH_C2:
  ------------------
  |  Branch (2122:5): [True: 211, False: 134k]
  ------------------
 2123|  11.6k|    case MFF_NSH_C3:
  ------------------
  |  Branch (2123:5): [True: 194, False: 134k]
  ------------------
 2124|  11.6k|    case MFF_NSH_C4:
  ------------------
  |  Branch (2124:5): [True: 66, False: 134k]
  ------------------
 2125|  11.6k|        return false;
 2126|       |
 2127|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (2127:5): [True: 0, False: 134k]
  ------------------
 2128|      0|    default:
  ------------------
  |  Branch (2128:5): [True: 0, False: 134k]
  ------------------
 2129|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 2130|   134k|    }
 2131|   134k|}
mf_set_wild:
 2162|  36.2k|{
 2163|  36.2k|    if (err_str) {
  ------------------
  |  Branch (2163:9): [True: 36.2k, False: 0]
  ------------------
 2164|  36.2k|        *err_str = NULL;
 2165|  36.2k|    }
 2166|       |
 2167|  36.2k|    switch (mf->id) {
 2168|  1.15k|    case MFF_DP_HASH:
  ------------------
  |  Branch (2168:5): [True: 1.15k, False: 35.0k]
  ------------------
 2169|  1.15k|        match->flow.dp_hash = 0;
 2170|  1.15k|        match->wc.masks.dp_hash = 0;
 2171|  1.15k|        break;
 2172|    128|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (2172:5): [True: 128, False: 36.0k]
  ------------------
 2173|    128|        match->flow.recirc_id = 0;
 2174|    128|        match->wc.masks.recirc_id = 0;
 2175|    128|        break;
 2176|     66|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (2176:5): [True: 66, False: 36.1k]
  ------------------
 2177|     66|        match->flow.packet_type = 0;
 2178|     66|        match->wc.masks.packet_type = 0;
 2179|     66|        break;
 2180|     18|    case MFF_CONJ_ID:
  ------------------
  |  Branch (2180:5): [True: 18, False: 36.1k]
  ------------------
 2181|     18|        match->flow.conj_id = 0;
 2182|     18|        match->wc.masks.conj_id = 0;
 2183|     18|        break;
 2184|     95|    case MFF_TUN_ID:
  ------------------
  |  Branch (2184:5): [True: 95, False: 36.1k]
  ------------------
 2185|     95|        match_set_tun_id_masked(match, htonll(0), htonll(0));
 2186|     95|        break;
 2187|    114|    case MFF_TUN_SRC:
  ------------------
  |  Branch (2187:5): [True: 114, False: 36.1k]
  ------------------
 2188|    114|        match_set_tun_src_masked(match, htonl(0), htonl(0));
 2189|    114|        break;
 2190|    212|    case MFF_TUN_DST:
  ------------------
  |  Branch (2190:5): [True: 212, False: 36.0k]
  ------------------
 2191|    212|        match_set_tun_dst_masked(match, htonl(0), htonl(0));
 2192|    212|        break;
 2193|     37|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (2193:5): [True: 37, False: 36.1k]
  ------------------
 2194|     37|        memset(&match->wc.masks.tunnel.ipv6_src, 0,
 2195|     37|               sizeof match->wc.masks.tunnel.ipv6_src);
 2196|     37|        memset(&match->flow.tunnel.ipv6_src, 0,
 2197|     37|               sizeof match->flow.tunnel.ipv6_src);
 2198|     37|        break;
 2199|     34|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (2199:5): [True: 34, False: 36.1k]
  ------------------
 2200|     34|        memset(&match->wc.masks.tunnel.ipv6_dst, 0,
 2201|     34|               sizeof match->wc.masks.tunnel.ipv6_dst);
 2202|     34|        memset(&match->flow.tunnel.ipv6_dst, 0,
 2203|     34|               sizeof match->flow.tunnel.ipv6_dst);
 2204|     34|        break;
 2205|     20|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (2205:5): [True: 20, False: 36.1k]
  ------------------
 2206|     20|        match_set_tun_flags_masked(match, 0, 0);
 2207|     20|        break;
 2208|    256|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (2208:5): [True: 256, False: 35.9k]
  ------------------
 2209|    256|        match_set_tun_gbp_id_masked(match, 0, 0);
 2210|    256|        break;
 2211|    844|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (2211:5): [True: 844, False: 35.3k]
  ------------------
 2212|    844|        match_set_tun_gbp_flags_masked(match, 0, 0);
 2213|    844|        break;
 2214|      0|    case MFF_TUN_TOS:
  ------------------
  |  Branch (2214:5): [True: 0, False: 36.2k]
  ------------------
 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: 36.2k]
  ------------------
 2218|      0|        match_set_tun_ttl_masked(match, 0, 0);
 2219|      0|        break;
 2220|    393|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (2220:5): [True: 393, False: 35.8k]
  ------------------
 2221|    393|        match_set_tun_erspan_ver_masked(match, 0, 0);
 2222|    393|        break;
 2223|     19|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (2223:5): [True: 19, False: 36.1k]
  ------------------
 2224|     19|        match_set_tun_erspan_idx_masked(match, 0, 0);
 2225|     19|        break;
 2226|     98|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (2226:5): [True: 98, False: 36.1k]
  ------------------
 2227|     98|        match_set_tun_erspan_dir_masked(match, 0, 0);
 2228|     98|        break;
 2229|     81|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (2229:5): [True: 81, False: 36.1k]
  ------------------
 2230|     81|        match_set_tun_erspan_hwid_masked(match, 0, 0);
 2231|     81|        break;
 2232|    102|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (2232:5): [True: 102, False: 36.1k]
  ------------------
 2233|    102|        match_set_tun_gtpu_flags_masked(match, 0, 0);
 2234|    102|        break;
 2235|    549|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (2235:5): [True: 549, False: 35.6k]
  ------------------
 2236|    549|        match_set_tun_gtpu_msgtype_masked(match, 0, 0);
 2237|    549|        break;
 2238|      0|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2110|      0|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2110:5): [True: 0, False: 36.2k]
  |  |  |  Branch (2110:29): [True: 0, False: 36.2k]
  |  |  ------------------
  |  | 2111|      0|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2111:5): [True: 0, False: 36.2k]
  |  |  |  Branch (2111:29): [True: 0, False: 36.2k]
  |  |  ------------------
  |  | 2112|      0|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2112:5): [True: 0, False: 36.2k]
  |  |  |  Branch (2112:29): [True: 0, False: 36.2k]
  |  |  ------------------
  |  | 2113|      0|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2113:5): [True: 0, False: 36.2k]
  |  |  |  Branch (2113:29): [True: 0, False: 36.2k]
  |  |  ------------------
  |  | 2114|      0|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2114:5): [True: 0, False: 36.2k]
  |  |  |  Branch (2114:29): [True: 0, False: 36.2k]
  |  |  ------------------
  |  | 2115|      0|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2115:5): [True: 0, False: 36.2k]
  |  |  |  Branch (2115:30): [True: 0, False: 36.2k]
  |  |  ------------------
  |  | 2116|      0|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2116:5): [True: 0, False: 36.2k]
  |  |  |  Branch (2116:30): [True: 0, False: 36.2k]
  |  |  ------------------
  |  | 2117|      0|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2117:5): [True: 0, False: 36.2k]
  |  |  |  Branch (2117:30): [True: 0, False: 36.2k]
  |  |  ------------------
  |  | 2118|      0|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2118:5): [True: 0, False: 36.2k]
  |  |  |  Branch (2118:30): [True: 0, False: 36.2k]
  |  |  ------------------
  |  | 2119|      0|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2119:5): [True: 0, False: 36.2k]
  |  |  |  Branch (2119:30): [True: 0, False: 36.2k]
  |  |  ------------------
  |  | 2120|      0|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2120:5): [True: 0, False: 36.2k]
  |  |  |  Branch (2120:30): [True: 0, False: 36.2k]
  |  |  ------------------
  |  | 2121|      0|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2121:5): [True: 0, False: 36.2k]
  |  |  |  Branch (2121:30): [True: 0, False: 36.2k]
  |  |  ------------------
  |  | 2122|      0|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2122:5): [True: 0, False: 36.2k]
  |  |  |  Branch (2122:30): [True: 0, False: 36.2k]
  |  |  ------------------
  |  | 2123|      0|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2123:5): [True: 0, False: 36.2k]
  |  |  |  Branch (2123:30): [True: 0, False: 36.2k]
  |  |  ------------------
  |  | 2124|      0|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2124:5): [True: 0, False: 36.2k]
  |  |  |  Branch (2124:30): [True: 0, False: 36.2k]
  |  |  ------------------
  |  | 2125|      0|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2125:5): [True: 0, False: 36.2k]
  |  |  |  Branch (2125:30): [True: 0, False: 36.2k]
  |  |  ------------------
  |  | 2126|      0|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2126:5): [True: 0, False: 36.2k]
  |  |  |  Branch (2126:30): [True: 0, False: 36.2k]
  |  |  ------------------
  |  | 2127|      0|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2127:5): [True: 0, False: 36.2k]
  |  |  |  Branch (2127:30): [True: 0, False: 36.2k]
  |  |  ------------------
  |  | 2128|      0|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2128:5): [True: 0, False: 36.2k]
  |  |  |  Branch (2128:30): [True: 0, False: 36.2k]
  |  |  ------------------
  |  | 2129|      0|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2129:5): [True: 0, False: 36.2k]
  |  |  |  Branch (2129:30): [True: 0, False: 36.2k]
  |  |  ------------------
  |  | 2130|      0|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2130:5): [True: 0, False: 36.2k]
  |  |  |  Branch (2130:30): [True: 0, False: 36.2k]
  |  |  ------------------
  |  | 2131|      0|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2131:5): [True: 0, False: 36.2k]
  |  |  |  Branch (2131:30): [True: 0, False: 36.2k]
  |  |  ------------------
  |  | 2132|      0|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2132:5): [True: 0, False: 36.2k]
  |  |  |  Branch (2132:30): [True: 0, False: 36.2k]
  |  |  ------------------
  |  | 2133|      0|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2133:5): [True: 0, False: 36.2k]
  |  |  |  Branch (2133:30): [True: 0, False: 36.2k]
  |  |  ------------------
  |  | 2134|      0|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2134:5): [True: 0, False: 36.2k]
  |  |  |  Branch (2134:30): [True: 0, False: 36.2k]
  |  |  ------------------
  |  | 2135|      0|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2135:5): [True: 0, False: 36.2k]
  |  |  |  Branch (2135:30): [True: 0, False: 36.2k]
  |  |  ------------------
  |  | 2136|      0|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2136:5): [True: 0, False: 36.2k]
  |  |  |  Branch (2136:30): [True: 0, False: 36.2k]
  |  |  ------------------
  |  | 2137|      0|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2137:5): [True: 0, False: 36.2k]
  |  |  |  Branch (2137:30): [True: 0, False: 36.2k]
  |  |  ------------------
  |  | 2138|      0|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2138:5): [True: 0, False: 36.2k]
  |  |  |  Branch (2138:30): [True: 0, False: 36.2k]
  |  |  ------------------
  |  | 2139|      0|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2139:5): [True: 0, False: 36.2k]
  |  |  |  Branch (2139:30): [True: 0, False: 36.2k]
  |  |  ------------------
  |  | 2140|      0|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2140:5): [True: 0, False: 36.2k]
  |  |  |  Branch (2140:30): [True: 0, False: 36.2k]
  |  |  ------------------
  |  | 2141|      0|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2141:5): [True: 0, False: 36.2k]
  |  |  ------------------
  ------------------
 2239|      0|        tun_metadata_set_match(mf, NULL, NULL, match, err_str);
 2240|      0|        break;
 2241|       |
 2242|    101|    case MFF_METADATA:
  ------------------
  |  Branch (2242:5): [True: 101, False: 36.1k]
  ------------------
 2243|    101|        match_set_metadata_masked(match, htonll(0), htonll(0));
 2244|    101|        break;
 2245|       |
 2246|     86|    case MFF_IN_PORT:
  ------------------
  |  Branch (2246:5): [True: 86, False: 36.1k]
  ------------------
 2247|    170|    case MFF_IN_PORT_OXM:
  ------------------
  |  Branch (2247:5): [True: 84, False: 36.1k]
  ------------------
 2248|    170|        match->flow.in_port.ofp_port = 0;
 2249|    170|        match->wc.masks.in_port.ofp_port = 0;
 2250|    170|        break;
 2251|     37|    case MFF_ACTSET_OUTPUT:
  ------------------
  |  Branch (2251:5): [True: 37, False: 36.1k]
  ------------------
 2252|     37|        match->flow.actset_output = 0;
 2253|     37|        match->wc.masks.actset_output = 0;
 2254|     37|        break;
 2255|       |
 2256|      0|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (2256:5): [True: 0, False: 36.2k]
  ------------------
 2257|      0|        match->flow.skb_priority = 0;
 2258|      0|        match->wc.masks.skb_priority = 0;
 2259|      0|        break;
 2260|       |
 2261|    368|    case MFF_PKT_MARK:
  ------------------
  |  Branch (2261:5): [True: 368, False: 35.8k]
  ------------------
 2262|    368|        match->flow.pkt_mark = 0;
 2263|    368|        match->wc.masks.pkt_mark = 0;
 2264|    368|        break;
 2265|       |
 2266|    251|    case MFF_CT_STATE:
  ------------------
  |  Branch (2266:5): [True: 251, False: 35.9k]
  ------------------
 2267|    251|        match->flow.ct_state = 0;
 2268|    251|        match->wc.masks.ct_state = 0;
 2269|    251|        break;
 2270|       |
 2271|     66|    case MFF_CT_ZONE:
  ------------------
  |  Branch (2271:5): [True: 66, False: 36.1k]
  ------------------
 2272|     66|        match->flow.ct_zone = 0;
 2273|     66|        match->wc.masks.ct_zone = 0;
 2274|     66|        break;
 2275|       |
 2276|     66|    case MFF_CT_MARK:
  ------------------
  |  Branch (2276:5): [True: 66, False: 36.1k]
  ------------------
 2277|     66|        match->flow.ct_mark = 0;
 2278|     66|        match->wc.masks.ct_mark = 0;
 2279|     66|        break;
 2280|       |
 2281|     10|    case MFF_CT_LABEL:
  ------------------
  |  Branch (2281:5): [True: 10, False: 36.2k]
  ------------------
 2282|     10|        memset(&match->flow.ct_label, 0, sizeof(match->flow.ct_label));
 2283|     10|        memset(&match->wc.masks.ct_label, 0, sizeof(match->wc.masks.ct_label));
 2284|     10|        break;
 2285|       |
 2286|     35|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (2286:5): [True: 35, False: 36.1k]
  ------------------
 2287|     35|        match->flow.ct_nw_proto = 0;
 2288|     35|        match->wc.masks.ct_nw_proto = 0;
 2289|     35|        break;
 2290|       |
 2291|    324|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (2291:5): [True: 324, False: 35.8k]
  ------------------
 2292|    324|        match->flow.ct_nw_src = 0;
 2293|    324|        match->wc.masks.ct_nw_src = 0;
 2294|    324|        break;
 2295|       |
 2296|     18|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (2296:5): [True: 18, False: 36.1k]
  ------------------
 2297|     18|        match->flow.ct_nw_dst = 0;
 2298|     18|        match->wc.masks.ct_nw_dst = 0;
 2299|     18|        break;
 2300|       |
 2301|     66|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (2301:5): [True: 66, False: 36.1k]
  ------------------
 2302|     66|        memset(&match->flow.ct_ipv6_src, 0, sizeof(match->flow.ct_ipv6_src));
 2303|     66|        WC_UNMASK_FIELD(&match->wc, ct_ipv6_src);
  ------------------
  |  |  205|     66|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 2304|     66|        break;
 2305|       |
 2306|    101|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (2306:5): [True: 101, False: 36.1k]
  ------------------
 2307|    101|        memset(&match->flow.ct_ipv6_dst, 0, sizeof(match->flow.ct_ipv6_dst));
 2308|    101|        WC_UNMASK_FIELD(&match->wc, ct_ipv6_dst);
  ------------------
  |  |  205|    101|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 2309|    101|        break;
 2310|       |
 2311|    195|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (2311:5): [True: 195, False: 36.0k]
  ------------------
 2312|    195|        match->flow.ct_tp_src = 0;
 2313|    195|        match->wc.masks.ct_tp_src = 0;
 2314|    195|        break;
 2315|       |
 2316|     18|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (2316:5): [True: 18, False: 36.1k]
  ------------------
 2317|     18|        match->flow.ct_tp_dst = 0;
 2318|     18|        match->wc.masks.ct_tp_dst = 0;
 2319|     18|        break;
 2320|       |
 2321|  6.53k|    CASE_MFF_REGS:
  ------------------
  |  | 2065|    400|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:     \
  |  |  ------------------
  |  |  |  Branch (2065:5): [True: 71, False: 36.1k]
  |  |  |  Branch (2065:20): [True: 74, False: 36.1k]
  |  |  |  Branch (2065:35): [True: 10, False: 36.2k]
  |  |  |  Branch (2065:50): [True: 245, False: 35.9k]
  |  |  ------------------
  |  | 2066|  1.39k|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:     \
  |  |  ------------------
  |  |  |  Branch (2066:5): [True: 81, False: 36.1k]
  |  |  |  Branch (2066:20): [True: 525, False: 35.6k]
  |  |  |  Branch (2066:35): [True: 374, False: 35.8k]
  |  |  |  Branch (2066:50): [True: 18, False: 36.1k]
  |  |  ------------------
  |  | 2067|  3.32k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11:   \
  |  |  ------------------
  |  |  |  Branch (2067:5): [True: 427, False: 35.7k]
  |  |  |  Branch (2067:20): [True: 1.00k, False: 35.2k]
  |  |  |  Branch (2067:35): [True: 483, False: 35.7k]
  |  |  |  Branch (2067:51): [True: 19, False: 36.1k]
  |  |  ------------------
  |  | 2068|  5.58k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15: \
  |  |  ------------------
  |  |  |  Branch (2068:5): [True: 181, False: 36.0k]
  |  |  |  Branch (2068:21): [True: 603, False: 35.6k]
  |  |  |  Branch (2068:37): [True: 623, False: 35.5k]
  |  |  |  Branch (2068:53): [True: 850, False: 35.3k]
  |  |  ------------------
  |  | 2069|  5.79k|    case MFF_REG16: case MFF_REG17: case MFF_REG18: case MFF_REG19: \
  |  |  ------------------
  |  |  |  Branch (2069:5): [True: 12, False: 36.2k]
  |  |  |  Branch (2069:21): [True: 148, False: 36.0k]
  |  |  |  Branch (2069:37): [True: 11, False: 36.2k]
  |  |  |  Branch (2069:53): [True: 35, False: 36.1k]
  |  |  ------------------
  |  | 2070|  6.18k|    case MFF_REG20: case MFF_REG21: case MFF_REG22: case MFF_REG23: \
  |  |  ------------------
  |  |  |  Branch (2070:5): [True: 10, False: 36.2k]
  |  |  |  Branch (2070:21): [True: 115, False: 36.1k]
  |  |  |  Branch (2070:37): [True: 194, False: 36.0k]
  |  |  |  Branch (2070:53): [True: 70, False: 36.1k]
  |  |  ------------------
  |  | 2071|  6.41k|    case MFF_REG24: case MFF_REG25: case MFF_REG26: case MFF_REG27: \
  |  |  ------------------
  |  |  |  Branch (2071:5): [True: 36, False: 36.1k]
  |  |  |  Branch (2071:21): [True: 37, False: 36.1k]
  |  |  |  Branch (2071:37): [True: 11, False: 36.2k]
  |  |  |  Branch (2071:53): [True: 145, False: 36.0k]
  |  |  ------------------
  |  | 2072|  6.53k|    case MFF_REG28: case MFF_REG29: case MFF_REG30: case MFF_REG31
  |  |  ------------------
  |  |  |  Branch (2072:5): [True: 81, False: 36.1k]
  |  |  |  Branch (2072:21): [True: 18, False: 36.1k]
  |  |  |  Branch (2072:37): [True: 12, False: 36.2k]
  |  |  ------------------
  ------------------
 2322|  6.53k|        match_set_reg_masked(match, mf->id - MFF_REG0, 0, 0);
 2323|  6.53k|        break;
 2324|       |
 2325|  2.63k|    CASE_MFF_XREGS:
  ------------------
  |  | 2081|  1.37k|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3:    \
  |  |  ------------------
  |  |  |  Branch (2081:5): [True: 25, False: 36.1k]
  |  |  |  Branch (2081:21): [True: 66, False: 36.1k]
  |  |  |  Branch (2081:37): [True: 195, False: 36.0k]
  |  |  |  Branch (2081:53): [True: 1.09k, False: 35.1k]
  |  |  ------------------
  |  | 2082|  1.98k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7:    \
  |  |  ------------------
  |  |  |  Branch (2082:5): [True: 83, False: 36.1k]
  |  |  |  Branch (2082:21): [True: 123, False: 36.0k]
  |  |  |  Branch (2082:37): [True: 66, False: 36.1k]
  |  |  |  Branch (2082:53): [True: 338, False: 35.8k]
  |  |  ------------------
  |  | 2083|  2.13k|    case MFF_XREG8: case MFF_XREG9: case MFF_XREG10: case MFF_XREG11:  \
  |  |  ------------------
  |  |  |  Branch (2083:5): [True: 66, False: 36.1k]
  |  |  |  Branch (2083:21): [True: 10, False: 36.2k]
  |  |  |  Branch (2083:37): [True: 66, False: 36.1k]
  |  |  |  Branch (2083:54): [True: 10, False: 36.2k]
  |  |  ------------------
  |  | 2084|  2.63k|    case MFF_XREG12: case MFF_XREG13: case MFF_XREG14: case MFF_XREG15
  |  |  ------------------
  |  |  |  Branch (2084:5): [True: 143, False: 36.0k]
  |  |  |  Branch (2084:22): [True: 269, False: 35.9k]
  |  |  |  Branch (2084:39): [True: 66, False: 36.1k]
  |  |  ------------------
  ------------------
 2326|  2.63k|        match_set_xreg_masked(match, mf->id - MFF_XREG0, 0, 0);
 2327|  2.63k|        break;
 2328|       |
 2329|  5.46k|    CASE_MFF_XXREGS: {
  ------------------
  |  | 2093|  5.46k|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3: \
  |  |  ------------------
  |  |  |  Branch (2093:5): [True: 103, False: 36.1k]
  |  |  |  Branch (2093:22): [True: 235, False: 35.9k]
  |  |  |  Branch (2093:39): [True: 3.64k, False: 32.5k]
  |  |  |  Branch (2093:56): [True: 1.47k, False: 34.7k]
  |  |  ------------------
  |  | 2094|  5.46k|    case MFF_XXREG4: case MFF_XXREG5: case MFF_XXREG6: case MFF_XXREG7
  |  |  ------------------
  |  |  |  Branch (2094:5): [True: 0, False: 36.2k]
  |  |  |  Branch (2094:22): [True: 0, False: 36.2k]
  |  |  |  Branch (2094:39): [True: 0, False: 36.2k]
  |  |  ------------------
  ------------------
 2330|  5.46k|        match_set_xxreg_masked(match, mf->id - MFF_XXREG0, OVS_U128_ZERO,
  ------------------
  |  |  130|  5.46k|#define OVS_U128_ZERO OVS_U128_MIN
  ------------------
 2331|  5.46k|                               OVS_U128_ZERO);
  ------------------
  |  |  130|  5.46k|#define OVS_U128_ZERO OVS_U128_MIN
  ------------------
 2332|  5.46k|        break;
 2333|  26.2k|    }
 2334|       |
 2335|     66|    case MFF_ETH_SRC:
  ------------------
  |  Branch (2335:5): [True: 66, False: 36.1k]
  ------------------
 2336|     66|        match->flow.dl_src = eth_addr_zero;
 2337|     66|        match->wc.masks.dl_src = eth_addr_zero;
 2338|     66|        break;
 2339|       |
 2340|    316|    case MFF_ETH_DST:
  ------------------
  |  Branch (2340:5): [True: 316, False: 35.9k]
  ------------------
 2341|    316|        match->flow.dl_dst = eth_addr_zero;
 2342|    316|        match->wc.masks.dl_dst = eth_addr_zero;
 2343|    316|        break;
 2344|       |
 2345|    127|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (2345:5): [True: 127, False: 36.0k]
  ------------------
 2346|    127|        match->flow.dl_type = htons(0);
 2347|    127|        match->wc.masks.dl_type = htons(0);
 2348|    127|        break;
 2349|       |
 2350|     36|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (2350:5): [True: 36, False: 36.1k]
  ------------------
 2351|     36|        match_set_dl_tci_masked(match, htons(0), htons(0));
 2352|     36|        break;
 2353|       |
 2354|      0|    case MFF_DL_VLAN:
  ------------------
  |  Branch (2354:5): [True: 0, False: 36.2k]
  ------------------
 2355|    573|    case MFF_VLAN_VID:
  ------------------
  |  Branch (2355:5): [True: 573, False: 35.6k]
  ------------------
 2356|    573|        match_set_any_vid(match);
 2357|    573|        break;
 2358|       |
 2359|      0|    case MFF_DL_VLAN_PCP:
  ------------------
  |  Branch (2359:5): [True: 0, False: 36.2k]
  ------------------
 2360|    325|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (2360:5): [True: 325, False: 35.8k]
  ------------------
 2361|    325|        match_set_any_pcp(match);
 2362|    325|        break;
 2363|       |
 2364|  1.42k|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (2364:5): [True: 1.42k, False: 34.7k]
  ------------------
 2365|  1.42k|        match_set_any_mpls_label(match, 0);
 2366|  1.42k|        break;
 2367|       |
 2368|    194|    case MFF_MPLS_TC:
  ------------------
  |  Branch (2368:5): [True: 194, False: 36.0k]
  ------------------
 2369|    194|        match_set_any_mpls_tc(match, 0);
 2370|    194|        break;
 2371|       |
 2372|     37|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (2372:5): [True: 37, False: 36.1k]
  ------------------
 2373|     37|        match_set_any_mpls_bos(match, 0);
 2374|     37|        break;
 2375|       |
 2376|    625|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (2376:5): [True: 625, False: 35.5k]
  ------------------
 2377|    625|        match_set_any_mpls_ttl(match, 0);
 2378|    625|        break;
 2379|       |
 2380|     18|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (2380:5): [True: 18, False: 36.1k]
  ------------------
 2381|     52|    case MFF_ARP_SPA:
  ------------------
  |  Branch (2381:5): [True: 34, False: 36.1k]
  ------------------
 2382|     52|        match_set_nw_src_masked(match, htonl(0), htonl(0));
 2383|     52|        break;
 2384|       |
 2385|     66|    case MFF_IPV4_DST:
  ------------------
  |  Branch (2385:5): [True: 66, False: 36.1k]
  ------------------
 2386|    688|    case MFF_ARP_TPA:
  ------------------
  |  Branch (2386:5): [True: 622, False: 35.5k]
  ------------------
 2387|    688|        match_set_nw_dst_masked(match, htonl(0), htonl(0));
 2388|    688|        break;
 2389|       |
 2390|     19|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (2390:5): [True: 19, False: 36.1k]
  ------------------
 2391|     19|        memset(&match->wc.masks.ipv6_src, 0, sizeof match->wc.masks.ipv6_src);
 2392|     19|        memset(&match->flow.ipv6_src, 0, sizeof match->flow.ipv6_src);
 2393|     19|        break;
 2394|       |
 2395|    196|    case MFF_IPV6_DST:
  ------------------
  |  Branch (2395:5): [True: 196, False: 36.0k]
  ------------------
 2396|    196|        memset(&match->wc.masks.ipv6_dst, 0, sizeof match->wc.masks.ipv6_dst);
 2397|    196|        memset(&match->flow.ipv6_dst, 0, sizeof match->flow.ipv6_dst);
 2398|    196|        break;
 2399|       |
 2400|     70|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (2400:5): [True: 70, False: 36.1k]
  ------------------
 2401|     70|        match->wc.masks.ipv6_label = htonl(0);
 2402|     70|        match->flow.ipv6_label = htonl(0);
 2403|     70|        break;
 2404|       |
 2405|    393|    case MFF_IP_PROTO:
  ------------------
  |  Branch (2405:5): [True: 393, False: 35.8k]
  ------------------
 2406|    393|        match->wc.masks.nw_proto = 0;
 2407|    393|        match->flow.nw_proto = 0;
 2408|    393|        break;
 2409|       |
 2410|     19|    case MFF_IP_DSCP:
  ------------------
  |  Branch (2410:5): [True: 19, False: 36.1k]
  ------------------
 2411|  1.24k|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (2411:5): [True: 1.22k, False: 34.9k]
  ------------------
 2412|  1.24k|        match->wc.masks.nw_tos &= ~IP_DSCP_MASK;
  ------------------
  |  |  724|  1.24k|#define IP_DSCP_MASK 0xfc
  ------------------
 2413|  1.24k|        match->flow.nw_tos &= ~IP_DSCP_MASK;
  ------------------
  |  |  724|  1.24k|#define IP_DSCP_MASK 0xfc
  ------------------
 2414|  1.24k|        break;
 2415|       |
 2416|     18|    case MFF_IP_ECN:
  ------------------
  |  Branch (2416:5): [True: 18, False: 36.1k]
  ------------------
 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|    205|    case MFF_IP_TTL:
  ------------------
  |  Branch (2421:5): [True: 205, False: 36.0k]
  ------------------
 2422|    205|        match->wc.masks.nw_ttl = 0;
 2423|    205|        match->flow.nw_ttl = 0;
 2424|    205|        break;
 2425|       |
 2426|     39|    case MFF_IP_FRAG:
  ------------------
  |  Branch (2426:5): [True: 39, False: 36.1k]
  ------------------
 2427|     39|        match->wc.masks.nw_frag &= ~FLOW_NW_FRAG_MASK;
  ------------------
  |  |   56|     39|#define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   54|     39|#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|     39|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  |  |  ------------------
  ------------------
 2428|     39|        match->flow.nw_frag &= ~FLOW_NW_FRAG_MASK;
  ------------------
  |  |   56|     39|#define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   54|     39|#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|     39|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  |  |  ------------------
  ------------------
 2429|     39|        break;
 2430|       |
 2431|     66|    case MFF_ARP_OP:
  ------------------
  |  Branch (2431:5): [True: 66, False: 36.1k]
  ------------------
 2432|     66|        match->wc.masks.nw_proto = 0;
 2433|     66|        match->flow.nw_proto = 0;
 2434|     66|        break;
 2435|       |
 2436|     18|    case MFF_ARP_SHA:
  ------------------
  |  Branch (2436:5): [True: 18, False: 36.1k]
  ------------------
 2437|    242|    case MFF_ND_SLL:
  ------------------
  |  Branch (2437:5): [True: 224, False: 35.9k]
  ------------------
 2438|    242|        match->flow.arp_sha = eth_addr_zero;
 2439|    242|        match->wc.masks.arp_sha = eth_addr_zero;
 2440|    242|        break;
 2441|       |
 2442|    196|    case MFF_ARP_THA:
  ------------------
  |  Branch (2442:5): [True: 196, False: 36.0k]
  ------------------
 2443|  3.18k|    case MFF_ND_TLL:
  ------------------
  |  Branch (2443:5): [True: 2.98k, False: 33.2k]
  ------------------
 2444|  3.18k|        match->flow.arp_tha = eth_addr_zero;
 2445|  3.18k|        match->wc.masks.arp_tha = eth_addr_zero;
 2446|  3.18k|        break;
 2447|       |
 2448|    318|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (2448:5): [True: 318, False: 35.8k]
  ------------------
 2449|    318|        match->wc.masks.igmp_group_ip4 = htonl(0);
 2450|    318|        match->flow.igmp_group_ip4 = htonl(0);
 2451|    318|        break;
 2452|       |
 2453|     38|    case MFF_TCP_SRC:
  ------------------
  |  Branch (2453:5): [True: 38, False: 36.1k]
  ------------------
 2454|    105|    case MFF_UDP_SRC:
  ------------------
  |  Branch (2454:5): [True: 67, False: 36.1k]
  ------------------
 2455|    139|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (2455:5): [True: 34, False: 36.1k]
  ------------------
 2456|    403|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (2456:5): [True: 264, False: 35.9k]
  ------------------
 2457|    854|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (2457:5): [True: 451, False: 35.7k]
  ------------------
 2458|    854|        match->wc.masks.tp_src = htons(0);
 2459|    854|        match->flow.tp_src = htons(0);
 2460|    854|        break;
 2461|       |
 2462|     19|    case MFF_TCP_DST:
  ------------------
  |  Branch (2462:5): [True: 19, False: 36.1k]
  ------------------
 2463|     88|    case MFF_UDP_DST:
  ------------------
  |  Branch (2463:5): [True: 69, False: 36.1k]
  ------------------
 2464|    475|    case MFF_SCTP_DST:
  ------------------
  |  Branch (2464:5): [True: 387, False: 35.8k]
  ------------------
 2465|    669|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (2465:5): [True: 194, False: 36.0k]
  ------------------
 2466|    780|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (2466:5): [True: 111, False: 36.1k]
  ------------------
 2467|    780|        match->wc.masks.tp_dst = htons(0);
 2468|    780|        match->flow.tp_dst = htons(0);
 2469|    780|        break;
 2470|       |
 2471|    326|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (2471:5): [True: 326, False: 35.8k]
  ------------------
 2472|    540|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (2472:5): [True: 214, False: 36.0k]
  ------------------
 2473|    540|        match->wc.masks.tcp_flags = htons(0);
 2474|    540|        match->flow.tcp_flags = htons(0);
 2475|    540|        break;
 2476|       |
 2477|    953|    case MFF_ND_TARGET:
  ------------------
  |  Branch (2477:5): [True: 953, False: 35.2k]
  ------------------
 2478|    953|        memset(&match->wc.masks.nd_target, 0,
 2479|    953|               sizeof match->wc.masks.nd_target);
 2480|    953|        memset(&match->flow.nd_target, 0, sizeof match->flow.nd_target);
 2481|    953|        break;
 2482|       |
 2483|  1.17k|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (2483:5): [True: 1.17k, False: 35.0k]
  ------------------
 2484|  1.17k|        MATCH_SET_FIELD_MASKED(match, nsh.flags, 0, 0);
  ------------------
  |  |   50|  1.17k|    do {                                                      \
  |  |   51|  1.17k|        (match)->wc.masks.field = (msk);                      \
  |  |   52|  1.17k|        (match)->flow.field = (value) & (msk);                \
  |  |   53|  1.17k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded, False: 1.17k]
  |  |  ------------------
  ------------------
 2485|  1.17k|        break;
 2486|    131|    case MFF_NSH_TTL:
  ------------------
  |  Branch (2486:5): [True: 131, False: 36.0k]
  ------------------
 2487|    131|        MATCH_SET_FIELD_MASKED(match, nsh.ttl, 0, 0);
  ------------------
  |  |   50|    131|    do {                                                      \
  |  |   51|    131|        (match)->wc.masks.field = (msk);                      \
  |  |   52|    131|        (match)->flow.field = (value) & (msk);                \
  |  |   53|    131|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded, False: 131]
  |  |  ------------------
  ------------------
 2488|    131|        break;
 2489|      0|    case MFF_NSH_MDTYPE:
  ------------------
  |  Branch (2489:5): [True: 0, False: 36.2k]
  ------------------
 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|    149|    case MFF_NSH_NP:
  ------------------
  |  Branch (2492:5): [True: 149, False: 36.0k]
  ------------------
 2493|    149|        MATCH_SET_FIELD_MASKED(match, nsh.np, 0, 0);
  ------------------
  |  |   50|    149|    do {                                                      \
  |  |   51|    149|        (match)->wc.masks.field = (msk);                      \
  |  |   52|    149|        (match)->flow.field = (value) & (msk);                \
  |  |   53|    149|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded, False: 149]
  |  |  ------------------
  ------------------
 2494|    149|        break;
 2495|     18|    case MFF_NSH_SPI:
  ------------------
  |  Branch (2495:5): [True: 18, False: 36.1k]
  ------------------
 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|    102|    case MFF_NSH_SI:
  ------------------
  |  Branch (2499:5): [True: 102, False: 36.1k]
  ------------------
 2500|    102|        match->wc.masks.nsh.path_hdr &= ~htonl(NSH_SI_MASK);
 2501|    102|        nsh_path_hdr_set_si(&match->flow.nsh.path_hdr, 0);
 2502|    102|        break;
 2503|    138|    case MFF_NSH_C1:
  ------------------
  |  Branch (2503:5): [True: 138, False: 36.0k]
  ------------------
 2504|    270|    case MFF_NSH_C2:
  ------------------
  |  Branch (2504:5): [True: 132, False: 36.0k]
  ------------------
 2505|    314|    case MFF_NSH_C3:
  ------------------
  |  Branch (2505:5): [True: 44, False: 36.1k]
  ------------------
 2506|    380|    case MFF_NSH_C4:
  ------------------
  |  Branch (2506:5): [True: 66, False: 36.1k]
  ------------------
 2507|    380|        MATCH_SET_FIELD_MASKED(match, nsh.context[mf->id - MFF_NSH_C1],
  ------------------
  |  |   50|    380|    do {                                                      \
  |  |   51|    380|        (match)->wc.masks.field = (msk);                      \
  |  |   52|    380|        (match)->flow.field = (value) & (msk);                \
  |  |   53|    380|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded, False: 380]
  |  |  ------------------
  ------------------
 2508|    380|                               htonl(0), htonl(0));
 2509|    380|        break;
 2510|       |
 2511|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (2511:5): [True: 0, False: 36.2k]
  ------------------
 2512|      0|    default:
  ------------------
  |  Branch (2512:5): [True: 0, False: 36.2k]
  ------------------
 2513|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 2514|  36.2k|    }
 2515|  36.2k|}
mf_set:
 2540|   277k|{
 2541|   277k|    if (!mask || is_all_ones(mask, mf->n_bytes)) {
  ------------------
  |  Branch (2541:9): [True: 0, False: 277k]
  |  Branch (2541:18): [True: 119k, False: 158k]
  ------------------
 2542|   119k|        mf_set_value(mf, value, match, err_str);
 2543|   119k|        return mf->usable_protocols_exact;
 2544|   158k|    } else if (is_all_zeros(mask, mf->n_bytes) && !mf_is_tun_metadata(mf)) {
  ------------------
  |  Branch (2544:16): [True: 85.8k, False: 72.2k]
  |  Branch (2544:51): [True: 36.2k, False: 49.6k]
  ------------------
 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|  36.2k|        mf_set_wild(mf, match, err_str);
 2548|  36.2k|        return OFPUTIL_P_ANY;
  ------------------
  |  |  100|  36.2k|#define OFPUTIL_P_ANY ((1 << 9) - 1)
  ------------------
 2549|  36.2k|    }
 2550|       |
 2551|   121k|    if (err_str) {
  ------------------
  |  Branch (2551:9): [True: 81.5k, False: 40.2k]
  ------------------
 2552|  81.5k|        *err_str = NULL;
 2553|  81.5k|    }
 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|   121k|    switch (mf->id) {
 2562|     38|    case MFF_CT_ZONE:
  ------------------
  |  Branch (2562:5): [True: 38, False: 121k]
  ------------------
 2563|    832|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (2563:5): [True: 794, False: 121k]
  ------------------
 2564|  1.38k|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (2564:5): [True: 556, False: 121k]
  ------------------
 2565|  1.54k|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (2565:5): [True: 161, False: 121k]
  ------------------
 2566|  2.23k|    case MFF_CONJ_ID:
  ------------------
  |  Branch (2566:5): [True: 689, False: 121k]
  ------------------
 2567|  2.38k|    case MFF_IN_PORT:
  ------------------
  |  Branch (2567:5): [True: 145, False: 121k]
  ------------------
 2568|  3.46k|    case MFF_IN_PORT_OXM:
  ------------------
  |  Branch (2568:5): [True: 1.07k, False: 120k]
  ------------------
 2569|  3.62k|    case MFF_ACTSET_OUTPUT:
  ------------------
  |  Branch (2569:5): [True: 163, False: 121k]
  ------------------
 2570|  3.62k|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (2570:5): [True: 0, False: 121k]
  ------------------
 2571|  3.63k|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (2571:5): [True: 10, False: 121k]
  ------------------
 2572|  3.63k|    case MFF_DL_VLAN:
  ------------------
  |  Branch (2572:5): [True: 0, False: 121k]
  ------------------
 2573|  3.63k|    case MFF_DL_VLAN_PCP:
  ------------------
  |  Branch (2573:5): [True: 0, False: 121k]
  ------------------
 2574|  3.63k|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (2574:5): [True: 0, False: 121k]
  ------------------
 2575|  3.63k|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (2575:5): [True: 0, False: 121k]
  ------------------
 2576|  3.63k|    case MFF_MPLS_TC:
  ------------------
  |  Branch (2576:5): [True: 0, False: 121k]
  ------------------
 2577|  3.63k|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (2577:5): [True: 0, False: 121k]
  ------------------
 2578|  3.63k|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (2578:5): [True: 0, False: 121k]
  ------------------
 2579|  3.63k|    case MFF_IP_PROTO:
  ------------------
  |  Branch (2579:5): [True: 0, False: 121k]
  ------------------
 2580|  3.63k|    case MFF_IP_TTL:
  ------------------
  |  Branch (2580:5): [True: 0, False: 121k]
  ------------------
 2581|  3.63k|    case MFF_IP_DSCP:
  ------------------
  |  Branch (2581:5): [True: 0, False: 121k]
  ------------------
 2582|  3.63k|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (2582:5): [True: 0, False: 121k]
  ------------------
 2583|  3.63k|    case MFF_IP_ECN:
  ------------------
  |  Branch (2583:5): [True: 0, False: 121k]
  ------------------
 2584|  3.63k|    case MFF_ARP_OP:
  ------------------
  |  Branch (2584:5): [True: 0, False: 121k]
  ------------------
 2585|  3.63k|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (2585:5): [True: 0, False: 121k]
  ------------------
 2586|  3.63k|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (2586:5): [True: 0, False: 121k]
  ------------------
 2587|  3.63k|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (2587:5): [True: 0, False: 121k]
  ------------------
 2588|  3.63k|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (2588:5): [True: 0, False: 121k]
  ------------------
 2589|  3.63k|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (2589:5): [True: 0, False: 121k]
  ------------------
 2590|  3.63k|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (2590:5): [True: 0, False: 121k]
  ------------------
 2591|  3.63k|        return OFPUTIL_P_NONE;
  ------------------
  |  |   53|  3.63k|#define OFPUTIL_P_NONE 0
  ------------------
 2592|       |
 2593|    901|    case MFF_DP_HASH:
  ------------------
  |  Branch (2593:5): [True: 901, False: 120k]
  ------------------
 2594|    901|        match_set_dp_hash_masked(match, ntohl(value->be32), ntohl(mask->be32));
 2595|    901|        break;
 2596|  1.39k|    case MFF_TUN_ID:
  ------------------
  |  Branch (2596:5): [True: 1.39k, False: 120k]
  ------------------
 2597|  1.39k|        match_set_tun_id_masked(match, value->be64, mask->be64);
 2598|  1.39k|        break;
 2599|    288|    case MFF_TUN_SRC:
  ------------------
  |  Branch (2599:5): [True: 288, False: 121k]
  ------------------
 2600|    288|        match_set_tun_src_masked(match, value->be32, mask->be32);
 2601|    288|        break;
 2602|     81|    case MFF_TUN_DST:
  ------------------
  |  Branch (2602:5): [True: 81, False: 121k]
  ------------------
 2603|     81|        match_set_tun_dst_masked(match, value->be32, mask->be32);
 2604|     81|        break;
 2605|    911|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (2605:5): [True: 911, False: 120k]
  ------------------
 2606|    911|        match_set_tun_ipv6_src_masked(match, &value->ipv6, &mask->ipv6);
 2607|    911|        break;
 2608|    963|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (2608:5): [True: 963, False: 120k]
  ------------------
 2609|    963|        match_set_tun_ipv6_dst_masked(match, &value->ipv6, &mask->ipv6);
 2610|    963|        break;
 2611|    708|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (2611:5): [True: 708, False: 121k]
  ------------------
 2612|    708|        match_set_tun_flags_masked(match, ntohs(value->be16), ntohs(mask->be16));
 2613|    708|        break;
 2614|    688|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (2614:5): [True: 688, False: 121k]
  ------------------
 2615|    688|        match_set_tun_gbp_id_masked(match, value->be16, mask->be16);
 2616|    688|        break;
 2617|  1.31k|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (2617:5): [True: 1.31k, False: 120k]
  ------------------
 2618|  1.31k|        match_set_tun_gbp_flags_masked(match, value->u8, mask->u8);
 2619|  1.31k|        break;
 2620|      0|    case MFF_TUN_TTL:
  ------------------
  |  Branch (2620:5): [True: 0, False: 121k]
  ------------------
 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: 121k]
  ------------------
 2624|      0|        match_set_tun_tos_masked(match, value->u8, mask->u8);
 2625|      0|        break;
 2626|    182|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (2626:5): [True: 182, False: 121k]
  ------------------
 2627|    182|        match_set_tun_erspan_ver_masked(match, value->u8, mask->u8);
 2628|    182|        break;
 2629|     90|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (2629:5): [True: 90, False: 121k]
  ------------------
 2630|     90|        match_set_tun_erspan_idx_masked(match, ntohl(value->be32),
 2631|     90|                                        ntohl(mask->be32));
 2632|     90|        break;
 2633|    199|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (2633:5): [True: 199, False: 121k]
  ------------------
 2634|    199|        match_set_tun_erspan_dir_masked(match, value->u8, mask->u8);
 2635|    199|        break;
 2636|    426|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (2636:5): [True: 426, False: 121k]
  ------------------
 2637|    426|        match_set_tun_erspan_hwid_masked(match, value->u8, mask->u8);
 2638|    426|        break;
 2639|    116|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (2639:5): [True: 116, False: 121k]
  ------------------
 2640|    116|        match_set_tun_gtpu_flags_masked(match, value->u8, mask->u8);
 2641|    116|        break;
 2642|     55|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (2642:5): [True: 55, False: 121k]
  ------------------
 2643|     55|        match_set_tun_gtpu_msgtype_masked(match, value->u8, mask->u8);
 2644|     55|        break;
 2645|  79.1k|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2110|  3.79k|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2110:5): [True: 1.57k, False: 120k]
  |  |  |  Branch (2110:29): [True: 2.21k, False: 119k]
  |  |  ------------------
  |  | 2111|  6.20k|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2111:5): [True: 945, False: 120k]
  |  |  |  Branch (2111:29): [True: 1.46k, False: 120k]
  |  |  ------------------
  |  | 2112|  9.02k|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2112:5): [True: 84, False: 121k]
  |  |  |  Branch (2112:29): [True: 2.74k, False: 119k]
  |  |  ------------------
  |  | 2113|  14.3k|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2113:5): [True: 4.89k, False: 116k]
  |  |  |  Branch (2113:29): [True: 409, False: 121k]
  |  |  ------------------
  |  | 2114|  17.3k|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2114:5): [True: 2.49k, False: 119k]
  |  |  |  Branch (2114:29): [True: 534, False: 121k]
  |  |  ------------------
  |  | 2115|  19.2k|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2115:5): [True: 1.57k, False: 120k]
  |  |  |  Branch (2115:30): [True: 318, False: 121k]
  |  |  ------------------
  |  | 2116|  21.0k|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2116:5): [True: 1.55k, False: 120k]
  |  |  |  Branch (2116:30): [True: 214, False: 121k]
  |  |  ------------------
  |  | 2117|  23.8k|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2117:5): [True: 587, False: 121k]
  |  |  |  Branch (2117:30): [True: 2.25k, False: 119k]
  |  |  ------------------
  |  | 2118|  26.3k|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2118:5): [True: 1.63k, False: 120k]
  |  |  |  Branch (2118:30): [True: 809, False: 121k]
  |  |  ------------------
  |  | 2119|  30.8k|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2119:5): [True: 2.86k, False: 118k]
  |  |  |  Branch (2119:30): [True: 1.65k, False: 120k]
  |  |  ------------------
  |  | 2120|  32.9k|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2120:5): [True: 672, False: 121k]
  |  |  |  Branch (2120:30): [True: 1.44k, False: 120k]
  |  |  ------------------
  |  | 2121|  34.8k|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2121:5): [True: 934, False: 120k]
  |  |  |  Branch (2121:30): [True: 945, False: 120k]
  |  |  ------------------
  |  | 2122|  43.6k|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2122:5): [True: 2.31k, False: 119k]
  |  |  |  Branch (2122:30): [True: 6.49k, False: 115k]
  |  |  ------------------
  |  | 2123|  45.0k|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2123:5): [True: 816, False: 121k]
  |  |  |  Branch (2123:30): [True: 595, False: 121k]
  |  |  ------------------
  |  | 2124|  45.8k|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2124:5): [True: 157, False: 121k]
  |  |  |  Branch (2124:30): [True: 676, False: 121k]
  |  |  ------------------
  |  | 2125|  46.7k|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2125:5): [True: 450, False: 121k]
  |  |  |  Branch (2125:30): [True: 431, False: 121k]
  |  |  ------------------
  |  | 2126|  50.4k|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2126:5): [True: 2.04k, False: 119k]
  |  |  |  Branch (2126:30): [True: 1.61k, False: 120k]
  |  |  ------------------
  |  | 2127|  53.1k|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2127:5): [True: 2.35k, False: 119k]
  |  |  |  Branch (2127:30): [True: 357, False: 121k]
  |  |  ------------------
  |  | 2128|  53.9k|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2128:5): [True: 154, False: 121k]
  |  |  |  Branch (2128:30): [True: 709, False: 121k]
  |  |  ------------------
  |  | 2129|  55.1k|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2129:5): [True: 506, False: 121k]
  |  |  |  Branch (2129:30): [True: 682, False: 121k]
  |  |  ------------------
  |  | 2130|  57.0k|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2130:5): [True: 1.15k, False: 120k]
  |  |  |  Branch (2130:30): [True: 679, False: 121k]
  |  |  ------------------
  |  | 2131|  58.7k|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2131:5): [True: 1.13k, False: 120k]
  |  |  |  Branch (2131:30): [True: 597, False: 121k]
  |  |  ------------------
  |  | 2132|  60.7k|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2132:5): [True: 1.79k, False: 120k]
  |  |  |  Branch (2132:30): [True: 168, False: 121k]
  |  |  ------------------
  |  | 2133|  62.3k|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2133:5): [True: 351, False: 121k]
  |  |  |  Branch (2133:30): [True: 1.29k, False: 120k]
  |  |  ------------------
  |  | 2134|  63.7k|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2134:5): [True: 795, False: 121k]
  |  |  |  Branch (2134:30): [True: 577, False: 121k]
  |  |  ------------------
  |  | 2135|  65.4k|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2135:5): [True: 1.35k, False: 120k]
  |  |  |  Branch (2135:30): [True: 361, False: 121k]
  |  |  ------------------
  |  | 2136|  66.7k|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2136:5): [True: 322, False: 121k]
  |  |  |  Branch (2136:30): [True: 1.02k, False: 120k]
  |  |  ------------------
  |  | 2137|  68.9k|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2137:5): [True: 325, False: 121k]
  |  |  |  Branch (2137:30): [True: 1.79k, False: 120k]
  |  |  ------------------
  |  | 2138|  70.4k|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2138:5): [True: 692, False: 121k]
  |  |  |  Branch (2138:30): [True: 822, False: 121k]
  |  |  ------------------
  |  | 2139|  72.1k|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2139:5): [True: 1.03k, False: 120k]
  |  |  |  Branch (2139:30): [True: 646, False: 121k]
  |  |  ------------------
  |  | 2140|  76.0k|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2140:5): [True: 2.37k, False: 119k]
  |  |  |  Branch (2140:30): [True: 1.58k, False: 120k]
  |  |  ------------------
  |  | 2141|  79.1k|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2141:5): [True: 306, False: 121k]
  |  |  ------------------
  ------------------
 2646|  79.1k|        tun_metadata_set_match(mf, value, mask, match, err_str);
 2647|  79.1k|        break;
 2648|       |
 2649|    213|    case MFF_METADATA:
  ------------------
  |  Branch (2649:5): [True: 213, False: 121k]
  ------------------
 2650|    213|        match_set_metadata_masked(match, value->be64, mask->be64);
 2651|    213|        break;
 2652|       |
 2653|  11.1k|    CASE_MFF_REGS:
  ------------------
  |  | 2065|  3.39k|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:     \
  |  |  ------------------
  |  |  |  Branch (2065:5): [True: 2.05k, False: 119k]
  |  |  |  Branch (2065:20): [True: 323, False: 121k]
  |  |  |  Branch (2065:35): [True: 945, False: 120k]
  |  |  |  Branch (2065:50): [True: 74, False: 121k]
  |  |  ------------------
  |  | 2066|  4.87k|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:     \
  |  |  ------------------
  |  |  |  Branch (2066:5): [True: 91, False: 121k]
  |  |  |  Branch (2066:20): [True: 638, False: 121k]
  |  |  |  Branch (2066:35): [True: 544, False: 121k]
  |  |  |  Branch (2066:50): [True: 209, False: 121k]
  |  |  ------------------
  |  | 2067|  7.97k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11:   \
  |  |  ------------------
  |  |  |  Branch (2067:5): [True: 481, False: 121k]
  |  |  |  Branch (2067:20): [True: 976, False: 120k]
  |  |  |  Branch (2067:35): [True: 1.09k, False: 120k]
  |  |  |  Branch (2067:51): [True: 544, False: 121k]
  |  |  ------------------
  |  | 2068|  10.0k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15: \
  |  |  ------------------
  |  |  |  Branch (2068:5): [True: 569, False: 121k]
  |  |  |  Branch (2068:21): [True: 626, False: 121k]
  |  |  |  Branch (2068:37): [True: 334, False: 121k]
  |  |  |  Branch (2068:53): [True: 498, False: 121k]
  |  |  ------------------
  |  | 2069|  10.2k|    case MFF_REG16: case MFF_REG17: case MFF_REG18: case MFF_REG19: \
  |  |  ------------------
  |  |  |  Branch (2069:5): [True: 25, False: 121k]
  |  |  |  Branch (2069:21): [True: 114, False: 121k]
  |  |  |  Branch (2069:37): [True: 12, False: 121k]
  |  |  |  Branch (2069:53): [True: 101, False: 121k]
  |  |  ------------------
  |  | 2070|  10.5k|    case MFF_REG20: case MFF_REG21: case MFF_REG22: case MFF_REG23: \
  |  |  ------------------
  |  |  |  Branch (2070:5): [True: 10, False: 121k]
  |  |  |  Branch (2070:21): [True: 174, False: 121k]
  |  |  |  Branch (2070:37): [True: 50, False: 121k]
  |  |  |  Branch (2070:53): [True: 22, False: 121k]
  |  |  ------------------
  |  | 2071|  10.8k|    case MFF_REG24: case MFF_REG25: case MFF_REG26: case MFF_REG27: \
  |  |  ------------------
  |  |  |  Branch (2071:5): [True: 81, False: 121k]
  |  |  |  Branch (2071:21): [True: 70, False: 121k]
  |  |  |  Branch (2071:37): [True: 70, False: 121k]
  |  |  |  Branch (2071:53): [True: 134, False: 121k]
  |  |  ------------------
  |  | 2072|  11.1k|    case MFF_REG28: case MFF_REG29: case MFF_REG30: case MFF_REG31
  |  |  ------------------
  |  |  |  Branch (2072:5): [True: 85, False: 121k]
  |  |  |  Branch (2072:21): [True: 18, False: 121k]
  |  |  |  Branch (2072:37): [True: 94, False: 121k]
  |  |  ------------------
  ------------------
 2654|  11.1k|        match_set_reg_masked(match, mf->id - MFF_REG0,
 2655|  11.1k|                             ntohl(value->be32), ntohl(mask->be32));
 2656|  11.1k|        break;
 2657|       |
 2658|  3.45k|    CASE_MFF_XREGS:
  ------------------
  |  | 2081|  1.26k|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3:    \
  |  |  ------------------
  |  |  |  Branch (2081:5): [True: 140, False: 121k]
  |  |  |  Branch (2081:21): [True: 764, False: 121k]
  |  |  |  Branch (2081:37): [True: 109, False: 121k]
  |  |  |  Branch (2081:53): [True: 247, False: 121k]
  |  |  ------------------
  |  | 2082|  2.80k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7:    \
  |  |  ------------------
  |  |  |  Branch (2082:5): [True: 89, False: 121k]
  |  |  |  Branch (2082:21): [True: 310, False: 121k]
  |  |  |  Branch (2082:37): [True: 702, False: 121k]
  |  |  |  Branch (2082:53): [True: 447, False: 121k]
  |  |  ------------------
  |  | 2083|  3.07k|    case MFF_XREG8: case MFF_XREG9: case MFF_XREG10: case MFF_XREG11:  \
  |  |  ------------------
  |  |  |  Branch (2083:5): [True: 71, False: 121k]
  |  |  |  Branch (2083:21): [True: 13, False: 121k]
  |  |  |  Branch (2083:37): [True: 82, False: 121k]
  |  |  |  Branch (2083:54): [True: 101, False: 121k]
  |  |  ------------------
  |  | 2084|  3.45k|    case MFF_XREG12: case MFF_XREG13: case MFF_XREG14: case MFF_XREG15
  |  |  ------------------
  |  |  |  Branch (2084:5): [True: 163, False: 121k]
  |  |  |  Branch (2084:22): [True: 74, False: 121k]
  |  |  |  Branch (2084:39): [True: 75, False: 121k]
  |  |  ------------------
  ------------------
 2659|  3.45k|        match_set_xreg_masked(match, mf->id - MFF_XREG0,
 2660|  3.45k|                              ntohll(value->be64), ntohll(mask->be64));
 2661|  3.45k|        break;
 2662|       |
 2663|  1.80k|    CASE_MFF_XXREGS: {
  ------------------
  |  | 2093|  1.80k|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3: \
  |  |  ------------------
  |  |  |  Branch (2093:5): [True: 37, False: 121k]
  |  |  |  Branch (2093:22): [True: 124, False: 121k]
  |  |  |  Branch (2093:39): [True: 1.53k, False: 120k]
  |  |  |  Branch (2093:56): [True: 110, False: 121k]
  |  |  ------------------
  |  | 2094|  1.80k|    case MFF_XXREG4: case MFF_XXREG5: case MFF_XXREG6: case MFF_XXREG7
  |  |  ------------------
  |  |  |  Branch (2094:5): [True: 0, False: 121k]
  |  |  |  Branch (2094:22): [True: 0, False: 121k]
  |  |  |  Branch (2094:39): [True: 0, False: 121k]
  |  |  ------------------
  ------------------
 2664|  1.80k|        match_set_xxreg_masked(match, mf->id - MFF_XXREG0,
 2665|  1.80k|                ntoh128(value->be128), ntoh128(mask->be128));
 2666|  1.80k|        break;
 2667|  9.10k|    }
 2668|       |
 2669|    619|    case MFF_PKT_MARK:
  ------------------
  |  Branch (2669:5): [True: 619, False: 121k]
  ------------------
 2670|    619|        match_set_pkt_mark_masked(match, ntohl(value->be32),
 2671|    619|                                  ntohl(mask->be32));
 2672|    619|        break;
 2673|       |
 2674|    262|    case MFF_CT_STATE:
  ------------------
  |  Branch (2674:5): [True: 262, False: 121k]
  ------------------
 2675|    262|        match_set_ct_state_masked(match, ntohl(value->be32), ntohl(mask->be32));
 2676|    262|        break;
 2677|       |
 2678|  3.01k|    case MFF_CT_MARK:
  ------------------
  |  Branch (2678:5): [True: 3.01k, False: 118k]
  ------------------
 2679|  3.01k|        match_set_ct_mark_masked(match, ntohl(value->be32), ntohl(mask->be32));
 2680|  3.01k|        break;
 2681|       |
 2682|    708|    case MFF_CT_LABEL:
  ------------------
  |  Branch (2682:5): [True: 708, False: 121k]
  ------------------
 2683|    708|        match_set_ct_label_masked(match, ntoh128(value->be128),
 2684|    708|                                  ntoh128(mask->be128));
 2685|    708|        break;
 2686|       |
 2687|    115|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (2687:5): [True: 115, False: 121k]
  ------------------
 2688|    115|        match_set_ct_nw_src_masked(match, value->be32, mask->be32);
 2689|    115|        break;
 2690|       |
 2691|    217|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (2691:5): [True: 217, False: 121k]
  ------------------
 2692|    217|        match_set_ct_nw_dst_masked(match, value->be32, mask->be32);
 2693|    217|        break;
 2694|       |
 2695|    323|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (2695:5): [True: 323, False: 121k]
  ------------------
 2696|    323|        match_set_ct_ipv6_src_masked(match, &value->ipv6, &mask->ipv6);
 2697|    323|        break;
 2698|       |
 2699|  1.25k|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (2699:5): [True: 1.25k, False: 120k]
  ------------------
 2700|  1.25k|        match_set_ct_ipv6_dst_masked(match, &value->ipv6, &mask->ipv6);
 2701|  1.25k|        break;
 2702|       |
 2703|    139|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (2703:5): [True: 139, False: 121k]
  ------------------
 2704|    139|        match_set_ct_tp_src_masked(match, value->be16, mask->be16);
 2705|    139|        break;
 2706|       |
 2707|    634|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (2707:5): [True: 634, False: 121k]
  ------------------
 2708|    634|        match_set_ct_tp_dst_masked(match, value->be16, mask->be16);
 2709|    634|        break;
 2710|       |
 2711|     56|    case MFF_ETH_DST:
  ------------------
  |  Branch (2711:5): [True: 56, False: 121k]
  ------------------
 2712|     56|        match_set_dl_dst_masked(match, value->mac, mask->mac);
 2713|     56|        break;
 2714|       |
 2715|    223|    case MFF_ETH_SRC:
  ------------------
  |  Branch (2715:5): [True: 223, False: 121k]
  ------------------
 2716|    223|        match_set_dl_src_masked(match, value->mac, mask->mac);
 2717|    223|        break;
 2718|       |
 2719|     66|    case MFF_ARP_SHA:
  ------------------
  |  Branch (2719:5): [True: 66, False: 121k]
  ------------------
 2720|    199|    case MFF_ND_SLL:
  ------------------
  |  Branch (2720:5): [True: 133, False: 121k]
  ------------------
 2721|    199|        match_set_arp_sha_masked(match, value->mac, mask->mac);
 2722|    199|        break;
 2723|       |
 2724|    132|    case MFF_ARP_THA:
  ------------------
  |  Branch (2724:5): [True: 132, False: 121k]
  ------------------
 2725|    399|    case MFF_ND_TLL:
  ------------------
  |  Branch (2725:5): [True: 267, False: 121k]
  ------------------
 2726|    399|        match_set_arp_tha_masked(match, value->mac, mask->mac);
 2727|    399|        break;
 2728|       |
 2729|    574|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (2729:5): [True: 574, False: 121k]
  ------------------
 2730|    574|        match_set_dl_tci_masked(match, value->be16, mask->be16);
 2731|    574|        break;
 2732|       |
 2733|     92|    case MFF_VLAN_VID:
  ------------------
  |  Branch (2733:5): [True: 92, False: 121k]
  ------------------
 2734|     92|        match_set_vlan_vid_masked(match, value->be16, mask->be16);
 2735|     92|        break;
 2736|       |
 2737|    197|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (2737:5): [True: 197, False: 121k]
  ------------------
 2738|    197|        match_set_nw_src_masked(match, value->be32, mask->be32);
 2739|    197|        break;
 2740|       |
 2741|     80|    case MFF_IPV4_DST:
  ------------------
  |  Branch (2741:5): [True: 80, False: 121k]
  ------------------
 2742|     80|        match_set_nw_dst_masked(match, value->be32, mask->be32);
 2743|     80|        break;
 2744|       |
 2745|    322|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (2745:5): [True: 322, False: 121k]
  ------------------
 2746|    322|        match_set_ipv6_src_masked(match, &value->ipv6, &mask->ipv6);
 2747|    322|        break;
 2748|       |
 2749|    496|    case MFF_IPV6_DST:
  ------------------
  |  Branch (2749:5): [True: 496, False: 121k]
  ------------------
 2750|    496|        match_set_ipv6_dst_masked(match, &value->ipv6, &mask->ipv6);
 2751|    496|        break;
 2752|       |
 2753|    235|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (2753:5): [True: 235, False: 121k]
  ------------------
 2754|    235|        if ((mask->be32 & htonl(IPV6_LABEL_MASK)) == htonl(IPV6_LABEL_MASK)) {
  ------------------
  |  Branch (2754:13): [True: 197, False: 38]
  ------------------
 2755|    197|            mf_set_value(mf, value, match, err_str);
 2756|    197|        } else {
 2757|     38|            match_set_ipv6_label_masked(match, value->be32, mask->be32);
 2758|     38|        }
 2759|    235|        break;
 2760|       |
 2761|  1.06k|    case MFF_ND_TARGET:
  ------------------
  |  Branch (2761:5): [True: 1.06k, False: 120k]
  ------------------
 2762|  1.06k|        match_set_nd_target_masked(match, &value->ipv6, &mask->ipv6);
 2763|  1.06k|        break;
 2764|       |
 2765|    726|    case MFF_IP_FRAG:
  ------------------
  |  Branch (2765:5): [True: 726, False: 121k]
  ------------------
 2766|    726|        match_set_nw_frag_masked(match, value->u8,
 2767|    726|                                 mask->u8 & FLOW_NW_FRAG_MASK);
  ------------------
  |  |   56|    726|#define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   54|    726|#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|    726|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  |  |  ------------------
  ------------------
 2768|    726|        break;
 2769|       |
 2770|    222|    case MFF_ARP_SPA:
  ------------------
  |  Branch (2770:5): [True: 222, False: 121k]
  ------------------
 2771|    222|        match_set_nw_src_masked(match, value->be32, mask->be32);
 2772|    222|        break;
 2773|       |
 2774|    294|    case MFF_ARP_TPA:
  ------------------
  |  Branch (2774:5): [True: 294, False: 121k]
  ------------------
 2775|    294|        match_set_nw_dst_masked(match, value->be32, mask->be32);
 2776|    294|        break;
 2777|       |
 2778|    196|    case MFF_TCP_SRC:
  ------------------
  |  Branch (2778:5): [True: 196, False: 121k]
  ------------------
 2779|    232|    case MFF_UDP_SRC:
  ------------------
  |  Branch (2779:5): [True: 36, False: 121k]
  ------------------
 2780|    313|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (2780:5): [True: 81, False: 121k]
  ------------------
 2781|    313|        match_set_tp_src_masked(match, value->be16, mask->be16);
 2782|    313|        break;
 2783|       |
 2784|     77|    case MFF_TCP_DST:
  ------------------
  |  Branch (2784:5): [True: 77, False: 121k]
  ------------------
 2785|    150|    case MFF_UDP_DST:
  ------------------
  |  Branch (2785:5): [True: 73, False: 121k]
  ------------------
 2786|    337|    case MFF_SCTP_DST:
  ------------------
  |  Branch (2786:5): [True: 187, False: 121k]
  ------------------
 2787|    337|        match_set_tp_dst_masked(match, value->be16, mask->be16);
 2788|    337|        break;
 2789|       |
 2790|    488|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (2790:5): [True: 488, False: 121k]
  ------------------
 2791|    488|        match_set_tcp_flags_masked(match, value->be16, mask->be16);
 2792|    488|        break;
 2793|       |
 2794|    195|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (2794:5): [True: 195, False: 121k]
  ------------------
 2795|    195|        MATCH_SET_FIELD_MASKED(match, nsh.flags, value->u8, mask->u8);
  ------------------
  |  |   50|    195|    do {                                                      \
  |  |   51|    195|        (match)->wc.masks.field = (msk);                      \
  |  |   52|    195|        (match)->flow.field = (value) & (msk);                \
  |  |   53|    195|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded, False: 195]
  |  |  ------------------
  ------------------
 2796|    195|        break;
 2797|      0|    case MFF_NSH_TTL:
  ------------------
  |  Branch (2797:5): [True: 0, False: 121k]
  ------------------
 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: 121k]
  ------------------
 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: 121k]
  ------------------
 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: 121k]
  ------------------
 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: 121k]
  ------------------
 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|    130|    case MFF_NSH_C1:
  ------------------
  |  Branch (2816:5): [True: 130, False: 121k]
  ------------------
 2817|    263|    case MFF_NSH_C2:
  ------------------
  |  Branch (2817:5): [True: 133, False: 121k]
  ------------------
 2818|    334|    case MFF_NSH_C3:
  ------------------
  |  Branch (2818:5): [True: 71, False: 121k]
  ------------------
 2819|    372|    case MFF_NSH_C4:
  ------------------
  |  Branch (2819:5): [True: 38, False: 121k]
  ------------------
 2820|    372|        MATCH_SET_FIELD_MASKED(match, nsh.context[mf->id - MFF_NSH_C1],
  ------------------
  |  |   50|    372|    do {                                                      \
  |  |   51|    372|        (match)->wc.masks.field = (msk);                      \
  |  |   52|    372|        (match)->flow.field = (value) & (msk);                \
  |  |   53|    372|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded, False: 372]
  |  |  ------------------
  ------------------
 2821|    372|                               value->be32, mask->be32);
 2822|    372|        break;
 2823|       |
 2824|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (2824:5): [True: 0, False: 121k]
  ------------------
 2825|      0|    default:
  ------------------
  |  Branch (2825:5): [True: 0, False: 121k]
  ------------------
 2826|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 2827|   121k|    }
 2828|       |
 2829|   118k|    return ((mf->usable_protocols_bitwise == mf->usable_protocols_cidr
  ------------------
  |  Branch (2829:14): [True: 117k, False: 793]
  ------------------
 2830|    793|             || ip_is_cidr(mask->be32))
  ------------------
  |  Branch (2830:17): [True: 57, False: 736]
  ------------------
 2831|   118k|            ? mf->usable_protocols_cidr
 2832|   118k|            : mf->usable_protocols_bitwise);
 2833|   121k|}
mf_check_src:
 2948|  67.2k|{
 2949|  67.2k|    return mf_check__(sf, match, "source");
 2950|  67.2k|}
mf_check_dst:
 2957|  16.7k|{
 2958|  16.7k|    int error = mf_check__(sf, match, "destination");
 2959|  16.7k|    if (!error && !sf->field->writable) {
  ------------------
  |  Branch (2959:9): [True: 15.3k, False: 1.40k]
  |  Branch (2959:19): [True: 93, False: 15.2k]
  ------------------
 2960|     93|        VLOG_WARN_RL(&rl, "destination field %s is not writable",
  ------------------
  |  |  224|     93|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     93|    do {                                                                \
  |  |  |  |  288|     93|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     93|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 93]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     93|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 93]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2961|     93|                     sf->field->name);
 2962|     93|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2963|     93|    }
 2964|  16.6k|    return error;
 2965|  16.7k|}
mf_get:
 2972|  42.8k|{
 2973|  42.8k|    mf_get_value(mf, &match->flow, value);
 2974|  42.8k|    mf_get_mask(mf, &match->wc, mask);
 2975|  42.8k|}
mf_format:
 3401|  23.0k|{
 3402|  23.0k|    if (mask) {
  ------------------
  |  Branch (3402:9): [True: 8.98k, False: 14.1k]
  ------------------
 3403|  8.98k|        if (is_all_zeros(mask, mf->n_bytes)) {
  ------------------
  |  Branch (3403:13): [True: 2.35k, False: 6.63k]
  ------------------
 3404|  2.35k|            ds_put_cstr(s, "ANY");
 3405|  2.35k|            return;
 3406|  6.63k|        } else if (is_all_ones(mask, mf->n_bytes)) {
  ------------------
  |  Branch (3406:20): [True: 5.30k, False: 1.32k]
  ------------------
 3407|  5.30k|            mask = NULL;
 3408|  5.30k|        }
 3409|  8.98k|    }
 3410|       |
 3411|  20.7k|    switch (mf->string) {
 3412|    738|    case MFS_OFP_PORT_OXM:
  ------------------
  |  Branch (3412:5): [True: 738, False: 19.9k]
  ------------------
 3413|    738|        if (!mask) {
  ------------------
  |  Branch (3413:13): [True: 372, False: 366]
  ------------------
 3414|    372|            ofp_port_t port;
 3415|    372|            ofputil_port_from_ofp11(value->be32, &port);
 3416|    372|            ofputil_format_port(port, port_map, s);
 3417|    372|            break;
 3418|    372|        }
 3419|       |        /* fall through */
 3420|    560|    case MFS_OFP_PORT:
  ------------------
  |  Branch (3420:5): [True: 194, False: 20.5k]
  ------------------
 3421|    560|        if (!mask) {
  ------------------
  |  Branch (3421:13): [True: 194, False: 366]
  ------------------
 3422|    194|            ofputil_format_port(u16_to_ofp(ntohs(value->be16)), port_map, s);
 3423|    194|            break;
 3424|    194|        }
 3425|       |        /* fall through */
 3426|  3.83k|    case MFS_DECIMAL:
  ------------------
  |  Branch (3426:5): [True: 3.46k, False: 17.2k]
  ------------------
 3427|  14.1k|    case MFS_HEXADECIMAL:
  ------------------
  |  Branch (3427:5): [True: 10.2k, False: 10.4k]
  ------------------
 3428|  14.1k|        mf_format_integer_string(mf, (uint8_t *) value, (uint8_t *) mask, s);
 3429|  14.1k|        break;
 3430|       |
 3431|  1.65k|    case MFS_CT_STATE:
  ------------------
  |  Branch (3431:5): [True: 1.65k, False: 19.0k]
  ------------------
 3432|  1.65k|        mf_format_ct_state_string(value->be32,
 3433|  1.65k|                                  mask ? mask->be32 : OVS_BE32_MAX, s);
  ------------------
  |  |   43|  1.65k|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  |  Branch (3433:35): [True: 0, False: 1.65k]
  ------------------
 3434|  1.65k|        break;
 3435|       |
 3436|     66|    case MFS_ETHERNET:
  ------------------
  |  Branch (3436:5): [True: 66, False: 20.6k]
  ------------------
 3437|     66|        eth_format_masked(value->mac, mask ? &mask->mac : NULL, s);
  ------------------
  |  Branch (3437:39): [True: 0, False: 66]
  ------------------
 3438|     66|        break;
 3439|       |
 3440|     66|    case MFS_IPV4:
  ------------------
  |  Branch (3440:5): [True: 66, False: 20.6k]
  ------------------
 3441|     66|        ip_format_masked(value->be32, mask ? mask->be32 : OVS_BE32_MAX, s);
  ------------------
  |  |   43|     32|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  |  Branch (3441:39): [True: 34, False: 32]
  ------------------
 3442|     66|        break;
 3443|       |
 3444|    225|    case MFS_IPV6:
  ------------------
  |  Branch (3444:5): [True: 225, False: 20.5k]
  ------------------
 3445|    225|        ipv6_format_masked(&value->ipv6, mask ? &mask->ipv6 : NULL, s);
  ------------------
  |  Branch (3445:42): [True: 90, False: 135]
  ------------------
 3446|    225|        break;
 3447|       |
 3448|    480|    case MFS_FRAG:
  ------------------
  |  Branch (3448:5): [True: 480, False: 20.2k]
  ------------------
 3449|    480|        mf_format_frag_string(value->u8, mask ? mask->u8 : UINT8_MAX, s);
  ------------------
  |  Branch (3449:42): [True: 0, False: 480]
  ------------------
 3450|    480|        break;
 3451|       |
 3452|    566|    case MFS_TNL_FLAGS:
  ------------------
  |  Branch (3452:5): [True: 566, False: 20.1k]
  ------------------
 3453|    566|        mf_format_tnl_flags_string(value->be16,
 3454|    566|                                   mask ? mask->be16 : OVS_BE16_MAX, s);
  ------------------
  |  |   42|  1.06k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  |  Branch (3454:36): [True: 66, False: 500]
  ------------------
 3455|    566|        break;
 3456|       |
 3457|  2.60k|    case MFS_TCP_FLAGS:
  ------------------
  |  Branch (3457:5): [True: 2.60k, False: 18.1k]
  ------------------
 3458|  2.60k|        mf_format_tcp_flags_string(value->be16,
 3459|  2.60k|                                   mask ? mask->be16 : OVS_BE16_MAX, s);
  ------------------
  |  |   42|  5.21k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  |  Branch (3459:36): [True: 0, False: 2.60k]
  ------------------
 3460|  2.60k|        break;
 3461|       |
 3462|    380|    case MFS_PACKET_TYPE:
  ------------------
  |  Branch (3462:5): [True: 380, False: 20.3k]
  ------------------
 3463|    380|        mf_format_packet_type_string(value->be32,
 3464|    380|                                     mask ? mask->be32 : OVS_BE32_MAX, s);
  ------------------
  |  |   43|    380|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  |  Branch (3464:38): [True: 0, False: 380]
  ------------------
 3465|    380|        break;
 3466|       |
 3467|      0|    default:
  ------------------
  |  Branch (3467:5): [True: 0, False: 20.7k]
  ------------------
 3468|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 3469|  20.7k|    }
 3470|  20.7k|}
mf_write_subfield_value:
 3507|  42.8k|{
 3508|  42.8k|    const struct mf_field *field = sf->field;
 3509|  42.8k|    union mf_value value, mask;
 3510|  42.8k|    unsigned int size = DIV_ROUND_UP(sf->n_bits, 8);
  ------------------
  |  |  300|  42.8k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  ------------------
 3511|       |
 3512|  42.8k|    mf_get(field, match, &value, &mask);
 3513|  42.8k|    bitwise_copy(src, size, 0, &value, field->n_bytes, sf->ofs, sf->n_bits);
 3514|  42.8k|    bitwise_one (              &mask,  field->n_bytes, sf->ofs, sf->n_bits);
 3515|       |    mf_set(field, &value, &mask, match, NULL);
 3516|  42.8k|}
field_array_set:
 3571|  11.5k|{
 3572|  11.5k|    size_t i, offset = 0;
 3573|       |
 3574|  11.5k|    ovs_assert(id < MFF_N_IDS);
  ------------------
  |  |   62|  11.5k|#define ovs_assert ovs_ignore
  ------------------
 3575|       |
 3576|       |    /* Find the spot for 'id'. */
 3577|  11.5k|    BITMAP_FOR_EACH_1 (i, id, fa->used.bm) {
  ------------------
  |  |  281|  11.5k|    BITMAP_FOR_EACH_1_RANGE(IDX, 0, SIZE, BITMAP)
  |  |  ------------------
  |  |  |  |  278|  19.8k|    for ((IDX) = bitmap_scan(BITMAP, true, BEGIN, END); (IDX) < (END);   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (278:57): [True: 8.30k, False: 11.5k]
  |  |  |  |  ------------------
  |  |  |  |  279|  11.5k|         (IDX) = bitmap_scan(BITMAP, true, (IDX) + 1, END))
  |  |  ------------------
  ------------------
 3578|  8.30k|        offset += mf_from_id(i)->n_bytes;
 3579|  8.30k|    }
 3580|       |
 3581|  11.5k|    size_t value_size = mf_from_id(id)->n_bytes;
 3582|       |
 3583|       |    /* make room if necessary. */
 3584|  11.5k|    if (!bitmap_is_set(fa->used.bm, id)) {
  ------------------
  |  Branch (3584:9): [True: 11.5k, False: 0]
  ------------------
 3585|  11.5k|        fa->values = xrealloc(fa->values, fa->values_size + value_size);
 3586|       |        /* Move remainder forward, if any. */
 3587|  11.5k|        if (offset < fa->values_size) {
  ------------------
  |  Branch (3587:13): [True: 2.16k, False: 9.37k]
  ------------------
 3588|  2.16k|            memmove(fa->values + offset + value_size, fa->values + offset,
 3589|  2.16k|                    fa->values_size - offset);
 3590|  2.16k|        }
 3591|  11.5k|        fa->values_size += value_size;
 3592|  11.5k|    }
 3593|  11.5k|    bitmap_set1(fa->used.bm, id);
 3594|       |
 3595|  11.5k|    memcpy(fa->values + offset, value, value_size);
 3596|  11.5k|}
mf_get_vl_mff:
 3670|   414k|{
 3671|   414k|    if (mff && mff->variable_len && vl_mff_map) {
  ------------------
  |  Branch (3671:9): [True: 414k, False: 0]
  |  Branch (3671:16): [True: 196k, False: 218k]
  |  Branch (3671:37): [True: 0, False: 196k]
  ------------------
 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|   414k|    return NULL;
 3678|   414k|}
mf_vl_mff_invalid:
 3781|   415k|{
 3782|   415k|    return map && mff && mff->variable_len && !mff->mapped;
  ------------------
  |  Branch (3782:12): [True: 0, False: 415k]
  |  Branch (3782:19): [True: 0, False: 0]
  |  Branch (3782:26): [True: 0, False: 0]
  |  Branch (3782:47): [True: 0, False: 0]
  ------------------
 3783|   415k|}
mf_vl_mff_set_tlv_bitmap:
 3787|   123k|{
 3788|   123k|    if (mff && mff->mapped) {
  ------------------
  |  Branch (3788:9): [True: 123k, False: 0]
  |  Branch (3788:16): [True: 0, False: 123k]
  ------------------
 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|   123k|}
mf_vl_mff_nx_pull_header:
 3833|  27.4k|{
 3834|  27.4k|    enum ofperr error = nx_pull_header(b, vl_mff_map, field, masked);
 3835|  27.4k|    if (error) {
  ------------------
  |  Branch (3835:9): [True: 3.83k, False: 23.5k]
  ------------------
 3836|  3.83k|        return error;
 3837|  3.83k|    }
 3838|       |
 3839|  23.5k|    mf_vl_mff_set_tlv_bitmap(*field, tlv_bitmap);
 3840|  23.5k|    return 0;
 3841|  27.4k|}
mf_vl_mff_nx_pull_entry:
 3847|  30.2k|{
 3848|  30.2k|    enum ofperr error = nx_pull_entry(b, vl_mff_map, field, value, mask, true);
 3849|  30.2k|    if (error) {
  ------------------
  |  Branch (3849:9): [True: 2.89k, False: 27.3k]
  ------------------
 3850|  2.89k|        return error;
 3851|  2.89k|    }
 3852|       |
 3853|  27.3k|    mf_vl_mff_set_tlv_bitmap(*field, tlv_bitmap);
 3854|  27.3k|    return 0;
 3855|  30.2k|}
mf_vl_mff_mf_from_nxm_header:
 3862|  80.3k|{
 3863|  80.3k|    *field = mf_from_nxm_header(header, vl_mff_map);
 3864|  80.3k|    if (!*field) {
  ------------------
  |  Branch (3864:9): [True: 7.88k, False: 72.4k]
  ------------------
 3865|  7.88k|        return OFPERR_OFPBAC_BAD_SET_TYPE;
 3866|  72.4k|    } else if (mf_vl_mff_invalid(*field, vl_mff_map)) {
  ------------------
  |  Branch (3866:16): [True: 0, False: 72.4k]
  ------------------
 3867|      0|        return OFPERR_NXFMFC_INVALID_TLV_FIELD;
 3868|      0|    }
 3869|       |
 3870|  72.4k|    mf_vl_mff_set_tlv_bitmap(*field, tlv_bitmap);
 3871|  72.4k|    return 0;
 3872|  80.3k|}
mf_bitmap_and:
 3886|   149k|{
 3887|   149k|    bitmap_and(a.bm, b.bm, MFF_N_IDS);
 3888|   149k|    return a;
 3889|   149k|}
mf_bitmap_not:
 3902|  74.5k|{
 3903|  74.5k|    bitmap_not(x.bm, MFF_N_IDS);
 3904|  74.5k|    return x;
 3905|  74.5k|}
meta-flow.c:mf_are_prereqs_ok__:
  444|  83.5k|{
  445|  83.5k|    ovs_be16 dl_type = get_dl_type(flow);
  446|       |
  447|  83.5k|    switch (mf->prereqs) {
  ------------------
  |  Branch (447:13): [True: 83.5k, False: 0]
  ------------------
  448|  63.9k|    case MFP_NONE:
  ------------------
  |  Branch (448:5): [True: 63.9k, False: 19.6k]
  ------------------
  449|  63.9k|        return true;
  450|    634|    case MFP_ETHERNET:
  ------------------
  |  Branch (450:5): [True: 634, False: 82.9k]
  ------------------
  451|    634|        return is_ethernet(flow, wc);
  452|  1.78k|    case MFP_ARP:
  ------------------
  |  Branch (452:5): [True: 1.78k, False: 81.8k]
  ------------------
  453|  1.78k|        return (dl_type == htons(ETH_TYPE_ARP) ||
  ------------------
  |  Branch (453:17): [True: 845, False: 942]
  ------------------
  454|    942|                dl_type == htons(ETH_TYPE_RARP));
  ------------------
  |  Branch (454:17): [True: 218, False: 724]
  ------------------
  455|     18|    case MFP_IPV4:
  ------------------
  |  Branch (455:5): [True: 18, False: 83.5k]
  ------------------
  456|     18|        return dl_type == htons(ETH_TYPE_IP);
  457|    110|    case MFP_IPV6:
  ------------------
  |  Branch (457:5): [True: 110, False: 83.4k]
  ------------------
  458|    110|        return dl_type == htons(ETH_TYPE_IPV6);
  459|    923|    case MFP_VLAN_VID:
  ------------------
  |  Branch (459:5): [True: 923, False: 82.6k]
  ------------------
  460|    923|        return is_vlan(flow, wc);
  461|    164|    case MFP_MPLS:
  ------------------
  |  Branch (461:5): [True: 164, False: 83.4k]
  ------------------
  462|    164|        return eth_type_mpls(dl_type);
  463|  4.54k|    case MFP_IP_ANY:
  ------------------
  |  Branch (463:5): [True: 4.54k, False: 79.0k]
  ------------------
  464|  4.54k|        return is_ip_any(flow);
  465|     91|    case MFP_NSH:
  ------------------
  |  Branch (465:5): [True: 91, False: 83.5k]
  ------------------
  466|     91|        return dl_type == htons(ETH_TYPE_NSH);
  467|  2.01k|    case MFP_CT_VALID:
  ------------------
  |  Branch (467:5): [True: 2.01k, False: 81.5k]
  ------------------
  468|  2.01k|        return is_ct_valid(flow, mask, wc);
  469|  1.88k|    case MFP_TCP:
  ------------------
  |  Branch (469:5): [True: 1.88k, False: 81.7k]
  ------------------
  470|       |        /* Matching !FRAG_LATER is not enforced (mask is not checked). */
  471|  1.88k|        return is_tcp(flow, wc) && !(flow->nw_frag & FLOW_NW_FRAG_LATER);
  ------------------
  |  |   55|    885|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  |  Branch (471:16): [True: 885, False: 1.00k]
  |  Branch (471:36): [True: 885, False: 0]
  ------------------
  472|  1.64k|    case MFP_UDP:
  ------------------
  |  Branch (472:5): [True: 1.64k, False: 81.9k]
  ------------------
  473|  1.64k|        return is_udp(flow, wc) && !(flow->nw_frag & FLOW_NW_FRAG_LATER);
  ------------------
  |  |   55|    607|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  |  Branch (473:16): [True: 607, False: 1.04k]
  |  Branch (473:36): [True: 607, False: 0]
  ------------------
  474|    549|    case MFP_SCTP:
  ------------------
  |  Branch (474:5): [True: 549, False: 83.0k]
  ------------------
  475|    549|        return is_sctp(flow, wc) && !(flow->nw_frag & FLOW_NW_FRAG_LATER);
  ------------------
  |  |   55|    211|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  |  Branch (475:16): [True: 211, False: 338]
  |  Branch (475:37): [True: 211, False: 0]
  ------------------
  476|    991|    case MFP_ICMPV4:
  ------------------
  |  Branch (476:5): [True: 991, False: 82.6k]
  ------------------
  477|    991|        return is_icmpv4(flow, wc);
  478|  1.12k|    case MFP_ICMPV6:
  ------------------
  |  Branch (478:5): [True: 1.12k, False: 82.4k]
  ------------------
  479|  1.12k|        return is_icmpv6(flow, wc);
  480|    203|    case MFP_ND:
  ------------------
  |  Branch (480:5): [True: 203, False: 83.3k]
  ------------------
  481|    203|        return is_nd(flow, wc);
  482|  1.64k|    case MFP_ND_SOLICIT:
  ------------------
  |  Branch (482:5): [True: 1.64k, False: 81.9k]
  ------------------
  483|  1.64k|        return is_nd(flow, wc) && flow->tp_src == htons(ND_NEIGHBOR_SOLICIT);
  ------------------
  |  Branch (483:16): [True: 236, False: 1.40k]
  |  Branch (483:35): [True: 202, False: 34]
  ------------------
  484|  1.34k|    case MFP_ND_ADVERT:
  ------------------
  |  Branch (484:5): [True: 1.34k, False: 82.2k]
  ------------------
  485|  1.34k|        return is_nd(flow, wc) && flow->tp_src == htons(ND_NEIGHBOR_ADVERT);
  ------------------
  |  Branch (485:16): [True: 373, False: 971]
  |  Branch (485:35): [True: 307, False: 66]
  ------------------
  486|  83.5k|    }
  487|       |
  488|      0|    OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  489|  83.5k|}
meta-flow.c:field_len:
 1371|   217k|{
 1372|   217k|    const uint8_t *value = &value_->u8;
 1373|   217k|    int i;
 1374|       |
 1375|   217k|    if (!mf->variable_len) {
  ------------------
  |  Branch (1375:9): [True: 0, False: 217k]
  ------------------
 1376|      0|        return mf->n_bytes;
 1377|      0|    }
 1378|       |
 1379|   217k|    if (!value) {
  ------------------
  |  Branch (1379:9): [True: 0, False: 217k]
  ------------------
 1380|      0|        return 0;
 1381|      0|    }
 1382|       |
 1383|  25.6M|    for (i = 0; i < mf->n_bytes; i++) {
  ------------------
  |  Branch (1383:17): [True: 25.4M, False: 158k]
  ------------------
 1384|  25.4M|        if (value[i] != 0) {
  ------------------
  |  Branch (1384:13): [True: 59.5k, False: 25.4M]
  ------------------
 1385|  59.5k|            break;
 1386|  59.5k|        }
 1387|  25.4M|    }
 1388|       |
 1389|   217k|    return mf->n_bytes - i;
 1390|   217k|}
meta-flow.c:mf_check__:
 2838|  84.0k|{
 2839|  84.0k|    if (!sf->field) {
  ------------------
  |  Branch (2839:9): [True: 0, False: 84.0k]
  ------------------
 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|  84.0k|    } else if (!sf->n_bits) {
  ------------------
  |  Branch (2842:16): [True: 5.34k, False: 78.6k]
  ------------------
 2843|  5.34k|        VLOG_WARN_RL(&rl, "zero bit %s field %s", type, sf->field->name);
  ------------------
  |  |  224|  5.34k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  5.34k|    do {                                                                \
  |  |  |  |  288|  5.34k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  5.34k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 5.34k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  5.34k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 5.34k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2844|  5.34k|        return OFPERR_OFPBAC_BAD_SET_LEN;
 2845|  78.6k|    } else if (sf->ofs >= sf->field->n_bits) {
  ------------------
  |  Branch (2845:16): [True: 4.69k, False: 74.0k]
  ------------------
 2846|  4.69k|        VLOG_WARN_RL(&rl, "bit offset %d exceeds %d-bit width of %s field %s",
  ------------------
  |  |  224|  4.69k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  4.69k|    do {                                                                \
  |  |  |  |  288|  4.69k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  4.69k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 4.69k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  4.69k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 4.69k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2847|  4.69k|                     sf->ofs, sf->field->n_bits, type, sf->field->name);
 2848|  4.69k|        return OFPERR_OFPBAC_BAD_SET_LEN;
 2849|  74.0k|    } else if (sf->ofs + sf->n_bits > sf->field->n_bits) {
  ------------------
  |  Branch (2849:16): [True: 855, False: 73.1k]
  ------------------
 2850|    855|        VLOG_WARN_RL(&rl, "bit offset %d and width %d exceeds %d-bit width "
  ------------------
  |  |  224|    855|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    855|    do {                                                                \
  |  |  |  |  288|    855|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    855|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 855]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    855|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 855]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2851|    855|                     "of %s field %s", sf->ofs, sf->n_bits,
 2852|    855|                     sf->field->n_bits, type, sf->field->name);
 2853|    855|        return OFPERR_OFPBAC_BAD_SET_LEN;
 2854|  73.1k|    } else if (match && !mf_are_match_prereqs_ok(sf->field, match)) {
  ------------------
  |  Branch (2854:16): [True: 52.5k, False: 20.6k]
  |  Branch (2854:25): [True: 1.13k, False: 51.3k]
  ------------------
 2855|  1.13k|        VLOG_WARN_RL(&rl, "%s field %s lacks correct prerequisites",
  ------------------
  |  |  224|  1.13k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.13k|    do {                                                                \
  |  |  |  |  288|  1.13k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.13k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.13k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.13k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.13k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2856|  1.13k|                     type, sf->field->name);
 2857|  1.13k|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 2858|  72.0k|    } else {
 2859|  72.0k|        return 0;
 2860|  72.0k|    }
 2861|  84.0k|}
meta-flow.c:mf_format_integer_string:
 3327|  14.1k|{
 3328|  14.1k|    if (mf->string == MFS_HEXADECIMAL) {
  ------------------
  |  Branch (3328:9): [True: 10.2k, False: 3.83k]
  ------------------
 3329|  10.2k|        ds_put_hex(s, valuep, mf->n_bytes);
 3330|  10.2k|    } else {
 3331|  3.83k|        unsigned long long int integer = 0;
 3332|  3.83k|        int i;
 3333|       |
 3334|  3.83k|        ovs_assert(mf->n_bytes <= 8);
  ------------------
  |  |   62|  3.83k|#define ovs_assert ovs_ignore
  ------------------
 3335|  11.1k|        for (i = 0; i < mf->n_bytes; i++) {
  ------------------
  |  Branch (3335:21): [True: 7.28k, False: 3.83k]
  ------------------
 3336|  7.28k|            integer = (integer << 8) | valuep[i];
 3337|  7.28k|        }
 3338|  3.83k|        ds_put_format(s, "%lld", integer);
 3339|  3.83k|    }
 3340|       |
 3341|  14.1k|    if (maskp) {
  ------------------
  |  Branch (3341:9): [True: 1.13k, False: 12.9k]
  ------------------
 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.13k|        ds_put_char(s, '/');
 3346|  1.13k|        ds_put_hex(s, maskp, mf->n_bytes);
 3347|  1.13k|    }
 3348|  14.1k|}
meta-flow.c:mf_format_ct_state_string:
 3383|  1.65k|{
 3384|  1.65k|    format_flags_masked(s, NULL, ct_state_to_string, ntohl(value),
 3385|  1.65k|                        ntohl(mask), UINT16_MAX);
 3386|  1.65k|}
meta-flow.c:mf_format_frag_string:
 3352|    480|{
 3353|    480|    const struct frag_handling *h;
 3354|       |
 3355|    480|    mask &= FLOW_NW_FRAG_MASK;
  ------------------
  |  |   56|    480|#define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   54|    480|#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|    480|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  |  |  ------------------
  ------------------
 3356|    480|    value &= mask;
 3357|       |
 3358|  2.95k|    for (h = all_frags; h < &all_frags[ARRAY_SIZE(all_frags)]; h++) {
  ------------------
  |  |  297|  2.95k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   46|  2.95k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|  2.95k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   47|  2.95k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.95k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|  2.95k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3358:25): [True: 2.62k, False: 334]
  ------------------
 3359|  2.62k|        if (value == h->value && mask == h->mask) {
  ------------------
  |  Branch (3359:13): [True: 480, False: 2.14k]
  |  Branch (3359:34): [True: 146, False: 334]
  ------------------
 3360|    146|            ds_put_cstr(s, h->name);
 3361|    146|            return;
 3362|    146|        }
 3363|  2.62k|    }
 3364|    334|    ds_put_cstr(s, "<error>");
 3365|    334|}
meta-flow.c:mf_format_tnl_flags_string:
 3369|    566|{
 3370|    566|    format_flags_masked(s, NULL, flow_tun_flag_to_string, ntohs(value),
 3371|    566|                        ntohs(mask) & FLOW_TNL_PUB_F_MASK, FLOW_TNL_PUB_F_MASK);
  ------------------
  |  |   58|    566|#define FLOW_TNL_PUB_F_MASK ((1 << 1) - 1)
  ------------------
                                      ntohs(mask) & FLOW_TNL_PUB_F_MASK, FLOW_TNL_PUB_F_MASK);
  ------------------
  |  |   58|    566|#define FLOW_TNL_PUB_F_MASK ((1 << 1) - 1)
  ------------------
 3372|    566|}
meta-flow.c:mf_format_tcp_flags_string:
 3376|  2.60k|{
 3377|  2.60k|    format_flags_masked(s, NULL, packet_tcp_flag_to_string, ntohs(value),
 3378|  2.60k|                        TCP_FLAGS(mask), TCP_FLAGS(OVS_BE16_MAX));
  ------------------
  |  |  904|  2.60k|#define TCP_FLAGS(tcp_ctl) (ntohs(tcp_ctl) & 0x0fff)
  ------------------
                                      TCP_FLAGS(mask), TCP_FLAGS(OVS_BE16_MAX));
  ------------------
  |  |  904|  2.60k|#define TCP_FLAGS(tcp_ctl) (ntohs(tcp_ctl) & 0x0fff)
  ------------------
 3379|  2.60k|}
meta-flow.c:mf_format_packet_type_string:
 3390|    380|{
 3391|    380|    format_packet_type_masked(s, value, mask);
 3392|    380|}

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

netdev_features_to_bps:
 1180|  41.4k|{
 1181|  41.4k|    enum {
 1182|  41.4k|        F_1000000MB = NETDEV_F_1TB_FD,
 1183|  41.4k|        F_100000MB = NETDEV_F_100GB_FD,
 1184|  41.4k|        F_40000MB = NETDEV_F_40GB_FD,
 1185|  41.4k|        F_10000MB = NETDEV_F_10GB_FD,
 1186|  41.4k|        F_1000MB = NETDEV_F_1GB_HD | NETDEV_F_1GB_FD,
 1187|  41.4k|        F_100MB = NETDEV_F_100MB_HD | NETDEV_F_100MB_FD,
 1188|  41.4k|        F_10MB = NETDEV_F_10MB_HD | NETDEV_F_10MB_FD
 1189|  41.4k|    };
 1190|       |
 1191|  41.4k|    return (  features & F_1000000MB ? UINT64_C(1000000000000)
  ------------------
  |  Branch (1191:15): [True: 0, False: 41.4k]
  ------------------
 1192|  41.4k|            : features & F_100000MB  ? UINT64_C(100000000000)
  ------------------
  |  Branch (1192:15): [True: 0, False: 41.4k]
  ------------------
 1193|  41.4k|            : features & F_40000MB   ? UINT64_C(40000000000)
  ------------------
  |  Branch (1193:15): [True: 0, False: 41.4k]
  ------------------
 1194|  41.4k|            : features & F_10000MB   ? UINT64_C(10000000000)
  ------------------
  |  Branch (1194:15): [True: 14.4k, False: 27.0k]
  ------------------
 1195|  41.4k|            : features & F_1000MB    ? UINT64_C(1000000000)
  ------------------
  |  Branch (1195:15): [True: 5.26k, False: 21.7k]
  ------------------
 1196|  27.0k|            : features & F_100MB     ? UINT64_C(100000000)
  ------------------
  |  Branch (1196:15): [True: 4.97k, False: 16.7k]
  ------------------
 1197|  21.7k|            : features & F_10MB      ? UINT64_C(10000000)
  ------------------
  |  Branch (1197:15): [True: 3.78k, False: 12.9k]
  ------------------
 1198|  16.7k|                                     : default_bps);
 1199|  41.4k|}
netdev_features_format:
 1273|  71.9k|{
 1274|  71.9k|    ofp_print_bit_names(s, features, netdev_feature_to_name, ' ');
 1275|  71.9k|    ds_put_char(s, '\n');
 1276|  71.9k|}
netdev_free_custom_stats_counters:
 2350|  47.1k|{
 2351|  47.1k|    if (custom_stats) {
  ------------------
  |  Branch (2351:9): [True: 47.1k, False: 0]
  ------------------
 2352|  47.1k|        if (custom_stats->counters) {
  ------------------
  |  Branch (2352:13): [True: 9.34k, False: 37.7k]
  ------------------
 2353|  9.34k|            free(custom_stats->counters);
 2354|  9.34k|            custom_stats->counters = NULL;
 2355|  9.34k|            custom_stats->size = 0;
 2356|  9.34k|        }
 2357|  47.1k|        free(custom_stats->label);
 2358|       |        custom_stats->label = NULL;
 2359|  47.1k|    }
 2360|  47.1k|}
netdev.c:netdev_feature_to_name:
 1246|   419k|{
 1247|   419k|    enum netdev_features f = bit;
 1248|       |
 1249|   419k|    switch (f) {
  ------------------
  |  Branch (1249:13): [True: 419k, False: 0]
  ------------------
 1250|  36.0k|    case NETDEV_F_10MB_HD:    return "10MB-HD";
  ------------------
  |  Branch (1250:5): [True: 36.0k, False: 383k]
  ------------------
 1251|  33.8k|    case NETDEV_F_10MB_FD:    return "10MB-FD";
  ------------------
  |  Branch (1251:5): [True: 33.8k, False: 385k]
  ------------------
 1252|  35.0k|    case NETDEV_F_100MB_HD:   return "100MB-HD";
  ------------------
  |  Branch (1252:5): [True: 35.0k, False: 384k]
  ------------------
 1253|  38.6k|    case NETDEV_F_100MB_FD:   return "100MB-FD";
  ------------------
  |  Branch (1253:5): [True: 38.6k, False: 381k]
  ------------------
 1254|  30.6k|    case NETDEV_F_1GB_HD:     return "1GB-HD";
  ------------------
  |  Branch (1254:5): [True: 30.6k, False: 389k]
  ------------------
 1255|  32.9k|    case NETDEV_F_1GB_FD:     return "1GB-FD";
  ------------------
  |  Branch (1255:5): [True: 32.9k, False: 386k]
  ------------------
 1256|  33.5k|    case NETDEV_F_10GB_FD:    return "10GB-FD";
  ------------------
  |  Branch (1256:5): [True: 33.5k, False: 386k]
  ------------------
 1257|  2.61k|    case NETDEV_F_40GB_FD:    return "40GB-FD";
  ------------------
  |  Branch (1257:5): [True: 2.61k, False: 417k]
  ------------------
 1258|  2.81k|    case NETDEV_F_100GB_FD:   return "100GB-FD";
  ------------------
  |  Branch (1258:5): [True: 2.81k, False: 417k]
  ------------------
 1259|  2.94k|    case NETDEV_F_1TB_FD:     return "1TB-FD";
  ------------------
  |  Branch (1259:5): [True: 2.94k, False: 416k]
  ------------------
 1260|  2.88k|    case NETDEV_F_OTHER:      return "OTHER";
  ------------------
  |  Branch (1260:5): [True: 2.88k, False: 416k]
  ------------------
 1261|  27.4k|    case NETDEV_F_COPPER:     return "COPPER";
  ------------------
  |  Branch (1261:5): [True: 27.4k, False: 392k]
  ------------------
 1262|  36.3k|    case NETDEV_F_FIBER:      return "FIBER";
  ------------------
  |  Branch (1262:5): [True: 36.3k, False: 383k]
  ------------------
 1263|  33.4k|    case NETDEV_F_AUTONEG:    return "AUTO_NEG";
  ------------------
  |  Branch (1263:5): [True: 33.4k, False: 386k]
  ------------------
 1264|  35.0k|    case NETDEV_F_PAUSE:      return "AUTO_PAUSE";
  ------------------
  |  Branch (1264:5): [True: 35.0k, False: 384k]
  ------------------
 1265|  35.5k|    case NETDEV_F_PAUSE_ASYM: return "AUTO_PAUSE_ASYM";
  ------------------
  |  Branch (1265:5): [True: 35.5k, False: 384k]
  ------------------
 1266|   419k|    }
 1267|       |
 1268|      0|    return NULL;
 1269|   419k|}

mf_nxm_header:
  234|  1.93k|{
  235|  1.93k|    uint64_t oxm = mf_oxm_header(id, 0);
  236|  1.93k|    return is_experimenter_oxm(oxm) ? 0 : oxm >> 32;
  ------------------
  |  Branch (236:12): [True: 0, False: 1.93k]
  ------------------
  237|  1.93k|}
mf_from_nxm_header:
  274|  80.3k|{
  275|  80.3k|    return mf_from_oxm_header((uint64_t) header << 32, vl_mff_map, false, NULL);
  276|  80.3k|}
nx_pull_entry:
  468|  30.2k|{
  469|  30.2k|    uint64_t header;
  470|       |
  471|       |    return nx_pull_entry__(b, false, vl_mff_map, &header, field, value, mask, is_action);
  472|  30.2k|}
nx_pull_header:
  487|  93.5k|{
  488|  93.5k|    enum ofperr error;
  489|  93.5k|    uint64_t header;
  490|       |
  491|  93.5k|    error = nx_pull_header__(b, false, vl_mff_map,  &header, field, false);
  492|  93.5k|    if (masked) {
  ------------------
  |  Branch (492:9): [True: 65.8k, False: 27.7k]
  ------------------
  493|  65.8k|        *masked = !error && nxm_hasmask(header);
  ------------------
  |  Branch (493:19): [True: 2.37k, False: 63.4k]
  |  Branch (493:29): [True: 1.86k, False: 511]
  ------------------
  494|  65.8k|    } else if (!error && nxm_hasmask(header)) {
  ------------------
  |  Branch (494:16): [True: 23.9k, False: 3.82k]
  |  Branch (494:26): [True: 138, False: 23.7k]
  ------------------
  495|    138|        error = OFPERR_OFPBMC_BAD_MASK;
  496|    138|    }
  497|  93.5k|    return error;
  498|  93.5k|}
nx_pull_match:
  642|  16.9k|{
  643|       |    return nx_pull_match__(b, match_len, true, pipeline_fields_only, match,
  644|  16.9k|                           cookie, cookie_mask, tun_table, vl_mff_map);
  645|  16.9k|}
nx_pull_match_loose:
  655|  6.87k|{
  656|  6.87k|    return nx_pull_match__(b, match_len, false, pipeline_fields_only, match,
  657|       |                           cookie, cookie_mask, tun_table, NULL);
  658|  6.87k|}
oxm_pull_match:
  712|  65.1k|{
  713|       |    return oxm_pull_match__(b, true, pipeline_fields_only, tun_table,
  714|  65.1k|                            vl_mff_map, match);
  715|  65.1k|}
oxm_pull_match_loose:
  723|   195k|{
  724|   195k|    return oxm_pull_match__(b, false, pipeline_fields_only, tun_table, NULL,
  725|   195k|                            match);
  726|   195k|}
oxm_decode_match:
  740|  8.13k|{
  741|  8.13k|    return nx_pull_raw(oxm, oxm_len, !loose, false, match, NULL, NULL,
  742|  8.13k|                       tun_table, vl_mff_map);
  743|  8.13k|}
oxm_pull_field_array:
  750|  4.78k|{
  751|  4.78k|    struct ofpbuf b = ofpbuf_const_initializer(fields_data, fields_len);
  752|  16.3k|    while (b.size) {
  ------------------
  |  Branch (752:12): [True: 12.4k, False: 3.89k]
  ------------------
  753|  12.4k|        const uint8_t *pos = b.data;
  754|  12.4k|        const struct mf_field *field;
  755|  12.4k|        union mf_value value;
  756|  12.4k|        enum ofperr error;
  757|  12.4k|        uint64_t header;
  758|       |
  759|  12.4k|        error = nx_pull_entry__(&b, false, NULL, &header, &field, &value,
  760|  12.4k|                                NULL, false);
  761|  12.4k|        if (error) {
  ------------------
  |  Branch (761:13): [True: 591, False: 11.8k]
  ------------------
  762|    591|            VLOG_DBG_RL(&rl, "error pulling field array field");
  ------------------
  |  |  226|    591|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    591|    do {                                                                \
  |  |  |  |  288|    591|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    591|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 591]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    591|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 591]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  763|  11.8k|        } else if (!field) {
  ------------------
  |  Branch (763:20): [True: 0, False: 11.8k]
  ------------------
  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|  11.8k|        } else if (bitmap_is_set(fa->used.bm, field->id)) {
  ------------------
  |  Branch (766:20): [True: 111, False: 11.7k]
  ------------------
  767|    111|            VLOG_DBG_RL(&rl, "duplicate field array field '%s'", field->name);
  ------------------
  |  |  226|    111|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    111|    do {                                                                \
  |  |  |  |  288|    111|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    111|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 111]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    111|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 111]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  768|    111|            error = OFPERR_OFPBMC_DUP_FIELD;
  769|  11.7k|        } else if (!mf_is_mask_valid(field, &value)) {
  ------------------
  |  Branch (769:20): [True: 184, False: 11.5k]
  ------------------
  770|    184|            VLOG_DBG_RL(&rl, "bad mask in field array field '%s'", field->name);
  ------------------
  |  |  226|    184|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    184|    do {                                                                \
  |  |  |  |  288|    184|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    184|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 184]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    184|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 184]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  771|    184|            error = OFPERR_OFPBMC_BAD_MASK;
  772|  11.5k|        } else {
  773|  11.5k|            field_array_set(field->id, &value, fa);
  774|  11.5k|        }
  775|       |
  776|  12.4k|        if (error) {
  ------------------
  |  Branch (776:13): [True: 886, False: 11.5k]
  ------------------
  777|    886|            const uint8_t *start = fields_data;
  778|       |
  779|    886|            VLOG_DBG_RL(&rl, "error parsing OXM at offset %"PRIdPTR" "
  ------------------
  |  |  226|    886|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    886|    do {                                                                \
  |  |  |  |  288|    886|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    886|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 886]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    886|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 886]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  780|    886|                        "within field array (%s)", pos - start,
  781|    886|                        ofperr_to_string(error));
  782|       |
  783|    886|            free(fa->values);
  784|    886|            fa->values = NULL;
  785|    886|            return error;
  786|    886|        }
  787|  12.4k|    }
  788|       |
  789|  3.89k|    return 0;
  790|  4.78k|}
oxm_format_field_array:
 1395|  3.87k|{
 1396|  3.87k|    size_t start_len = ds->length;
 1397|  3.87k|    size_t i, offset = 0;
 1398|       |
 1399|  10.6k|    BITMAP_FOR_EACH_1 (i, MFF_N_IDS, fa->used.bm) {
  ------------------
  |  |  281|  3.87k|    BITMAP_FOR_EACH_1_RANGE(IDX, 0, SIZE, BITMAP)
  |  |  ------------------
  |  |  |  |  278|  14.5k|    for ((IDX) = bitmap_scan(BITMAP, true, BEGIN, END); (IDX) < (END);   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (278:57): [True: 10.6k, False: 3.87k]
  |  |  |  |  ------------------
  |  |  |  |  279|  10.6k|         (IDX) = bitmap_scan(BITMAP, true, (IDX) + 1, END))
  |  |  ------------------
  ------------------
 1400|  10.6k|        const struct mf_field *mf = mf_from_id(i);
 1401|  10.6k|        union mf_value value;
 1402|       |
 1403|  10.6k|        memcpy(&value, fa->values + offset, mf->n_bytes);
 1404|  10.6k|        nx_format_mask_tlv(ds, i, &value);
 1405|  10.6k|        offset += mf->n_bytes;
 1406|  10.6k|    }
 1407|       |
 1408|  3.87k|    if (ds->length > start_len) {
  ------------------
  |  Branch (1408:9): [True: 3.87k, False: 0]
  ------------------
 1409|  3.87k|        ds_chomp(ds, ',');
 1410|  3.87k|    }
 1411|  3.87k|}
nxm_format_reg_move:
 1821|    338|{
 1822|    338|    ds_put_format(s, "%smove:%s", colors.special, colors.end);
 1823|    338|    mf_format_subfield(&move->src, s);
 1824|    338|    ds_put_format(s, "%s->%s", colors.special, colors.end);
 1825|    338|    mf_format_subfield(&move->dst, s);
 1826|    338|}
nxm_reg_move_check:
 1832|  8.23k|{
 1833|  8.23k|    enum ofperr error;
 1834|       |
 1835|  8.23k|    error = mf_check_src(&move->src, match);
 1836|  8.23k|    if (error) {
  ------------------
  |  Branch (1836:9): [True: 7.34k, False: 893]
  ------------------
 1837|  7.34k|        return error;
 1838|  7.34k|    }
 1839|       |
 1840|    893|    return mf_check_dst(&move->dst, match);
 1841|  8.23k|}
nxm_format_stack_push:
 1892|    200|{
 1893|    200|    ds_put_format(s, "%spush:%s", colors.param, colors.end);
 1894|    200|    mf_format_subfield(&push->subfield, s);
 1895|    200|}
nxm_format_stack_pop:
 1899|  1.05k|{
 1900|  1.05k|    ds_put_format(s, "%spop:%s", colors.param, colors.end);
 1901|  1.05k|    mf_format_subfield(&pop->subfield, s);
 1902|  1.05k|}
nxm_stack_push_check:
 1907|  1.54k|{
 1908|  1.54k|    return mf_check_src(&push->subfield, match);
 1909|  1.54k|}
nxm_stack_pop_check:
 1914|  2.87k|{
 1915|  2.87k|    return mf_check_dst(&pop->subfield, match);
 1916|  2.87k|}
nx_stack_push_bottom:
 1942|  3.75k|{
 1943|  3.75k|    ofpbuf_push(stack, &bytes, sizeof bytes);
 1944|  3.75k|    ofpbuf_push(stack, v, bytes);
 1945|  3.75k|}
nx_stack_pop:
 1952|  2.69k|{
 1953|  2.69k|    if (!stack->size) {
  ------------------
  |  Branch (1953:9): [True: 0, False: 2.69k]
  ------------------
 1954|      0|        *bytes = 0;
 1955|      0|        return NULL;
 1956|      0|    }
 1957|       |
 1958|  2.69k|    stack->size -= sizeof *bytes;
 1959|  2.69k|    memcpy(bytes, ofpbuf_tail(stack), sizeof *bytes);
 1960|       |
 1961|  2.69k|    ovs_assert(stack->size >= *bytes);
  ------------------
  |  |   62|  2.69k|#define ovs_assert ovs_ignore
  ------------------
 1962|  2.69k|    stack->size -= *bytes;
 1963|  2.69k|    return ofpbuf_tail(stack);
 1964|  2.69k|}
mf_format_subfield:
 2036|  57.8k|{
 2037|  57.8k|    if (!sf->field) {
  ------------------
  |  Branch (2037:9): [True: 0, False: 57.8k]
  ------------------
 2038|      0|        ds_put_cstr(s, "<unknown>");
 2039|  57.8k|    } else {
 2040|  57.8k|        const struct nxm_field *f = nxm_field_by_mf_id(sf->field->id, 0);
 2041|  57.8k|        ds_put_cstr(s, f ? f->name : sf->field->name);
  ------------------
  |  Branch (2041:24): [True: 57.8k, False: 0]
  ------------------
 2042|  57.8k|    }
 2043|       |
 2044|  57.8k|    if (sf->field && sf->ofs == 0 && sf->n_bits == sf->field->n_bits) {
  ------------------
  |  Branch (2044:9): [True: 57.8k, False: 0]
  |  Branch (2044:22): [True: 21.9k, False: 35.8k]
  |  Branch (2044:38): [True: 4.29k, False: 17.7k]
  ------------------
 2045|  4.29k|        ds_put_cstr(s, "[]");
 2046|  53.5k|    } else if (sf->n_bits == 1) {
  ------------------
  |  Branch (2046:16): [True: 4.92k, False: 48.6k]
  ------------------
 2047|  4.92k|        ds_put_format(s, "[%d]", sf->ofs);
 2048|  48.6k|    } else {
 2049|  48.6k|        ds_put_format(s, "[%d..%d]", sf->ofs, sf->ofs + sf->n_bits - 1);
 2050|  48.6k|    }
 2051|  57.8k|}
oxm_bitmap_to_mf_bitmap:
 2181|  62.6k|{
 2182|  62.6k|    struct mf_bitmap fields = MF_BITMAP_INITIALIZER;
  ------------------
  |  | 2053|  62.6k|#define MF_BITMAP_INITIALIZER { { [0] = 0 } }
  ------------------
 2183|       |
 2184|  13.2M|    for (enum mf_field_id id = 0; id < MFF_N_IDS; id++) {
  ------------------
  |  Branch (2184:35): [True: 13.2M, False: 62.6k]
  ------------------
 2185|  13.2M|        uint64_t oxm = mf_oxm_header(id, version);
 2186|  13.2M|        if (oxm && version >= nxm_field_by_header(oxm, false, NULL)->version) {
  ------------------
  |  Branch (2186:13): [True: 12.9M, False: 313k]
  |  Branch (2186:20): [True: 11.7M, False: 1.19M]
  ------------------
 2187|  11.7M|            uint32_t class = nxm_class(oxm);
 2188|  11.7M|            int field = nxm_field(oxm);
 2189|       |
 2190|  11.7M|            if (class == OFPXMC12_OPENFLOW_BASIC
  ------------------
  |  Branch (2190:17): [True: 2.19M, False: 9.52M]
  ------------------
 2191|  2.19M|                && field < 64
  ------------------
  |  Branch (2191:20): [True: 2.19M, False: 0]
  ------------------
 2192|  2.19M|                && oxm_bitmap & htonll(UINT64_C(1) << field)) {
  ------------------
  |  Branch (2192:20): [True: 497k, False: 1.69M]
  ------------------
 2193|   497k|                bitmap_set1(fields.bm, id);
 2194|   497k|            }
 2195|  11.7M|        }
 2196|  13.2M|    }
 2197|  62.6k|    return fields;
 2198|  62.6k|}
nx-match.c:mf_oxm_header:
  221|  13.2M|{
  222|  13.2M|    const struct nxm_field *f = nxm_field_by_mf_id(id, version);
  223|  13.2M|    return f ? f->header : 0;
  ------------------
  |  Branch (223:12): [True: 12.9M, False: 313k]
  ------------------
  224|  13.2M|}
nx-match.c:is_experimenter_oxm:
  108|  4.70M|{
  109|  4.70M|    return nxm_class(header) == OFPXMC12_EXPERIMENTER;
  110|  4.70M|}
nx-match.c:nxm_no_len:
  104|  39.5M|static uint64_t nxm_no_len(uint64_t header) { return header & 0xffffff80ffffffffULL; }
nx-match.c:mf_from_oxm_header:
  258|   663k|{
  259|   663k|    const struct nxm_field *f = nxm_field_by_header(header, is_action, h_error);
  260|       |
  261|   663k|    if (f) {
  ------------------
  |  Branch (261:9): [True: 414k, False: 248k]
  ------------------
  262|   414k|        const struct mf_field *mff = mf_from_id(f->id);
  263|   414k|        const struct mf_field *vl_mff = mf_get_vl_mff(mff, vl_mff_map);
  264|   414k|        return vl_mff ? vl_mff : mff;
  ------------------
  |  Branch (264:16): [True: 0, False: 414k]
  ------------------
  265|   414k|    } else {
  266|       |        return NULL;
  267|   248k|    }
  268|   663k|}
nx-match.c:nx_pull_entry__:
  398|   504k|{
  399|   504k|    const struct mf_field *field;
  400|   504k|    enum ofperr header_error;
  401|   504k|    unsigned int payload_len;
  402|   504k|    const uint8_t *payload;
  403|   504k|    int width;
  404|       |
  405|   504k|    header_error = nx_pull_header__(b, allow_cookie, vl_mff_map, header,
  406|   504k|                                    &field, is_action);
  407|   504k|    if (header_error && header_error != OFPERR_OFPBMC_BAD_FIELD) {
  ------------------
  |  Branch (407:9): [True: 187k, False: 316k]
  |  Branch (407:25): [True: 15.5k, False: 172k]
  ------------------
  408|  15.5k|        return header_error;
  409|  15.5k|    }
  410|       |
  411|   488k|    payload_len = nxm_payload_len(*header);
  412|   488k|    payload = ofpbuf_try_pull(b, payload_len);
  413|   488k|    if (!payload) {
  ------------------
  |  Branch (413:9): [True: 40.8k, False: 447k]
  ------------------
  414|  40.8k|        VLOG_DBG_RL(&rl, "OXM header "NXM_HEADER_FMT" calls for %u-byte "
  ------------------
  |  |  226|  40.8k|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  40.8k|    do {                                                                \
  |  |  |  |  288|  40.8k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  40.8k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 40.8k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  40.8k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 40.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  415|  40.8k|                    "payload but only %"PRIu32" bytes follow OXM header",
  416|  40.8k|                    NXM_HEADER_ARGS(*header), payload_len, b->size);
  417|  40.8k|        return OFPERR_OFPBMC_BAD_LEN;
  418|  40.8k|    }
  419|       |
  420|   447k|    width = nxm_field_bytes(*header);
  421|   447k|    if (nxm_hasmask(*header)
  ------------------
  |  Branch (421:9): [True: 178k, False: 269k]
  ------------------
  422|   178k|        && !is_mask_consistent(*header, payload, payload + width)) {
  ------------------
  |  Branch (422:12): [True: 6.25k, False: 171k]
  ------------------
  423|  6.25k|        return OFPERR_OFPBMC_BAD_WILDCARDS;
  424|  6.25k|    }
  425|       |
  426|   441k|    copy_entry_value(field, value, payload, width);
  427|       |
  428|   441k|    if (mask) {
  ------------------
  |  Branch (428:9): [True: 420k, False: 21.3k]
  ------------------
  429|   420k|        if (nxm_hasmask(*header)) {
  ------------------
  |  Branch (429:13): [True: 170k, False: 249k]
  ------------------
  430|   170k|            copy_entry_value(field, mask, payload + width, width);
  431|   249k|        } else {
  432|   249k|            memset(mask, 0xff, sizeof *mask);
  433|   249k|        }
  434|   420k|    } else if (nxm_hasmask(*header)) {
  ------------------
  |  Branch (434:16): [True: 1.14k, False: 20.1k]
  ------------------
  435|  1.14k|        VLOG_DBG_RL(&rl, "OXM header "NXM_HEADER_FMT" includes mask but "
  ------------------
  |  |  226|  1.14k|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.14k|    do {                                                                \
  |  |  |  |  288|  1.14k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.14k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.14k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.14k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.14k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  436|  1.14k|                    "masked OXMs are not allowed here",
  437|  1.14k|                    NXM_HEADER_ARGS(*header));
  438|  1.14k|        return OFPERR_OFPBMC_BAD_MASK;
  439|  1.14k|    }
  440|       |
  441|   440k|    if (field_) {
  ------------------
  |  Branch (441:9): [True: 440k, False: 0]
  ------------------
  442|   440k|        *field_ = field;
  443|   440k|        return header_error;
  444|   440k|    }
  445|       |
  446|      0|    return 0;
  447|   440k|}
nx-match.c:nxm_payload_len:
  136|  1.35M|{
  137|  1.35M|    ovs_assert(nxm_length(header) >= nxm_experimenter_len(header));
  ------------------
  |  |   62|  1.35M|#define ovs_assert ovs_ignore
  ------------------
  138|  1.35M|    return nxm_length(header) - nxm_experimenter_len(header);
  139|  1.35M|}
nx-match.c:nxm_experimenter_len:
  128|  4.11M|{
  129|  4.11M|    return is_experimenter_oxm(header) ? 4 : 0;
  ------------------
  |  Branch (129:12): [True: 186k, False: 3.93M]
  ------------------
  130|  4.11M|}
nx-match.c:nxm_vendor:
   99|   240k|static uint32_t nxm_vendor(uint64_t header) { return header; }
nx-match.c:nxm_length:
  103|  30.1M|static int nxm_length(uint64_t header) { return (header >> 32) & 0xff; }
nx-match.c:is_mask_consistent:
  294|   178k|{
  295|   178k|    unsigned int width = nxm_field_bytes(header);
  296|   178k|    unsigned int i;
  297|       |
  298|   735k|    for (i = 0; i < width; i++) {
  ------------------
  |  Branch (298:17): [True: 564k, False: 171k]
  ------------------
  299|   564k|        if (value[i] & ~mask[i]) {
  ------------------
  |  Branch (299:13): [True: 6.25k, False: 557k]
  ------------------
  300|  6.25k|            if (!VLOG_DROP_WARN(&rl)) {
  ------------------
  |  |  234|  6.25k|#define VLOG_DROP_WARN(RL) vlog_should_drop(&this_module, VLL_WARN, RL)
  ------------------
  |  Branch (300:17): [True: 0, False: 6.25k]
  ------------------
  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|  6.25k|            return false;
  306|  6.25k|        }
  307|   564k|    }
  308|   171k|    return true;
  309|   178k|}
nx-match.c:copy_entry_value:
  378|   612k|{
  379|   612k|    int copy_len;
  380|   612k|    void *copy_dst;
  381|       |
  382|   612k|    copy_dst = value;
  383|   612k|    copy_len = MIN(width, field ? field->n_bytes : sizeof *value);
  ------------------
  |  |   91|  1.22M|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (91:20): [True: 376k, False: 235k]
  |  |  |  Branch (91:27): [True: 452k, False: 159k]
  |  |  |  Branch (91:39): [True: 235k, False: 40]
  |  |  ------------------
  ------------------
  384|       |
  385|   612k|    if (field && field->variable_len) {
  ------------------
  |  Branch (385:9): [True: 452k, False: 159k]
  |  Branch (385:18): [True: 217k, False: 235k]
  ------------------
  386|   217k|        memset(value, 0, field->n_bytes);
  387|   217k|        copy_dst = &value->u8 + field->n_bytes - copy_len;
  388|   217k|    }
  389|       |
  390|   612k|    memcpy(copy_dst, payload, copy_len);
  391|   612k|}
nx-match.c:nx_pull_header__:
  321|   597k|{
  322|   597k|    if (b->size < 4) {
  ------------------
  |  Branch (322:9): [True: 12.0k, False: 585k]
  ------------------
  323|  12.0k|        goto bad_len;
  324|  12.0k|    }
  325|       |
  326|   585k|    *header = ((uint64_t) ntohl(get_unaligned_be32(b->data))) << 32;
  327|   585k|    if (is_experimenter_oxm(*header)) {
  ------------------
  |  Branch (327:9): [True: 20.5k, False: 565k]
  ------------------
  328|  20.5k|        if (b->size < 8) {
  ------------------
  |  Branch (328:13): [True: 1.80k, False: 18.7k]
  ------------------
  329|  1.80k|            goto bad_len;
  330|  1.80k|        }
  331|  18.7k|        *header = ntohll(get_unaligned_be64(b->data));
  332|  18.7k|    }
  333|   583k|    if (nxm_length(*header) < nxm_experimenter_len(*header)) {
  ------------------
  |  Branch (333:9): [True: 504, False: 583k]
  ------------------
  334|    504|        VLOG_WARN_RL(&rl, "OXM header "NXM_HEADER_FMT" has invalid length %d "
  ------------------
  |  |  224|    504|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    504|    do {                                                                \
  |  |  |  |  288|    504|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    504|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 504]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    504|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 504]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  335|    504|                     "(minimum is %d)",
  336|    504|                     NXM_HEADER_ARGS(*header), nxm_length(*header),
  337|    504|                     nxm_header_len(*header));
  338|    504|        goto error;
  339|    504|    }
  340|   583k|    ofpbuf_pull(b, nxm_header_len(*header));
  341|       |
  342|   583k|    if (field) {
  ------------------
  |  Branch (342:9): [True: 583k, False: 0]
  ------------------
  343|   583k|        enum ofperr h_error = 0;
  344|   583k|        *field = mf_from_oxm_header(*header, vl_mff_map, is_action, &h_error);
  345|   583k|        if (!*field && !(allow_cookie && is_cookie_pseudoheader(*header))) {
  ------------------
  |  Branch (345:13): [True: 240k, False: 342k]
  |  Branch (345:26): [True: 696, False: 240k]
  |  Branch (345:42): [True: 436, False: 260]
  ------------------
  346|   240k|            VLOG_DBG_RL(&rl, "OXM header "NXM_HEADER_FMT" is unknown",
  ------------------
  |  |  226|   240k|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|   240k|    do {                                                                \
  |  |  |  |  288|   240k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|   240k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 240k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|   240k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 240k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  347|   240k|                        NXM_HEADER_ARGS(*header));
  348|   240k|            if (is_action) {
  ------------------
  |  Branch (348:17): [True: 1.43k, False: 239k]
  ------------------
  349|  1.43k|                if (h_error) {
  ------------------
  |  Branch (349:21): [True: 331, False: 1.10k]
  ------------------
  350|    331|                     *field = NULL;
  351|    331|                     return h_error;
  352|    331|                }
  353|  1.10k|                return OFPERR_OFPBAC_BAD_SET_TYPE;
  354|   239k|            } else {
  355|   239k|                return OFPERR_OFPBMC_BAD_FIELD;
  356|   239k|            }
  357|   342k|        } else if (mf_vl_mff_invalid(*field, vl_mff_map)) {
  ------------------
  |  Branch (357:20): [True: 0, False: 342k]
  ------------------
  358|      0|            return OFPERR_NXFMFC_INVALID_TLV_FIELD;
  359|      0|        }
  360|   583k|    }
  361|       |
  362|   342k|    return 0;
  363|       |
  364|  13.8k|bad_len:
  365|  13.8k|    VLOG_DBG_RL(&rl, "encountered partial (%"PRIu32"-byte) OXM entry",
  ------------------
  |  |  226|  13.8k|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  13.8k|    do {                                                                \
  |  |  |  |  288|  13.8k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  13.8k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 13.8k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  13.8k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 13.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  366|  13.8k|                b->size);
  367|  14.3k|error:
  368|  14.3k|    *header = 0;
  369|  14.3k|    if (field) {
  ------------------
  |  Branch (369:9): [True: 14.3k, False: 0]
  ------------------
  370|       |        *field = NULL;
  371|  14.3k|    }
  372|  14.3k|    return OFPERR_OFPBMC_BAD_LEN;
  373|  13.8k|}
nx-match.c:nxm_header_len:
  145|   583k|{
  146|   583k|    return 4 + nxm_experimenter_len(header);
  147|   583k|}
nx-match.c:is_cookie_pseudoheader:
  313|    696|{
  314|    696|    return header == NXM_NX_COOKIE || header == NXM_NX_COOKIE_W;
  ------------------
  |  |  187|    696|#define NXM_NX_COOKIE     NXM_HEADER  (0, 0x0001, 30, 0, 8)
  |  |  ------------------
  |  |  |  |  150|  1.39k|    (((uint64_t) (CLASS) << 48) |                               \
  |  |  |  |  151|  1.39k|     ((uint64_t) (FIELD) << 41) |                               \
  |  |  |  |  152|  1.39k|     ((uint64_t) (HASMASK) << 40) |                             \
  |  |  |  |  153|  1.39k|     ((uint64_t) (LENGTH) << 32) |                              \
  |  |  |  |  154|  1.39k|     (VENDOR))
  |  |  ------------------
  ------------------
                  return header == NXM_NX_COOKIE || header == NXM_NX_COOKIE_W;
  ------------------
  |  |  188|  1.16k|#define NXM_NX_COOKIE_W   nxm_make_wild_header(NXM_NX_COOKIE)
  |  |  ------------------
  |  |  |  |  187|    469|#define NXM_NX_COOKIE     NXM_HEADER  (0, 0x0001, 30, 0, 8)
  |  |  |  |  ------------------
  |  |  |  |  |  |  150|    469|    (((uint64_t) (CLASS) << 48) |                               \
  |  |  |  |  |  |  151|    469|     ((uint64_t) (FIELD) << 41) |                               \
  |  |  |  |  |  |  152|    469|     ((uint64_t) (HASMASK) << 40) |                             \
  |  |  |  |  |  |  153|    469|     ((uint64_t) (LENGTH) << 32) |                              \
  |  |  |  |  |  |  154|    469|     (VENDOR))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (314:12): [True: 227, False: 469]
  |  Branch (314:39): [True: 209, False: 260]
  ------------------
  315|    696|}
nx-match.c:nxm_make_wild_header:
  173|    469|{
  174|    469|    unsigned int new_len = nxm_payload_len(header) * 2
  175|    469|                           + nxm_experimenter_len(header);
  176|    469|    return NXM_HEADER(nxm_vendor(header), nxm_class(header),
  ------------------
  |  |  150|    469|    (((uint64_t) (CLASS) << 48) |                               \
  |  |  151|    469|     ((uint64_t) (FIELD) << 41) |                               \
  |  |  152|    469|     ((uint64_t) (HASMASK) << 40) |                             \
  |  |  153|    469|     ((uint64_t) (LENGTH) << 32) |                              \
  |  |  154|    469|     (VENDOR))
  ------------------
  177|    469|                      nxm_field(header), 1, new_len);
  178|    469|}
nx-match.c:nxm_hasmask:
  102|  15.1M|static bool nxm_hasmask(uint64_t header) { return (header >> 40) & 1; }
nx-match.c:nx_pull_match__:
  605|  23.8k|{
  606|  23.8k|    uint8_t *p = NULL;
  607|       |
  608|  23.8k|    if (match_len) {
  ------------------
  |  Branch (608:9): [True: 5.44k, False: 18.3k]
  ------------------
  609|  5.44k|        p = ofpbuf_try_pull(b, ROUND_UP(match_len, 8));
  ------------------
  |  |  303|  5.44k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|  5.44k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  610|  5.44k|        if (!p) {
  ------------------
  |  Branch (610:13): [True: 2.05k, False: 3.39k]
  ------------------
  611|  2.05k|            VLOG_DBG_RL(&rl, "nx_match length %u, rounded up to a "
  ------------------
  |  |  226|  2.05k|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  2.05k|    do {                                                                \
  |  |  |  |  288|  2.05k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  2.05k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 2.05k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  2.05k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 2.05k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  612|  2.05k|                        "multiple of 8, is longer than space in message (max "
  613|  2.05k|                        "length %"PRIu32")", match_len, b->size);
  614|  2.05k|            return OFPERR_OFPBMC_BAD_LEN;
  615|  2.05k|        }
  616|  5.44k|    }
  617|       |
  618|  21.7k|    return nx_pull_raw(p, match_len, strict, pipeline_fields_only, match,
  619|  21.7k|                       cookie, cookie_mask, tun_table, vl_mff_map);
  620|  23.8k|}
nx-match.c:oxm_pull_match__:
  664|   260k|{
  665|   260k|    struct ofp11_match_header *omh = b->data;
  666|   260k|    uint8_t *p;
  667|   260k|    uint16_t match_len;
  668|       |
  669|   260k|    if (b->size < sizeof *omh) {
  ------------------
  |  Branch (669:9): [True: 4.42k, False: 256k]
  ------------------
  670|  4.42k|        return OFPERR_OFPBMC_BAD_LEN;
  671|  4.42k|    }
  672|       |
  673|   256k|    match_len = ntohs(omh->length);
  674|   256k|    if (match_len < sizeof *omh) {
  ------------------
  |  Branch (674:9): [True: 3.72k, False: 252k]
  ------------------
  675|  3.72k|        return OFPERR_OFPBMC_BAD_LEN;
  676|  3.72k|    }
  677|       |
  678|   252k|    if (omh->type != htons(OFPMT_OXM)) {
  ------------------
  |  Branch (678:9): [True: 22.6k, False: 229k]
  ------------------
  679|  22.6k|        return OFPERR_OFPBMC_BAD_TYPE;
  680|  22.6k|    }
  681|       |
  682|   229k|    p = ofpbuf_try_pull(b, ROUND_UP(match_len, 8));
  ------------------
  |  |  303|   229k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|   229k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  683|   229k|    if (!p) {
  ------------------
  |  Branch (683:9): [True: 5.43k, False: 224k]
  ------------------
  684|  5.43k|        VLOG_DBG_RL(&rl, "oxm length %u, rounded up to a "
  ------------------
  |  |  226|  5.43k|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  5.43k|    do {                                                                \
  |  |  |  |  288|  5.43k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  5.43k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 5.43k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  5.43k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 5.43k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  685|  5.43k|                    "multiple of 8, is longer than space in message (max "
  686|  5.43k|                    "length %"PRIu32")", match_len, b->size);
  687|  5.43k|        return OFPERR_OFPBMC_BAD_LEN;
  688|  5.43k|    }
  689|       |
  690|   224k|    return nx_pull_raw(p + sizeof *omh, match_len - sizeof *omh,
  691|   224k|                       strict, pipeline_fields_only, match, NULL, NULL,
  692|   224k|                       tun_table, vl_mff_map);
  693|   229k|}
nx-match.c:nx_pull_raw:
  535|   254k|{
  536|   254k|    ovs_assert((cookie != NULL) == (cookie_mask != NULL));
  ------------------
  |  |   62|   254k|#define ovs_assert ovs_ignore
  ------------------
  537|       |
  538|   254k|    match_init_catchall(match);
  539|   254k|    match->flow.tunnel.metadata.tab = tun_table;
  540|   254k|    if (cookie) {
  ------------------
  |  Branch (540:9): [True: 4.98k, False: 249k]
  ------------------
  541|  4.98k|        *cookie = *cookie_mask = htonll(0);
  542|  4.98k|    }
  543|       |
  544|   254k|    struct ofpbuf b = ofpbuf_const_initializer(p, match_len);
  545|   622k|    while (b.size) {
  ------------------
  |  Branch (545:12): [True: 461k, False: 160k]
  ------------------
  546|   461k|        const uint8_t *pos = b.data;
  547|   461k|        const struct mf_field *field;
  548|   461k|        union mf_value value;
  549|   461k|        union mf_value mask;
  550|   461k|        enum ofperr error;
  551|       |
  552|   461k|        error = nx_pull_match_entry(&b, cookie != NULL, vl_mff_map, &field,
  553|   461k|                                    &value, &mask);
  554|   461k|        if (error) {
  ------------------
  |  Branch (554:13): [True: 196k, False: 265k]
  ------------------
  555|   196k|            if (error == OFPERR_OFPBMC_BAD_FIELD && !strict) {
  ------------------
  |  Branch (555:17): [True: 134k, False: 62.0k]
  |  Branch (555:53): [True: 133k, False: 698]
  ------------------
  556|   133k|                continue;
  557|   133k|            }
  558|   265k|        } else if (!field) {
  ------------------
  |  Branch (558:20): [True: 198, False: 265k]
  ------------------
  559|    198|            if (!cookie) {
  ------------------
  |  Branch (559:17): [True: 0, False: 198]
  ------------------
  560|      0|                error = OFPERR_OFPBMC_BAD_FIELD;
  561|    198|            } else if (*cookie_mask) {
  ------------------
  |  Branch (561:24): [True: 0, False: 198]
  ------------------
  562|      0|                error = OFPERR_OFPBMC_DUP_FIELD;
  563|    198|            } else {
  564|    198|                *cookie = value.be64;
  565|    198|                *cookie_mask = mask.be64;
  566|    198|            }
  567|   265k|        } else if (strict && !mf_are_match_prereqs_ok(field, match)) {
  ------------------
  |  Branch (567:20): [True: 26.5k, False: 238k]
  |  Branch (567:30): [True: 5.29k, False: 21.2k]
  ------------------
  568|  5.29k|            error = OFPERR_OFPBMC_BAD_PREREQ;
  569|   259k|        } else if (!mf_is_all_wild(field, &match->wc)) {
  ------------------
  |  Branch (569:20): [True: 13.7k, False: 245k]
  ------------------
  570|  13.7k|            error = OFPERR_OFPBMC_DUP_FIELD;
  571|   245k|        } else if (pipeline_fields_only && !mf_is_pipeline_field(field)) {
  ------------------
  |  Branch (571:20): [True: 134k, False: 111k]
  |  Branch (571:44): [True: 11.6k, False: 122k]
  ------------------
  572|  11.6k|            error = OFPERR_OFPBRC_PIPELINE_FIELDS_ONLY;
  573|   234k|        } else {
  574|   234k|            char *err_str;
  575|       |
  576|   234k|            mf_set(field, &value, &mask, match, &err_str);
  577|   234k|            if (err_str) {
  ------------------
  |  Branch (577:17): [True: 0, False: 234k]
  ------------------
  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|   234k|            match_add_ethernet_prereq(match, field);
  585|   234k|        }
  586|       |
  587|   328k|        if (error) {
  ------------------
  |  Branch (587:13): [True: 93.5k, False: 234k]
  ------------------
  588|  93.5k|            VLOG_DBG_RL(&rl, "error parsing OXM at offset %"PRIdPTR" "
  ------------------
  |  |  226|  93.5k|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  93.5k|    do {                                                                \
  |  |  |  |  288|  93.5k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  93.5k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 93.5k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  93.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 93.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  589|  93.5k|                        "within match (%s)", pos -
  590|  93.5k|                        p, ofperr_to_string(error));
  591|  93.5k|            return error;
  592|  93.5k|        }
  593|   328k|    }
  594|       |
  595|   160k|    match->flow.tunnel.metadata.tab = NULL;
  596|   160k|    return 0;
  597|   254k|}
nx-match.c:nx_pull_match_entry:
  505|   461k|{
  506|   461k|    enum ofperr error;
  507|   461k|    uint64_t header;
  508|       |
  509|   461k|    error = nx_pull_entry__(b, allow_cookie, vl_mff_map, &header, field, value,
  510|   461k|                            mask, false);
  511|   461k|    if (error) {
  ------------------
  |  Branch (511:9): [True: 194k, False: 266k]
  ------------------
  512|   194k|        return error;
  513|   194k|    }
  514|   266k|    if (field && *field) {
  ------------------
  |  Branch (514:9): [True: 266k, False: 0]
  |  Branch (514:18): [True: 266k, False: 198]
  ------------------
  515|   266k|        if (!mf_is_mask_valid(*field, mask)) {
  ------------------
  |  Branch (515:13): [True: 845, False: 265k]
  ------------------
  516|    845|            VLOG_DBG_RL(&rl, "bad mask for field %s", (*field)->name);
  ------------------
  |  |  226|    845|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    845|    do {                                                                \
  |  |  |  |  288|    845|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    845|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 845]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    845|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 845]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  517|    845|            return OFPERR_OFPBMC_BAD_MASK;
  518|    845|        }
  519|   265k|        if (!mf_is_value_valid(*field, value)) {
  ------------------
  |  Branch (519:13): [True: 817, False: 265k]
  ------------------
  520|    817|            VLOG_DBG_RL(&rl, "bad value for field %s", (*field)->name);
  ------------------
  |  |  226|    817|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    817|    do {                                                                \
  |  |  |  |  288|    817|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    817|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 817]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    817|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 817]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|    817|            return OFPERR_OFPBMC_BAD_VALUE;
  522|    817|        }
  523|   265k|    }
  524|   265k|    return 0;
  525|   266k|}
nx-match.c:nx_format_mask_tlv:
 1377|  10.6k|{
 1378|  10.6k|    const struct mf_field *mf = mf_from_id(id);
 1379|       |
 1380|  10.6k|    ds_put_format(ds, "%s", mf->name);
 1381|       |
 1382|  10.6k|    if (!is_all_ones(mask, mf->n_bytes)) {
  ------------------
  |  Branch (1382:9): [True: 10.5k, False: 155]
  ------------------
 1383|  10.5k|        ds_put_char(ds, '=');
 1384|  10.5k|        mf_format(mf, mask, NULL, NULL, ds);
 1385|  10.5k|    }
 1386|       |
 1387|  10.6k|    ds_put_char(ds, ',');
 1388|  10.6k|}
nx-match.c:nxm_field_bytes:
  282|   626k|{
  283|   626k|    unsigned int length = nxm_payload_len(header);
  284|   626k|    return nxm_hasmask(header) ? length / 2 : length;
  ------------------
  |  Branch (284:12): [True: 356k, False: 269k]
  ------------------
  285|   626k|}
nx-match.c:nxm_class:
  100|  16.6M|static int nxm_class(uint64_t header) { return header >> 48; }
nx-match.c:nxm_field:
  101|  11.9M|static int nxm_field(uint64_t header) { return (header >> 41) & 0x7f; }
nx-match.c:nxm_field_by_header:
 2286|  13.5M|{
 2287|  13.5M|    const struct nxm_field_index *nfi;
 2288|  13.5M|    uint64_t header_no_len;
 2289|       |
 2290|  13.5M|    nxm_init();
 2291|  13.5M|    if (nxm_hasmask(header)) {
  ------------------
  |  Branch (2291:9): [True: 239k, False: 13.3M]
  ------------------
 2292|   239k|        header = nxm_make_exact_header(header);
 2293|   239k|    }
 2294|       |
 2295|  13.5M|    header_no_len = nxm_no_len(header);
 2296|       |
 2297|  13.5M|    HMAP_FOR_EACH_IN_BUCKET (nfi, header_node, hash_uint64(header_no_len),
  ------------------
  |  |  144|  13.5M|    for (INIT_MULTIVAR(NODE, MEMBER, hmap_first_in_bucket(HMAP, HASH),        \
  |  |  ------------------
  |  |  |  |  171|  13.5M|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|  13.5M|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|  13.5M|                       struct hmap_node);                                     \
  |  |  146|  26.1M|         CONDITION_MULTIVAR(NODE, MEMBER, ITER_VAR(NODE) != NULL);            \
  |  |  ------------------
  |  |  |  |  185|  26.1M|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 25.9M, False: 185k]
  |  |  |  |  |  Branch (185:6): [True: 25.9M, False: 185k]
  |  |  |  |  ------------------
  |  |  |  |  186|  26.1M|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  25.9M|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|  25.9M|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|  25.9M|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  26.1M|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |  147|  13.5M|         UPDATE_MULTIVAR(NODE, hmap_next_in_bucket(ITER_VAR(NODE))))
  |  |  ------------------
  |  |  |  |  193|  12.5M|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  12.5M|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2298|  25.9M|                             &nxm_header_map) {
 2299|  25.9M|        if (is_action && nxm_length(header) > 0) {
  ------------------
  |  Branch (2299:13): [True: 67.1k, False: 25.9M]
  |  Branch (2299:26): [True: 16.6k, False: 50.5k]
  ------------------
 2300|  16.6k|            if (nxm_length(header) != nxm_length(nfi->nf.header) && h_error ) {
  ------------------
  |  Branch (2300:17): [True: 5.17k, False: 11.4k]
  |  Branch (2300:69): [True: 5.17k, False: 0]
  ------------------
 2301|  5.17k|               *h_error = OFPERR_OFPBAC_BAD_SET_LEN;
 2302|  5.17k|            }
 2303|  16.6k|        }
 2304|  25.9M|        if (header_no_len == nxm_no_len(nfi->nf.header)) {
  ------------------
  |  Branch (2304:13): [True: 13.3M, False: 12.5M]
  ------------------
 2305|  13.3M|            if (nxm_length(header) == nxm_length(nfi->nf.header) ||
  ------------------
  |  Branch (2305:17): [True: 13.1M, False: 255k]
  ------------------
 2306|  13.3M|                mf_from_id(nfi->nf.id)->variable_len) {
  ------------------
  |  Branch (2306:17): [True: 192k, False: 63.4k]
  ------------------
 2307|  13.3M|                return &nfi->nf;
 2308|  13.3M|            } else {
 2309|  63.4k|                return NULL;
 2310|  63.4k|            }
 2311|  13.3M|        }
 2312|  25.9M|    }
 2313|   185k|    return NULL;
 2314|  13.5M|}
nx-match.c:nxm_init:
 2263|  26.8M|{
 2264|  26.8M|    static struct ovsthread_once once = OVSTHREAD_ONCE_INITIALIZER;
  ------------------
  |  |  134|  26.8M|    {                                           \
  |  |  135|  26.8M|        false,                                  \
  |  |  136|  26.8M|        OVS_MUTEX_INITIALIZER,                  \
  |  |  ------------------
  |  |  |  |   45|  26.8M|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  26.8M|                                "<unlocked>" }
  |  |  ------------------
  |  |  137|  26.8M|    }
  ------------------
 2265|  26.8M|    if (ovsthread_once_start(&once)) {
  ------------------
  |  Branch (2265:9): [True: 1, False: 26.8M]
  ------------------
 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|  26.8M|}
nx-match.c:nxm_make_exact_header:
  165|   239k|{
  166|   239k|    unsigned int new_len = nxm_payload_len(header)
  167|   239k|                           / 2 + nxm_experimenter_len(header);
  168|   239k|    return NXM_HEADER(nxm_vendor(header), nxm_class(header),
  ------------------
  |  |  150|   239k|    (((uint64_t) (CLASS) << 48) |                               \
  |  |  151|   239k|     ((uint64_t) (FIELD) << 41) |                               \
  |  |  152|   239k|     ((uint64_t) (HASMASK) << 40) |                             \
  |  |  153|   239k|     ((uint64_t) (LENGTH) << 32) |                              \
  |  |  154|   239k|     (VENDOR))
  ------------------
  169|   239k|                      nxm_field(header), 0, new_len);
  170|   239k|}
nx-match.c:nxm_field_by_mf_id:
 2333|  13.2M|{
 2334|  13.2M|    const struct nxm_field_index *nfi;
 2335|  13.2M|    const struct nxm_field *f;
 2336|       |
 2337|  13.2M|    nxm_init();
 2338|       |
 2339|  13.2M|    f = NULL;
 2340|  14.9M|    LIST_FOR_EACH (nfi, mf_node, &nxm_mf_map[id]) {
  ------------------
  |  |   76|  13.2M|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->next, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  171|  13.2M|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|  13.2M|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|  28.1M|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  185|  28.1M|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 14.9M, False: 13.2M]
  |  |  |  |  |  Branch (185:6): [True: 14.9M, False: 13.2M]
  |  |  |  |  ------------------
  |  |  |  |  186|  28.1M|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  14.9M|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|  14.9M|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|  14.9M|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  28.1M|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   78|  14.9M|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->next))
  |  |  ------------------
  |  |  |  |  193|  14.9M|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  14.9M|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2341|  14.9M|        if (!f || version >= nfi->nf.version) {
  ------------------
  |  Branch (2341:13): [True: 12.9M, False: 1.94M]
  |  Branch (2341:19): [True: 1.69M, False: 254k]
  ------------------
 2342|  14.6M|            f = &nfi->nf;
 2343|  14.6M|        }
 2344|  14.9M|    }
 2345|  13.2M|    return f;
 2346|  13.2M|}

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

ofpact_put_set_field:
 3385|  28.4k|{
 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|  28.4k|    size_t total_size = 2 * ROUND_UP(field->n_bytes, OFPACT_ALIGNTO);
  ------------------
  |  |  303|  28.4k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|  28.4k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
 3392|  28.4k|    struct ofpact_set_field *sf = ofpact_put_SET_FIELD(ofpacts);
 3393|  28.4k|    sf->field = field;
 3394|       |
 3395|       |    /* Fill with all zeroes to make sure the padding is initialized. */
 3396|  28.4k|    ofpbuf_put_zeros(ofpacts, total_size);
 3397|  28.4k|    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|  28.4k|    if (value) {
  ------------------
  |  Branch (3401:9): [True: 24.0k, False: 4.45k]
  ------------------
 3402|  24.0k|        memcpy(sf->value, value, field->n_bytes);
 3403|  24.0k|        if (mask) {
  ------------------
  |  Branch (3403:13): [True: 24.0k, False: 0]
  ------------------
 3404|  24.0k|            memcpy(ofpact_set_field_mask(sf), mask, field->n_bytes);
  ------------------
  |  |  563|  24.0k|    ALIGNED_CAST(union mf_value *,                                          \
  |  |  ------------------
  |  |  |  |  434|  24.0k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  ------------------
  |  |  564|  24.0k|                 (uint8_t *)(SF)->value +                                   \
  |  |  565|  24.0k|                            ROUND_UP((SF)->field->n_bytes, OFPACT_ALIGNTO))
  ------------------
 3405|  24.0k|        } 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|  24.0k|    }
 3409|       |
 3410|       |    /* Update length. */
 3411|  28.4k|    ofpact_finish_SET_FIELD(ofpacts, &sf);
 3412|       |
 3413|  28.4k|    return sf;
 3414|  28.4k|}
ofpact_put_reg_load:
 3424|  4.45k|{
 3425|  4.45k|    struct ofpact_set_field *sf = ofpact_put_set_field(ofpacts, field, value,
 3426|  4.45k|                                                       mask);
 3427|  4.45k|    sf->ofpact.raw = NXAST_RAW_REG_LOAD;
 3428|       |
 3429|  4.45k|    return sf;
 3430|  4.45k|}
ofpact_put_reg_load2:
 3435|  5.78k|{
 3436|  5.78k|    struct ofpact_set_field *sf = ofpact_put_set_field(ofpacts, field, value,
 3437|  5.78k|                                                       mask);
 3438|  5.78k|    sf->ofpact.raw = NXAST_RAW_REG_LOAD2;
 3439|       |
 3440|  5.78k|    return sf;
 3441|  5.78k|}
ofpacts_pull_openflow_actions:
 8121|   205k|{
 8122|   205k|    return ofpacts_pull_openflow_actions__(
 8123|   205k|        openflow, actions_len, version,
 8124|   205k|        (1u << OVSINST_OFPIT11_APPLY_ACTIONS) | (1u << OVSINST_OFPIT13_METER),
 8125|   205k|        ofpacts, 0, vl_mff_map, ofpacts_tlv_bitmap);
 8126|   205k|}
ovs_instruction_name_from_type:
 8363|  29.5k|{
 8364|  29.5k|    return type < ARRAY_SIZE(inst_info) ? inst_info[type].name : NULL;
  ------------------
  |  |  297|  29.5k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   46|  29.5k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|  29.5k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   47|  29.5k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  29.5k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|  29.5k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (8364:12): [True: 29.5k, False: 0]
  ------------------
 8365|  29.5k|}
ovs_instruction_type_from_ofpact_type:
 8382|   211k|{
 8383|   211k|    switch (type) {
 8384|    344|    case OFPACT_METER:
  ------------------
  |  Branch (8384:5): [True: 344, False: 211k]
  ------------------
 8385|    344|        return (version >= OFP15_VERSION
  ------------------
  |  Branch (8385:17): [True: 13, False: 331]
  ------------------
 8386|    344|                ? OVSINST_OFPIT11_APPLY_ACTIONS
 8387|    344|                : OVSINST_OFPIT13_METER);
 8388|    310|    case OFPACT_CLEAR_ACTIONS:
  ------------------
  |  Branch (8388:5): [True: 310, False: 211k]
  ------------------
 8389|    310|        return OVSINST_OFPIT11_CLEAR_ACTIONS;
 8390|  16.9k|    case OFPACT_WRITE_ACTIONS:
  ------------------
  |  Branch (8390:5): [True: 16.9k, False: 194k]
  ------------------
 8391|  16.9k|        return OVSINST_OFPIT11_WRITE_ACTIONS;
 8392|  1.56k|    case OFPACT_WRITE_METADATA:
  ------------------
  |  Branch (8392:5): [True: 1.56k, False: 209k]
  ------------------
 8393|  1.56k|        return OVSINST_OFPIT11_WRITE_METADATA;
 8394|  1.17k|    case OFPACT_GOTO_TABLE:
  ------------------
  |  Branch (8394:5): [True: 1.17k, False: 210k]
  ------------------
 8395|  1.17k|        return OVSINST_OFPIT11_GOTO_TABLE;
 8396|  10.3k|    case OFPACT_OUTPUT:
  ------------------
  |  Branch (8396:5): [True: 10.3k, False: 201k]
  ------------------
 8397|  10.7k|    case OFPACT_GROUP:
  ------------------
  |  Branch (8397:5): [True: 406, False: 210k]
  ------------------
 8398|  14.2k|    case OFPACT_CLONE:
  ------------------
  |  Branch (8398:5): [True: 3.48k, False: 207k]
  ------------------
 8399|  18.2k|    case OFPACT_CONTROLLER:
  ------------------
  |  Branch (8399:5): [True: 3.99k, False: 207k]
  ------------------
 8400|  18.4k|    case OFPACT_ENQUEUE:
  ------------------
  |  Branch (8400:5): [True: 189, False: 211k]
  ------------------
 8401|  18.8k|    case OFPACT_OUTPUT_REG:
  ------------------
  |  Branch (8401:5): [True: 418, False: 210k]
  ------------------
 8402|  20.0k|    case OFPACT_OUTPUT_TRUNC:
  ------------------
  |  Branch (8402:5): [True: 1.17k, False: 210k]
  ------------------
 8403|  22.1k|    case OFPACT_BUNDLE:
  ------------------
  |  Branch (8403:5): [True: 2.10k, False: 209k]
  ------------------
 8404|  28.3k|    case OFPACT_SET_VLAN_VID:
  ------------------
  |  Branch (8404:5): [True: 6.19k, False: 205k]
  ------------------
 8405|  32.1k|    case OFPACT_SET_VLAN_PCP:
  ------------------
  |  Branch (8405:5): [True: 3.79k, False: 207k]
  ------------------
 8406|  36.2k|    case OFPACT_STRIP_VLAN:
  ------------------
  |  Branch (8406:5): [True: 4.11k, False: 207k]
  ------------------
 8407|  36.3k|    case OFPACT_PUSH_VLAN:
  ------------------
  |  Branch (8407:5): [True: 113, False: 211k]
  ------------------
 8408|  36.3k|    case OFPACT_SET_ETH_SRC:
  ------------------
  |  Branch (8408:5): [True: 22, False: 211k]
  ------------------
 8409|  36.7k|    case OFPACT_SET_ETH_DST:
  ------------------
  |  Branch (8409:5): [True: 374, False: 211k]
  ------------------
 8410|  40.9k|    case OFPACT_SET_IPV4_SRC:
  ------------------
  |  Branch (8410:5): [True: 4.26k, False: 207k]
  ------------------
 8411|  48.7k|    case OFPACT_SET_IPV4_DST:
  ------------------
  |  Branch (8411:5): [True: 7.80k, False: 203k]
  ------------------
 8412|  55.0k|    case OFPACT_SET_IP_DSCP:
  ------------------
  |  Branch (8412:5): [True: 6.21k, False: 205k]
  ------------------
 8413|  55.5k|    case OFPACT_SET_IP_ECN:
  ------------------
  |  Branch (8413:5): [True: 495, False: 210k]
  ------------------
 8414|  55.5k|    case OFPACT_SET_IP_TTL:
  ------------------
  |  Branch (8414:5): [True: 21, False: 211k]
  ------------------
 8415|  70.3k|    case OFPACT_SET_L4_SRC_PORT:
  ------------------
  |  Branch (8415:5): [True: 14.8k, False: 196k]
  ------------------
 8416|  78.2k|    case OFPACT_SET_L4_DST_PORT:
  ------------------
  |  Branch (8416:5): [True: 7.85k, False: 203k]
  ------------------
 8417|  78.5k|    case OFPACT_REG_MOVE:
  ------------------
  |  Branch (8417:5): [True: 337, False: 211k]
  ------------------
 8418|  97.6k|    case OFPACT_SET_FIELD:
  ------------------
  |  Branch (8418:5): [True: 19.0k, False: 192k]
  ------------------
 8419|  97.8k|    case OFPACT_STACK_PUSH:
  ------------------
  |  Branch (8419:5): [True: 298, False: 211k]
  ------------------
 8420|  99.3k|    case OFPACT_STACK_POP:
  ------------------
  |  Branch (8420:5): [True: 1.40k, False: 209k]
  ------------------
 8421|   101k|    case OFPACT_DEC_TTL:
  ------------------
  |  Branch (8421:5): [True: 2.64k, False: 208k]
  ------------------
 8422|   103k|    case OFPACT_SET_MPLS_LABEL:
  ------------------
  |  Branch (8422:5): [True: 2.02k, False: 209k]
  ------------------
 8423|   104k|    case OFPACT_SET_MPLS_TC:
  ------------------
  |  Branch (8423:5): [True: 32, False: 211k]
  ------------------
 8424|   105k|    case OFPACT_SET_MPLS_TTL:
  ------------------
  |  Branch (8424:5): [True: 1.22k, False: 210k]
  ------------------
 8425|   105k|    case OFPACT_DEC_MPLS_TTL:
  ------------------
  |  Branch (8425:5): [True: 151, False: 211k]
  ------------------
 8426|   105k|    case OFPACT_PUSH_MPLS:
  ------------------
  |  Branch (8426:5): [True: 2, False: 211k]
  ------------------
 8427|   105k|    case OFPACT_POP_MPLS:
  ------------------
  |  Branch (8427:5): [True: 88, False: 211k]
  ------------------
 8428|   106k|    case OFPACT_SET_TUNNEL:
  ------------------
  |  Branch (8428:5): [True: 1.26k, False: 210k]
  ------------------
 8429|   107k|    case OFPACT_SET_QUEUE:
  ------------------
  |  Branch (8429:5): [True: 308, False: 211k]
  ------------------
 8430|   110k|    case OFPACT_POP_QUEUE:
  ------------------
  |  Branch (8430:5): [True: 3.11k, False: 208k]
  ------------------
 8431|   111k|    case OFPACT_FIN_TIMEOUT:
  ------------------
  |  Branch (8431:5): [True: 1.02k, False: 210k]
  ------------------
 8432|   113k|    case OFPACT_RESUBMIT:
  ------------------
  |  Branch (8432:5): [True: 2.45k, False: 208k]
  ------------------
 8433|   138k|    case OFPACT_LEARN:
  ------------------
  |  Branch (8433:5): [True: 25.1k, False: 186k]
  ------------------
 8434|   138k|    case OFPACT_CONJUNCTION:
  ------------------
  |  Branch (8434:5): [True: 0, False: 211k]
  ------------------
 8435|   140k|    case OFPACT_MULTIPATH:
  ------------------
  |  Branch (8435:5): [True: 2.15k, False: 209k]
  ------------------
 8436|   148k|    case OFPACT_NOTE:
  ------------------
  |  Branch (8436:5): [True: 7.78k, False: 203k]
  ------------------
 8437|   151k|    case OFPACT_EXIT:
  ------------------
  |  Branch (8437:5): [True: 2.52k, False: 208k]
  ------------------
 8438|   166k|    case OFPACT_UNROLL_XLATE:
  ------------------
  |  Branch (8438:5): [True: 15.0k, False: 196k]
  ------------------
 8439|   171k|    case OFPACT_SAMPLE:
  ------------------
  |  Branch (8439:5): [True: 5.20k, False: 206k]
  ------------------
 8440|   171k|    case OFPACT_DEBUG_RECIRC:
  ------------------
  |  Branch (8440:5): [True: 0, False: 211k]
  ------------------
 8441|   171k|    case OFPACT_DEBUG_SLOW:
  ------------------
  |  Branch (8441:5): [True: 0, False: 211k]
  ------------------
 8442|   182k|    case OFPACT_CT:
  ------------------
  |  Branch (8442:5): [True: 10.5k, False: 200k]
  ------------------
 8443|   182k|    case OFPACT_CT_CLEAR:
  ------------------
  |  Branch (8443:5): [True: 106, False: 211k]
  ------------------
 8444|   186k|    case OFPACT_NAT:
  ------------------
  |  Branch (8444:5): [True: 4.06k, False: 207k]
  ------------------
 8445|   186k|    case OFPACT_ENCAP:
  ------------------
  |  Branch (8445:5): [True: 222, False: 211k]
  ------------------
 8446|   190k|    case OFPACT_DECAP:
  ------------------
  |  Branch (8446:5): [True: 3.99k, False: 207k]
  ------------------
 8447|   190k|    case OFPACT_DEC_NSH_TTL:
  ------------------
  |  Branch (8447:5): [True: 11, False: 211k]
  ------------------
 8448|   190k|    case OFPACT_CHECK_PKT_LARGER:
  ------------------
  |  Branch (8448:5): [True: 504, False: 210k]
  ------------------
 8449|   191k|    case OFPACT_DELETE_FIELD:
  ------------------
  |  Branch (8449:5): [True: 57, False: 211k]
  ------------------
 8450|   191k|    default:
  ------------------
  |  Branch (8450:5): [True: 0, False: 211k]
  ------------------
 8451|   191k|        return OVSINST_OFPIT11_APPLY_ACTIONS;
 8452|   211k|    }
 8453|   211k|}
ovs_instruction_type_from_inst_type:
 8458|  4.58k|{
 8459|  4.58k|    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|     20|    DEFINE_INST(OFPIT13_METER,                              \
  |  |  ------------------
  |  |  |  | 8462|     20|    case ENUM:                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8462:5): [True: 20, False: 4.56k]
  |  |  |  |  ------------------
  |  |  |  | 8463|     20|        *instruction_type = OVSINST_##ENUM;         \
  |  |  |  | 8464|     20|        return 0;
  |  |  ------------------
  |  | 1345|     20|                ofp13_instruction_meter,          false,    \
  |  | 1346|     20|                "meter")                                    \
  |  | 1347|     20|                                                            \
  |  | 1348|     20|    DEFINE_INST(OFPIT11_APPLY_ACTIONS,                      \
  |  |  ------------------
  |  |  |  | 8462|      4|    case ENUM:                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8462:5): [True: 4, False: 4.58k]
  |  |  |  |  ------------------
  |  |  |  | 8463|      4|        *instruction_type = OVSINST_##ENUM;         \
  |  |  |  | 8464|      4|        return 0;
  |  |  ------------------
  |  | 1349|      4|                ofp11_instruction_actions,        true,     \
  |  | 1350|      4|                "apply_actions")                            \
  |  | 1351|      4|                                                            \
  |  | 1352|     10|    DEFINE_INST(OFPIT11_CLEAR_ACTIONS,                      \
  |  |  ------------------
  |  |  |  | 8462|     10|    case ENUM:                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8462:5): [True: 10, False: 4.57k]
  |  |  |  |  ------------------
  |  |  |  | 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|      0|    case ENUM:                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8462:5): [True: 0, False: 4.58k]
  |  |  |  |  ------------------
  |  |  |  | 8463|      0|        *instruction_type = OVSINST_##ENUM;         \
  |  |  |  | 8464|      0|        return 0;
  |  |  ------------------
  |  | 1357|      0|                ofp11_instruction_actions,        true,     \
  |  | 1358|      0|                "write_actions")                            \
  |  | 1359|      0|                                                            \
  |  | 1360|     63|    DEFINE_INST(OFPIT11_WRITE_METADATA,                     \
  |  |  ------------------
  |  |  |  | 8462|     63|    case ENUM:                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8462:5): [True: 63, False: 4.52k]
  |  |  |  |  ------------------
  |  |  |  | 8463|     63|        *instruction_type = OVSINST_##ENUM;         \
  |  |  |  | 8464|     63|        return 0;
  |  |  ------------------
  |  | 1361|     63|                ofp11_instruction_write_metadata, false,    \
  |  | 1362|     63|                "write_metadata")                           \
  |  | 1363|     63|                                                            \
  |  | 1364|    548|    DEFINE_INST(OFPIT11_GOTO_TABLE,                         \
  |  |  ------------------
  |  |  |  | 8462|    548|    case ENUM:                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8462:5): [True: 548, False: 4.03k]
  |  |  |  |  ------------------
  |  |  |  | 8463|    548|        *instruction_type = OVSINST_##ENUM;         \
  |  |  |  | 8464|    548|        return 0;
  |  |  ------------------
  |  | 1365|    548|                ofp11_instruction_goto_table,     false,    \
  |  | 1366|    548|                "goto_table")
  ------------------
 8466|      0|#undef DEFINE_INST
 8467|       |
 8468|  3.94k|    default:
  ------------------
  |  Branch (8468:5): [True: 3.94k, False: 645]
  ------------------
 8469|  3.94k|        return OFPERR_OFPBIC_UNKNOWN_INST;
 8470|  4.58k|    }
 8471|  4.58k|}
ovsinst_bitmap_from_openflow:
 8529|  23.2k|{
 8530|  23.2k|    uint32_t ovsinst_bitmap = 0;
 8531|  23.2k|    const struct ovsinst_map *x;
 8532|       |
 8533|   139k|    for (x = get_ovsinst_map(version); x->ofpit >= 0; x++) {
  ------------------
  |  Branch (8533:40): [True: 116k, False: 23.2k]
  ------------------
 8534|   116k|        if (ofpit_bitmap & htonl(1u << x->ofpit)) {
  ------------------
  |  Branch (8534:13): [True: 37.8k, False: 78.4k]
  ------------------
 8535|  37.8k|            ovsinst_bitmap |= 1u << x->ovsinst;
 8536|  37.8k|        }
 8537|   116k|    }
 8538|  23.2k|    return ovsinst_bitmap;
 8539|  23.2k|}
ofpacts_pull_openflow_instructions:
 8647|   131k|{
 8648|   131k|    const struct ofp11_instruction *instructions;
 8649|   131k|    const struct ofp11_instruction *insts[N_OVS_INSTRUCTIONS];
 8650|   131k|    enum ofperr error;
 8651|       |
 8652|   131k|    ofpbuf_clear(ofpacts);
 8653|   131k|    if (version == OFP10_VERSION) {
  ------------------
  |  Branch (8653:9): [True: 79.6k, False: 52.1k]
  ------------------
 8654|  79.6k|        return ofpacts_pull_openflow_actions__(openflow, instructions_len,
 8655|  79.6k|                                               version,
 8656|  79.6k|                                               (1u << N_OVS_INSTRUCTIONS) - 1,
 8657|  79.6k|                                               ofpacts, 0, vl_mff_map,
 8658|  79.6k|                                               ofpacts_tlv_bitmap);
 8659|  79.6k|    }
 8660|       |
 8661|  52.1k|    if (instructions_len % OFP11_INSTRUCTION_ALIGN != 0) {
  ------------------
  |  |  262|  52.1k|#define OFP11_INSTRUCTION_ALIGN 8
  ------------------
  |  Branch (8661:9): [True: 746, False: 51.4k]
  ------------------
 8662|    746|        VLOG_WARN_RL(&rl, "OpenFlow message instructions length %u is not a "
  ------------------
  |  |  224|    746|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    746|    do {                                                                \
  |  |  |  |  288|    746|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    746|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 746]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    746|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 746]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8663|    746|                     "multiple of %d",
 8664|    746|                     instructions_len, OFP11_INSTRUCTION_ALIGN);
 8665|    746|        error = OFPERR_OFPBIC_BAD_LEN;
 8666|    746|        goto exit;
 8667|    746|    }
 8668|       |
 8669|  51.4k|    instructions = ofpbuf_try_pull(openflow, instructions_len);
 8670|  51.4k|    if (instructions == NULL) {
  ------------------
  |  Branch (8670:9): [True: 214, False: 51.1k]
  ------------------
 8671|    214|        VLOG_WARN_RL(&rl, "OpenFlow message instructions length %u exceeds "
  ------------------
  |  |  224|    214|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    214|    do {                                                                \
  |  |  |  |  288|    214|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    214|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 214]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    214|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 214]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8672|    214|                     "remaining message length (%"PRIu32")",
 8673|    214|                     instructions_len, openflow->size);
 8674|    214|        error = OFPERR_OFPBIC_BAD_LEN;
 8675|    214|        goto exit;
 8676|    214|    }
 8677|       |
 8678|  51.1k|    error = decode_openflow11_instructions(
 8679|  51.1k|        instructions, instructions_len / OFP11_INSTRUCTION_ALIGN, version,
  ------------------
  |  |  262|  51.1k|#define OFP11_INSTRUCTION_ALIGN 8
  ------------------
 8680|  51.1k|        insts);
 8681|  51.1k|    if (error) {
  ------------------
  |  Branch (8681:9): [True: 8.61k, False: 42.5k]
  ------------------
 8682|  8.61k|        goto exit;
 8683|  8.61k|    }
 8684|       |
 8685|  42.5k|    if (insts[OVSINST_OFPIT13_METER]) {
  ------------------
  |  Branch (8685:9): [True: 331, False: 42.2k]
  ------------------
 8686|    331|        const struct ofp13_instruction_meter *oim;
 8687|    331|        struct ofpact_meter *om;
 8688|       |
 8689|    331|        oim = ALIGNED_CAST(const struct ofp13_instruction_meter *,
  ------------------
  |  |  434|    331|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 8690|    331|                           insts[OVSINST_OFPIT13_METER]);
 8691|       |
 8692|    331|        om = ofpact_put_METER(ofpacts);
 8693|    331|        om->meter_id = ntohl(oim->meter_id);
 8694|    331|        om->provider_meter_id = UINT32_MAX; /* No provider meter ID. */
 8695|    331|    }
 8696|  42.5k|    if (insts[OVSINST_OFPIT11_APPLY_ACTIONS]) {
  ------------------
  |  Branch (8696:9): [True: 3.83k, False: 38.7k]
  ------------------
 8697|  3.83k|        const struct ofp_action_header *actions;
 8698|  3.83k|        size_t actions_len;
 8699|       |
 8700|  3.83k|        get_actions_from_instruction(insts[OVSINST_OFPIT11_APPLY_ACTIONS],
 8701|  3.83k|                                     &actions, &actions_len);
 8702|  3.83k|        error = ofpacts_decode(actions, actions_len, version, vl_mff_map,
 8703|  3.83k|                               ofpacts_tlv_bitmap, ofpacts);
 8704|  3.83k|        if (error) {
  ------------------
  |  Branch (8704:13): [True: 588, False: 3.24k]
  ------------------
 8705|    588|            goto exit;
 8706|    588|        }
 8707|  3.83k|    }
 8708|  41.9k|    if (insts[OVSINST_OFPIT11_CLEAR_ACTIONS]) {
  ------------------
  |  Branch (8708:9): [True: 310, False: 41.6k]
  ------------------
 8709|    310|        instruction_get_OFPIT11_CLEAR_ACTIONS(
 8710|    310|            insts[OVSINST_OFPIT11_CLEAR_ACTIONS]);
 8711|    310|        ofpact_put_CLEAR_ACTIONS(ofpacts);
 8712|    310|    }
 8713|  41.9k|    if (insts[OVSINST_OFPIT11_WRITE_ACTIONS]) {
  ------------------
  |  Branch (8713:9): [True: 24.1k, False: 17.8k]
  ------------------
 8714|  24.1k|        struct ofpact_nest *on;
 8715|  24.1k|        const struct ofp_action_header *actions;
 8716|  24.1k|        size_t actions_len;
 8717|  24.1k|        size_t start = ofpacts->size;
 8718|  24.1k|        ofpact_put(ofpacts, OFPACT_WRITE_ACTIONS,
 8719|  24.1k|                   offsetof(struct ofpact_nest, actions));
 8720|  24.1k|        get_actions_from_instruction(insts[OVSINST_OFPIT11_WRITE_ACTIONS],
 8721|  24.1k|                                     &actions, &actions_len);
 8722|  24.1k|        error = ofpacts_decode_for_action_set(actions, actions_len,
 8723|  24.1k|                                              version, vl_mff_map,
 8724|  24.1k|                                              ofpacts_tlv_bitmap, ofpacts);
 8725|  24.1k|        if (error) {
  ------------------
  |  Branch (8725:13): [True: 7.17k, False: 16.9k]
  ------------------
 8726|  7.17k|            goto exit;
 8727|  7.17k|        }
 8728|  16.9k|        on = ofpbuf_at_assert(ofpacts, start, sizeof *on);
 8729|  16.9k|        on->ofpact.len = ofpacts->size - start;
 8730|  16.9k|    }
 8731|  34.8k|    if (insts[OVSINST_OFPIT11_WRITE_METADATA]) {
  ------------------
  |  Branch (8731:9): [True: 1.47k, False: 33.3k]
  ------------------
 8732|  1.47k|        const struct ofp11_instruction_write_metadata *oiwm;
 8733|  1.47k|        struct ofpact_metadata *om;
 8734|       |
 8735|  1.47k|        oiwm = ALIGNED_CAST(const struct ofp11_instruction_write_metadata *,
  ------------------
  |  |  434|  1.47k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 8736|  1.47k|                            insts[OVSINST_OFPIT11_WRITE_METADATA]);
 8737|       |
 8738|  1.47k|        om = ofpact_put_WRITE_METADATA(ofpacts);
 8739|  1.47k|        om->metadata = oiwm->metadata;
 8740|  1.47k|        om->mask = oiwm->metadata_mask;
 8741|  1.47k|    }
 8742|  34.8k|    if (insts[OVSINST_OFPIT11_GOTO_TABLE]) {
  ------------------
  |  Branch (8742:9): [True: 1.17k, False: 33.6k]
  ------------------
 8743|  1.17k|        const struct ofp11_instruction_goto_table *oigt;
 8744|  1.17k|        struct ofpact_goto_table *ogt;
 8745|       |
 8746|  1.17k|        oigt = instruction_get_OFPIT11_GOTO_TABLE(
 8747|  1.17k|            insts[OVSINST_OFPIT11_GOTO_TABLE]);
 8748|  1.17k|        ogt = ofpact_put_GOTO_TABLE(ofpacts);
 8749|  1.17k|        ogt->table_id = oigt->table_id;
 8750|  1.17k|    }
 8751|       |
 8752|  34.8k|    error = ofpacts_verify(ofpacts->data, ofpacts->size, version,
 8753|  34.8k|                           (1u << N_OVS_INSTRUCTIONS) - 1, 0, NULL);
 8754|  52.1k|exit:
 8755|  52.1k|    if (error) {
  ------------------
  |  Branch (8755:9): [True: 17.3k, False: 34.8k]
  ------------------
 8756|  17.3k|        ofpbuf_clear(ofpacts);
 8757|  17.3k|    }
 8758|  52.1k|    return error;
 8759|  34.8k|}
ofpact_check_output_port:
 8782|  41.2k|{
 8783|  41.2k|    switch (port) {
 8784|  2.71k|    case OFPP_IN_PORT:
  ------------------
  |  |   39|  2.71k|#define OFPP_IN_PORT    OFP_PORT_C(0xfff8) /* Where the packet came in. */
  |  |  ------------------
  |  |  |  |  157|  2.71k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8784:5): [True: 2.71k, False: 38.5k]
  ------------------
 8785|  6.49k|    case OFPP_TABLE:
  ------------------
  |  |   40|  6.49k|#define OFPP_TABLE      OFP_PORT_C(0xfff9) /* Perform actions in flow table. */
  |  |  ------------------
  |  |  |  |  157|  6.49k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8785:5): [True: 3.77k, False: 37.4k]
  ------------------
 8786|  9.22k|    case OFPP_NORMAL:
  ------------------
  |  |   41|  9.22k|#define OFPP_NORMAL     OFP_PORT_C(0xfffa) /* Process with normal L2/L3. */
  |  |  ------------------
  |  |  |  |  157|  9.22k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8786:5): [True: 2.73k, False: 38.5k]
  ------------------
 8787|  11.4k|    case OFPP_FLOOD:
  ------------------
  |  |   42|  11.4k|#define OFPP_FLOOD      OFP_PORT_C(0xfffb) /* All ports except input port and
  |  |  ------------------
  |  |  |  |  157|  11.4k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8787:5): [True: 2.19k, False: 39.0k]
  ------------------
 8788|  12.8k|    case OFPP_ALL:
  ------------------
  |  |   44|  12.8k|#define OFPP_ALL        OFP_PORT_C(0xfffc) /* All ports except input port. */
  |  |  ------------------
  |  |  |  |  157|  12.8k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8788:5): [True: 1.38k, False: 39.8k]
  ------------------
 8789|  16.0k|    case OFPP_CONTROLLER:
  ------------------
  |  |   45|  16.0k|#define OFPP_CONTROLLER OFP_PORT_C(0xfffd) /* Send to controller. */
  |  |  ------------------
  |  |  |  |  157|  16.0k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8789:5): [True: 3.22k, False: 38.0k]
  ------------------
 8790|  16.2k|    case OFPP_LOCAL:
  ------------------
  |  |   46|  16.2k|#define OFPP_LOCAL      OFP_PORT_C(0xfffe) /* Local openflow "port". */
  |  |  ------------------
  |  |  |  |  157|  16.2k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8790:5): [True: 270, False: 40.9k]
  ------------------
 8791|  16.2k|        return 0;
 8792|       |
 8793|      4|    case OFPP_NONE:
  ------------------
  |  |   47|      4|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|      4|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8793:5): [True: 4, False: 41.2k]
  ------------------
 8794|      4|        return OFPERR_OFPBAC_BAD_OUT_PORT;
 8795|       |
 8796|  24.9k|    default:
  ------------------
  |  Branch (8796:5): [True: 24.9k, False: 16.2k]
  ------------------
 8797|  24.9k|        if (ofp_to_u16(port) < ofp_to_u16(max_ports)) {
  ------------------
  |  Branch (8797:13): [True: 24.1k, False: 827]
  ------------------
 8798|  24.1k|            return 0;
 8799|  24.1k|        }
 8800|    827|        return OFPERR_OFPBAC_BAD_OUT_PORT;
 8801|  41.2k|    }
 8802|  41.2k|}
ofpacts_check:
 8851|  88.7k|{
 8852|       |    /* Save fields that might temporarily be modified. */
 8853|  88.7k|    struct flow *flow = &cp->match->flow;
 8854|  88.7k|    ovs_be32 packet_type = flow->packet_type;
 8855|  88.7k|    ovs_be16 dl_type = flow->dl_type;
 8856|  88.7k|    uint8_t nw_proto = flow->nw_proto;
 8857|  88.7k|    union flow_vlan_hdr vlans[FLOW_MAX_VLAN_HEADERS];
 8858|  88.7k|    memcpy(vlans, flow->vlans, sizeof vlans);
 8859|       |
 8860|       |    /* Check all the actions. */
 8861|  88.7k|    cp->usable_protocols = OFPUTIL_P_ANY;
  ------------------
  |  |  100|  88.7k|#define OFPUTIL_P_ANY ((1 << 9) - 1)
  ------------------
 8862|  88.7k|    enum ofperr error = 0;
 8863|  88.7k|    struct ofpact *a;
 8864|   188k|    OFPACT_FOR_EACH (a, ofpacts, ofpacts_len) {
  ------------------
  |  |  261|   268k|    for ((POS) = (OFPACTS); (POS) < ofpact_end(OFPACTS, OFPACTS_LEN);  \
  |  |  ------------------
  |  |  |  Branch (261:29): [True: 188k, False: 80.7k]
  |  |  ------------------
  |  |  262|   180k|         (POS) = ofpact_next(POS))
  ------------------
 8865|   188k|        error = ofpact_check__(a, cp);
 8866|   188k|        if (error) {
  ------------------
  |  Branch (8866:13): [True: 7.99k, False: 180k]
  ------------------
 8867|  7.99k|            break;
 8868|  7.99k|        }
 8869|   188k|    }
 8870|       |
 8871|       |    /* Restore fields that may have been modified. */
 8872|  88.7k|    flow->packet_type = packet_type;
 8873|  88.7k|    flow->dl_type = dl_type;
 8874|  88.7k|    memcpy(flow->vlans, vlans, sizeof vlans);
 8875|  88.7k|    flow->nw_proto = nw_proto;
 8876|       |
 8877|  88.7k|    return error;
 8878|  88.7k|}
ofpacts_check_consistency:
 8886|  66.5k|{
 8887|  66.5k|    enum ofperr error = ofpacts_check(ofpacts, ofpacts_len, cp);
 8888|  66.5k|    if (!error && needed_protocols & ~cp->usable_protocols) {
  ------------------
  |  Branch (8888:9): [True: 60.1k, False: 6.44k]
  |  Branch (8888:19): [True: 2.05k, False: 58.0k]
  ------------------
 8889|  2.05k|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 8890|  2.05k|    }
 8891|  64.5k|    return error;
 8892|  66.5k|}
ofpact_get_mf_dst:
 8898|   219k|{
 8899|   219k|    if (ofpact->type == OFPACT_SET_FIELD) {
  ------------------
  |  Branch (8899:9): [True: 19.4k, False: 199k]
  ------------------
 8900|  19.4k|        const struct ofpact_set_field *orl;
 8901|       |
 8902|  19.4k|        orl = CONTAINER_OF(ofpact, struct ofpact_set_field, ofpact);
  ------------------
  |  |  124|  19.4k|        ((STRUCT *) (void *) ((char *) (POINTER) - offsetof (STRUCT, MEMBER)))
  ------------------
 8903|  19.4k|        return orl->field;
 8904|   199k|    } else if (ofpact->type == OFPACT_REG_MOVE) {
  ------------------
  |  Branch (8904:16): [True: 337, False: 199k]
  ------------------
 8905|    337|        const struct ofpact_reg_move *orm;
 8906|       |
 8907|    337|        orm = CONTAINER_OF(ofpact, struct ofpact_reg_move, ofpact);
  ------------------
  |  |  124|    337|        ((STRUCT *) (void *) ((char *) (POINTER) - offsetof (STRUCT, MEMBER)))
  ------------------
 8908|    337|        return orm->dst.field;
 8909|    337|    }
 8910|       |
 8911|   199k|    return NULL;
 8912|   219k|}
ofpact_bitmap_from_openflow:
 9265|  55.2k|{
 9266|  55.2k|    uint64_t ofpact_bitmap = 0;
 9267|  55.2k|    const struct ofpact_map *x;
 9268|       |
 9269|   885k|    for (x = get_ofpact_map(version); x->ofpat >= 0; x++) {
  ------------------
  |  Branch (9269:39): [True: 830k, False: 55.2k]
  ------------------
 9270|   830k|        if (ofpat_bitmap & htonl(1u << x->ofpat)) {
  ------------------
  |  Branch (9270:13): [True: 270k, False: 560k]
  ------------------
 9271|       |            ofpact_bitmap |= UINT64_C(1) << x->ofpact;
 9272|   270k|        }
 9273|   830k|    }
 9274|  55.2k|    return ofpact_bitmap;
 9275|  55.2k|}
ofpact_bitmap_format:
 9281|  30.5k|{
 9282|  30.5k|    if (!ofpacts_bitmap) {
  ------------------
  |  Branch (9282:9): [True: 917, False: 29.6k]
  ------------------
 9283|    917|        ds_put_cstr(s, "<none>");
 9284|  29.6k|    } else {
 9285|   182k|        while (ofpacts_bitmap) {
  ------------------
  |  Branch (9285:16): [True: 152k, False: 29.6k]
  ------------------
 9286|   152k|            ds_put_format(s, "%s ",
 9287|   152k|                          ofpact_name(rightmost_1bit_idx(ofpacts_bitmap)));
 9288|   152k|            ofpacts_bitmap = zero_rightmost_1bit(ofpacts_bitmap);
 9289|   152k|        }
 9290|  29.6k|        ds_chomp(s, ' ');
 9291|  29.6k|    }
 9292|  30.5k|}
ofpacts_format:
 9484|   148k|{
 9485|   148k|    if (!ofpacts_len) {
  ------------------
  |  Branch (9485:9): [True: 26.9k, False: 121k]
  ------------------
 9486|  26.9k|        ds_put_format(fp->s, "%sdrop%s", colors.drop, colors.end);
 9487|   121k|    } else {
 9488|   121k|        const struct ofpact *a;
 9489|       |
 9490|   238k|        OFPACT_FOR_EACH (a, ofpacts, ofpacts_len) {
  ------------------
  |  |  261|   360k|    for ((POS) = (OFPACTS); (POS) < ofpact_end(OFPACTS, OFPACTS_LEN);  \
  |  |  ------------------
  |  |  |  Branch (261:29): [True: 238k, False: 121k]
  |  |  ------------------
  |  |  262|   238k|         (POS) = ofpact_next(POS))
  ------------------
 9491|   238k|            if (a != ofpacts) {
  ------------------
  |  Branch (9491:17): [True: 116k, False: 121k]
  ------------------
 9492|   116k|                ds_put_char(fp->s, ',');
 9493|   116k|            }
 9494|       |
 9495|   238k|            ofpact_format(a, fp);
 9496|   238k|        }
 9497|   121k|    }
 9498|   148k|}
ofpact_put:
 9505|   420k|{
 9506|   420k|    struct ofpact *ofpact;
 9507|       |
 9508|   420k|    ofpacts->header = ofpbuf_put_uninit(ofpacts, len);
 9509|   420k|    ofpact = ofpacts->header;
 9510|   420k|    ofpact_init(ofpact, type, len);
 9511|   420k|    return ofpact;
 9512|   420k|}
ofpact_init:
 9517|   420k|{
 9518|   420k|    memset(ofpact, 0, len);
 9519|   420k|    ofpact->type = type;
 9520|   420k|    ofpact->raw = -1;
 9521|   420k|    ofpact->len = len;
 9522|   420k|}
ofpact_finish:
 9535|   111k|{
 9536|   111k|    ptrdiff_t len;
 9537|       |
 9538|   111k|    ovs_assert(ofpact == ofpacts->header);
  ------------------
  |  |   62|   111k|#define ovs_assert ovs_ignore
  ------------------
 9539|   111k|    len = (char *) ofpbuf_tail(ofpacts) - (char *) ofpact;
 9540|   111k|    ovs_assert(len > 0 && len <= UINT16_MAX);
  ------------------
  |  |   62|   111k|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (9540:16): [True: 111k, False: 0]
  |  Branch (9540:27): [True: 111k, False: 0]
  ------------------
 9541|   111k|    ofpact->len = len;
 9542|   111k|    ofpbuf_padto(ofpacts, OFPACT_ALIGN(ofpacts->size));
  ------------------
  |  |  205|   111k|#define OFPACT_ALIGN(SIZE) ROUND_UP(SIZE, OFPACT_ALIGNTO)
  |  |  ------------------
  |  |  |  |  303|   111k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|   111k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9543|       |
 9544|   111k|    return ofpacts->header;
 9545|   111k|}
ofpact_name:
 9713|   155k|{
 9714|   155k|    switch (type) {
  ------------------
  |  Branch (9714:13): [True: 155k, False: 0]
  ------------------
 9715|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
 9716|   155k|        OFPACTS
  ------------------
  |  |   64|  12.5k|    OFPACT(OUTPUT,          ofpact_output,      ofpact, "output")       \
  |  |  ------------------
  |  |  |  | 9715|  12.5k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 12.5k, False: 143k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   65|  12.5k|    OFPACT(GROUP,           ofpact_group,       ofpact, "group")        \
  |  |  ------------------
  |  |  |  | 9715|  8.82k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 8.82k, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   66|  8.82k|    OFPACT(CONTROLLER,      ofpact_controller,  userdata, "controller") \
  |  |  ------------------
  |  |  |  | 9715|     60|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 60, False: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   67|    106|    OFPACT(ENQUEUE,         ofpact_enqueue,     ofpact, "enqueue")      \
  |  |  ------------------
  |  |  |  | 9715|    106|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 106, False: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   68|    106|    OFPACT(OUTPUT_REG,      ofpact_output_reg,  ofpact, "output_reg")   \
  |  |  ------------------
  |  |  |  | 9715|     10|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 10, False: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   69|     10|    OFPACT(BUNDLE,          ofpact_bundle,      members, "bundle")      \
  |  |  ------------------
  |  |  |  | 9715|      1|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 1, False: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   70|      1|                                                                        \
  |  |   71|      1|    /* Header changes. */                                               \
  |  |   72|  6.17k|    OFPACT(SET_FIELD,       ofpact_set_field,   ofpact, "set_field")    \
  |  |  ------------------
  |  |  |  | 9715|  6.17k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 6.17k, False: 149k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   73|  6.17k|    OFPACT(SET_VLAN_VID,    ofpact_vlan_vid,    ofpact, "set_vlan_vid") \
  |  |  ------------------
  |  |  |  | 9715|  4.14k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 4.14k, False: 151k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   74|  4.14k|    OFPACT(SET_VLAN_PCP,    ofpact_vlan_pcp,    ofpact, "set_vlan_pcp") \
  |  |  ------------------
  |  |  |  | 9715|  3.56k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 3.56k, False: 152k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   75|  9.51k|    OFPACT(STRIP_VLAN,      ofpact_null,        ofpact, "strip_vlan")   \
  |  |  ------------------
  |  |  |  | 9715|  9.51k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 9.51k, False: 146k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   76|  9.51k|    OFPACT(PUSH_VLAN,       ofpact_push_vlan,   ofpact, "push_vlan")    \
  |  |  ------------------
  |  |  |  | 9715|  9.19k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 9.19k, False: 146k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|  9.19k|    OFPACT(SET_ETH_SRC,     ofpact_mac,         ofpact, "mod_dl_src")   \
  |  |  ------------------
  |  |  |  | 9715|  3.48k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 3.48k, False: 152k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   78|  3.48k|    OFPACT(SET_ETH_DST,     ofpact_mac,         ofpact, "mod_dl_dst")   \
  |  |  ------------------
  |  |  |  | 9715|  3.13k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 3.13k, False: 152k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   79|  3.27k|    OFPACT(SET_IPV4_SRC,    ofpact_ipv4,        ofpact, "mod_nw_src")   \
  |  |  ------------------
  |  |  |  | 9715|  3.27k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 3.27k, False: 152k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   80|  3.30k|    OFPACT(SET_IPV4_DST,    ofpact_ipv4,        ofpact, "mod_nw_dst")   \
  |  |  ------------------
  |  |  |  | 9715|  3.30k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 3.30k, False: 152k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   81|  3.30k|    OFPACT(SET_IP_DSCP,     ofpact_dscp,        ofpact, "mod_nw_tos")   \
  |  |  ------------------
  |  |  |  | 9715|  3.13k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 3.13k, False: 152k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|  3.68k|    OFPACT(SET_IP_ECN,      ofpact_ecn,         ofpact, "mod_nw_ecn")   \
  |  |  ------------------
  |  |  |  | 9715|  3.68k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 3.68k, False: 152k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|  6.96k|    OFPACT(SET_IP_TTL,      ofpact_ip_ttl,      ofpact, "mod_nw_ttl")   \
  |  |  ------------------
  |  |  |  | 9715|  6.96k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 6.96k, False: 149k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   84|  6.96k|    OFPACT(SET_L4_SRC_PORT, ofpact_l4_port,     ofpact, "mod_tp_src")   \
  |  |  ------------------
  |  |  |  | 9715|  3.65k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 3.65k, False: 152k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   85|  3.76k|    OFPACT(SET_L4_DST_PORT, ofpact_l4_port,     ofpact, "mod_tp_dst")   \
  |  |  ------------------
  |  |  |  | 9715|  3.76k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 3.76k, False: 152k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   86|  3.76k|    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: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   87|     36|    OFPACT(STACK_PUSH,      ofpact_stack,       ofpact, "push")         \
  |  |  ------------------
  |  |  |  | 9715|     36|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 36, False: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   88|     36|    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: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|  13.0k|    OFPACT(DEC_TTL,         ofpact_cnt_ids,     cnt_ids, "dec_ttl")     \
  |  |  ------------------
  |  |  |  | 9715|  13.0k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 13.0k, False: 142k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|  13.0k|    OFPACT(SET_MPLS_LABEL,  ofpact_mpls_label,  ofpact, "set_mpls_label") \
  |  |  ------------------
  |  |  |  | 9715|  3.25k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 3.25k, False: 152k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   91|  3.33k|    OFPACT(SET_MPLS_TC,     ofpact_mpls_tc,     ofpact, "set_mpls_tc")  \
  |  |  ------------------
  |  |  |  | 9715|  3.33k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 3.33k, False: 152k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   92|  6.82k|    OFPACT(SET_MPLS_TTL,    ofpact_mpls_ttl,    ofpact, "set_mpls_ttl") \
  |  |  ------------------
  |  |  |  | 9715|  6.82k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 6.82k, False: 149k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   93|  11.8k|    OFPACT(DEC_MPLS_TTL,    ofpact_null,        ofpact, "dec_mpls_ttl") \
  |  |  ------------------
  |  |  |  | 9715|  11.8k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 11.8k, False: 144k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   94|  11.8k|    OFPACT(PUSH_MPLS,       ofpact_push_mpls,   ofpact, "push_mpls")    \
  |  |  ------------------
  |  |  |  | 9715|  10.0k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 10.0k, False: 145k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   95|  10.0k|    OFPACT(POP_MPLS,        ofpact_pop_mpls,    ofpact, "pop_mpls")     \
  |  |  ------------------
  |  |  |  | 9715|  7.97k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 7.97k, False: 148k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   96|  7.97k|    OFPACT(DEC_NSH_TTL,     ofpact_null,        ofpact, "dec_nsh_ttl")  \
  |  |  ------------------
  |  |  |  | 9715|      1|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 1, False: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   97|      1|    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: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   98|      0|                                                                        \
  |  |   99|      0|    /* Generic encap & decap */                                         \
  |  |  100|     17|    OFPACT(ENCAP,           ofpact_encap,       props, "encap")         \
  |  |  ------------------
  |  |  |  | 9715|     17|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 17, False: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  101|     17|    OFPACT(DECAP,           ofpact_decap,       ofpact, "decap")        \
  |  |  ------------------
  |  |  |  | 9715|      8|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 8, False: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  102|      8|                                                                        \
  |  |  103|      8|    /* Metadata. */                                                     \
  |  |  104|    824|    OFPACT(SET_TUNNEL,      ofpact_tunnel,      ofpact, "set_tunnel")   \
  |  |  ------------------
  |  |  |  | 9715|    824|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 824, False: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  105|  8.14k|    OFPACT(SET_QUEUE,       ofpact_queue,       ofpact, "set_queue")    \
  |  |  ------------------
  |  |  |  | 9715|  8.14k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 8.14k, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  106|  8.14k|    OFPACT(POP_QUEUE,       ofpact_null,        ofpact, "pop_queue")    \
  |  |  ------------------
  |  |  |  | 9715|  1.65k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 1.65k, False: 154k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  107|  1.65k|    OFPACT(FIN_TIMEOUT,     ofpact_fin_timeout, ofpact, "fin_timeout")  \
  |  |  ------------------
  |  |  |  | 9715|     12|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 12, False: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  108|     12|                                                                        \
  |  |  109|     12|    /* Flow table interaction. */                                       \
  |  |  110|    101|    OFPACT(RESUBMIT,        ofpact_resubmit,    ofpact, "resubmit")     \
  |  |  ------------------
  |  |  |  | 9715|    101|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 101, False: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  111|    101|    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: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  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: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  113|      0|                                                                        \
  |  |  114|      0|    /* Arithmetic. */                                                   \
  |  |  115|      5|    OFPACT(MULTIPATH,       ofpact_multipath,   ofpact, "multipath")    \
  |  |  ------------------
  |  |  |  | 9715|      5|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 5, False: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  116|      5|                                                                        \
  |  |  117|      5|    /* Other. */                                                        \
  |  |  118|     13|    OFPACT(NOTE,            ofpact_note,        data, "note")           \
  |  |  ------------------
  |  |  |  | 9715|     13|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 13, False: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|     42|    OFPACT(EXIT,            ofpact_null,        ofpact, "exit")         \
  |  |  ------------------
  |  |  |  | 9715|     42|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 42, False: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  120|     42|    OFPACT(SAMPLE,          ofpact_sample,      ofpact, "sample")       \
  |  |  ------------------
  |  |  |  | 9715|     14|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 14, False: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|     14|    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: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  122|    189|    OFPACT(CT,              ofpact_conntrack,   ofpact, "ct")           \
  |  |  ------------------
  |  |  |  | 9715|    189|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 189, False: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  123|    189|    OFPACT(CT_CLEAR,        ofpact_null,        ofpact, "ct_clear")     \
  |  |  ------------------
  |  |  |  | 9715|      8|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 8, False: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  124|      8|    OFPACT(NAT,             ofpact_nat,         ofpact, "nat")          \
  |  |  ------------------
  |  |  |  | 9715|      5|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 5, False: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  125|     15|    OFPACT(OUTPUT_TRUNC,    ofpact_output_trunc,ofpact, "output_trunc") \
  |  |  ------------------
  |  |  |  | 9715|     15|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 15, False: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  126|     15|    OFPACT(CLONE,           ofpact_nest,        actions, "clone")       \
  |  |  ------------------
  |  |  |  | 9715|      2|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 2, False: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  127|      2|    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: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  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: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  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: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  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: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  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: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  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: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  141|      3|    OFPACT(WRITE_METADATA,  ofpact_metadata,    ofpact, "write_metadata") \
  |  |  ------------------
  |  |  |  | 9715|      3|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 3, False: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  142|      3|    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: 155k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9717|   155k|#undef OFPACT
 9718|   155k|    }
 9719|      0|    return "<unknown>";
 9720|   155k|}
ofp-actions.c:ofpacts_pull_openflow_actions__:
 8060|   301k|{
 8061|   301k|    const struct ofp_action_header *actions;
 8062|   301k|    enum ofperr error;
 8063|       |
 8064|   301k|    if (actions_len % OFP_ACTION_ALIGN != 0) {
  ------------------
  |  |  384|   301k|#define OFP_ACTION_ALIGN 8
  ------------------
  |  Branch (8064:9): [True: 12.3k, False: 289k]
  ------------------
 8065|  12.3k|        VLOG_WARN_RL(&rl, "OpenFlow message actions length %u is not a "
  ------------------
  |  |  224|  12.3k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  12.3k|    do {                                                                \
  |  |  |  |  288|  12.3k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  12.3k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 12.3k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  12.3k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 12.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8066|  12.3k|                     "multiple of %d", actions_len, OFP_ACTION_ALIGN);
 8067|  12.3k|        return OFPERR_OFPBRC_BAD_LEN;
 8068|  12.3k|    }
 8069|       |
 8070|   289k|    actions = ofpbuf_try_pull(openflow, actions_len);
 8071|   289k|    if (actions == NULL) {
  ------------------
  |  Branch (8071:9): [True: 3.12k, False: 286k]
  ------------------
 8072|  3.12k|        VLOG_WARN_RL(&rl, "OpenFlow message actions length %u exceeds "
  ------------------
  |  |  224|  3.12k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  3.12k|    do {                                                                \
  |  |  |  |  288|  3.12k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  3.12k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 3.12k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  3.12k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 3.12k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8073|  3.12k|                     "remaining message length (%"PRIu32")",
 8074|  3.12k|                     actions_len, openflow->size);
 8075|  3.12k|        return OFPERR_OFPBRC_BAD_LEN;
 8076|  3.12k|    }
 8077|       |
 8078|   286k|    error = ofpacts_decode(actions, actions_len, version, vl_mff_map,
 8079|   286k|                           ofpacts_tlv_bitmap, ofpacts);
 8080|   286k|    if (!error) {
  ------------------
  |  Branch (8080:9): [True: 153k, False: 132k]
  ------------------
 8081|   153k|        error = ofpacts_verify(ofpacts->data, ofpacts->size, version,
 8082|   153k|                               allowed_ovsinsts, outer_action, NULL);
 8083|   153k|    }
 8084|   286k|    if (error) {
  ------------------
  |  Branch (8084:9): [True: 143k, False: 142k]
  ------------------
 8085|   143k|        ofpbuf_clear(ofpacts);
 8086|   143k|    }
 8087|   286k|    return error;
 8088|   289k|}
ofp-actions.c:action_set_classify:
 8189|  69.4k|{
 8190|  69.4k|    switch (a->type) {
 8191|      0|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
 8192|      0|        ACTION_SET_ORDER
  ------------------
  |  | 8140|  5.56k|    SLOT(OFPACT_STRIP_VLAN)                     \
  |  |  ------------------
  |  |  |  | 8191|  5.56k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 5.56k, False: 63.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8141|  8.42k|    SLOT(OFPACT_POP_MPLS)                       \
  |  |  ------------------
  |  |  |  | 8191|  8.42k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 8.42k, False: 61.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8142|  12.8k|    SLOT(OFPACT_DECAP)                          \
  |  |  ------------------
  |  |  |  | 8191|  12.8k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 12.8k, False: 56.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8143|  12.8k|    SLOT(OFPACT_ENCAP)                          \
  |  |  ------------------
  |  |  |  | 8191|  4.66k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 4.66k, False: 64.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8144|  4.66k|    SLOT(OFPACT_PUSH_MPLS)                      \
  |  |  ------------------
  |  |  |  | 8191|  4.66k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 4.66k, False: 64.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8145|  4.66k|    SLOT(OFPACT_PUSH_VLAN)                      \
  |  |  ------------------
  |  |  |  | 8191|  3.27k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 3.27k, False: 66.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8146|  3.94k|    SLOT(OFPACT_DEC_TTL)                        \
  |  |  ------------------
  |  |  |  | 8191|  3.94k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 3.94k, False: 65.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8147|  6.51k|    SLOT(OFPACT_DEC_MPLS_TTL)                   \
  |  |  ------------------
  |  |  |  | 8191|  6.51k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 6.51k, False: 62.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8148|  6.51k|    SLOT(OFPACT_DEC_NSH_TTL)
  |  |  ------------------
  |  |  |  | 8191|  1.70k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 1.70k, False: 67.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8193|      0|#undef SLOT
 8194|       |
 8195|      0|#define FINAL(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
 8196|  1.70k|        ACTION_SET_FINAL_PRIORITY
  ------------------
  |  | 8155|    160|    FINAL(OFPACT_CT)                            \
  |  |  ------------------
  |  |  |  | 8195|    160|#define FINAL(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8195:23): [True: 160, False: 69.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8156|    160|    FINAL(OFPACT_CT_CLEAR)                      \
  |  |  ------------------
  |  |  |  | 8195|     22|#define FINAL(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8195:23): [True: 22, False: 69.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8157|    145|    FINAL(OFPACT_RESUBMIT)                      \
  |  |  ------------------
  |  |  |  | 8195|    145|#define FINAL(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8195:23): [True: 145, False: 69.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8158|    789|    FINAL(OFPACT_OUTPUT)                        \
  |  |  ------------------
  |  |  |  | 8195|    789|#define FINAL(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8195:23): [True: 789, False: 68.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8159|  1.28k|    FINAL(OFPACT_GROUP)
  |  |  ------------------
  |  |  |  | 8195|  1.28k|#define FINAL(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8195:23): [True: 1.28k, False: 68.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8197|      0|#undef FINAL
 8198|       |
 8199|     73|    case OFPACT_SET_FIELD:
  ------------------
  |  Branch (8199:5): [True: 73, False: 69.4k]
  ------------------
 8200|    350|    case OFPACT_REG_MOVE:
  ------------------
  |  Branch (8200:5): [True: 277, False: 69.2k]
  ------------------
 8201|    366|    case OFPACT_SET_ETH_DST:
  ------------------
  |  Branch (8201:5): [True: 16, False: 69.4k]
  ------------------
 8202|    918|    case OFPACT_SET_ETH_SRC:
  ------------------
  |  Branch (8202:5): [True: 552, False: 68.9k]
  ------------------
 8203|  1.79k|    case OFPACT_SET_IP_DSCP:
  ------------------
  |  Branch (8203:5): [True: 877, False: 68.6k]
  ------------------
 8204|  5.40k|    case OFPACT_SET_IP_ECN:
  ------------------
  |  Branch (8204:5): [True: 3.61k, False: 65.8k]
  ------------------
 8205|  6.84k|    case OFPACT_SET_IP_TTL:
  ------------------
  |  Branch (8205:5): [True: 1.43k, False: 68.0k]
  ------------------
 8206|  6.96k|    case OFPACT_SET_IPV4_DST:
  ------------------
  |  Branch (8206:5): [True: 118, False: 69.3k]
  ------------------
 8207|  7.13k|    case OFPACT_SET_IPV4_SRC:
  ------------------
  |  Branch (8207:5): [True: 176, False: 69.3k]
  ------------------
 8208|  7.99k|    case OFPACT_SET_L4_DST_PORT:
  ------------------
  |  Branch (8208:5): [True: 861, False: 68.6k]
  ------------------
 8209|  8.55k|    case OFPACT_SET_L4_SRC_PORT:
  ------------------
  |  Branch (8209:5): [True: 560, False: 68.9k]
  ------------------
 8210|  9.67k|    case OFPACT_SET_MPLS_LABEL:
  ------------------
  |  Branch (8210:5): [True: 1.12k, False: 68.3k]
  ------------------
 8211|  10.8k|    case OFPACT_SET_MPLS_TC:
  ------------------
  |  Branch (8211:5): [True: 1.13k, False: 68.3k]
  ------------------
 8212|  11.9k|    case OFPACT_SET_MPLS_TTL:
  ------------------
  |  Branch (8212:5): [True: 1.16k, False: 68.3k]
  ------------------
 8213|  12.1k|    case OFPACT_SET_QUEUE:
  ------------------
  |  Branch (8213:5): [True: 208, False: 69.2k]
  ------------------
 8214|  12.2k|    case OFPACT_SET_TUNNEL:
  ------------------
  |  Branch (8214:5): [True: 34, False: 69.4k]
  ------------------
 8215|  14.0k|    case OFPACT_SET_VLAN_PCP:
  ------------------
  |  Branch (8215:5): [True: 1.78k, False: 67.6k]
  ------------------
 8216|  14.1k|    case OFPACT_SET_VLAN_VID:
  ------------------
  |  Branch (8216:5): [True: 103, False: 69.3k]
  ------------------
 8217|  14.1k|        return ACTION_SLOT_SET_OR_MOVE;
 8218|       |
 8219|      0|    case OFPACT_BUNDLE:
  ------------------
  |  Branch (8219:5): [True: 0, False: 69.4k]
  ------------------
 8220|      0|    case OFPACT_CLEAR_ACTIONS:
  ------------------
  |  Branch (8220:5): [True: 0, False: 69.4k]
  ------------------
 8221|      1|    case OFPACT_CLONE:
  ------------------
  |  Branch (8221:5): [True: 1, False: 69.4k]
  ------------------
 8222|      5|    case OFPACT_NAT:
  ------------------
  |  Branch (8222:5): [True: 4, False: 69.4k]
  ------------------
 8223|      7|    case OFPACT_CONTROLLER:
  ------------------
  |  Branch (8223:5): [True: 2, False: 69.4k]
  ------------------
 8224|      7|    case OFPACT_ENQUEUE:
  ------------------
  |  Branch (8224:5): [True: 0, False: 69.4k]
  ------------------
 8225|    429|    case OFPACT_EXIT:
  ------------------
  |  Branch (8225:5): [True: 422, False: 69.0k]
  ------------------
 8226|    429|    case OFPACT_UNROLL_XLATE:
  ------------------
  |  Branch (8226:5): [True: 0, False: 69.4k]
  ------------------
 8227|    530|    case OFPACT_FIN_TIMEOUT:
  ------------------
  |  Branch (8227:5): [True: 101, False: 69.3k]
  ------------------
 8228|    530|    case OFPACT_GOTO_TABLE:
  ------------------
  |  Branch (8228:5): [True: 0, False: 69.4k]
  ------------------
 8229|    573|    case OFPACT_LEARN:
  ------------------
  |  Branch (8229:5): [True: 43, False: 69.4k]
  ------------------
 8230|    573|    case OFPACT_CONJUNCTION:
  ------------------
  |  Branch (8230:5): [True: 0, False: 69.4k]
  ------------------
 8231|  1.05k|    case OFPACT_METER:
  ------------------
  |  Branch (8231:5): [True: 486, False: 68.9k]
  ------------------
 8232|  1.08k|    case OFPACT_MULTIPATH:
  ------------------
  |  Branch (8232:5): [True: 24, False: 69.4k]
  ------------------
 8233|  1.08k|    case OFPACT_NOTE:
  ------------------
  |  Branch (8233:5): [True: 2, False: 69.4k]
  ------------------
 8234|  1.08k|    case OFPACT_OUTPUT_REG:
  ------------------
  |  Branch (8234:5): [True: 0, False: 69.4k]
  ------------------
 8235|  1.40k|    case OFPACT_OUTPUT_TRUNC:
  ------------------
  |  Branch (8235:5): [True: 323, False: 69.1k]
  ------------------
 8236|  1.40k|    case OFPACT_POP_QUEUE:
  ------------------
  |  Branch (8236:5): [True: 0, False: 69.4k]
  ------------------
 8237|  1.40k|    case OFPACT_SAMPLE:
  ------------------
  |  Branch (8237:5): [True: 0, False: 69.4k]
  ------------------
 8238|  1.40k|    case OFPACT_STACK_POP:
  ------------------
  |  Branch (8238:5): [True: 0, False: 69.4k]
  ------------------
 8239|  1.40k|    case OFPACT_STACK_PUSH:
  ------------------
  |  Branch (8239:5): [True: 0, False: 69.4k]
  ------------------
 8240|  1.40k|    case OFPACT_WRITE_ACTIONS:
  ------------------
  |  Branch (8240:5): [True: 0, False: 69.4k]
  ------------------
 8241|  1.40k|    case OFPACT_WRITE_METADATA:
  ------------------
  |  Branch (8241:5): [True: 0, False: 69.4k]
  ------------------
 8242|  1.40k|    case OFPACT_DEBUG_RECIRC:
  ------------------
  |  Branch (8242:5): [True: 0, False: 69.4k]
  ------------------
 8243|  1.40k|    case OFPACT_DEBUG_SLOW:
  ------------------
  |  Branch (8243:5): [True: 0, False: 69.4k]
  ------------------
 8244|  1.40k|    case OFPACT_CHECK_PKT_LARGER:
  ------------------
  |  Branch (8244:5): [True: 1, False: 69.4k]
  ------------------
 8245|  1.40k|    case OFPACT_DELETE_FIELD:
  ------------------
  |  Branch (8245:5): [True: 0, False: 69.4k]
  ------------------
 8246|  1.40k|        return ACTION_SLOT_INVALID;
 8247|       |
 8248|      0|    default:
  ------------------
  |  Branch (8248:5): [True: 0, False: 69.4k]
  ------------------
 8249|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 8250|  69.4k|    }
 8251|  69.4k|}
ofp-actions.c:get_ovsinst_map:
 8482|  23.2k|{
 8483|       |    /* OpenFlow 1.1, 1.2, and 1.5 instructions. */
 8484|  23.2k|    static const struct ovsinst_map of11[] = {
 8485|  23.2k|        { OVSINST_OFPIT11_GOTO_TABLE, 1 },
 8486|  23.2k|        { OVSINST_OFPIT11_WRITE_METADATA, 2 },
 8487|  23.2k|        { OVSINST_OFPIT11_WRITE_ACTIONS, 3 },
 8488|  23.2k|        { OVSINST_OFPIT11_APPLY_ACTIONS, 4 },
 8489|  23.2k|        { OVSINST_OFPIT11_CLEAR_ACTIONS, 5 },
 8490|  23.2k|        { 0, -1 },
 8491|  23.2k|    };
 8492|       |
 8493|       |    /* OpenFlow 1.3 and 1.4 instructions. */
 8494|  23.2k|    static const struct ovsinst_map of13[] = {
 8495|  23.2k|        { OVSINST_OFPIT11_GOTO_TABLE, 1 },
 8496|  23.2k|        { OVSINST_OFPIT11_WRITE_METADATA, 2 },
 8497|  23.2k|        { OVSINST_OFPIT11_WRITE_ACTIONS, 3 },
 8498|  23.2k|        { OVSINST_OFPIT11_APPLY_ACTIONS, 4 },
 8499|  23.2k|        { OVSINST_OFPIT11_CLEAR_ACTIONS, 5 },
 8500|  23.2k|        { OVSINST_OFPIT13_METER, 6 },
 8501|  23.2k|        { 0, -1 },
 8502|  23.2k|    };
 8503|       |
 8504|  23.2k|    return version == OFP13_VERSION || version == OFP14_VERSION ? of13 : of11;
  ------------------
  |  Branch (8504:12): [True: 0, False: 23.2k]
  |  Branch (8504:40): [True: 0, False: 23.2k]
  ------------------
 8505|  23.2k|}
ofp-actions.c:decode_openflow11_instructions:
 8598|  51.1k|{
 8599|  51.1k|    const struct ofp11_instruction *inst;
 8600|  51.1k|    size_t left;
 8601|       |
 8602|  51.1k|    memset(out, 0, N_OVS_INSTRUCTIONS * sizeof *out);
 8603|  51.1k|    INSTRUCTION_FOR_EACH (inst, left, insts, n_insts) {
  ------------------
  |  | 8560|  51.1k|    for ((ITER) = (INSTRUCTIONS), (LEFT) = (N_INSTRUCTIONS);            \
  |  | 8561|  83.2k|         (LEFT) > 0 && instruction_is_valid(ITER, LEFT);                \
  |  |  ------------------
  |  |  |  Branch (8561:10): [True: 40.7k, False: 42.5k]
  |  |  |  Branch (8561:24): [True: 36.0k, False: 4.64k]
  |  |  ------------------
  |  | 8562|  51.1k|         ((LEFT) -= (ntohs((ITER)->len)                                 \
  |  | 8563|  32.1k|                     / sizeof(struct ofp11_instruction)),               \
  |  | 8564|  32.1k|          (ITER) = instruction_next(ITER)))
  ------------------
 8604|  36.0k|        enum ovs_instruction_type type;
 8605|  36.0k|        enum ofperr error;
 8606|       |
 8607|  36.0k|        error = decode_openflow11_instruction(inst, &type);
 8608|  36.0k|        if (error) {
  ------------------
  |  Branch (8608:13): [True: 3.19k, False: 32.8k]
  ------------------
 8609|  3.19k|            return error;
 8610|  3.19k|        }
 8611|       |
 8612|  32.8k|        if (type == OVSINST_OFPIT13_METER && version >= OFP15_VERSION) {
  ------------------
  |  Branch (8612:13): [True: 950, False: 31.9k]
  |  Branch (8612:46): [True: 595, False: 355]
  ------------------
 8613|       |            /* "meter" is an action, not an instruction, in OpenFlow 1.5. */
 8614|    595|            return OFPERR_OFPBIC_UNKNOWN_INST;
 8615|    595|        }
 8616|       |
 8617|  32.2k|        if (out[type]) {
  ------------------
  |  Branch (8617:13): [True: 177, False: 32.1k]
  ------------------
 8618|    177|            return OFPERR_OFPBIC_DUP_INST;
 8619|    177|        }
 8620|  32.1k|        out[type] = inst;
 8621|  32.1k|    }
 8622|       |
 8623|  47.2k|    if (left) {
  ------------------
  |  Branch (8623:9): [True: 4.64k, False: 42.5k]
  ------------------
 8624|  4.64k|        VLOG_WARN_RL(&rl, "bad instruction format at offset %"PRIuSIZE,
  ------------------
  |  |  224|  4.64k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  4.64k|    do {                                                                \
  |  |  |  |  288|  4.64k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  4.64k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 4.64k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  4.64k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 4.64k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8625|  4.64k|                     (n_insts - left) * sizeof *inst);
 8626|  4.64k|        return OFPERR_OFPBIC_BAD_LEN;
 8627|  4.64k|    }
 8628|  42.5k|    return 0;
 8629|  47.2k|}
ofp-actions.c:instruction_is_valid:
 8551|  40.7k|{
 8552|  40.7k|    uint16_t len = ntohs(inst->len);
 8553|  40.7k|    return (!(len % OFP11_INSTRUCTION_ALIGN)
  ------------------
  |  |  262|  40.7k|#define OFP11_INSTRUCTION_ALIGN 8
  ------------------
  |  Branch (8553:13): [True: 36.7k, False: 3.96k]
  ------------------
 8554|  36.7k|            && len >= sizeof *inst
  ------------------
  |  Branch (8554:16): [True: 36.4k, False: 319]
  ------------------
 8555|  36.4k|            && len / sizeof *inst <= n_instructions);
  ------------------
  |  Branch (8555:16): [True: 36.0k, False: 360]
  ------------------
 8556|  40.7k|}
ofp-actions.c:decode_openflow11_instruction:
 8569|  36.0k|{
 8570|  36.0k|    uint16_t len = ntohs(inst->len);
 8571|       |
 8572|  36.0k|    switch (inst->type) {
 8573|     99|    case CONSTANT_HTONS(OFPIT11_EXPERIMENTER):
  ------------------
  |  |   84|     99|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |   85|     99|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  ------------------
  |  Branch (8573:5): [True: 99, False: 35.9k]
  ------------------
 8574|     99|        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|     99|OVS_INSTRUCTIONS
  ------------------
  |  | 1344|  1.01k|    DEFINE_INST(OFPIT13_METER,                              \
  |  |  ------------------
  |  |  |  | 8577|  1.01k|        case CONSTANT_HTONS(ENUM):                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |   84|  1.01k|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |  |  |  |  |   85|  1.01k|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8577:9): [True: 1.01k, False: 35.0k]
  |  |  |  |  ------------------
  |  |  |  | 8578|  1.01k|            if (EXTENSIBLE                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8578:17): [Folded, False: 1.01k]
  |  |  |  |  |  Branch (8578:17): [True: 950, False: 66]
  |  |  |  |  ------------------
  |  |  |  | 8579|  1.01k|                ? len >= sizeof(struct STRUCT)          \
  |  |  |  | 8580|  1.01k|                : len == sizeof(struct STRUCT)) {       \
  |  |  |  | 8581|    950|                *type = OVSINST_##ENUM;                 \
  |  |  |  | 8582|    950|                return 0;                               \
  |  |  |  | 8583|    950|            } else {                                    \
  |  |  |  | 8584|     66|                return OFPERR_OFPBIC_BAD_LEN;           \
  |  |  |  | 8585|     66|            }
  |  |  ------------------
  |  | 1345|  1.01k|                ofp13_instruction_meter,          false,    \
  |  | 1346|  1.01k|                "meter")                                    \
  |  | 1347|  1.01k|                                                            \
  |  | 1348|  3.83k|    DEFINE_INST(OFPIT11_APPLY_ACTIONS,                      \
  |  |  ------------------
  |  |  |  | 8577|  3.83k|        case CONSTANT_HTONS(ENUM):                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |   84|  3.83k|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |  |  |  |  |   85|  3.83k|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8577:9): [True: 3.83k, False: 32.2k]
  |  |  |  |  ------------------
  |  |  |  | 8578|  3.83k|            if (EXTENSIBLE                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8578:17): [True: 3.83k, Folded]
  |  |  |  |  |  Branch (8578:17): [True: 3.83k, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 8579|  3.83k|                ? len >= sizeof(struct STRUCT)          \
  |  |  |  | 8580|  3.83k|                : len == sizeof(struct STRUCT)) {       \
  |  |  |  | 8581|  3.83k|                *type = OVSINST_##ENUM;                 \
  |  |  |  | 8582|  3.83k|                return 0;                               \
  |  |  |  | 8583|  3.83k|            } else {                                    \
  |  |  |  | 8584|      0|                return OFPERR_OFPBIC_BAD_LEN;           \
  |  |  |  | 8585|      0|            }
  |  |  ------------------
  |  | 1349|  3.83k|                ofp11_instruction_actions,        true,     \
  |  | 1350|  3.83k|                "apply_actions")                            \
  |  | 1351|  3.83k|                                                            \
  |  | 1352|  3.83k|    DEFINE_INST(OFPIT11_CLEAR_ACTIONS,                      \
  |  |  ------------------
  |  |  |  | 8577|    616|        case CONSTANT_HTONS(ENUM):                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |   84|    616|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |  |  |  |  |   85|    616|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8577:9): [True: 616, False: 35.4k]
  |  |  |  |  ------------------
  |  |  |  | 8578|    616|            if (EXTENSIBLE                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8578:17): [Folded, False: 616]
  |  |  |  |  |  Branch (8578:17): [True: 605, False: 11]
  |  |  |  |  ------------------
  |  |  |  | 8579|    616|                ? len >= sizeof(struct STRUCT)          \
  |  |  |  | 8580|    616|                : len == sizeof(struct STRUCT)) {       \
  |  |  |  | 8581|    605|                *type = OVSINST_##ENUM;                 \
  |  |  |  | 8582|    605|                return 0;                               \
  |  |  |  | 8583|    605|            } else {                                    \
  |  |  |  | 8584|     11|                return OFPERR_OFPBIC_BAD_LEN;           \
  |  |  |  | 8585|     11|            }
  |  |  ------------------
  |  | 1353|    616|                ofp11_instruction,                false,    \
  |  | 1354|    616|                "clear_actions")                            \
  |  | 1355|    616|                                                            \
  |  | 1356|  24.7k|    DEFINE_INST(OFPIT11_WRITE_ACTIONS,                      \
  |  |  ------------------
  |  |  |  | 8577|  24.7k|        case CONSTANT_HTONS(ENUM):                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |   84|  24.7k|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |  |  |  |  |   85|  24.7k|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8577:9): [True: 24.7k, False: 11.2k]
  |  |  |  |  ------------------
  |  |  |  | 8578|  24.7k|            if (EXTENSIBLE                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8578:17): [True: 24.7k, Folded]
  |  |  |  |  |  Branch (8578:17): [True: 24.7k, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 8579|  24.7k|                ? len >= sizeof(struct STRUCT)          \
  |  |  |  | 8580|  24.7k|                : len == sizeof(struct STRUCT)) {       \
  |  |  |  | 8581|  24.7k|                *type = OVSINST_##ENUM;                 \
  |  |  |  | 8582|  24.7k|                return 0;                               \
  |  |  |  | 8583|  24.7k|            } else {                                    \
  |  |  |  | 8584|      0|                return OFPERR_OFPBIC_BAD_LEN;           \
  |  |  |  | 8585|      0|            }
  |  |  ------------------
  |  | 1357|  24.7k|                ofp11_instruction_actions,        true,     \
  |  | 1358|  24.7k|                "write_actions")                            \
  |  | 1359|  24.7k|                                                            \
  |  | 1360|  24.7k|    DEFINE_INST(OFPIT11_WRITE_METADATA,                     \
  |  |  ------------------
  |  |  |  | 8577|  1.64k|        case CONSTANT_HTONS(ENUM):                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |   84|  1.64k|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |  |  |  |  |   85|  1.64k|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8577:9): [True: 1.64k, False: 34.4k]
  |  |  |  |  ------------------
  |  |  |  | 8578|  1.64k|            if (EXTENSIBLE                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8578:17): [Folded, False: 1.64k]
  |  |  |  |  |  Branch (8578:17): [True: 1.48k, False: 160]
  |  |  |  |  ------------------
  |  |  |  | 8579|  1.64k|                ? len >= sizeof(struct STRUCT)          \
  |  |  |  | 8580|  1.64k|                : len == sizeof(struct STRUCT)) {       \
  |  |  |  | 8581|  1.48k|                *type = OVSINST_##ENUM;                 \
  |  |  |  | 8582|  1.48k|                return 0;                               \
  |  |  |  | 8583|  1.48k|            } else {                                    \
  |  |  |  | 8584|    160|                return OFPERR_OFPBIC_BAD_LEN;           \
  |  |  |  | 8585|    160|            }
  |  |  ------------------
  |  | 1361|  1.64k|                ofp11_instruction_write_metadata, false,    \
  |  | 1362|  1.64k|                "write_metadata")                           \
  |  | 1363|  1.64k|                                                            \
  |  | 1364|  1.64k|    DEFINE_INST(OFPIT11_GOTO_TABLE,                         \
  |  |  ------------------
  |  |  |  | 8577|  1.32k|        case CONSTANT_HTONS(ENUM):                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |   84|  1.32k|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |  |  |  |  |   85|  1.32k|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8577:9): [True: 1.32k, False: 34.7k]
  |  |  |  |  ------------------
  |  |  |  | 8578|  1.32k|            if (EXTENSIBLE                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8578:17): [Folded, False: 1.32k]
  |  |  |  |  |  Branch (8578:17): [True: 1.20k, False: 119]
  |  |  |  |  ------------------
  |  |  |  | 8579|  1.32k|                ? len >= sizeof(struct STRUCT)          \
  |  |  |  | 8580|  1.32k|                : len == sizeof(struct STRUCT)) {       \
  |  |  |  | 8581|  1.20k|                *type = OVSINST_##ENUM;                 \
  |  |  |  | 8582|  1.20k|                return 0;                               \
  |  |  |  | 8583|  1.20k|            } else {                                    \
  |  |  |  | 8584|    119|                return OFPERR_OFPBIC_BAD_LEN;           \
  |  |  |  | 8585|    119|            }
  |  |  ------------------
  |  | 1365|  1.32k|                ofp11_instruction_goto_table,     false,    \
  |  | 1366|  1.32k|                "goto_table")
  ------------------
 8587|      0|#undef DEFINE_INST
 8588|       |
 8589|  2.73k|    default:
  ------------------
  |  Branch (8589:5): [True: 2.73k, False: 33.3k]
  ------------------
 8590|  2.73k|        return OFPERR_OFPBIC_UNKNOWN_INST;
 8591|  36.0k|    }
 8592|  36.0k|}
ofp-actions.c:instruction_next:
 8543|  32.1k|{
 8544|  32.1k|    return ((struct ofp11_instruction *) (void *)
 8545|       |            ((uint8_t *) inst + ntohs(inst->len)));
 8546|  32.1k|}
ofp-actions.c:get_actions_from_instruction:
 8635|  27.9k|{
 8636|  27.9k|    *actions = ALIGNED_CAST(const struct ofp_action_header *, inst + 1);
  ------------------
  |  |  434|  27.9k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 8637|       |    *actions_len = ntohs(inst->len) - sizeof *inst;
 8638|  27.9k|}
ofp-actions.c:ofpacts_decode:
 8029|   314k|{
 8030|   314k|    size_t bad_action_offset = 0;
 8031|   314k|    struct ofpbuf aligned_buf;
 8032|       |
 8033|   314k|    if (!OFPACT_IS_ALIGNED(actions)) {
  ------------------
  |  |  206|   314k|#define OFPACT_IS_ALIGNED(ADDR) ((uintptr_t) (ADDR) % OFPACT_ALIGNTO == 0)
  |  |  ------------------
  |  |  |  |  204|   314k|#define OFPACT_ALIGNTO 8
  |  |  ------------------
  ------------------
  |  Branch (8033:9): [True: 176k, False: 137k]
  ------------------
 8034|   176k|        ofpbuf_init(&aligned_buf, actions_len);
 8035|   176k|        ofpbuf_put(&aligned_buf, actions, actions_len);
 8036|   176k|    } else {
 8037|   137k|        ofpbuf_use_data(&aligned_buf, actions, actions_len);
 8038|   137k|    }
 8039|       |
 8040|   314k|    enum ofperr error
 8041|   314k|        = ofpacts_decode_aligned(&aligned_buf, ofp_version, vl_mff_map,
 8042|   314k|                                 ofpacts_tlv_bitmap, ofpacts,
 8043|   314k|                                 &bad_action_offset);
 8044|   314k|    if (error) {
  ------------------
  |  Branch (8044:9): [True: 139k, False: 174k]
  ------------------
 8045|   139k|        log_bad_action(actions, actions_len, bad_action_offset, error);
 8046|   139k|    }
 8047|   314k|    ofpbuf_uninit(&aligned_buf);
 8048|   314k|    return error;
 8049|   314k|}
ofp-actions.c:ofpacts_decode_aligned:
 7986|   314k|{
 7987|   314k|    size_t decoded_len = 0;
 7988|   314k|    enum ofperr error = 0;
 7989|       |
 7990|   314k|    ovs_assert(OFPACT_IS_ALIGNED(openflow->data));
  ------------------
  |  |   62|   314k|#define ovs_assert ovs_ignore
  ------------------
                  ovs_assert(OFPACT_IS_ALIGNED(openflow->data));
  ------------------
  |  |  206|   314k|#define OFPACT_IS_ALIGNED(ADDR) ((uintptr_t) (ADDR) % OFPACT_ALIGNTO == 0)
  |  |  ------------------
  |  |  |  |  204|   314k|#define OFPACT_ALIGNTO 8
  |  |  ------------------
  ------------------
 7991|   624k|    while (openflow->size) {
  ------------------
  |  Branch (7991:12): [True: 449k, False: 174k]
  ------------------
 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|   449k|        if (!OFPACT_IS_ALIGNED(openflow->data)) {
  ------------------
  |  |  206|   449k|#define OFPACT_IS_ALIGNED(ADDR) ((uintptr_t) (ADDR) % OFPACT_ALIGNTO == 0)
  |  |  ------------------
  |  |  |  |  204|   449k|#define OFPACT_ALIGNTO 8
  |  |  ------------------
  ------------------
  |  Branch (7998:13): [True: 0, False: 449k]
  ------------------
 7999|      0|            ofpbuf_align(openflow);
 8000|      0|        }
 8001|       |
 8002|   449k|        const struct ofp_action_header *action = openflow->data;
 8003|   449k|        enum ofp_raw_action_type raw;
 8004|   449k|        size_t act_len = 0;
 8005|   449k|        uint64_t arg;
 8006|       |
 8007|   449k|        error = ofpact_pull_raw(openflow, ofp_version, &raw, &arg, &act_len);
 8008|   449k|        if (!error) {
  ------------------
  |  Branch (8008:13): [True: 394k, False: 55.0k]
  ------------------
 8009|   394k|            error = ofpact_decode(action, raw, ofp_version, arg, vl_mff_map,
 8010|   394k|                                  ofpacts_tlv_bitmap, ofpacts);
 8011|   394k|        }
 8012|       |
 8013|   449k|        if (error) {
  ------------------
  |  Branch (8013:13): [True: 139k, False: 310k]
  ------------------
 8014|   139k|            *bad_action_offset = decoded_len;
 8015|   139k|            goto done;
 8016|   139k|        }
 8017|   310k|        decoded_len += act_len;
 8018|   310k|    }
 8019|       |
 8020|   314k|done:
 8021|   314k|    return error;
 8022|   314k|}
ofp-actions.c:ofpact_pull_raw:
 9903|   449k|{
 9904|   449k|    const struct ofp_action_header *oah = buf->data;
 9905|   449k|    const struct ofpact_raw_instance *action;
 9906|   449k|    unsigned int length;
 9907|   449k|    enum ofperr error;
 9908|       |
 9909|   449k|    *raw = *arg = *raw_len = 0;
 9910|   449k|    error = ofpact_decode_raw(ofp_version, oah, buf->size, &action);
 9911|   449k|    if (error) {
  ------------------
  |  Branch (9911:9): [True: 36.8k, False: 412k]
  ------------------
 9912|  36.8k|        return error;
 9913|  36.8k|    }
 9914|       |
 9915|   412k|    if (action->deprecation) {
  ------------------
  |  Branch (9915:9): [True: 19.9k, False: 392k]
  ------------------
 9916|  19.9k|        VLOG_INFO_RL(&rl, "%s is deprecated in %s (%s)",
  ------------------
  |  |  225|  19.9k|#define VLOG_INFO_RL(RL, ...) VLOG_RL(RL, VLL_INFO, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  19.9k|    do {                                                                \
  |  |  |  |  288|  19.9k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  19.9k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 19.9k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  19.9k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 19.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9917|  19.9k|                     action->name, ofputil_version_to_string(ofp_version),
 9918|  19.9k|                     action->deprecation);
 9919|  19.9k|    }
 9920|       |
 9921|   412k|    length = ntohs(oah->len);
 9922|   412k|    if (length > buf->size) {
  ------------------
  |  Branch (9922:9): [True: 7.68k, False: 404k]
  ------------------
 9923|  7.68k|        VLOG_WARN_RL(&rl, "OpenFlow action %s length %u exceeds action buffer "
  ------------------
  |  |  224|  7.68k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  7.68k|    do {                                                                \
  |  |  |  |  288|  7.68k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  7.68k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 7.68k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  7.68k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 7.68k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9924|  7.68k|                     "length %"PRIu32, action->name, length, buf->size);
 9925|  7.68k|        return OFPERR_OFPBAC_BAD_LEN;
 9926|  7.68k|    }
 9927|   404k|    if (length < action->min_length || length > action->max_length) {
  ------------------
  |  Branch (9927:9): [True: 4.04k, False: 400k]
  |  Branch (9927:40): [True: 3.39k, False: 397k]
  ------------------
 9928|  7.43k|        VLOG_WARN_RL(&rl, "OpenFlow action %s length %u not in valid range "
  ------------------
  |  |  224|  7.43k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  7.43k|    do {                                                                \
  |  |  |  |  288|  7.43k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  7.43k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 7.43k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  7.43k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 7.43k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9929|  7.43k|                     "[%hu,%hu]", action->name, length,
 9930|  7.43k|                     action->min_length, action->max_length);
 9931|  7.43k|        return OFPERR_OFPBAC_BAD_LEN;
 9932|  7.43k|    }
 9933|   397k|    if (length % 8) {
  ------------------
  |  Branch (9933:9): [True: 3.08k, False: 394k]
  ------------------
 9934|  3.08k|        VLOG_WARN_RL(&rl, "OpenFlow action %s length %u is not a multiple "
  ------------------
  |  |  224|  3.08k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  3.08k|    do {                                                                \
  |  |  |  |  288|  3.08k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  3.08k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 3.08k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  3.08k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 3.08k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9935|  3.08k|                     "of 8", action->name, length);
 9936|  3.08k|        return OFPERR_OFPBAC_BAD_LEN;
 9937|  3.08k|    }
 9938|       |
 9939|   394k|    *raw = action->raw;
 9940|   394k|    *arg = 0;
 9941|   394k|    if (action->arg_len) {
  ------------------
  |  Branch (9941:9): [True: 110k, False: 283k]
  ------------------
 9942|   110k|        const uint8_t *p;
 9943|   110k|        int i;
 9944|       |
 9945|   110k|        p = ofpbuf_at_assert(buf, action->arg_ofs, action->arg_len);
 9946|   354k|        for (i = 0; i < action->arg_len; i++) {
  ------------------
  |  Branch (9946:21): [True: 243k, False: 110k]
  ------------------
 9947|   243k|            *arg = (*arg << 8) | p[i];
 9948|   243k|        }
 9949|   110k|    }
 9950|       |
 9951|   394k|    ofpbuf_pull(buf, length);
 9952|   394k|    *raw_len = length;
 9953|       |
 9954|   394k|    return 0;
 9955|   397k|}
ofp-actions.c:ofpact_decode_raw:
 9850|   449k|{
 9851|   449k|    const struct ofpact_raw_instance *inst;
 9852|   449k|    struct ofpact_hdrs hdrs;
 9853|       |
 9854|   449k|    *instp = NULL;
 9855|   449k|    if (length < sizeof *oah) {
  ------------------
  |  Branch (9855:9): [True: 0, False: 449k]
  ------------------
 9856|      0|        return OFPERR_OFPBAC_BAD_LEN;
 9857|      0|    }
 9858|       |
 9859|       |    /* Get base action type. */
 9860|   449k|    if (oah->type == htons(OFPAT_VENDOR)) {
  ------------------
  |  Branch (9860:9): [True: 245k, False: 203k]
  ------------------
 9861|       |        /* Get vendor. */
 9862|   245k|        hdrs.vendor = ntohl(oah->vendor);
 9863|   245k|        if (hdrs.vendor == NX_VENDOR_ID || hdrs.vendor == ONF_VENDOR_ID) {
  ------------------
  |  |  110|   491k|#define NX_VENDOR_ID    0x00002320 /* Nicira. */
  ------------------
                      if (hdrs.vendor == NX_VENDOR_ID || hdrs.vendor == ONF_VENDOR_ID) {
  ------------------
  |  |  111|  15.7k|#define ONF_VENDOR_ID   0x4f4e4600 /* Open Networking Foundation. */
  ------------------
  |  Branch (9863:13): [True: 229k, False: 15.7k]
  |  Branch (9863:44): [True: 84, False: 15.6k]
  ------------------
 9864|       |            /* Get extension subtype. */
 9865|   230k|            const struct ext_action_header *nah;
 9866|       |
 9867|   230k|            nah = ALIGNED_CAST(const struct ext_action_header *, oah);
  ------------------
  |  |  434|   230k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 9868|   230k|            if (length < sizeof *nah) {
  ------------------
  |  Branch (9868:17): [True: 74, False: 229k]
  ------------------
 9869|     74|                return OFPERR_OFPBAC_BAD_LEN;
 9870|     74|            }
 9871|   229k|            hdrs.type = ntohs(nah->subtype);
 9872|   229k|        } else {
 9873|  15.6k|            VLOG_WARN_RL(&rl, "OpenFlow action has unknown vendor %#"PRIx32,
  ------------------
  |  |  224|  15.6k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  15.6k|    do {                                                                \
  |  |  |  |  288|  15.6k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  15.6k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 15.6k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  15.6k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 15.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9874|  15.6k|                         hdrs.vendor);
 9875|  15.6k|            return OFPERR_OFPBAC_BAD_VENDOR;
 9876|  15.6k|        }
 9877|   245k|    } else {
 9878|   203k|        hdrs.vendor = 0;
 9879|   203k|        hdrs.type = ntohs(oah->type);
 9880|   203k|    }
 9881|       |
 9882|   433k|    hdrs.ofp_version = ofp_version;
 9883|   433k|    HMAP_FOR_EACH_WITH_HASH (inst, decode_node, ofpact_hdrs_hash(&hdrs),
  ------------------
  |  |  138|   433k|    for (INIT_MULTIVAR(NODE, MEMBER, hmap_first_with_hash(HMAP, HASH),        \
  |  |  ------------------
  |  |  |  |  171|   433k|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|   433k|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  139|   433k|                       struct hmap_node);                                     \
  |  |  140|   433k|         CONDITION_MULTIVAR(NODE, MEMBER, ITER_VAR(NODE) != NULL);            \
  |  |  ------------------
  |  |  |  |  185|   433k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 412k, False: 21.1k]
  |  |  |  |  |  Branch (185:6): [True: 412k, False: 21.1k]
  |  |  |  |  ------------------
  |  |  |  |  186|   433k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|   412k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|   412k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|   412k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|   433k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |  141|   433k|         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|   433k|                             ofpact_decode_hmap()) {
 9885|   412k|        if (ofpact_hdrs_equal(&hdrs, &inst->hdrs)) {
  ------------------
  |  Branch (9885:13): [True: 412k, False: 0]
  ------------------
 9886|   412k|            *instp = inst;
 9887|   412k|            return 0;
 9888|   412k|        }
 9889|   412k|    }
 9890|       |
 9891|  21.1k|    VLOG_WARN_RL(&rl, "unknown %s action for vendor %#"PRIx32" and "
  ------------------
  |  |  224|  21.1k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  21.1k|    do {                                                                \
  |  |  |  |  288|  21.1k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  21.1k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 21.1k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  21.1k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 21.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9892|  21.1k|                 "type %"PRIu16, ofputil_version_to_string(ofp_version),
 9893|  21.1k|                 hdrs.vendor, hdrs.type);
 9894|  21.1k|    return (hdrs.vendor
  ------------------
  |  Branch (9894:13): [True: 2.93k, False: 18.1k]
  ------------------
 9895|  21.1k|            ? OFPERR_OFPBAC_BAD_VENDOR_TYPE
 9896|  21.1k|            : OFPERR_OFPBAC_BAD_TYPE);
 9897|   433k|}
ofp-actions.c:ofpact_decode_hmap:
 9806|   433k|{
 9807|   433k|    static struct ovsthread_once once = OVSTHREAD_ONCE_INITIALIZER;
  ------------------
  |  |  134|   433k|    {                                           \
  |  |  135|   433k|        false,                                  \
  |  |  136|   433k|        OVS_MUTEX_INITIALIZER,                  \
  |  |  ------------------
  |  |  |  |   45|   433k|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|   433k|                                "<unlocked>" }
  |  |  ------------------
  |  |  137|   433k|    }
  ------------------
 9808|   433k|    static struct hmap hmap;
 9809|       |
 9810|   433k|    if (ovsthread_once_start(&once)) {
  ------------------
  |  Branch (9810:9): [True: 1, False: 433k]
  ------------------
 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|   433k|    return &hmap;
 9823|   433k|}
ofp-actions.c:ofpact_hdrs_hash:
 9797|   434k|{
 9798|   434k|    return hash_2words(hdrs->vendor,
 9799|   434k|                       ((uint32_t) hdrs->type << 16) | hdrs->ofp_version);
 9800|   434k|}
ofp-actions.c:ofpact_hdrs_equal:
 9789|   412k|{
 9790|   412k|    return (a->vendor == b->vendor
  ------------------
  |  Branch (9790:13): [True: 412k, False: 0]
  ------------------
 9791|   412k|            && a->type == b->type
  ------------------
  |  Branch (9791:16): [True: 412k, False: 0]
  ------------------
 9792|   412k|            && a->ofp_version == b->ofp_version);
  ------------------
  |  Branch (9792:16): [True: 412k, False: 0]
  ------------------
 9793|   412k|}
ofp-actions.c:decode_OFPAT_RAW10_OUTPUT:
  578|  12.7k|{
  579|  12.7k|    struct ofpact_output *output;
  580|       |
  581|  12.7k|    output = ofpact_put_OUTPUT(out);
  582|  12.7k|    output->port = u16_to_ofp(ntohs(oao->port));
  583|  12.7k|    output->max_len = ntohs(oao->max_len);
  584|       |
  585|  12.7k|    return ofpact_check_output_port(output->port, OFPP_MAX);
  ------------------
  |  |   33|  12.7k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|  12.7k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  586|  12.7k|}
ofp-actions.c:decode_OFPAT_RAW11_OUTPUT:
  592|  2.17k|{
  593|  2.17k|    struct ofpact_output *output;
  594|  2.17k|    enum ofperr error;
  595|       |
  596|  2.17k|    output = ofpact_put_OUTPUT(out);
  597|  2.17k|    output->max_len = ntohs(oao->max_len);
  598|       |
  599|  2.17k|    error = ofputil_port_from_ofp11(oao->port, &output->port);
  600|  2.17k|    if (error) {
  ------------------
  |  Branch (600:9): [True: 532, False: 1.64k]
  ------------------
  601|    532|        return error;
  602|    532|    }
  603|       |
  604|  1.64k|    return ofpact_check_output_port(output->port, OFPP_MAX);
  ------------------
  |  |   33|  1.64k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|  1.64k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  605|  2.17k|}
ofp-actions.c:decode_OFPAT_RAW10_SET_VLAN_VID:
 1575|  9.87k|{
 1576|       |    return decode_set_vlan_vid(vid, true, out);
 1577|  9.87k|}
ofp-actions.c:decode_set_vlan_vid:
 1560|  11.1k|{
 1561|  11.1k|    if (vid & ~0xfff) {
  ------------------
  |  Branch (1561:9): [True: 246, False: 10.8k]
  ------------------
 1562|    246|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 1563|  10.8k|    } else {
 1564|  10.8k|        struct ofpact_vlan_vid *vlan_vid = ofpact_put_SET_VLAN_VID(out);
 1565|  10.8k|        vlan_vid->vlan_vid = vid;
 1566|  10.8k|        vlan_vid->push_vlan_if_needed = push_vlan_if_needed;
 1567|  10.8k|        return 0;
 1568|  10.8k|    }
 1569|  11.1k|}
ofp-actions.c:decode_OFPAT_RAW10_SET_VLAN_PCP:
 1683|  4.47k|{
 1684|       |    return decode_set_vlan_pcp(pcp, true, out);
 1685|  4.47k|}
ofp-actions.c:decode_set_vlan_pcp:
 1668|  6.60k|{
 1669|  6.60k|    if (pcp & ~7) {
  ------------------
  |  Branch (1669:9): [True: 104, False: 6.50k]
  ------------------
 1670|    104|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 1671|  6.50k|    } else {
 1672|  6.50k|        struct ofpact_vlan_pcp *vlan_pcp = ofpact_put_SET_VLAN_PCP(out);
 1673|  6.50k|        vlan_pcp->vlan_pcp = pcp;
 1674|  6.50k|        vlan_pcp->push_vlan_if_needed = push_vlan_if_needed;
 1675|  6.50k|        return 0;
 1676|  6.50k|    }
 1677|  6.60k|}
ofp-actions.c:decode_OFPAT_RAW11_SET_VLAN_VID:
 1583|  1.24k|{
 1584|       |    return decode_set_vlan_vid(vid, false, out);
 1585|  1.24k|}
ofp-actions.c:decode_OFPAT_RAW11_SET_VLAN_PCP:
 1691|  2.12k|{
 1692|       |    return decode_set_vlan_pcp(pcp, false, out);
 1693|  2.12k|}
ofp-actions.c:decode_OFPAT_RAW11_PUSH_VLAN:
 1840|  4.19k|{
 1841|  4.19k|    struct ofpact_push_vlan *push_vlan;
 1842|  4.19k|    if (!eth_type_vlan(eth_type)) {
  ------------------
  |  Branch (1842:9): [True: 563, False: 3.62k]
  ------------------
 1843|    563|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 1844|    563|    }
 1845|  3.62k|    push_vlan = ofpact_put_PUSH_VLAN(out);
 1846|  3.62k|    push_vlan->ethertype = eth_type;
 1847|  3.62k|    return 0;
 1848|  4.19k|}
ofp-actions.c:decode_OFPAT_RAW10_STRIP_VLAN:
 1776|  5.77k|{
 1777|  5.77k|    ofpact_put_STRIP_VLAN(out)->ofpact.raw = OFPAT_RAW10_STRIP_VLAN;
 1778|  5.77k|    return 0;
 1779|  5.77k|}
ofp-actions.c:decode_OFPAT_RAW11_POP_VLAN:
 1783|  5.67k|{
 1784|  5.67k|    ofpact_put_STRIP_VLAN(out)->ofpact.raw = OFPAT_RAW11_POP_VLAN;
 1785|  5.67k|    return 0;
 1786|  5.67k|}
ofp-actions.c:decode_OFPAT_RAW_SET_DL_SRC:
 1919|    579|{
 1920|    579|    ofpact_put_SET_ETH_SRC(out)->mac = a->dl_addr;
 1921|    579|    return 0;
 1922|    579|}
ofp-actions.c:decode_OFPAT_RAW_SET_DL_DST:
 1928|    403|{
 1929|    403|    ofpact_put_SET_ETH_DST(out)->mac = a->dl_addr;
 1930|    403|    return 0;
 1931|    403|}
ofp-actions.c:decode_OFPAT_RAW_SET_NW_SRC:
 2015|  5.97k|{
 2016|  5.97k|    ofpact_put_SET_IPV4_SRC(out)->ipv4 = ipv4;
 2017|  5.97k|    return 0;
 2018|  5.97k|}
ofp-actions.c:decode_OFPAT_RAW_SET_NW_DST:
 2024|  9.05k|{
 2025|  9.05k|    ofpact_put_SET_IPV4_DST(out)->ipv4 = ipv4;
 2026|  9.05k|    return 0;
 2027|  9.05k|}
ofp-actions.c:decode_OFPAT_RAW_SET_NW_TOS:
 2117|  9.44k|{
 2118|  9.44k|    if (dscp & ~IP_DSCP_MASK) {
  ------------------
  |  |  724|  9.44k|#define IP_DSCP_MASK 0xfc
  ------------------
  |  Branch (2118:9): [True: 592, False: 8.85k]
  ------------------
 2119|    592|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 2120|  8.85k|    } else {
 2121|  8.85k|        ofpact_put_SET_IP_DSCP(out)->dscp = dscp;
 2122|  8.85k|        return 0;
 2123|  8.85k|    }
 2124|  9.44k|}
ofp-actions.c:decode_OFPAT_RAW11_SET_NW_ECN:
 2186|  5.64k|{
 2187|  5.64k|    if (ecn & ~IP_ECN_MASK) {
  ------------------
  |  |  722|  5.64k|#define IP_ECN_MASK 0x03
  ------------------
  |  Branch (2187:9): [True: 1.14k, False: 4.50k]
  ------------------
 2188|  1.14k|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 2189|  4.50k|    } else {
 2190|  4.50k|        ofpact_put_SET_IP_ECN(out)->ecn = ecn;
 2191|  4.50k|        return 0;
 2192|  4.50k|    }
 2193|  5.64k|}
ofp-actions.c:decode_OFPAT_RAW_SET_TP_SRC:
 2305|  18.4k|{
 2306|       |    ofpact_put_SET_L4_SRC_PORT(out)->port = ntohs(port);
 2307|  18.4k|    return 0;
 2308|  18.4k|}
ofp-actions.c:decode_OFPAT_RAW_SET_TP_DST:
 2314|  10.3k|{
 2315|       |    ofpact_put_SET_L4_DST_PORT(out)->port = ntohs(port);
 2316|  10.3k|    return 0;
 2317|  10.3k|}
ofp-actions.c:decode_OFPAT_RAW10_ENQUEUE:
 1094|    208|{
 1095|    208|    struct ofpact_enqueue *enqueue;
 1096|       |
 1097|    208|    enqueue = ofpact_put_ENQUEUE(out);
 1098|    208|    enqueue->port = u16_to_ofp(ntohs(oae->port));
 1099|    208|    enqueue->queue = ntohl(oae->queue_id);
 1100|    208|    if (ofp_to_u16(enqueue->port) >= ofp_to_u16(OFPP_MAX)
  ------------------
  |  |   33|    208|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|    208|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1100:9): [True: 123, False: 85]
  ------------------
 1101|    208|        && enqueue->port != OFPP_IN_PORT
  ------------------
  |  |   39|    123|#define OFPP_IN_PORT    OFP_PORT_C(0xfff8) /* Where the packet came in. */
  |  |  ------------------
  |  |  |  |  157|    331|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1101:12): [True: 30, False: 93]
  ------------------
 1102|     30|        && enqueue->port != OFPP_LOCAL) {
  ------------------
  |  |   46|     30|#define OFPP_LOCAL      OFP_PORT_C(0xfffe) /* Local openflow "port". */
  |  |  ------------------
  |  |  |  |  157|     30|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1102:12): [True: 19, False: 11]
  ------------------
 1103|     19|        return OFPERR_OFPBAC_BAD_OUT_PORT;
 1104|     19|    }
 1105|    189|    return 0;
 1106|    208|}
ofp-actions.c:decode_OFPAT_RAW_SET_MPLS_LABEL:
 3765|  3.16k|{
 3766|  3.16k|    ofpact_put_SET_MPLS_LABEL(out)->label = label;
 3767|  3.16k|    return 0;
 3768|  3.16k|}
ofp-actions.c:decode_OFPAT_RAW_SET_MPLS_TC:
 3838|  1.17k|{
 3839|  1.17k|    ofpact_put_SET_MPLS_TC(out)->tc = tc;
 3840|  1.17k|    return 0;
 3841|  1.17k|}
ofp-actions.c:decode_OFPAT_RAW_SET_MPLS_TTL:
 3899|  2.50k|{
 3900|  2.50k|    ofpact_put_SET_MPLS_TTL(out)->ttl = ttl;
 3901|  2.50k|    return 0;
 3902|  2.50k|}
ofp-actions.c:decode_OFPAT_RAW_DEC_MPLS_TTL:
 3955|  7.00k|{
 3956|  7.00k|    ofpact_put_DEC_MPLS_TTL(out);
 3957|  7.00k|    return 0;
 3958|  7.00k|}
ofp-actions.c:decode_OFPAT_RAW_PUSH_MPLS:
 3994|  5.33k|{
 3995|  5.33k|    struct ofpact_push_mpls *oam;
 3996|       |
 3997|  5.33k|    if (!eth_type_mpls(ethertype)) {
  ------------------
  |  Branch (3997:9): [True: 352, False: 4.98k]
  ------------------
 3998|    352|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 3999|    352|    }
 4000|  4.98k|    oam = ofpact_put_PUSH_MPLS(out);
 4001|  4.98k|    oam->ethertype = ethertype;
 4002|       |
 4003|  4.98k|    return 0;
 4004|  5.33k|}
ofp-actions.c:decode_OFPAT_RAW_POP_MPLS:
 4059|  10.2k|{
 4060|  10.2k|    ofpact_put_POP_MPLS(out)->ethertype = ethertype;
 4061|  10.2k|    return 0;
 4062|  10.2k|}
ofp-actions.c:decode_OFPAT_RAW_SET_QUEUE:
 4270|    526|{
 4271|    526|    ofpact_put_SET_QUEUE(out)->queue_id = queue_id;
 4272|    526|    return 0;
 4273|    526|}
ofp-actions.c:decode_OFPAT_RAW_GROUP:
  727|  1.81k|{
  728|  1.81k|    ofpact_put_GROUP(out)->group_id = group_id;
  729|  1.81k|    return 0;
  730|  1.81k|}
ofp-actions.c:decode_OFPAT_RAW11_SET_NW_TTL:
 2250|  1.46k|{
 2251|  1.46k|    ofpact_put_SET_IP_TTL(out)->ttl = ttl;
 2252|  1.46k|    return 0;
 2253|  1.46k|}
ofp-actions.c:decode_OFPAT_RAW_DEC_NW_TTL:
 3612|  5.35k|{
 3613|  5.35k|    uint16_t id = 0;
 3614|  5.35k|    struct ofpact_cnt_ids *ids;
 3615|  5.35k|    enum ofperr error = 0;
 3616|       |
 3617|  5.35k|    ids = ofpact_put_DEC_TTL(out);
 3618|  5.35k|    ids->n_controllers = 1;
 3619|  5.35k|    ofpbuf_put(out, &id, sizeof id);
 3620|  5.35k|    ids = out->header;
 3621|  5.35k|    ofpact_finish_DEC_TTL(out, &ids);
 3622|  5.35k|    return error;
 3623|  5.35k|}
ofp-actions.c:decode_NXAST_RAW_DEC_TTL_CNT_IDS:
 3629|  5.83k|{
 3630|  5.83k|    struct ofpact_cnt_ids *ids;
 3631|  5.83k|    size_t ids_size;
 3632|  5.83k|    int i;
 3633|       |
 3634|  5.83k|    ids = ofpact_put_DEC_TTL(out);
 3635|  5.83k|    ids->ofpact.raw = NXAST_RAW_DEC_TTL_CNT_IDS;
 3636|  5.83k|    ids->n_controllers = ntohs(nac_ids->n_controllers);
 3637|  5.83k|    ids_size = ntohs(nac_ids->len) - sizeof *nac_ids;
 3638|       |
 3639|  5.83k|    if (!is_all_zeros(nac_ids->zeros, sizeof nac_ids->zeros)) {
  ------------------
  |  Branch (3639:9): [True: 572, False: 5.26k]
  ------------------
 3640|    572|        return OFPERR_NXBRC_MUST_BE_ZERO;
 3641|    572|    }
 3642|       |
 3643|  5.26k|    if (ids_size < ids->n_controllers * sizeof(ovs_be16)) {
  ------------------
  |  Branch (3643:9): [True: 287, False: 4.97k]
  ------------------
 3644|    287|        VLOG_WARN_RL(&rl, "Nicira action dec_ttl_cnt_ids only has %"PRIuSIZE" "
  ------------------
  |  |  224|    287|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    287|    do {                                                                \
  |  |  |  |  288|    287|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    287|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 287]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    287|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 287]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3645|    287|                     "bytes allocated for controller ids.  %"PRIuSIZE" bytes "
 3646|    287|                     "are required for %u controllers.",
 3647|    287|                     ids_size, ids->n_controllers * sizeof(ovs_be16),
 3648|    287|                     ids->n_controllers);
 3649|    287|        return OFPERR_OFPBAC_BAD_LEN;
 3650|    287|    }
 3651|       |
 3652|  15.4k|    for (i = 0; i < ids->n_controllers; i++) {
  ------------------
  |  Branch (3652:17): [True: 10.5k, False: 4.97k]
  ------------------
 3653|  10.5k|        uint16_t id = ntohs(((ovs_be16 *)(nac_ids + 1))[i]);
 3654|  10.5k|        ofpbuf_put(out, &id, sizeof id);
 3655|  10.5k|        ids = out->header;
 3656|  10.5k|    }
 3657|       |
 3658|  4.97k|    ofpact_finish_DEC_TTL(out, &ids);
 3659|       |
 3660|  4.97k|    return 0;
 3661|  5.26k|}
ofp-actions.c:decode_OFPAT_RAW12_SET_FIELD:
 2850|  10.1k|{
 2851|       |    return decode_ofpat_set_field(oasf, false, vl_mff_map, tlv_bitmap,
 2852|  10.1k|                                  ofpacts);
 2853|  10.1k|}
ofp-actions.c:decode_ofpat_set_field:
 2789|  22.4k|{
 2790|  22.4k|    struct ofpbuf b = ofpbuf_const_initializer(oasf, ntohs(oasf->len));
 2791|  22.4k|    ofpbuf_pull(&b, OBJECT_OFFSETOF(oasf, pad));
  ------------------
  |  |  108|  22.4k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 2792|       |
 2793|  22.4k|    union mf_value value, mask;
 2794|  22.4k|    const struct mf_field *field;
 2795|  22.4k|    enum ofperr error;
 2796|  22.4k|    error  = mf_vl_mff_nx_pull_entry(&b, vl_mff_map, &field, &value,
 2797|  22.4k|                                     may_mask ? &mask : NULL, tlv_bitmap);
  ------------------
  |  Branch (2797:38): [True: 12.2k, False: 10.1k]
  ------------------
 2798|  22.4k|    if (error) {
  ------------------
  |  Branch (2798:9): [True: 2.68k, False: 19.7k]
  ------------------
 2799|  2.68k|        return (error == OFPERR_OFPBMC_BAD_MASK
  ------------------
  |  Branch (2799:17): [True: 1.09k, False: 1.59k]
  ------------------
 2800|  2.68k|                ? OFPERR_OFPBAC_BAD_SET_MASK
 2801|  2.68k|                : error);
 2802|  2.68k|    }
 2803|       |
 2804|  19.7k|    if (!may_mask) {
  ------------------
  |  Branch (2804:9): [True: 8.18k, False: 11.5k]
  ------------------
 2805|  8.18k|        memset(&mask, 0xff, field->n_bytes);
 2806|  8.18k|    }
 2807|       |
 2808|  19.7k|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (2808:9): [True: 511, False: 19.2k]
  ------------------
 2809|    511|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2810|    511|    }
 2811|       |
 2812|       |    /* OpenFlow says specifically that one may not set OXM_OF_IN_PORT via
 2813|       |     * Set-Field. */
 2814|  19.2k|    if (field->id == MFF_IN_PORT_OXM) {
  ------------------
  |  Branch (2814:9): [True: 34, False: 19.1k]
  ------------------
 2815|     34|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2816|     34|    }
 2817|       |
 2818|       |    /* oxm_length is now validated to be compatible with mf_value. */
 2819|  19.1k|    if (!field->writable) {
  ------------------
  |  Branch (2819:9): [True: 195, False: 18.9k]
  ------------------
 2820|    195|        VLOG_WARN_RL(&rl, "destination field %s is not writable",
  ------------------
  |  |  224|    195|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    195|    do {                                                                \
  |  |  |  |  288|    195|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    195|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 195]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    195|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 195]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2821|    195|                     field->name);
 2822|    195|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2823|    195|    }
 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|  18.9k|    if (!mf_is_value_valid(field, &value)
  ------------------
  |  Branch (2828:9): [True: 94, False: 18.8k]
  ------------------
 2829|  18.8k|        || (field->id == MFF_VLAN_VID
  ------------------
  |  Branch (2829:13): [True: 696, False: 18.1k]
  ------------------
 2830|    696|            && (!(mask.be16 & htons(OFPVID12_PRESENT))
  ------------------
  |  Branch (2830:17): [True: 71, False: 625]
  ------------------
 2831|    724|                || !(value.be16 & htons(OFPVID12_PRESENT))))) {
  ------------------
  |  Branch (2831:20): [True: 559, False: 66]
  ------------------
 2832|    724|        struct ds ds = DS_EMPTY_INITIALIZER;
  ------------------
  |  |   46|    724|#define DS_EMPTY_INITIALIZER { NULL, 0, 0 }
  ------------------
 2833|    724|        mf_format(field, &value, NULL, NULL, &ds);
 2834|    724|        VLOG_WARN_RL(&rl, "Invalid value for set field %s: %s",
  ------------------
  |  |  224|    724|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    724|    do {                                                                \
  |  |  |  |  288|    724|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    724|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 724]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    724|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 724]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2835|    724|                     field->name, ds_cstr(&ds));
 2836|    724|        ds_destroy(&ds);
 2837|       |
 2838|    724|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2839|    724|    }
 2840|       |
 2841|  18.2k|    ofpact_put_set_field(ofpacts, field, &value, &mask);
 2842|  18.2k|    return 0;
 2843|  18.9k|}
ofp-actions.c:decode_OFPAT_RAW15_SET_FIELD:
 2860|  12.2k|{
 2861|       |    return decode_ofpat_set_field(oasf, true, vl_mff_map, tlv_bitmap, ofpacts);
 2862|  12.2k|}
ofp-actions.c:decode_NXAST_RAW_REG_LOAD:
 2869|  5.24k|{
 2870|  5.24k|    struct mf_subfield dst;
 2871|  5.24k|    enum ofperr error;
 2872|       |
 2873|  5.24k|    dst.ofs = nxm_decode_ofs(narl->ofs_nbits);
 2874|  5.24k|    dst.n_bits = nxm_decode_n_bits(narl->ofs_nbits);
 2875|  5.24k|    error = mf_vl_mff_mf_from_nxm_header(ntohl(narl->dst), vl_mff_map,
 2876|  5.24k|                                         &dst.field, tlv_bitmap);
 2877|  5.24k|    if (error) {
  ------------------
  |  Branch (2877:9): [True: 323, False: 4.92k]
  ------------------
 2878|    323|        return error;
 2879|    323|    }
 2880|       |
 2881|  4.92k|    error = mf_check_dst(&dst, NULL);
 2882|  4.92k|    if (error) {
  ------------------
  |  Branch (2882:9): [True: 337, False: 4.58k]
  ------------------
 2883|    337|        return error;
 2884|    337|    }
 2885|       |
 2886|       |    /* Reject 'narl' if a bit numbered 'n_bits' or higher is set to 1 in
 2887|       |     * narl->value. */
 2888|  4.58k|    if (dst.n_bits < 64 && ntohll(narl->value) >> dst.n_bits) {
  ------------------
  |  Branch (2888:9): [True: 3.84k, False: 743]
  |  Branch (2888:28): [True: 131, False: 3.71k]
  ------------------
 2889|    131|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 2890|    131|    }
 2891|       |
 2892|  4.45k|    struct ofpact_set_field *sf = ofpact_put_reg_load(out, dst.field, NULL,
 2893|  4.45k|                                                      NULL);
 2894|  4.45k|    bitwise_put(ntohll(narl->value),
 2895|  4.45k|                sf->value, dst.field->n_bytes, dst.ofs,
 2896|  4.45k|                dst.n_bits);
 2897|  4.45k|    bitwise_put(UINT64_MAX,
 2898|  4.45k|                ofpact_set_field_mask(sf), dst.field->n_bytes, dst.ofs,
  ------------------
  |  |  563|  4.45k|    ALIGNED_CAST(union mf_value *,                                          \
  |  |  ------------------
  |  |  |  |  434|  4.45k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  ------------------
  |  |  564|  4.45k|                 (uint8_t *)(SF)->value +                                   \
  |  |  565|  4.45k|                            ROUND_UP((SF)->field->n_bytes, OFPACT_ALIGNTO))
  ------------------
 2899|  4.45k|                dst.n_bits);
 2900|  4.45k|    return 0;
 2901|  4.58k|}
ofp-actions.c:decode_NXAST_RAW_REG_LOAD2:
 2908|  7.81k|{
 2909|  7.81k|    struct ofpbuf b = ofpbuf_const_initializer(eah, ntohs(eah->len));
 2910|  7.81k|    ofpbuf_pull(&b, OBJECT_OFFSETOF(eah, pad));
  ------------------
  |  |  108|  7.81k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 2911|       |
 2912|  7.81k|    union mf_value value, mask;
 2913|  7.81k|    const struct mf_field *field;
 2914|  7.81k|    enum ofperr error;
 2915|  7.81k|    error = mf_vl_mff_nx_pull_entry(&b, vl_mff_map, &field, &value, &mask,
 2916|  7.81k|                                    tlv_bitmap);
 2917|  7.81k|    if (error) {
  ------------------
  |  Branch (2917:9): [True: 207, False: 7.60k]
  ------------------
 2918|    207|        return error;
 2919|    207|    }
 2920|       |
 2921|  7.60k|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (2921:9): [True: 67, False: 7.54k]
  ------------------
 2922|     67|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2923|     67|    }
 2924|       |
 2925|  7.54k|    if (!field->writable) {
  ------------------
  |  Branch (2925:9): [True: 1.75k, False: 5.78k]
  ------------------
 2926|  1.75k|        VLOG_WARN_RL(&rl, "destination field %s is not writable", field->name);
  ------------------
  |  |  224|  1.75k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __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]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2927|  1.75k|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2928|  1.75k|    }
 2929|       |
 2930|       |    /* Put value and mask. */
 2931|  5.78k|    ofpact_put_reg_load2(out, field, &value, &mask);
 2932|  5.78k|    return 0;
 2933|  7.54k|}
ofp-actions.c:decode_OFPAT_RAW15_COPY_FIELD:
 2610|  3.71k|{
 2611|  3.71k|    return decode_copy_field__(oacf->src_offset, oacf->dst_offset,
 2612|  3.71k|                               oacf->n_bits, oacf, oacf->len,
 2613|       |                               OBJECT_OFFSETOF(oacf, pad2), vl_mff_map,
  ------------------
  |  |  108|  3.71k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 2614|  3.71k|                               tlv_bitmap, ofpacts);
 2615|  3.71k|}
ofp-actions.c:decode_copy_field__:
 2574|  3.78k|{
 2575|  3.78k|    struct ofpact_reg_move *move = ofpact_put_REG_MOVE(ofpacts);
 2576|  3.78k|    enum ofperr error;
 2577|       |
 2578|  3.78k|    move->ofpact.raw = ONFACT_RAW13_COPY_FIELD;
 2579|  3.78k|    move->src.ofs = ntohs(src_offset);
 2580|  3.78k|    move->src.n_bits = ntohs(n_bits);
 2581|  3.78k|    move->dst.ofs = ntohs(dst_offset);
 2582|  3.78k|    move->dst.n_bits = ntohs(n_bits);
 2583|       |
 2584|  3.78k|    struct ofpbuf b = ofpbuf_const_initializer(action, ntohs(action_len));
 2585|  3.78k|    ofpbuf_pull(&b, oxm_offset);
 2586|       |
 2587|  3.78k|    error = mf_vl_mff_nx_pull_header(&b, vl_mff_map, &move->src.field, NULL,
 2588|  3.78k|                                     tlv_bitmap);
 2589|  3.78k|    if (error) {
  ------------------
  |  Branch (2589:9): [True: 739, False: 3.04k]
  ------------------
 2590|    739|        return error;
 2591|    739|    }
 2592|  3.04k|    error = mf_vl_mff_nx_pull_header(&b, vl_mff_map, &move->dst.field, NULL,
 2593|  3.04k|                                     tlv_bitmap);
 2594|  3.04k|    if (error) {
  ------------------
  |  Branch (2594:9): [True: 366, False: 2.67k]
  ------------------
 2595|    366|        return error;
 2596|    366|    }
 2597|       |
 2598|  2.67k|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (2598:9): [True: 696, False: 1.98k]
  ------------------
 2599|    696|        return OFPERR_NXBRC_MUST_BE_ZERO;
 2600|    696|    }
 2601|       |
 2602|  1.98k|    return nxm_reg_move_check(move, NULL);
 2603|  2.67k|}
ofp-actions.c:decode_ONFACT_RAW13_COPY_FIELD:
 2622|     67|{
 2623|     67|    return decode_copy_field__(oacf->src_offset, oacf->dst_offset,
 2624|     67|                               oacf->n_bits, oacf, oacf->len,
 2625|       |                               OBJECT_OFFSETOF(oacf, pad3), vl_mff_map,
  ------------------
  |  |  108|     67|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 2626|     67|                               tlv_bitmap, ofpacts);
 2627|     67|}
ofp-actions.c:decode_NXAST_RAW_REG_MOVE:
 2634|  6.91k|{
 2635|  6.91k|    struct ofpact_reg_move *move = ofpact_put_REG_MOVE(ofpacts);
 2636|  6.91k|    enum ofperr error;
 2637|       |
 2638|  6.91k|    move->ofpact.raw = NXAST_RAW_REG_MOVE;
 2639|  6.91k|    move->src.ofs = ntohs(narm->src_ofs);
 2640|  6.91k|    move->src.n_bits = ntohs(narm->n_bits);
 2641|  6.91k|    move->dst.ofs = ntohs(narm->dst_ofs);
 2642|  6.91k|    move->dst.n_bits = ntohs(narm->n_bits);
 2643|       |
 2644|  6.91k|    struct ofpbuf b = ofpbuf_const_initializer(narm, ntohs(narm->len));
 2645|  6.91k|    ofpbuf_pull(&b, sizeof *narm);
 2646|       |
 2647|  6.91k|    error = mf_vl_mff_nx_pull_header(&b, vl_mff_map, &move->src.field, NULL,
 2648|  6.91k|                                     tlv_bitmap);
 2649|  6.91k|    if (error) {
  ------------------
  |  Branch (2649:9): [True: 622, False: 6.29k]
  ------------------
 2650|    622|        return error;
 2651|    622|    }
 2652|       |
 2653|  6.29k|    error = mf_vl_mff_nx_pull_header(&b, vl_mff_map, &move->dst.field, NULL,
 2654|  6.29k|                                     tlv_bitmap);
 2655|  6.29k|    if (error) {
  ------------------
  |  Branch (2655:9): [True: 296, False: 5.99k]
  ------------------
 2656|    296|        return error;
 2657|    296|    }
 2658|       |
 2659|  5.99k|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (2659:9): [True: 18, False: 5.97k]
  ------------------
 2660|     18|        return OFPERR_NXBRC_MUST_BE_ZERO;
 2661|     18|    }
 2662|       |
 2663|  5.97k|    return nxm_reg_move_check(move, NULL);
 2664|  5.99k|}
ofp-actions.c:decode_OFPAT_RAW15_METER:
 7565|  1.07k|{
 7566|  1.07k|    struct ofpact_meter *om = ofpact_put_METER(out);
 7567|  1.07k|    om->meter_id = meter_id;
 7568|       |    om->provider_meter_id = UINT32_MAX; /* No provider meter ID. */
 7569|  1.07k|    return 0;
 7570|  1.07k|}
ofp-actions.c:decode_NXAST_RAW_RESUBMIT:
 4919|    838|{
 4920|    838|    struct ofpact_resubmit *resubmit;
 4921|       |
 4922|    838|    resubmit = ofpact_put_RESUBMIT(out);
 4923|    838|    resubmit->ofpact.raw = NXAST_RAW_RESUBMIT;
 4924|    838|    resubmit->in_port = u16_to_ofp(port);
 4925|    838|    resubmit->table_id = 0xff;
 4926|    838|    return 0;
 4927|    838|}
ofp-actions.c:decode_NXAST_RAW_RESUBMIT_TABLE:
 4933|  3.80k|{
 4934|  3.80k|    struct ofpact_resubmit *resubmit;
 4935|       |
 4936|  3.80k|    if (nar->pad[0] || nar->pad[1] || nar->pad[2]) {
  ------------------
  |  Branch (4936:9): [True: 202, False: 3.60k]
  |  Branch (4936:24): [True: 114, False: 3.48k]
  |  Branch (4936:39): [True: 1.04k, False: 2.44k]
  ------------------
 4937|  1.35k|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 4938|  1.35k|    }
 4939|       |
 4940|  2.44k|    resubmit = ofpact_put_RESUBMIT(out);
 4941|  2.44k|    resubmit->ofpact.raw = NXAST_RAW_RESUBMIT_TABLE;
 4942|       |    resubmit->in_port = u16_to_ofp(ntohs(nar->in_port));
 4943|  2.44k|    resubmit->table_id = nar->table;
 4944|  2.44k|    return 0;
 4945|  3.80k|}
ofp-actions.c:decode_NXAST_RAW_RESUBMIT_TABLE_CT:
 4951|  3.37k|{
 4952|  3.37k|    enum ofperr error = decode_NXAST_RAW_RESUBMIT_TABLE(nar, ofp_version, out);
 4953|  3.37k|    if (error) {
  ------------------
  |  Branch (4953:9): [True: 1.04k, False: 2.33k]
  ------------------
 4954|  1.04k|        return error;
 4955|  1.04k|    }
 4956|  2.33k|    struct ofpact_resubmit *resubmit = out->header;
 4957|  2.33k|    resubmit->ofpact.raw = NXAST_RAW_RESUBMIT_TABLE_CT;
 4958|       |    resubmit->with_ct_orig = true;
 4959|  2.33k|    return 0;
 4960|  3.37k|}
ofp-actions.c:decode_NXAST_RAW_SET_TUNNEL:
 4111|  1.57k|{
 4112|  1.57k|    struct ofpact_tunnel *tunnel = ofpact_put_SET_TUNNEL(out);
 4113|  1.57k|    tunnel->ofpact.raw = NXAST_RAW_SET_TUNNEL;
 4114|  1.57k|    tunnel->tun_id = tun_id;
 4115|  1.57k|    return 0;
 4116|  1.57k|}
ofp-actions.c:decode_NXAST_RAW_SET_TUNNEL64:
 4122|    401|{
 4123|    401|    struct ofpact_tunnel *tunnel = ofpact_put_SET_TUNNEL(out);
 4124|    401|    tunnel->ofpact.raw = NXAST_RAW_SET_TUNNEL64;
 4125|    401|    tunnel->tun_id = tun_id;
 4126|    401|    return 0;
 4127|    401|}
ofp-actions.c:decode_NXAST_RAW_POP_QUEUE:
 4307|  3.29k|{
 4308|  3.29k|    ofpact_put_POP_QUEUE(out);
 4309|  3.29k|    return 0;
 4310|  3.29k|}
ofp-actions.c:decode_NXAST_RAW_NOTE:
 5899|  15.7k|{
 5900|  15.7k|    struct ofpact_note *note;
 5901|  15.7k|    unsigned int length;
 5902|       |
 5903|  15.7k|    length = ntohs(nan->len) - offsetof(struct nx_action_note, note);
 5904|  15.7k|    note = ofpact_put_NOTE(out);
 5905|  15.7k|    note->length = length;
 5906|  15.7k|    ofpbuf_put(out, nan->note, length);
 5907|  15.7k|    note = out->header;
 5908|  15.7k|    ofpact_finish_NOTE(out, &note);
 5909|       |
 5910|  15.7k|    return 0;
 5911|  15.7k|}
ofp-actions.c:decode_NXAST_RAW_MULTIPATH:
 5804|  3.35k|{
 5805|  3.35k|    uint32_t n_links = ntohs(nam->max_link) + 1;
 5806|  3.35k|    size_t min_n_bits = log_2_ceil(n_links);
 5807|  3.35k|    struct ofpact_multipath *mp;
 5808|  3.35k|    enum ofperr error;
 5809|       |
 5810|  3.35k|    mp = ofpact_put_MULTIPATH(out);
 5811|  3.35k|    mp->fields = ntohs(nam->fields);
 5812|  3.35k|    mp->basis = ntohs(nam->basis);
 5813|  3.35k|    mp->algorithm = ntohs(nam->algorithm);
 5814|  3.35k|    mp->max_link = ntohs(nam->max_link);
 5815|  3.35k|    mp->arg = ntohl(nam->arg);
 5816|  3.35k|    mp->dst.ofs = nxm_decode_ofs(nam->ofs_nbits);
 5817|  3.35k|    mp->dst.n_bits = nxm_decode_n_bits(nam->ofs_nbits);
 5818|  3.35k|    error = mf_vl_mff_mf_from_nxm_header(ntohl(nam->dst), vl_mff_map,
 5819|  3.35k|                                         &mp->dst.field, tlv_bitmap);
 5820|  3.35k|    if (error) {
  ------------------
  |  Branch (5820:9): [True: 158, False: 3.19k]
  ------------------
 5821|    158|        return error;
 5822|    158|    }
 5823|       |
 5824|  3.19k|    if (!flow_hash_fields_valid(mp->fields)) {
  ------------------
  |  Branch (5824:9): [True: 148, False: 3.04k]
  ------------------
 5825|    148|        VLOG_WARN_RL(&rl, "unsupported fields %d", (int) mp->fields);
  ------------------
  |  |  224|    148|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    148|    do {                                                                \
  |  |  |  |  288|    148|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    148|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 148]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    148|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 148]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5826|    148|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5827|  3.04k|    } else if (mp->algorithm != NX_MP_ALG_MODULO_N
  ------------------
  |  Branch (5827:16): [True: 2.79k, False: 248]
  ------------------
 5828|  2.79k|               && mp->algorithm != NX_MP_ALG_HASH_THRESHOLD
  ------------------
  |  Branch (5828:19): [True: 2.78k, False: 11]
  ------------------
 5829|  2.78k|               && mp->algorithm != NX_MP_ALG_HRW
  ------------------
  |  Branch (5829:19): [True: 2.57k, False: 212]
  ------------------
 5830|  2.57k|               && mp->algorithm != NX_MP_ALG_ITER_HASH) {
  ------------------
  |  Branch (5830:19): [True: 522, False: 2.05k]
  ------------------
 5831|    522|        VLOG_WARN_RL(&rl, "unsupported algorithm %d", (int) mp->algorithm);
  ------------------
  |  |  224|    522|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    522|    do {                                                                \
  |  |  |  |  288|    522|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    522|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 522]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    522|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 522]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5832|    522|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5833|  2.52k|    } else if (mp->dst.n_bits < min_n_bits) {
  ------------------
  |  Branch (5833:16): [True: 37, False: 2.48k]
  ------------------
 5834|     37|        VLOG_WARN_RL(&rl, "multipath action requires at least %"PRIuSIZE" bits for "
  ------------------
  |  |  224|     37|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     37|    do {                                                                \
  |  |  |  |  288|     37|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     37|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 37]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     37|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 37]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5835|     37|                     "%"PRIu32" links", min_n_bits, n_links);
 5836|     37|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5837|     37|    }
 5838|       |
 5839|  2.48k|    return multipath_check(mp, NULL);
 5840|  3.19k|}
ofp-actions.c:decode_NXAST_RAW_BUNDLE:
 1486|  2.53k|{
 1487|  2.53k|    return decode_bundle(false, nab, NULL, NULL, out);
 1488|  2.53k|}
ofp-actions.c:decode_bundle:
 1403|  6.42k|{
 1404|  6.42k|    static struct vlog_rate_limit rll = VLOG_RATE_LIMIT_INIT(1, 5);
  ------------------
  |  |  110|  6.42k|        {                                                                 \
  |  |  111|  6.42k|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|  25.6k|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [True: 0, Folded]
  |  |  |  |  |  Branch (37:48): [Folded, False: 6.42k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  6.42k|            0,                              /* first_dropped */           \
  |  |  113|  6.42k|            0,                              /* last_dropped */            \
  |  |  114|  6.42k|            0,                              /* n_dropped */               \
  |  |  115|  6.42k|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  6.42k|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  6.42k|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  6.42k|        }
  ------------------
 1405|  6.42k|    struct ofpact_bundle *bundle;
 1406|  6.42k|    uint32_t member_type;
 1407|  6.42k|    size_t members_size, i;
 1408|  6.42k|    enum ofperr error;
 1409|       |
 1410|  6.42k|    bundle = ofpact_put_BUNDLE(ofpacts);
 1411|       |
 1412|  6.42k|    bundle->n_members = ntohs(nab->n_members);
 1413|  6.42k|    bundle->basis = ntohs(nab->basis);
 1414|  6.42k|    bundle->fields = ntohs(nab->fields);
 1415|  6.42k|    bundle->algorithm = ntohs(nab->algorithm);
 1416|  6.42k|    member_type = ntohl(nab->member_type);
 1417|  6.42k|    members_size = ntohs(nab->len) - sizeof *nab;
 1418|       |
 1419|  6.42k|    error = OFPERR_OFPBAC_BAD_ARGUMENT;
 1420|  6.42k|    if (!flow_hash_fields_valid(bundle->fields)) {
  ------------------
  |  Branch (1420:9): [True: 3.26k, False: 3.15k]
  ------------------
 1421|  3.26k|        VLOG_WARN_RL(&rll, "unsupported fields %d", (int) bundle->fields);
  ------------------
  |  |  224|  3.26k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  3.26k|    do {                                                                \
  |  |  |  |  288|  3.26k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  3.26k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 3.26k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  3.26k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 3.26k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1422|  3.26k|    } else if (bundle->n_members > BUNDLE_MAX_MEMBERS) {
  ------------------
  |  |   43|  3.15k|#define BUNDLE_MAX_MEMBERS 2048
  ------------------
  |  Branch (1422:16): [True: 491, False: 2.66k]
  ------------------
 1423|    491|        VLOG_WARN_RL(&rll, "too many members");
  ------------------
  |  |  224|    491|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    491|    do {                                                                \
  |  |  |  |  288|    491|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    491|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 491]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    491|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 491]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1424|  2.66k|    } else if (bundle->algorithm != NX_BD_ALG_HRW
  ------------------
  |  Branch (1424:16): [True: 1.39k, False: 1.27k]
  ------------------
 1425|  1.39k|               && bundle->algorithm != NX_BD_ALG_ACTIVE_BACKUP) {
  ------------------
  |  Branch (1425:19): [True: 731, False: 659]
  ------------------
 1426|    731|        VLOG_WARN_RL(&rll, "unsupported algorithm %d", (int) bundle->algorithm);
  ------------------
  |  |  224|    731|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    731|    do {                                                                \
  |  |  |  |  288|    731|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    731|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 731]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    731|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 731]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1427|  1.93k|    } else if (member_type != mf_nxm_header(MFF_IN_PORT)) {
  ------------------
  |  Branch (1427:16): [True: 884, False: 1.05k]
  ------------------
 1428|    884|        VLOG_WARN_RL(&rll, "unsupported member type %"PRIu32, member_type);
  ------------------
  |  |  224|    884|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    884|    do {                                                                \
  |  |  |  |  288|    884|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    884|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 884]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    884|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 884]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1429|  1.05k|    } else {
 1430|  1.05k|        error = 0;
 1431|  1.05k|    }
 1432|       |
 1433|  6.42k|    if (!is_all_zeros(nab->zero, sizeof nab->zero)) {
  ------------------
  |  Branch (1433:9): [True: 4.08k, False: 2.33k]
  ------------------
 1434|  4.08k|        VLOG_WARN_RL(&rll, "reserved field is nonzero");
  ------------------
  |  |  224|  4.08k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  4.08k|    do {                                                                \
  |  |  |  |  288|  4.08k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  4.08k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 4.08k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  4.08k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 4.08k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1435|  4.08k|        error = OFPERR_OFPBAC_BAD_ARGUMENT;
 1436|  4.08k|    }
 1437|       |
 1438|  6.42k|    if (load) {
  ------------------
  |  Branch (1438:9): [True: 3.88k, False: 2.53k]
  ------------------
 1439|  3.88k|        bundle->dst.ofs = nxm_decode_ofs(nab->ofs_nbits);
 1440|  3.88k|        bundle->dst.n_bits = nxm_decode_n_bits(nab->ofs_nbits);
 1441|  3.88k|        error = mf_vl_mff_mf_from_nxm_header(ntohl(nab->dst), vl_mff_map,
 1442|  3.88k|                                             &bundle->dst.field, tlv_bitmap);
 1443|  3.88k|        if (error) {
  ------------------
  |  Branch (1443:13): [True: 526, False: 3.36k]
  ------------------
 1444|    526|            return error;
 1445|    526|        }
 1446|       |
 1447|  3.36k|        if (bundle->dst.n_bits < 16) {
  ------------------
  |  Branch (1447:13): [True: 903, False: 2.45k]
  ------------------
 1448|    903|            VLOG_WARN_RL(&rll, "bundle_load action requires at least 16 bit "
  ------------------
  |  |  224|    903|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    903|    do {                                                                \
  |  |  |  |  288|    903|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    903|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 903]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    903|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 903]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1449|    903|                         "destination.");
 1450|    903|            error = OFPERR_OFPBAC_BAD_ARGUMENT;
 1451|    903|        }
 1452|  3.36k|    } else {
 1453|  2.53k|        if (nab->ofs_nbits || nab->dst) {
  ------------------
  |  Branch (1453:13): [True: 1.11k, False: 1.41k]
  |  Branch (1453:31): [True: 243, False: 1.17k]
  ------------------
 1454|  1.35k|            VLOG_WARN_RL(&rll, "bundle action has nonzero reserved fields");
  ------------------
  |  |  224|  1.35k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.35k|    do {                                                                \
  |  |  |  |  288|  1.35k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.35k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.35k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.35k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.35k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1455|  1.35k|            error = OFPERR_OFPBAC_BAD_ARGUMENT;
 1456|  1.35k|        }
 1457|  2.53k|    }
 1458|       |
 1459|  5.89k|    if (members_size < bundle->n_members * sizeof(ovs_be16)) {
  ------------------
  |  Branch (1459:9): [True: 1.32k, False: 4.57k]
  ------------------
 1460|  1.32k|        VLOG_WARN_RL(&rll, "Nicira action %s only has %"PRIuSIZE" bytes "
  ------------------
  |  |  224|  1.32k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __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__);    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (290:56): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.32k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.32k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1461|  1.32k|                     "allocated for members.  %"PRIuSIZE" bytes are "
 1462|  1.32k|                     "required for %u members.",
 1463|  1.32k|                     load ? "bundle_load" : "bundle", members_size,
 1464|  1.32k|                     bundle->n_members * sizeof(ovs_be16), bundle->n_members);
 1465|  1.32k|        error = OFPERR_OFPBAC_BAD_LEN;
 1466|  4.57k|    } else {
 1467|  21.5k|        for (i = 0; i < bundle->n_members; i++) {
  ------------------
  |  Branch (1467:21): [True: 16.9k, False: 4.57k]
  ------------------
 1468|  16.9k|            ofp_port_t ofp_port
 1469|  16.9k|                = u16_to_ofp(ntohs(((ovs_be16 *)(nab + 1))[i]));
 1470|  16.9k|            ofpbuf_put(ofpacts, &ofp_port, sizeof ofp_port);
 1471|  16.9k|            bundle = ofpacts->header;
 1472|  16.9k|        }
 1473|  4.57k|    }
 1474|       |
 1475|  5.89k|    ofpact_finish_BUNDLE(ofpacts, &bundle);
 1476|  5.89k|    if (!error) {
  ------------------
  |  Branch (1476:9): [True: 3.40k, False: 2.49k]
  ------------------
 1477|  3.40k|        error = bundle_check(bundle, OFPP_MAX, NULL);
  ------------------
  |  |   33|  3.40k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|  3.40k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
 1478|  3.40k|    }
 1479|  5.89k|    return error;
 1480|  6.42k|}
ofp-actions.c:decode_NXAST_RAW_BUNDLE_LOAD:
 1495|  3.88k|{
 1496|       |    return decode_bundle(true, nab, vl_mff_map, tlv_bitmap, out);
 1497|  3.88k|}
ofp-actions.c:decode_NXAST_RAW_OUTPUT_REG:
 1226|  1.20k|{
 1227|  1.20k|    struct ofpact_output_reg *output_reg;
 1228|  1.20k|    enum ofperr error;
 1229|       |
 1230|  1.20k|    if (!is_all_zeros(naor->zero, sizeof naor->zero)) {
  ------------------
  |  Branch (1230:9): [True: 819, False: 388]
  ------------------
 1231|    819|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 1232|    819|    }
 1233|       |
 1234|    388|    output_reg = ofpact_put_OUTPUT_REG(out);
 1235|    388|    output_reg->ofpact.raw = NXAST_RAW_OUTPUT_REG;
 1236|    388|    output_reg->src.ofs = nxm_decode_ofs(naor->ofs_nbits);
 1237|    388|    output_reg->src.n_bits = nxm_decode_n_bits(naor->ofs_nbits);
 1238|    388|    output_reg->max_len = ntohs(naor->max_len);
 1239|    388|    error = mf_vl_mff_mf_from_nxm_header(ntohl(naor->src), vl_mff_map,
 1240|    388|                                         &output_reg->src.field, tlv_bitmap);
 1241|    388|    if (error) {
  ------------------
  |  Branch (1241:9): [True: 146, False: 242]
  ------------------
 1242|    146|        return error;
 1243|    146|    }
 1244|       |
 1245|    242|    return mf_check_src(&output_reg->src, NULL);
 1246|    388|}
ofp-actions.c:decode_NXAST_RAW_OUTPUT_REG2:
 1253|    640|{
 1254|    640|    struct ofpact_output_reg *output_reg;
 1255|    640|    enum ofperr error;
 1256|       |
 1257|    640|    output_reg = ofpact_put_OUTPUT_REG(out);
 1258|    640|    output_reg->ofpact.raw = NXAST_RAW_OUTPUT_REG2;
 1259|    640|    output_reg->src.ofs = nxm_decode_ofs(naor->ofs_nbits);
 1260|    640|    output_reg->src.n_bits = nxm_decode_n_bits(naor->ofs_nbits);
 1261|    640|    output_reg->max_len = ntohs(naor->max_len);
 1262|       |
 1263|    640|    struct ofpbuf b = ofpbuf_const_initializer(naor, ntohs(naor->len));
 1264|    640|    ofpbuf_pull(&b, OBJECT_OFFSETOF(naor, pad));
  ------------------
  |  |  108|    640|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 1265|       |
 1266|    640|    error = mf_vl_mff_nx_pull_header(&b, vl_mff_map, &output_reg->src.field,
 1267|    640|                                     NULL, tlv_bitmap);
 1268|    640|    if (error) {
  ------------------
  |  Branch (1268:9): [True: 188, False: 452]
  ------------------
 1269|    188|        return error;
 1270|    188|    }
 1271|       |
 1272|    452|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (1272:9): [True: 257, False: 195]
  ------------------
 1273|    257|        return OFPERR_NXBRC_MUST_BE_ZERO;
 1274|    257|    }
 1275|       |
 1276|    195|    return mf_check_src(&output_reg->src, NULL);
 1277|    452|}
ofp-actions.c:decode_NXAST_RAW_LEARN:
 5476|  30.8k|{
 5477|  30.8k|    struct ofpact_learn *learn;
 5478|  30.8k|    enum ofperr error;
 5479|       |
 5480|  30.8k|    learn = ofpact_put_LEARN(ofpacts);
 5481|       |
 5482|  30.8k|    error = decode_LEARN_common(nal, NXAST_RAW_LEARN, learn);
 5483|  30.8k|    if (error) {
  ------------------
  |  Branch (5483:9): [True: 1.52k, False: 29.3k]
  ------------------
 5484|  1.52k|        return error;
 5485|  1.52k|    }
 5486|       |
 5487|  29.3k|    if (learn->flags & ~(NX_LEARN_F_SEND_FLOW_REM |
  ------------------
  |  Branch (5487:9): [True: 584, False: 28.7k]
  ------------------
 5488|  29.3k|                         NX_LEARN_F_DELETE_LEARNED)) {
 5489|    584|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5490|    584|    }
 5491|       |
 5492|  28.7k|    return decode_LEARN_specs(nal + 1, (char *) nal + ntohs(nal->len),
 5493|  28.7k|                              vl_mff_map, tlv_bitmap, ofpacts);
 5494|  29.3k|}
ofp-actions.c:decode_LEARN_common:
 5365|  33.0k|{
 5366|  33.0k|    if (nal->pad) {
  ------------------
  |  Branch (5366:9): [True: 2.90k, False: 30.1k]
  ------------------
 5367|  2.90k|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5368|  2.90k|    }
 5369|       |
 5370|  30.1k|    learn->ofpact.raw = raw;
 5371|  30.1k|    learn->idle_timeout = ntohs(nal->idle_timeout);
 5372|  30.1k|    learn->hard_timeout = ntohs(nal->hard_timeout);
 5373|  30.1k|    learn->priority = ntohs(nal->priority);
 5374|  30.1k|    learn->cookie = nal->cookie;
 5375|  30.1k|    learn->table_id = nal->table_id;
 5376|  30.1k|    learn->fin_idle_timeout = ntohs(nal->fin_idle_timeout);
 5377|  30.1k|    learn->fin_hard_timeout = ntohs(nal->fin_hard_timeout);
 5378|  30.1k|    learn->flags = ntohs(nal->flags);
 5379|       |
 5380|  30.1k|    if (learn->table_id == 0xff) {
  ------------------
  |  Branch (5380:9): [True: 279, False: 29.8k]
  ------------------
 5381|    279|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5382|    279|    }
 5383|       |
 5384|  29.8k|    return 0;
 5385|  30.1k|}
ofp-actions.c:decode_LEARN_specs:
 5391|  28.9k|{
 5392|  28.9k|    struct ofpact_learn *learn = ofpacts->header;
 5393|       |
 5394|  81.7k|    while (p != end) {
  ------------------
  |  Branch (5394:12): [True: 71.3k, False: 10.3k]
  ------------------
 5395|  71.3k|        struct ofpact_learn_spec *spec;
 5396|  71.3k|        uint16_t header = ntohs(get_be16(&p));
 5397|       |
 5398|  71.3k|        if (!header) {
  ------------------
  |  Branch (5398:13): [True: 15.3k, False: 56.0k]
  ------------------
 5399|  15.3k|            break;
 5400|  15.3k|        }
 5401|       |
 5402|  56.0k|        spec = ofpbuf_put_zeros(ofpacts, sizeof *spec);
 5403|  56.0k|        learn = ofpacts->header;
 5404|       |
 5405|  56.0k|        spec->src_type = header & NX_LEARN_SRC_MASK;
  ------------------
  |  |  823|  56.0k|#define NX_LEARN_SRC_MASK      (1 << 13)
  ------------------
 5406|  56.0k|        spec->dst_type = header & NX_LEARN_DST_MASK;
  ------------------
  |  |  829|  56.0k|#define NX_LEARN_DST_MASK      (3 << 11)
  ------------------
 5407|  56.0k|        spec->n_bits = header & NX_LEARN_N_BITS_MASK;
  ------------------
  |  |  819|  56.0k|#define NX_LEARN_N_BITS_MASK    0x3ff
  ------------------
 5408|       |
 5409|       |        /* Check for valid src and dst type combination. */
 5410|  56.0k|        if (spec->dst_type == NX_LEARN_DST_MATCH ||
  ------------------
  |  |  825|   112k|#define NX_LEARN_DST_MATCH     (0 << 11) /* Add match criterion. */
  ------------------
  |  Branch (5410:13): [True: 49.9k, False: 6.10k]
  ------------------
 5411|  6.10k|            spec->dst_type == NX_LEARN_DST_LOAD ||
  ------------------
  |  |  826|  62.1k|#define NX_LEARN_DST_LOAD      (1 << 11) /* Add NXAST_REG_LOAD action. */
  ------------------
  |  Branch (5411:13): [True: 2.25k, False: 3.84k]
  ------------------
 5412|  3.84k|            (spec->dst_type == NX_LEARN_DST_OUTPUT &&
  ------------------
  |  |  827|  7.69k|#define NX_LEARN_DST_OUTPUT    (2 << 11) /* Add OFPAT_OUTPUT action. */
  ------------------
  |  Branch (5412:14): [True: 3.72k, False: 117]
  ------------------
 5413|  55.8k|             spec->src_type == NX_LEARN_SRC_FIELD)) {
  ------------------
  |  |  821|  3.72k|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
  |  Branch (5413:14): [True: 3.59k, False: 137]
  ------------------
 5414|       |            /* OK. */
 5415|  55.8k|        } else {
 5416|    254|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 5417|    254|        }
 5418|       |
 5419|       |        /* Check that the arguments don't overrun the end of the action. */
 5420|  55.8k|        if ((char *) end - (char *) p < learn_min_len(header)) {
  ------------------
  |  Branch (5420:13): [True: 684, False: 55.1k]
  ------------------
 5421|    684|            return OFPERR_OFPBAC_BAD_LEN;
 5422|    684|        }
 5423|       |
 5424|       |        /* Get the source. */
 5425|  55.1k|        const uint8_t *imm = NULL;
 5426|  55.1k|        unsigned int imm_bytes = 0;
 5427|  55.1k|        enum ofperr error;
 5428|  55.1k|        if (spec->src_type == NX_LEARN_SRC_FIELD) {
  ------------------
  |  |  821|  55.1k|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
  |  Branch (5428:13): [True: 4.53k, False: 50.6k]
  ------------------
 5429|  4.53k|            error = get_subfield(spec->n_bits, &p, &spec->src, vl_mff_map,
 5430|  4.53k|                                 tlv_bitmap);
 5431|  4.53k|            if (error) {
  ------------------
  |  Branch (5431:17): [True: 656, False: 3.87k]
  ------------------
 5432|    656|                return error;
 5433|    656|            }
 5434|  50.6k|        } else {
 5435|  50.6k|            int p_bytes = 2 * DIV_ROUND_UP(spec->n_bits, 16);
  ------------------
  |  |  300|  50.6k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  ------------------
 5436|  50.6k|            p = (const uint8_t *) p + p_bytes;
 5437|       |
 5438|  50.6k|            imm_bytes = DIV_ROUND_UP(spec->n_bits, 8);
  ------------------
  |  |  300|  50.6k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  ------------------
 5439|  50.6k|            imm = (const uint8_t *) p - imm_bytes;
 5440|  50.6k|        }
 5441|       |
 5442|       |        /* Get the destination. */
 5443|  54.4k|        if (spec->dst_type == NX_LEARN_DST_MATCH ||
  ------------------
  |  |  825|   108k|#define NX_LEARN_DST_MATCH     (0 << 11) /* Add match criterion. */
  ------------------
  |  Branch (5443:13): [True: 48.9k, False: 5.51k]
  ------------------
 5444|  51.0k|            spec->dst_type == NX_LEARN_DST_LOAD) {
  ------------------
  |  |  826|  5.51k|#define NX_LEARN_DST_LOAD      (1 << 11) /* Add NXAST_REG_LOAD action. */
  ------------------
  |  Branch (5444:13): [True: 2.12k, False: 3.38k]
  ------------------
 5445|  51.0k|            error = get_subfield(spec->n_bits, &p, &spec->dst, vl_mff_map,
 5446|  51.0k|                                 tlv_bitmap);
 5447|  51.0k|            if (error) {
  ------------------
  |  Branch (5447:17): [True: 1.69k, False: 49.4k]
  ------------------
 5448|  1.69k|                return error;
 5449|  1.69k|            }
 5450|  51.0k|        }
 5451|       |
 5452|  52.7k|        if (imm) {
  ------------------
  |  Branch (5452:13): [True: 49.0k, False: 3.76k]
  ------------------
 5453|  49.0k|            uint8_t *src_imm = ofpbuf_put_zeros(ofpacts,
 5454|  49.0k|                                                OFPACT_ALIGN(imm_bytes));
  ------------------
  |  |  205|  49.0k|#define OFPACT_ALIGN(SIZE) ROUND_UP(SIZE, OFPACT_ALIGNTO)
  |  |  ------------------
  |  |  |  |  303|  49.0k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|  49.0k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5455|  49.0k|            memcpy(src_imm, imm, imm_bytes);
 5456|       |
 5457|  49.0k|            learn = ofpacts->header;
 5458|  49.0k|        }
 5459|  52.7k|    }
 5460|  25.7k|    ofpact_finish_LEARN(ofpacts, &learn);
 5461|       |
 5462|  25.7k|    if (!is_all_zeros(p, (char *) end - (char *) p)) {
  ------------------
  |  Branch (5462:9): [True: 513, False: 25.1k]
  ------------------
 5463|    513|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5464|    513|    }
 5465|       |
 5466|  25.1k|    return 0;
 5467|  25.7k|}
ofp-actions.c:get_be16:
 5309|   127k|{
 5310|   127k|    const ovs_be16 *p = *pp;
 5311|   127k|    ovs_be16 value = *p;
 5312|   127k|    *pp = p + 1;
 5313|   127k|    return value;
 5314|   127k|}
ofp-actions.c:learn_min_len:
 5340|  55.8k|{
 5341|  55.8k|    int n_bits = header & NX_LEARN_N_BITS_MASK;
  ------------------
  |  |  819|  55.8k|#define NX_LEARN_N_BITS_MASK    0x3ff
  ------------------
 5342|  55.8k|    int src_type = header & NX_LEARN_SRC_MASK;
  ------------------
  |  |  823|  55.8k|#define NX_LEARN_SRC_MASK      (1 << 13)
  ------------------
 5343|  55.8k|    int dst_type = header & NX_LEARN_DST_MASK;
  ------------------
  |  |  829|  55.8k|#define NX_LEARN_DST_MASK      (3 << 11)
  ------------------
 5344|  55.8k|    unsigned int min_len;
 5345|       |
 5346|  55.8k|    min_len = 0;
 5347|  55.8k|    if (src_type == NX_LEARN_SRC_FIELD) {
  ------------------
  |  |  821|  55.8k|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
  |  Branch (5347:9): [True: 5.05k, False: 50.7k]
  ------------------
 5348|  5.05k|        min_len += sizeof(ovs_be32); /* src_field */
 5349|  5.05k|        min_len += sizeof(ovs_be16); /* src_ofs */
 5350|  50.7k|    } else {
 5351|  50.7k|        min_len += 2 * DIV_ROUND_UP(n_bits, 16);
  ------------------
  |  |  300|  50.7k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  ------------------
 5352|  50.7k|    }
 5353|  55.8k|    if (dst_type == NX_LEARN_DST_MATCH ||
  ------------------
  |  |  825|   111k|#define NX_LEARN_DST_MATCH     (0 << 11) /* Add match criterion. */
  ------------------
  |  Branch (5353:9): [True: 49.9k, False: 5.85k]
  ------------------
 5354|  52.2k|        dst_type == NX_LEARN_DST_LOAD) {
  ------------------
  |  |  826|  5.85k|#define NX_LEARN_DST_LOAD      (1 << 11) /* Add NXAST_REG_LOAD action. */
  ------------------
  |  Branch (5354:9): [True: 2.25k, False: 3.59k]
  ------------------
 5355|  52.2k|        min_len += sizeof(ovs_be32); /* dst_field */
 5356|  52.2k|        min_len += sizeof(ovs_be16); /* dst_ofs */
 5357|  52.2k|    }
 5358|  55.8k|    return min_len;
 5359|  55.8k|}
ofp-actions.c:get_subfield:
 5328|  55.6k|{
 5329|  55.6k|    enum ofperr error;
 5330|       |
 5331|  55.6k|    error = mf_vl_mff_mf_from_nxm_header(ntohl(get_be32(p)), vl_mff_map,
 5332|  55.6k|                                         &sf->field, tlv_bitmap);
 5333|       |    sf->ofs = ntohs(get_be16(p));
 5334|  55.6k|    sf->n_bits = n_bits;
 5335|  55.6k|    return error;
 5336|  55.6k|}
ofp-actions.c:get_be32:
 5318|  55.6k|{
 5319|  55.6k|    const ovs_be32 *p = *pp;
 5320|  55.6k|    ovs_be32 value = get_unaligned_be32(p);
 5321|  55.6k|    *pp = p + 1;
 5322|  55.6k|    return value;
 5323|  55.6k|}
ofp-actions.c:decode_NXAST_RAW_LEARN2:
 5503|  2.86k|{
 5504|  2.86k|    struct ofpbuf b = ofpbuf_const_initializer(nal, ntohs(nal->up.len));
 5505|  2.86k|    struct ofpact_learn *learn;
 5506|  2.86k|    enum ofperr error;
 5507|       |
 5508|  2.86k|    if (nal->pad2) {
  ------------------
  |  Branch (5508:9): [True: 686, False: 2.17k]
  ------------------
 5509|    686|        return OFPERR_NXBAC_MUST_BE_ZERO;
 5510|    686|    }
 5511|       |
 5512|  2.17k|    learn = ofpact_put_LEARN(ofpacts);
 5513|  2.17k|    error = decode_LEARN_common(&nal->up, NXAST_RAW_LEARN2, learn);
 5514|  2.17k|    if (error) {
  ------------------
  |  Branch (5514:9): [True: 1.65k, False: 522]
  ------------------
 5515|  1.65k|        return error;
 5516|  1.65k|    }
 5517|       |
 5518|    522|    learn->limit = ntohl(nal->limit);
 5519|       |
 5520|    522|    if (learn->flags & ~(NX_LEARN_F_SEND_FLOW_REM |
  ------------------
  |  Branch (5520:9): [True: 27, False: 495]
  ------------------
 5521|    522|                         NX_LEARN_F_DELETE_LEARNED |
 5522|    522|                         NX_LEARN_F_WRITE_RESULT)) {
 5523|     27|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5524|     27|    }
 5525|       |
 5526|    495|    ofpbuf_pull(&b, sizeof *nal);
 5527|       |
 5528|    495|    if (learn->flags & NX_LEARN_F_WRITE_RESULT) {
  ------------------
  |  Branch (5528:9): [True: 303, False: 192]
  ------------------
 5529|    303|        error = nx_pull_header(&b, vl_mff_map, &learn->result_dst.field, NULL);
 5530|    303|        if (error) {
  ------------------
  |  Branch (5530:13): [True: 130, False: 173]
  ------------------
 5531|    130|            return error;
 5532|    130|        }
 5533|    173|        if (!learn->result_dst.field->writable) {
  ------------------
  |  Branch (5533:13): [True: 105, False: 68]
  ------------------
 5534|    105|            return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 5535|    105|        }
 5536|     68|        learn->result_dst.ofs = ntohs(nal->result_dst_ofs);
 5537|     68|        learn->result_dst.n_bits = 1;
 5538|    192|    } else if (nal->result_dst_ofs) {
  ------------------
  |  Branch (5538:16): [True: 22, False: 170]
  ------------------
 5539|     22|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5540|     22|    }
 5541|       |
 5542|    238|    return decode_LEARN_specs(b.data, (char *) nal + ntohs(nal->up.len),
 5543|    238|                              vl_mff_map, tlv_bitmap, ofpacts);
 5544|    495|}
ofp-actions.c:decode_NXAST_RAW_EXIT:
 5967|  3.00k|{
 5968|  3.00k|    ofpact_put_EXIT(out);
 5969|  3.00k|    return 0;
 5970|  3.00k|}
ofp-actions.c:decode_NXAST_RAW_FIN_TIMEOUT:
 4379|  1.12k|{
 4380|  1.12k|    struct ofpact_fin_timeout *oft;
 4381|       |
 4382|  1.12k|    oft = ofpact_put_FIN_TIMEOUT(out);
 4383|  1.12k|    oft->fin_idle_timeout = ntohs(naft->fin_idle_timeout);
 4384|       |    oft->fin_hard_timeout = ntohs(naft->fin_hard_timeout);
 4385|  1.12k|    return 0;
 4386|  1.12k|}
ofp-actions.c:decode_NXAST_RAW_CONTROLLER:
  804|  3.28k|{
  805|  3.28k|    struct ofpact_controller *oc;
  806|       |
  807|  3.28k|    oc = ofpact_put_CONTROLLER(out);
  808|  3.28k|    oc->ofpact.raw = NXAST_RAW_CONTROLLER;
  809|  3.28k|    oc->max_len = ntohs(nac->max_len);
  810|  3.28k|    oc->controller_id = ntohs(nac->controller_id);
  811|  3.28k|    oc->reason = nac->reason;
  812|  3.28k|    oc->meter_id = NX_CTLR_NO_METER;
  ------------------
  |  |  307|  3.28k|#define NX_CTLR_NO_METER 0
  ------------------
  813|  3.28k|    ofpact_finish_CONTROLLER(out, &oc);
  814|       |
  815|  3.28k|    return 0;
  816|  3.28k|}
ofp-actions.c:decode_NXAST_RAW_CONTROLLER2:
  822|  1.99k|{
  823|  1.99k|    if (!is_all_zeros(eah->pad, sizeof eah->pad)) {
  ------------------
  |  Branch (823:9): [True: 163, False: 1.83k]
  ------------------
  824|    163|        return OFPERR_NXBRC_MUST_BE_ZERO;
  825|    163|    }
  826|       |
  827|  1.83k|    size_t start_ofs = out->size;
  828|  1.83k|    struct ofpact_controller *oc = ofpact_put_CONTROLLER(out);
  829|  1.83k|    oc->ofpact.raw = NXAST_RAW_CONTROLLER2;
  830|  1.83k|    oc->max_len = UINT16_MAX;
  831|  1.83k|    oc->reason = OFPR_ACTION;
  832|  1.83k|    oc->meter_id = NX_CTLR_NO_METER;
  ------------------
  |  |  307|  1.83k|#define NX_CTLR_NO_METER 0
  ------------------
  833|       |
  834|  1.83k|    struct ofpbuf properties;
  835|  1.83k|    ofpbuf_use_const(&properties, eah, ntohs(eah->len));
  836|  1.83k|    ofpbuf_pull(&properties, sizeof *eah);
  837|       |
  838|  4.09k|    while (properties.size > 0) {
  ------------------
  |  Branch (838:12): [True: 3.07k, False: 1.02k]
  ------------------
  839|  3.07k|        struct ofpbuf payload;
  840|  3.07k|        uint64_t type;
  841|       |
  842|  3.07k|        enum ofperr error = ofpprop_pull(&properties, &payload, &type);
  843|  3.07k|        if (error) {
  ------------------
  |  Branch (843:13): [True: 234, False: 2.83k]
  ------------------
  844|    234|            return error;
  845|    234|        }
  846|       |
  847|  2.83k|        switch (type) {
  848|    474|        case NXAC2PT_MAX_LEN:
  ------------------
  |  Branch (848:9): [True: 474, False: 2.36k]
  ------------------
  849|    474|            error = ofpprop_parse_u16(&payload, &oc->max_len);
  850|    474|            break;
  851|       |
  852|    140|        case NXAC2PT_CONTROLLER_ID:
  ------------------
  |  Branch (852:9): [True: 140, False: 2.69k]
  ------------------
  853|    140|            error = ofpprop_parse_u16(&payload, &oc->controller_id);
  854|    140|            break;
  855|       |
  856|  1.06k|        case NXAC2PT_REASON: {
  ------------------
  |  Branch (856:9): [True: 1.06k, False: 1.77k]
  ------------------
  857|  1.06k|            uint8_t u8;
  858|  1.06k|            error = ofpprop_parse_u8(&payload, &u8);
  859|  1.06k|            if (!error) {
  ------------------
  |  Branch (859:17): [True: 809, False: 259]
  ------------------
  860|    809|                oc->reason = u8;
  861|    809|            }
  862|  1.06k|            break;
  863|      0|        }
  864|       |
  865|     99|        case NXAC2PT_USERDATA:
  ------------------
  |  Branch (865:9): [True: 99, False: 2.73k]
  ------------------
  866|     99|            out->size = start_ofs + sizeof(struct ofpact_controller);
  867|     99|            ofpbuf_put(out, payload.msg, ofpbuf_msgsize(&payload));
  868|     99|            oc = ofpbuf_at_assert(out, start_ofs, sizeof *oc);
  869|     99|            oc->userdata_len = ofpbuf_msgsize(&payload);
  870|     99|            break;
  871|       |
  872|    540|        case NXAC2PT_PAUSE:
  ------------------
  |  Branch (872:9): [True: 540, False: 2.29k]
  ------------------
  873|    540|            oc->pause = true;
  874|    540|            break;
  875|       |
  876|    275|        case NXAC2PT_METER_ID:
  ------------------
  |  Branch (876:9): [True: 275, False: 2.56k]
  ------------------
  877|    275|            error = ofpprop_parse_u32(&payload, &oc->meter_id);
  878|    275|            break;
  879|       |
  880|    242|        default:
  ------------------
  |  Branch (880:9): [True: 242, False: 2.59k]
  ------------------
  881|    242|            error = OFPPROP_UNKNOWN(false, "NXAST_RAW_CONTROLLER2", type);
  ------------------
  |  |  144|    242|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  882|    242|            break;
  883|  2.83k|        }
  884|  2.83k|        if (error) {
  ------------------
  |  Branch (884:13): [True: 576, False: 2.26k]
  ------------------
  885|    576|            return error;
  886|    576|        }
  887|  2.83k|    }
  888|       |
  889|  1.02k|    ofpact_finish_CONTROLLER(out, &oc);
  890|       |
  891|  1.02k|    return 0;
  892|  1.83k|}
ofp-actions.c:decode_NXAST_RAW_WRITE_METADATA:
 7723|    411|{
 7724|    411|    struct ofpact_metadata *om;
 7725|       |
 7726|    411|    if (!is_all_zeros(nawm->zeros, sizeof nawm->zeros)) {
  ------------------
  |  Branch (7726:9): [True: 273, False: 138]
  ------------------
 7727|    273|        return OFPERR_NXBRC_MUST_BE_ZERO;
 7728|    273|    }
 7729|       |
 7730|    138|    om = ofpact_put_WRITE_METADATA(out);
 7731|    138|    om->metadata = nawm->metadata;
 7732|    138|    om->mask = nawm->mask;
 7733|       |
 7734|    138|    return 0;
 7735|    411|}
ofp-actions.c:decode_NXAST_RAW_STACK_PUSH:
 3494|  1.69k|{
 3495|  1.69k|    struct ofpact_stack *push = ofpact_put_STACK_PUSH(ofpacts);
 3496|  1.69k|    enum ofperr error = decode_stack_action(nasp, vl_mff_map, tlv_bitmap,
 3497|  1.69k|                                            push);
 3498|  1.69k|    return error ? error : nxm_stack_push_check(push, NULL);
  ------------------
  |  Branch (3498:12): [True: 259, False: 1.44k]
  ------------------
 3499|  1.69k|}
ofp-actions.c:decode_stack_action:
 3467|  3.95k|{
 3468|  3.95k|    enum ofperr error;
 3469|  3.95k|    stack_action->subfield.ofs = ntohs(nasp->offset);
 3470|       |
 3471|  3.95k|    struct ofpbuf b = ofpbuf_const_initializer(nasp, sizeof *nasp);
 3472|  3.95k|    ofpbuf_pull(&b, OBJECT_OFFSETOF(nasp, pad));
  ------------------
  |  |  108|  3.95k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 3473|  3.95k|    error  = mf_vl_mff_nx_pull_header(&b, vl_mff_map,
 3474|  3.95k|                                      &stack_action->subfield.field, NULL,
 3475|  3.95k|                                      tlv_bitmap);
 3476|  3.95k|    if (error) {
  ------------------
  |  Branch (3476:9): [True: 544, False: 3.41k]
  ------------------
 3477|    544|        return error;
 3478|    544|    }
 3479|       |
 3480|  3.41k|    stack_action->subfield.n_bits = ntohs(*(const ovs_be16 *) b.data);
 3481|  3.41k|    ofpbuf_pull(&b, 2);
 3482|  3.41k|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (3482:9): [True: 501, False: 2.91k]
  ------------------
 3483|    501|        return OFPERR_NXBRC_MUST_BE_ZERO;
 3484|    501|    }
 3485|       |
 3486|  2.91k|    return 0;
 3487|  3.41k|}
ofp-actions.c:decode_NXAST_RAW_STACK_POP:
 3506|  2.25k|{
 3507|  2.25k|    struct ofpact_stack *pop = ofpact_put_STACK_POP(ofpacts);
 3508|  2.25k|    enum ofperr error = decode_stack_action(nasp, vl_mff_map, tlv_bitmap,
 3509|  2.25k|                                            pop);
 3510|  2.25k|    return error ? error : nxm_stack_pop_check(pop, NULL);
  ------------------
  |  Branch (3510:12): [True: 786, False: 1.47k]
  ------------------
 3511|  2.25k|}
ofp-actions.c:decode_NXAST_RAW_SAMPLE:
 6215|    196|{
 6216|    196|    struct ofpact_sample *sample;
 6217|       |
 6218|    196|    sample = ofpact_put_SAMPLE(out);
 6219|    196|    sample->ofpact.raw = NXAST_RAW_SAMPLE;
 6220|    196|    sample->probability = ntohs(nas->probability);
 6221|    196|    sample->collector_set_id = ntohl(nas->collector_set_id);
 6222|    196|    sample->obs_domain_imm = ntohl(nas->obs_domain_id);
 6223|    196|    sample->obs_domain_src.field = NULL;
 6224|    196|    sample->obs_point_imm = ntohl(nas->obs_point_id);
 6225|    196|    sample->obs_point_src.field = NULL;
 6226|    196|    sample->sampling_port = OFPP_NONE;
  ------------------
  |  |   47|    196|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|    196|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
 6227|    196|    sample->direction = NX_ACTION_SAMPLE_DEFAULT;
 6228|    196|    sample->obs_domain_src.field = NULL;
 6229|    196|    sample->obs_point_src.field = NULL;
 6230|    196|    if (sample->probability == 0) {
  ------------------
  |  Branch (6230:9): [True: 18, False: 178]
  ------------------
 6231|     18|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 6232|     18|    }
 6233|       |
 6234|    178|    return 0;
 6235|    196|}
ofp-actions.c:decode_NXAST_RAW_SAMPLE2:
 6264|    875|{
 6265|    875|    return decode_SAMPLE2(nas, NXAST_RAW_SAMPLE2, NX_ACTION_SAMPLE_DEFAULT,
 6266|    875|                          ofpact_put_SAMPLE(out));
 6267|    875|}
ofp-actions.c:decode_SAMPLE2:
 6242|  5.75k|{
 6243|  5.75k|    sample->ofpact.raw = raw;
 6244|  5.75k|    sample->probability = ntohs(nas->probability);
 6245|  5.75k|    sample->collector_set_id = ntohl(nas->collector_set_id);
 6246|  5.75k|    sample->obs_domain_imm = ntohl(nas->obs_domain_id);
 6247|  5.75k|    sample->obs_domain_src.field = NULL;
 6248|  5.75k|    sample->obs_point_imm = ntohl(nas->obs_point_id);
 6249|  5.75k|    sample->obs_point_src.field = NULL;
 6250|  5.75k|    sample->sampling_port = u16_to_ofp(ntohs(nas->sampling_port));
 6251|  5.75k|    sample->direction = direction;
 6252|       |
 6253|  5.75k|    if (sample->probability == 0) {
  ------------------
  |  Branch (6253:9): [True: 1.49k, False: 4.26k]
  ------------------
 6254|  1.49k|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 6255|  1.49k|    }
 6256|       |
 6257|  4.26k|    return 0;
 6258|  5.75k|}
ofp-actions.c:decode_NXAST_RAW_SAMPLE3:
 6285|  6.12k|{
 6286|  6.12k|    struct ofpact_sample *sample = ofpact_put_SAMPLE(out);
 6287|  6.12k|    int err;
 6288|       |
 6289|  6.12k|    if (!is_all_zeros(nas->zeros, sizeof nas->zeros)) {
  ------------------
  |  Branch (6289:9): [True: 1.22k, False: 4.89k]
  ------------------
 6290|  1.22k|        return OFPERR_NXBRC_MUST_BE_ZERO;
 6291|  1.22k|    }
 6292|  4.89k|    err = check_sample_direction(nas->direction);
 6293|  4.89k|    if (err) {
  ------------------
  |  Branch (6293:9): [True: 17, False: 4.88k]
  ------------------
 6294|     17|        return err;
 6295|     17|    }
 6296|  4.88k|    return decode_SAMPLE2(nas, NXAST_RAW_SAMPLE3, nas->direction, sample);
 6297|  4.89k|}
ofp-actions.c:check_sample_direction:
 6271|  8.42k|{
 6272|  8.42k|    if (direction != NX_ACTION_SAMPLE_DEFAULT &&
  ------------------
  |  Branch (6272:9): [True: 3.49k, False: 4.92k]
  ------------------
 6273|  3.49k|        direction != NX_ACTION_SAMPLE_INGRESS &&
  ------------------
  |  Branch (6273:9): [True: 2.23k, False: 1.26k]
  ------------------
 6274|  2.23k|        direction != NX_ACTION_SAMPLE_EGRESS) {
  ------------------
  |  Branch (6274:9): [True: 151, False: 2.08k]
  ------------------
 6275|    151|        VLOG_WARN_RL(&rl, "invalid sample direction %"PRIu8, direction);
  ------------------
  |  |  224|    151|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    151|    do {                                                                \
  |  |  |  |  288|    151|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    151|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 151]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    151|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 151]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6276|    151|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 6277|    151|    }
 6278|  8.27k|    return 0;
 6279|  8.42k|}
ofp-actions.c:decode_NXAST_RAW_SAMPLE4:
 6340|  4.26k|{
 6341|  4.26k|    struct ofpact_sample *sample = ofpact_put_SAMPLE(out);
 6342|  4.26k|    int err;
 6343|       |
 6344|  4.26k|    if (!is_all_zeros(nas->zeros, sizeof nas->zeros)) {
  ------------------
  |  Branch (6344:9): [True: 742, False: 3.52k]
  ------------------
 6345|    742|        return OFPERR_NXBRC_MUST_BE_ZERO;
 6346|    742|    }
 6347|       |
 6348|  3.52k|    err = check_sample_direction(nas->direction);
 6349|  3.52k|    if (err) {
  ------------------
  |  Branch (6349:9): [True: 134, False: 3.39k]
  ------------------
 6350|    134|        return err;
 6351|    134|    }
 6352|       |
 6353|  3.39k|    sample->ofpact.raw = NXAST_RAW_SAMPLE4;
 6354|  3.39k|    sample->probability = ntohs(nas->probability);
 6355|  3.39k|    sample->collector_set_id = ntohl(nas->collector_set_id);
 6356|  3.39k|    sample->sampling_port = u16_to_ofp(ntohs(nas->sampling_port));
 6357|  3.39k|    sample->direction = nas->direction;
 6358|       |
 6359|  3.39k|    if (sample->probability == 0) {
  ------------------
  |  Branch (6359:9): [True: 10, False: 3.38k]
  ------------------
 6360|     10|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 6361|     10|    }
 6362|       |
 6363|  3.38k|    err = decode_sample_obs_id(nas->obs_domain_src,
 6364|  3.38k|                               nas->obs_domain_ofs_nbits,
 6365|  3.38k|                               nas->obs_domain_imm,
 6366|  3.38k|                               vl_mff_map, tlv_bitmap,
 6367|  3.38k|                               &sample->obs_domain_src,
 6368|  3.38k|                               &sample->obs_domain_imm);
 6369|  3.38k|    if (err) {
  ------------------
  |  Branch (6369:9): [True: 769, False: 2.61k]
  ------------------
 6370|    769|        return err;
 6371|    769|    }
 6372|       |
 6373|  2.61k|    return decode_sample_obs_id(nas->obs_point_src,
 6374|  2.61k|                                nas->obs_point_ofs_nbits,
 6375|  2.61k|                                nas->obs_point_imm,
 6376|  2.61k|                                vl_mff_map, tlv_bitmap,
 6377|  2.61k|                                &sample->obs_point_src,
 6378|  2.61k|                                &sample->obs_point_imm);
 6379|  3.38k|}
ofp-actions.c:decode_sample_obs_id:
 6303|  5.99k|{
 6304|  5.99k|    if (src) {
  ------------------
  |  Branch (6304:9): [True: 3.90k, False: 2.08k]
  ------------------
 6305|  3.90k|        enum ofperr error;
 6306|       |
 6307|  3.90k|        src_out->ofs = nxm_decode_ofs(ofs_nbits);
 6308|  3.90k|        src_out->n_bits = nxm_decode_n_bits(ofs_nbits);
 6309|  3.90k|        error = mf_vl_mff_mf_from_nxm_header(ntohl(src),
 6310|  3.90k|                                             vl_mff_map, &src_out->field,
 6311|  3.90k|                                             tlv_bitmap);
 6312|  3.90k|        if (error) {
  ------------------
  |  Branch (6312:13): [True: 1.64k, False: 2.26k]
  ------------------
 6313|  1.64k|            return error;
 6314|  1.64k|        }
 6315|       |
 6316|  2.26k|        error = mf_check_src(src_out, NULL);
 6317|  2.26k|        if (error) {
  ------------------
  |  Branch (6317:13): [True: 142, False: 2.12k]
  ------------------
 6318|    142|            return error;
 6319|    142|        }
 6320|       |
 6321|  2.12k|        if (src_out->n_bits > 32) {
  ------------------
  |  Branch (6321:13): [True: 817, False: 1.30k]
  ------------------
 6322|    817|            VLOG_WARN_RL(&rl, "size of field used in observation_id (%d) "
  ------------------
  |  |  224|    817|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    817|    do {                                                                \
  |  |  |  |  288|    817|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    817|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 817]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    817|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 817]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6323|    817|                               "exceeds maximum (32)", src_out->n_bits);
 6324|    817|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 6325|    817|        }
 6326|  2.12k|    } else {
 6327|  2.08k|        src_out->field = NULL;
 6328|  2.08k|        *imm_out = ntohl(imm);
 6329|  2.08k|    }
 6330|       |
 6331|  3.39k|    return 0;
 6332|  5.99k|}
ofp-actions.c:decode_NXAST_RAW_CONJUNCTION:
 5678|  7.25k|{
 5679|  7.25k|    if (nac->n_clauses < 2 || nac->n_clauses > 64
  ------------------
  |  Branch (5679:9): [True: 1.59k, False: 5.66k]
  |  Branch (5679:31): [True: 37, False: 5.62k]
  ------------------
 5680|  5.62k|        || nac->clause >= nac->n_clauses) {
  ------------------
  |  Branch (5680:12): [True: 493, False: 5.13k]
  ------------------
 5681|  2.12k|        return OFPERR_NXBAC_BAD_CONJUNCTION;
 5682|  5.13k|    } else {
 5683|       |        add_conjunction(out, ntohl(nac->id), nac->clause, nac->n_clauses);
 5684|  5.13k|        return 0;
 5685|  5.13k|    }
 5686|  7.25k|}
ofp-actions.c:add_conjunction:
 5665|  5.13k|{
 5666|  5.13k|    struct ofpact_conjunction *oc;
 5667|       |
 5668|  5.13k|    oc = ofpact_put_CONJUNCTION(out);
 5669|  5.13k|    oc->id = id;
 5670|  5.13k|    oc->clause = clause;
 5671|  5.13k|    oc->n_clauses = n_clauses;
 5672|  5.13k|}
ofp-actions.c:decode_NXAST_RAW_CT:
 6828|  17.0k|{
 6829|  17.0k|    const size_t ct_offset = ofpacts_pull(out);
 6830|  17.0k|    struct ofpact_conntrack *conntrack = ofpact_put_CT(out);
 6831|  17.0k|    int error;
 6832|       |
 6833|  17.0k|    conntrack->flags = ntohs(nac->flags);
 6834|  17.0k|    if (conntrack->flags & NX_CT_F_FORCE &&
  ------------------
  |  Branch (6834:9): [True: 4.43k, False: 12.6k]
  ------------------
 6835|  4.43k|        !(conntrack->flags & NX_CT_F_COMMIT)) {
  ------------------
  |  Branch (6835:9): [True: 479, False: 3.95k]
  ------------------
 6836|    479|        error = OFPERR_OFPBAC_BAD_ARGUMENT;
 6837|    479|        goto out;
 6838|    479|    }
 6839|       |
 6840|  16.6k|    error = decode_ct_zone(nac, conntrack, vl_mff_map, tlv_bitmap);
 6841|  16.6k|    if (error) {
  ------------------
  |  Branch (6841:9): [True: 3.91k, False: 12.7k]
  ------------------
 6842|  3.91k|        goto out;
 6843|  3.91k|    }
 6844|  12.7k|    conntrack->recirc_table = nac->recirc_table;
 6845|  12.7k|    conntrack->alg = ntohs(nac->alg);
 6846|       |
 6847|  12.7k|    ofpbuf_pull(out, sizeof(*conntrack));
 6848|       |
 6849|  12.7k|    struct ofpbuf openflow = ofpbuf_const_initializer(
 6850|  12.7k|        nac + 1, ntohs(nac->len) - sizeof(*nac));
 6851|  12.7k|    error = ofpacts_pull_openflow_actions__(&openflow, openflow.size,
 6852|  12.7k|                                            ofp_version,
 6853|  12.7k|                                            1u << OVSINST_OFPIT11_APPLY_ACTIONS,
 6854|  12.7k|                                            out, OFPACT_CT, vl_mff_map,
 6855|  12.7k|                                            tlv_bitmap);
 6856|  12.7k|    if (error) {
  ------------------
  |  Branch (6856:9): [True: 1.10k, False: 11.6k]
  ------------------
 6857|  1.10k|        return error;
 6858|  1.10k|    }
 6859|       |
 6860|  11.6k|    conntrack = ofpbuf_push_uninit(out, sizeof(*conntrack));
 6861|  11.6k|    out->header = &conntrack->ofpact;
 6862|  11.6k|    ofpact_finish_CT(out, &conntrack);
 6863|       |
 6864|  11.6k|    if (conntrack->ofpact.len > sizeof(*conntrack)
  ------------------
  |  Branch (6864:9): [True: 5.07k, False: 6.53k]
  ------------------
 6865|  5.07k|        && !(conntrack->flags & NX_CT_F_COMMIT)) {
  ------------------
  |  Branch (6865:12): [True: 991, False: 4.08k]
  ------------------
 6866|    991|        const struct ofpact *a;
 6867|    991|        size_t ofpacts_len = conntrack->ofpact.len - sizeof(*conntrack);
 6868|       |
 6869|    991|        OFPACT_FOR_EACH (a, conntrack->actions, ofpacts_len) {
  ------------------
  |  |  261|  1.11k|    for ((POS) = (OFPACTS); (POS) < ofpact_end(OFPACTS, OFPACTS_LEN);  \
  |  |  ------------------
  |  |  |  Branch (261:29): [True: 991, False: 121]
  |  |  ------------------
  |  |  262|    991|         (POS) = ofpact_next(POS))
  ------------------
 6870|    991|            if (a->type != OFPACT_NAT || ofpact_get_NAT(a)->flags
  ------------------
  |  Branch (6870:17): [True: 346, False: 645]
  |  Branch (6870:42): [True: 514, False: 131]
  ------------------
 6871|    870|                || ofpact_get_NAT(a)->range_af != AF_UNSPEC) {
  ------------------
  |  Branch (6871:20): [True: 10, False: 121]
  ------------------
 6872|    870|                VLOG_WARN_RL(&rl, "CT action requires commit flag if actions "
  ------------------
  |  |  224|    870|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    870|    do {                                                                \
  |  |  |  |  288|    870|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    870|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 870]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    870|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 870]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6873|    870|                             "other than NAT without arguments are specified.");
 6874|    870|                error = OFPERR_OFPBAC_BAD_ARGUMENT;
 6875|    870|                goto out;
 6876|    870|            }
 6877|    991|        }
 6878|    991|    }
 6879|       |
 6880|  15.9k|out:
 6881|  15.9k|    ofpbuf_push_uninit(out, ct_offset);
 6882|  15.9k|    return error;
 6883|  11.6k|}
ofp-actions.c:ofpacts_pull:
  536|  20.8k|{
  537|  20.8k|    size_t ofs;
  538|       |
  539|  20.8k|    ofs = ofpacts->size;
  540|  20.8k|    ofpbuf_pull(ofpacts, ofs);
  541|       |
  542|  20.8k|    return ofs;
  543|  20.8k|}
ofp-actions.c:decode_ct_zone:
 6792|  16.6k|{
 6793|  16.6k|    if (nac->zone_src) {
  ------------------
  |  Branch (6793:9): [True: 7.92k, False: 8.69k]
  ------------------
 6794|  7.92k|        enum ofperr error;
 6795|       |
 6796|  7.92k|        out->zone_src.ofs = nxm_decode_ofs(nac->zone_ofs_nbits);
 6797|  7.92k|        out->zone_src.n_bits = nxm_decode_n_bits(nac->zone_ofs_nbits);
 6798|  7.92k|        error = mf_vl_mff_mf_from_nxm_header(ntohl(nac->zone_src),
 6799|  7.92k|                                             vl_mff_map, &out->zone_src.field,
 6800|  7.92k|                                             tlv_bitmap);
 6801|  7.92k|        if (error) {
  ------------------
  |  Branch (6801:13): [True: 2.73k, False: 5.18k]
  ------------------
 6802|  2.73k|            return error;
 6803|  2.73k|        }
 6804|       |
 6805|  5.18k|        error = mf_check_src(&out->zone_src, NULL);
 6806|  5.18k|        if (error) {
  ------------------
  |  Branch (6806:13): [True: 832, False: 4.35k]
  ------------------
 6807|    832|            return error;
 6808|    832|        }
 6809|       |
 6810|  4.35k|        if (out->zone_src.n_bits != 16) {
  ------------------
  |  Branch (6810:13): [True: 345, False: 4.01k]
  ------------------
 6811|    345|            VLOG_WARN_RL(&rl, "zone n_bits %d not within valid range [16..16]",
  ------------------
  |  |  224|    345|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    345|    do {                                                                \
  |  |  |  |  288|    345|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    345|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 345]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    345|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 345]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6812|    345|                         out->zone_src.n_bits);
 6813|    345|            return OFPERR_OFPBAC_BAD_SET_LEN;
 6814|    345|        }
 6815|  8.69k|    } else {
 6816|  8.69k|        out->zone_src.field = NULL;
 6817|  8.69k|        out->zone_imm = ntohs(nac->zone_imm);
 6818|  8.69k|    }
 6819|       |
 6820|  12.7k|    return 0;
 6821|  16.6k|}
ofp-actions.c:decode_NXAST_RAW_NAT:
 7207|  32.8k|{
 7208|  32.8k|    struct ofpact_nat *nat;
 7209|  32.8k|    uint16_t range_present = ntohs(nan->range_present);
 7210|  32.8k|    const char *opts = (char *)(nan + 1);
 7211|  32.8k|    uint16_t len = ntohs(nan->len) - sizeof *nan;
 7212|       |
 7213|  32.8k|    nat = ofpact_put_NAT(out);
 7214|  32.8k|    nat->flags = ntohs(nan->flags);
 7215|       |
 7216|       |    /* Check for unknown or mutually exclusive flags. */
 7217|  32.8k|    if ((nat->flags & ~NX_NAT_F_MASK)
  ------------------
  |  Branch (7217:9): [True: 6.89k, False: 25.9k]
  ------------------
 7218|  25.9k|        || (nat->flags & NX_NAT_F_SRC && nat->flags & NX_NAT_F_DST)
  ------------------
  |  Branch (7218:13): [True: 4.90k, False: 21.0k]
  |  Branch (7218:42): [True: 318, False: 4.58k]
  ------------------
 7219|  25.6k|        || (nat->flags & NX_NAT_F_PROTO_HASH
  ------------------
  |  Branch (7219:13): [True: 226, False: 25.4k]
  ------------------
 7220|  7.31k|            && nat->flags & NX_NAT_F_PROTO_RANDOM)) {
  ------------------
  |  Branch (7220:16): [True: 95, False: 131]
  ------------------
 7221|  7.31k|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 7222|  7.31k|    }
 7223|       |
 7224|  25.5k|#define NX_NAT_GET_OPT(DST, SRC, LEN, TYPE)                     \
 7225|  25.5k|    (LEN >= sizeof(TYPE)                                        \
 7226|  25.5k|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
 7227|  25.5k|        SRC += sizeof(TYPE))                                    \
 7228|  25.5k|     : NULL)
 7229|       |
 7230|  25.5k|    nat->range_af = AF_UNSPEC;
 7231|  25.5k|    if (range_present & NX_NAT_RANGE_IPV4_MIN) {
  ------------------
  |  Branch (7231:9): [True: 14.5k, False: 10.9k]
  ------------------
 7232|  14.5k|        if (range_present & (NX_NAT_RANGE_IPV6_MIN | NX_NAT_RANGE_IPV6_MAX)) {
  ------------------
  |  Branch (7232:13): [True: 2.51k, False: 12.0k]
  ------------------
 7233|  2.51k|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 7234|  2.51k|        }
 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: 10]
  |  |  ------------------
  |  | 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: 10, False: 12.0k]
  ------------------
 7237|  12.0k|            || !nat->range.addr.ipv4.min) {
  ------------------
  |  Branch (7237:16): [True: 238, False: 11.8k]
  ------------------
 7238|    248|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 7239|    248|        }
 7240|       |
 7241|  11.8k|        nat->range_af = AF_INET;
 7242|       |
 7243|  11.8k|        if (range_present & NX_NAT_RANGE_IPV4_MAX) {
  ------------------
  |  Branch (7243:13): [True: 2.43k, False: 9.37k]
  ------------------
 7244|  2.43k|            if (!NX_NAT_GET_OPT(&nat->range.addr.ipv4.max, opts, len,
  ------------------
  |  | 7225|  2.43k|    (LEN >= sizeof(TYPE)                                        \
  |  |  ------------------
  |  |  |  Branch (7225:6): [True: 2.43k, False: 0]
  |  |  ------------------
  |  | 7226|  2.43k|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
  |  | 7227|  2.43k|        SRC += sizeof(TYPE))                                    \
  |  | 7228|  2.43k|     : NULL)
  ------------------
  |  Branch (7244:17): [True: 0, False: 2.43k]
  ------------------
 7245|  2.43k|                                ovs_be32)) {
 7246|      0|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 7247|      0|            }
 7248|  2.43k|            if (ntohl(nat->range.addr.ipv4.max)
  ------------------
  |  Branch (7248:17): [True: 1.28k, False: 1.15k]
  ------------------
 7249|  2.43k|                < ntohl(nat->range.addr.ipv4.min)) {
 7250|  1.28k|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 7251|  1.28k|            }
 7252|  2.43k|        }
 7253|  11.8k|    } else if (range_present & NX_NAT_RANGE_IPV4_MAX) {
  ------------------
  |  Branch (7253:16): [True: 775, False: 10.1k]
  ------------------
 7254|    775|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 7255|  10.1k|    } else if (range_present & NX_NAT_RANGE_IPV6_MIN) {
  ------------------
  |  Branch (7255:16): [True: 6.28k, False: 3.90k]
  ------------------
 7256|  6.28k|        if (!NX_NAT_GET_OPT(&nat->range.addr.ipv6.min, opts, len,
  ------------------
  |  | 7225|  12.5k|    (LEN >= sizeof(TYPE)                                        \
  |  |  ------------------
  |  |  |  Branch (7225:6): [True: 3.06k, False: 3.21k]
  |  |  ------------------
  |  | 7226|  12.5k|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
  |  | 7227|  3.06k|        SRC += sizeof(TYPE))                                    \
  |  | 7228|  12.5k|     : NULL)
  ------------------
  |  Branch (7256:13): [True: 3.21k, False: 3.06k]
  ------------------
 7257|  6.28k|                            struct in6_addr)
 7258|  4.71k|            || ipv6_mask_is_any(&nat->range.addr.ipv6.min)) {
  ------------------
  |  Branch (7258:16): [True: 1.49k, False: 1.56k]
  ------------------
 7259|  4.71k|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 7260|  4.71k|        }
 7261|       |
 7262|  1.56k|        nat->range_af = AF_INET6;
 7263|       |
 7264|  1.56k|        if (range_present & NX_NAT_RANGE_IPV6_MAX) {
  ------------------
  |  Branch (7264:13): [True: 1.30k, False: 259]
  ------------------
 7265|  1.30k|            if (!NX_NAT_GET_OPT(&nat->range.addr.ipv6.max, opts, len,
  ------------------
  |  | 7225|  1.30k|    (LEN >= sizeof(TYPE)                                        \
  |  |  ------------------
  |  |  |  Branch (7225:6): [True: 1.21k, False: 92]
  |  |  ------------------
  |  | 7226|  1.30k|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
  |  | 7227|  1.21k|        SRC += sizeof(TYPE))                                    \
  |  | 7228|  1.30k|     : NULL)
  ------------------
  |  Branch (7265:17): [True: 92, False: 1.21k]
  ------------------
 7266|  1.30k|                                struct in6_addr)) {
 7267|     92|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 7268|     92|            }
 7269|  1.21k|            if (memcmp(&nat->range.addr.ipv6.max, &nat->range.addr.ipv6.min,
  ------------------
  |  Branch (7269:17): [True: 184, False: 1.03k]
  ------------------
 7270|  1.21k|                       sizeof(struct in6_addr)) < 0) {
 7271|    184|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 7272|    184|            }
 7273|  1.21k|        }
 7274|  3.90k|    } else if (range_present & NX_NAT_RANGE_IPV6_MAX) {
  ------------------
  |  Branch (7274:16): [True: 1.00k, False: 2.90k]
  ------------------
 7275|  1.00k|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 7276|  1.00k|    }
 7277|       |
 7278|  14.7k|    if (range_present & NX_NAT_RANGE_PROTO_MIN) {
  ------------------
  |  Branch (7278:9): [True: 3.98k, False: 10.7k]
  ------------------
 7279|  3.98k|        ovs_be16 proto;
 7280|       |
 7281|  3.98k|        if (nat->range_af == AF_UNSPEC) {
  ------------------
  |  Branch (7281:13): [True: 1.28k, False: 2.70k]
  ------------------
 7282|  1.28k|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 7283|  1.28k|        }
 7284|  2.70k|        if (!NX_NAT_GET_OPT(&proto, opts, len, ovs_be16) || proto == 0) {
  ------------------
  |  | 7225|  5.41k|    (LEN >= sizeof(TYPE)                                        \
  |  |  ------------------
  |  |  |  Branch (7225:6): [True: 1.89k, False: 813]
  |  |  ------------------
  |  | 7226|  5.41k|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
  |  | 7227|  1.89k|        SRC += sizeof(TYPE))                                    \
  |  | 7228|  5.41k|     : NULL)
  ------------------
  |  Branch (7284:13): [True: 813, False: 1.89k]
  |  Branch (7284:61): [True: 179, False: 1.71k]
  ------------------
 7285|    992|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 7286|    992|        }
 7287|  1.71k|        nat->range.proto.min = ntohs(proto);
 7288|  1.71k|        if (range_present & NX_NAT_RANGE_PROTO_MAX) {
  ------------------
  |  Branch (7288:13): [True: 889, False: 825]
  ------------------
 7289|    889|            if (!NX_NAT_GET_OPT(&proto, opts, len, ovs_be16)) {
  ------------------
  |  | 7225|    889|    (LEN >= sizeof(TYPE)                                        \
  |  |  ------------------
  |  |  |  Branch (7225:6): [True: 889, False: 0]
  |  |  ------------------
  |  | 7226|    889|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
  |  | 7227|    889|        SRC += sizeof(TYPE))                                    \
  |  | 7228|    889|     : NULL)
  ------------------
  |  Branch (7289:17): [True: 0, False: 889]
  ------------------
 7290|      0|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 7291|      0|            }
 7292|    889|            nat->range.proto.max = ntohs(proto);
 7293|    889|            if (nat->range.proto.max < nat->range.proto.min) {
  ------------------
  |  Branch (7293:17): [True: 629, False: 260]
  ------------------
 7294|    629|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 7295|    629|            }
 7296|    889|        }
 7297|  10.7k|    } else if (range_present & NX_NAT_RANGE_PROTO_MAX) {
  ------------------
  |  Branch (7297:16): [True: 498, False: 10.2k]
  ------------------
 7298|    498|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 7299|    498|    }
 7300|       |
 7301|  11.3k|    return 0;
 7302|  14.7k|}
ofp-actions.c:decode_NXAST_RAW_OUTPUT_TRUNC:
 7505|  1.53k|{
 7506|  1.53k|    struct ofpact_output_trunc *output_trunc;
 7507|       |
 7508|  1.53k|    output_trunc = ofpact_put_OUTPUT_TRUNC(out);
 7509|  1.53k|    output_trunc->max_len = ntohl(natrc->max_len);
 7510|  1.53k|    output_trunc->port = u16_to_ofp(ntohs(natrc->port));
 7511|       |
 7512|  1.53k|    if (output_trunc->max_len < ETH_HEADER_LEN) {
  ------------------
  |  |  439|  1.53k|#define ETH_HEADER_LEN 14
  ------------------
  |  Branch (7512:9): [True: 20, False: 1.51k]
  ------------------
 7513|     20|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 7514|     20|    }
 7515|  1.51k|    return 0;
 7516|  1.53k|}
ofp-actions.c:decode_NXAST_RAW_CLONE:
 6047|  3.72k|{
 6048|  3.72k|    int error;
 6049|  3.72k|    struct ofpbuf openflow;
 6050|  3.72k|    const size_t clone_offset = ofpacts_pull(out);
 6051|  3.72k|    struct ofpact_nest *clone = ofpact_put_CLONE(out);
 6052|       |
 6053|       |    /* decode action list */
 6054|  3.72k|    ofpbuf_pull(out, sizeof(*clone));
 6055|  3.72k|    openflow = ofpbuf_const_initializer(
 6056|  3.72k|                    eah + 1, ntohs(eah->len) - sizeof *eah);
 6057|  3.72k|    error = ofpacts_pull_openflow_actions__(&openflow, openflow.size,
 6058|  3.72k|                                            ofp_version,
 6059|  3.72k|                                            1u << OVSINST_OFPIT11_APPLY_ACTIONS,
 6060|  3.72k|                                            out, 0, vl_mff_map, tlv_bitmap);
 6061|  3.72k|    if (error) {
  ------------------
  |  Branch (6061:9): [True: 89, False: 3.63k]
  ------------------
 6062|     89|        return error;
 6063|     89|    }
 6064|  3.63k|    clone = ofpbuf_push_uninit(out, sizeof *clone);
 6065|  3.63k|    out->header = &clone->ofpact;
 6066|  3.63k|    ofpact_finish_CLONE(out, &clone);
 6067|  3.63k|    ofpbuf_push_uninit(out, clone_offset);
 6068|  3.63k|    return error;
 6069|  3.72k|}
ofp-actions.c:decode_NXAST_RAW_CT_CLEAR:
 7092|    131|{
 7093|    131|    ofpact_put_CT_CLEAR(out);
 7094|    131|    return 0;
 7095|    131|}
ofp-actions.c:decode_NXAST_RAW_ENCAP:
 4467|  9.65k|{
 4468|  9.65k|    struct ofpact_encap *encap;
 4469|  9.65k|    const struct ofp_ed_prop_header *ofp_prop;
 4470|  9.65k|    const size_t encap_ofs = out->size;
 4471|  9.65k|    size_t props_len;
 4472|  9.65k|    uint16_t n_props = 0;
 4473|  9.65k|    int err;
 4474|       |
 4475|  9.65k|    encap = ofpact_put_ENCAP(out);
 4476|  9.65k|    encap->ofpact.raw = NXAST_RAW_ENCAP;
 4477|  9.65k|    switch (ntohl(nae->new_pkt_type)) {
 4478|  4.42k|    case PT_ETH:
  ------------------
  |  Branch (4478:5): [True: 4.42k, False: 5.22k]
  ------------------
 4479|  6.46k|    case PT_NSH:
  ------------------
  |  Branch (4479:5): [True: 2.04k, False: 7.61k]
  ------------------
 4480|  7.71k|    case PT_MPLS:
  ------------------
  |  Branch (4480:5): [True: 1.25k, False: 8.40k]
  ------------------
 4481|  8.99k|    case PT_MPLS_MC:
  ------------------
  |  Branch (4481:5): [True: 1.27k, False: 8.38k]
  ------------------
 4482|       |        /* Add supported encap header types here. */
 4483|  8.99k|        break;
 4484|    661|    default:
  ------------------
  |  Branch (4484:5): [True: 661, False: 8.99k]
  ------------------
 4485|    661|        return OFPERR_NXBAC_BAD_HEADER_TYPE;
 4486|  9.65k|    }
 4487|  8.99k|    encap->new_pkt_type = nae->new_pkt_type;
 4488|  8.99k|    encap->hdr_size = ntohs(nae->hdr_size);
 4489|       |
 4490|  8.99k|    ofp_prop = nae->props;
 4491|  8.99k|    props_len = ntohs(nae->len) - offsetof(struct nx_action_encap, props);
 4492|  8.99k|    n_props = 0;
 4493|  15.2k|    while (props_len > 0) {
  ------------------
  |  Branch (4493:12): [True: 9.55k, False: 5.67k]
  ------------------
 4494|  9.55k|        err = decode_ed_prop(&ofp_prop, out, &props_len);
 4495|  9.55k|        if (err) {
  ------------------
  |  Branch (4495:13): [True: 3.32k, False: 6.23k]
  ------------------
 4496|  3.32k|            return err;
 4497|  3.32k|        }
 4498|  6.23k|        n_props++;
 4499|  6.23k|    }
 4500|  5.67k|    encap = ofpbuf_at_assert(out, encap_ofs, sizeof *encap);
 4501|  5.67k|    encap->n_props = n_props;
 4502|  5.67k|    out->header = &encap->ofpact;
 4503|  5.67k|    ofpact_finish_ENCAP(out, &encap);
 4504|       |
 4505|  5.67k|    return 0;
 4506|  8.99k|}
ofp-actions.c:decode_NXAST_RAW_DECAP:
 4698|  20.9k|{
 4699|  20.9k|    struct ofpact_decap * decap;
 4700|       |
 4701|  20.9k|    if (ntohs(nad->len) > sizeof *nad) {
  ------------------
  |  Branch (4701:9): [True: 103, False: 20.7k]
  ------------------
 4702|       |        /* No properties supported yet. */
 4703|    103|        return OFPERR_NXBAC_UNKNOWN_ED_PROP;
 4704|    103|    }
 4705|       |
 4706|  20.7k|    decap = ofpact_put_DECAP(ofpacts);
 4707|  20.7k|    decap->ofpact.raw = NXAST_RAW_DECAP;
 4708|  20.7k|    decap->new_pkt_type = nad->new_pkt_type;
 4709|  20.7k|    return 0;
 4710|  20.9k|}
ofp-actions.c:decode_NXAST_RAW_DEC_NSH_TTL:
 4800|  1.75k|{
 4801|  1.75k|    ofpact_put_DEC_NSH_TTL(out);
 4802|  1.75k|    return 0;
 4803|  1.75k|}
ofp-actions.c:decode_NXAST_RAW_CHECK_PKT_LARGER:
 7821|  2.24k|{
 7822|  2.24k|    struct ofpact_check_pkt_larger *check_pkt_larger;
 7823|  2.24k|    enum ofperr error;
 7824|       |
 7825|  2.24k|    check_pkt_larger = ofpact_put_CHECK_PKT_LARGER(out);
 7826|  2.24k|    check_pkt_larger->pkt_len = ntohs(ncpl->pkt_len);
 7827|  2.24k|    check_pkt_larger->dst.ofs = ntohs(ncpl->offset);
 7828|  2.24k|    check_pkt_larger->dst.n_bits = 1;
 7829|       |
 7830|  2.24k|    struct ofpbuf b = ofpbuf_const_initializer(ncpl, ntohs(ncpl->len));
 7831|  2.24k|    ofpbuf_pull(&b, OBJECT_OFFSETOF(ncpl, pad));
  ------------------
  |  |  108|  2.24k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 7832|       |
 7833|  2.24k|    error = mf_vl_mff_nx_pull_header(&b, vl_mff_map,
 7834|  2.24k|                                     &check_pkt_larger->dst.field,
 7835|  2.24k|                                     NULL, tlv_bitmap);
 7836|  2.24k|    if (error) {
  ------------------
  |  Branch (7836:9): [True: 577, False: 1.66k]
  ------------------
 7837|    577|        return error;
 7838|    577|    }
 7839|       |
 7840|  1.66k|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (7840:9): [True: 1.15k, False: 514]
  ------------------
 7841|  1.15k|        return OFPERR_NXBRC_MUST_BE_ZERO;
 7842|  1.15k|    }
 7843|       |
 7844|    514|    return mf_check_dst(&check_pkt_larger->dst, NULL);
 7845|  1.66k|}
ofp-actions.c:decode_NXAST_RAW_DELETE_FIELD:
 4201|    560|{
 4202|    560|    struct ofpact_delete_field *delete_field;
 4203|    560|    enum ofperr err;
 4204|       |
 4205|    560|    delete_field = ofpact_put_DELETE_FIELD(out);
 4206|    560|    delete_field->ofpact.raw = NXAST_RAW_DELETE_FIELD;
 4207|       |
 4208|    560|    struct ofpbuf b = ofpbuf_const_initializer(nadf, ntohs(nadf->len));
 4209|    560|    ofpbuf_pull(&b, OBJECT_OFFSETOF(nadf, pad));
  ------------------
  |  |  108|    560|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 4210|       |
 4211|    560|    err = mf_vl_mff_nx_pull_header(&b, vl_mff_map, &delete_field->field,
 4212|    560|                                   NULL, tlv_bitmap);
 4213|    560|    if (err) {
  ------------------
  |  Branch (4213:9): [True: 503, False: 57]
  ------------------
 4214|    503|        return err;
 4215|    503|    }
 4216|       |
 4217|     57|    return 0;
 4218|    560|}
ofp-actions.c:decode_NXAST_RAW_DEBUG_SLOW:
 6617|    338|{
 6618|    338|    if (!enable_debug) {
  ------------------
  |  Branch (6618:9): [True: 338, False: 0]
  ------------------
 6619|    338|        return OFPERR_OFPBAC_BAD_VENDOR_TYPE;
 6620|    338|    }
 6621|       |
 6622|      0|    ofpact_put_DEBUG_SLOW(out);
 6623|      0|    return 0;
 6624|    338|}
ofp-actions.c:decode_NXAST_RAW_DEBUG_RECIRC:
 6577|    198|{
 6578|    198|    if (!enable_debug) {
  ------------------
  |  Branch (6578:9): [True: 198, False: 0]
  ------------------
 6579|    198|        return OFPERR_OFPBAC_BAD_VENDOR_TYPE;
 6580|    198|    }
 6581|       |
 6582|      0|    ofpact_put_DEBUG_RECIRC(out);
 6583|      0|    return 0;
 6584|    198|}
ofp-actions.c:log_bad_action:
 7969|   139k|{
 7970|   139k|    if (!VLOG_DROP_WARN(&rl)) {
  ------------------
  |  |  234|   139k|#define VLOG_DROP_WARN(RL) vlog_should_drop(&this_module, VLL_WARN, RL)
  ------------------
  |  Branch (7970:9): [True: 0, False: 139k]
  ------------------
 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|   139k|}
ofp-actions.c:ofpacts_decode_for_action_set:
 8326|  24.1k|{
 8327|  24.1k|    enum ofperr error;
 8328|  24.1k|    struct ofpact *a;
 8329|  24.1k|    size_t start = out->size;
 8330|       |
 8331|  24.1k|    error = ofpacts_decode(in, n_in, version, vl_mff_map, ofpacts_tlv_bitmap,
 8332|  24.1k|                           out);
 8333|       |
 8334|  24.1k|    if (error) {
  ------------------
  |  Branch (8334:9): [True: 5.76k, False: 18.3k]
  ------------------
 8335|  5.76k|        return error;
 8336|  5.76k|    }
 8337|       |
 8338|  69.4k|    OFPACT_FOR_EACH (a, ofpact_end(out->data, start), out->size - start) {
  ------------------
  |  |  261|  86.4k|    for ((POS) = (OFPACTS); (POS) < ofpact_end(OFPACTS, OFPACTS_LEN);  \
  |  |  ------------------
  |  |  |  Branch (261:29): [True: 69.4k, False: 16.9k]
  |  |  ------------------
  |  |  262|  68.0k|         (POS) = ofpact_next(POS))
  ------------------
 8339|  69.4k|        if (!ofpact_is_allowed_in_actions_set(a)) {
  ------------------
  |  Branch (8339:13): [True: 1.40k, False: 68.0k]
  ------------------
 8340|  1.40k|            VLOG_WARN_RL(&rl, "disallowed action in action set");
  ------------------
  |  |  224|  1.40k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.40k|    do {                                                                \
  |  |  |  |  288|  1.40k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.40k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.40k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.40k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.40k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8341|  1.40k|            return OFPERR_OFPBAC_BAD_TYPE;
 8342|  1.40k|        }
 8343|  69.4k|    }
 8344|       |
 8345|  16.9k|    return 0;
 8346|  18.3k|}
ofp-actions.c:ofpact_is_allowed_in_actions_set:
 8257|  69.4k|{
 8258|  69.4k|    return action_set_classify(a) != ACTION_SLOT_INVALID;
 8259|  69.4k|}
ofp-actions.c:ofpact_check__:
 8823|   188k|{
 8824|   188k|    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|  8.23k|    OFPACT(OUTPUT,          ofpact_output,      ofpact, "output")       \
  |  |  ------------------
  |  |  |  | 8826|  8.23k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 8.23k, False: 179k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  8.23k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   65|  8.23k|    OFPACT(GROUP,           ofpact_group,       ofpact, "group")        \
  |  |  ------------------
  |  |  |  | 8826|  1.56k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.56k, False: 186k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.56k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   66|  1.56k|    OFPACT(CONTROLLER,      ofpact_controller,  userdata, "controller") \
  |  |  ------------------
  |  |  |  | 8826|    116|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 116, False: 187k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    116|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   67|    166|    OFPACT(ENQUEUE,         ofpact_enqueue,     ofpact, "enqueue")      \
  |  |  ------------------
  |  |  |  | 8826|    166|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 166, False: 187k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    166|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   68|    197|    OFPACT(OUTPUT_REG,      ofpact_output_reg,  ofpact, "output_reg")   \
  |  |  ------------------
  |  |  |  | 8826|    197|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 197, False: 187k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    197|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   69|    877|    OFPACT(BUNDLE,          ofpact_bundle,      members, "bundle")      \
  |  |  ------------------
  |  |  |  | 8826|    877|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 877, False: 187k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    877|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   70|    877|                                                                        \
  |  |   71|    877|    /* Header changes. */                                               \
  |  |   72|  4.55k|    OFPACT(SET_FIELD,       ofpact_set_field,   ofpact, "set_field")    \
  |  |  ------------------
  |  |  |  | 8826|  4.55k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 4.55k, False: 183k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  4.55k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   73|  5.87k|    OFPACT(SET_VLAN_VID,    ofpact_vlan_vid,    ofpact, "set_vlan_vid") \
  |  |  ------------------
  |  |  |  | 8826|  5.87k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 5.87k, False: 182k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  5.87k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   74|  5.87k|    OFPACT(SET_VLAN_PCP,    ofpact_vlan_pcp,    ofpact, "set_vlan_pcp") \
  |  |  ------------------
  |  |  |  | 8826|  5.21k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 5.21k, False: 182k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  5.21k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   75|  8.82k|    OFPACT(STRIP_VLAN,      ofpact_null,        ofpact, "strip_vlan")   \
  |  |  ------------------
  |  |  |  | 8826|  8.82k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 8.82k, False: 179k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  8.82k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   76|  8.82k|    OFPACT(PUSH_VLAN,       ofpact_push_vlan,   ofpact, "push_vlan")    \
  |  |  ------------------
  |  |  |  | 8826|  3.03k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 3.03k, False: 184k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  3.03k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   77|  3.03k|    OFPACT(SET_ETH_SRC,     ofpact_mac,         ofpact, "mod_dl_src")   \
  |  |  ------------------
  |  |  |  | 8826|    555|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 555, False: 187k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    555|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   78|    555|    OFPACT(SET_ETH_DST,     ofpact_mac,         ofpact, "mod_dl_dst")   \
  |  |  ------------------
  |  |  |  | 8826|    371|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 371, False: 187k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    371|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   79|  4.26k|    OFPACT(SET_IPV4_SRC,    ofpact_ipv4,        ofpact, "mod_nw_src")   \
  |  |  ------------------
  |  |  |  | 8826|  4.26k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 4.26k, False: 183k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  4.26k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   80|  7.66k|    OFPACT(SET_IPV4_DST,    ofpact_ipv4,        ofpact, "mod_nw_dst")   \
  |  |  ------------------
  |  |  |  | 8826|  7.66k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 7.66k, False: 180k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  7.66k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   81|  7.66k|    OFPACT(SET_IP_DSCP,     ofpact_dscp,        ofpact, "mod_nw_tos")   \
  |  |  ------------------
  |  |  |  | 8826|  7.02k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 7.02k, False: 180k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  7.02k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   82|  7.02k|    OFPACT(SET_IP_ECN,      ofpact_ecn,         ofpact, "mod_nw_ecn")   \
  |  |  ------------------
  |  |  |  | 8826|  3.61k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 3.61k, False: 184k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  3.61k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   83|  3.61k|    OFPACT(SET_IP_TTL,      ofpact_ip_ttl,      ofpact, "mod_nw_ttl")   \
  |  |  ------------------
  |  |  |  | 8826|  1.44k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.44k, False: 186k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.44k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   84|  5.73k|    OFPACT(SET_L4_SRC_PORT, ofpact_l4_port,     ofpact, "mod_tp_src")   \
  |  |  ------------------
  |  |  |  | 8826|  5.73k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 5.73k, False: 182k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  5.73k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   85|  8.64k|    OFPACT(SET_L4_DST_PORT, ofpact_l4_port,     ofpact, "mod_tp_dst")   \
  |  |  ------------------
  |  |  |  | 8826|  8.64k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 8.64k, False: 179k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  8.64k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   86|  8.64k|    OFPACT(REG_MOVE,        ofpact_reg_move,    ofpact, "move")         \
  |  |  ------------------
  |  |  |  | 8826|    277|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 277, False: 187k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    277|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   87|    277|    OFPACT(STACK_PUSH,      ofpact_stack,       ofpact, "push")         \
  |  |  ------------------
  |  |  |  | 8826|    104|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 104, False: 187k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    104|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   88|  1.40k|    OFPACT(STACK_POP,       ofpact_stack,       ofpact, "pop")          \
  |  |  ------------------
  |  |  |  | 8826|  1.40k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.40k, False: 186k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.40k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   89|  3.96k|    OFPACT(DEC_TTL,         ofpact_cnt_ids,     cnt_ids, "dec_ttl")     \
  |  |  ------------------
  |  |  |  | 8826|  3.96k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 3.96k, False: 184k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  3.96k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   90|  3.96k|    OFPACT(SET_MPLS_LABEL,  ofpact_mpls_label,  ofpact, "set_mpls_label") \
  |  |  ------------------
  |  |  |  | 8826|  3.04k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 3.04k, False: 184k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  3.04k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   91|  3.04k|    OFPACT(SET_MPLS_TC,     ofpact_mpls_tc,     ofpact, "set_mpls_tc")  \
  |  |  ------------------
  |  |  |  | 8826|  1.13k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.13k, False: 186k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.13k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   92|  1.17k|    OFPACT(SET_MPLS_TTL,    ofpact_mpls_ttl,    ofpact, "set_mpls_ttl") \
  |  |  ------------------
  |  |  |  | 8826|  1.17k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.17k, False: 186k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.17k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   93|  6.51k|    OFPACT(DEC_MPLS_TTL,    ofpact_null,        ofpact, "dec_mpls_ttl") \
  |  |  ------------------
  |  |  |  | 8826|  6.51k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 6.51k, False: 181k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  6.51k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   94|  6.51k|    OFPACT(PUSH_MPLS,       ofpact_push_mpls,   ofpact, "push_mpls")    \
  |  |  ------------------
  |  |  |  | 8826|  4.63k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 4.63k, False: 183k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  4.63k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   95|  8.44k|    OFPACT(POP_MPLS,        ofpact_pop_mpls,    ofpact, "pop_mpls")     \
  |  |  ------------------
  |  |  |  | 8826|  8.44k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 8.44k, False: 179k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  8.44k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   96|  8.44k|    OFPACT(DEC_NSH_TTL,     ofpact_null,        ofpact, "dec_nsh_ttl")  \
  |  |  ------------------
  |  |  |  | 8826|  1.70k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.70k, False: 186k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.70k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   97|  1.70k|    OFPACT(DELETE_FIELD,    ofpact_delete_field, ofpact, "delete_field") \
  |  |  ------------------
  |  |  |  | 8826|     46|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 46, False: 187k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     46|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   98|     46|                                                                        \
  |  |   99|     46|    /* Generic encap & decap */                                         \
  |  |  100|  4.09k|    OFPACT(ENCAP,           ofpact_encap,       props, "encap")         \
  |  |  ------------------
  |  |  |  | 8826|  4.09k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 4.09k, False: 183k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  4.09k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  101|  16.7k|    OFPACT(DECAP,           ofpact_decap,       ofpact, "decap")        \
  |  |  ------------------
  |  |  |  | 8826|  16.7k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 16.7k, False: 171k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  16.7k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  102|  16.7k|                                                                        \
  |  |  103|  16.7k|    /* Metadata. */                                                     \
  |  |  104|  16.7k|    OFPACT(SET_TUNNEL,      ofpact_tunnel,      ofpact, "set_tunnel")   \
  |  |  ------------------
  |  |  |  | 8826|     44|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 44, False: 187k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     44|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  105|    210|    OFPACT(SET_QUEUE,       ofpact_queue,       ofpact, "set_queue")    \
  |  |  ------------------
  |  |  |  | 8826|    210|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 210, False: 187k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    210|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  106|    508|    OFPACT(POP_QUEUE,       ofpact_null,        ofpact, "pop_queue")    \
  |  |  ------------------
  |  |  |  | 8826|    508|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 508, False: 187k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    508|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  107|    508|    OFPACT(FIN_TIMEOUT,     ofpact_fin_timeout, ofpact, "fin_timeout")  \
  |  |  ------------------
  |  |  |  | 8826|    365|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 365, False: 187k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    365|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  108|    365|                                                                        \
  |  |  109|    365|    /* Flow table interaction. */                                       \
  |  |  110|    365|    OFPACT(RESUBMIT,        ofpact_resubmit,    ofpact, "resubmit")     \
  |  |  ------------------
  |  |  |  | 8826|    243|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 243, False: 187k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    243|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  111|  24.5k|    OFPACT(LEARN,           ofpact_learn,       specs, "learn")         \
  |  |  ------------------
  |  |  |  | 8826|  24.5k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 24.5k, False: 163k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  24.5k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  112|  24.5k|    OFPACT(CONJUNCTION,     ofpact_conjunction, ofpact, "conjunction")  \
  |  |  ------------------
  |  |  |  | 8826|    311|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 311, False: 187k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    311|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  113|    311|                                                                        \
  |  |  114|    311|    /* Arithmetic. */                                                   \
  |  |  115|    313|    OFPACT(MULTIPATH,       ofpact_multipath,   ofpact, "multipath")    \
  |  |  ------------------
  |  |  |  | 8826|    313|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 313, False: 187k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    313|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  116|    313|                                                                        \
  |  |  117|    313|    /* Other. */                                                        \
  |  |  118|    313|    OFPACT(NOTE,            ofpact_note,        data, "note")           \
  |  |  ------------------
  |  |  |  | 8826|    298|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 298, False: 187k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    298|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  119|    452|    OFPACT(EXIT,            ofpact_null,        ofpact, "exit")         \
  |  |  ------------------
  |  |  |  | 8826|    452|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 452, False: 187k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    452|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  120|    452|    OFPACT(SAMPLE,          ofpact_sample,      ofpact, "sample")       \
  |  |  ------------------
  |  |  |  | 8826|     94|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 94, False: 187k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     94|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  121|     94|    OFPACT(UNROLL_XLATE,    ofpact_unroll_xlate, ofpact, "unroll_xlate") \
  |  |  ------------------
  |  |  |  | 8826|      0|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 0, False: 188k]
  |  |  |  |  ------------------
  |  |  |  | 8827|      0|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  122|  4.50k|    OFPACT(CT,              ofpact_conntrack,   ofpact, "ct")           \
  |  |  ------------------
  |  |  |  | 8826|  4.50k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 4.50k, False: 183k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  4.50k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  123|  4.50k|    OFPACT(CT_CLEAR,        ofpact_null,        ofpact, "ct_clear")     \
  |  |  ------------------
  |  |  |  | 8826|     53|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 53, False: 187k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     53|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  124|  2.49k|    OFPACT(NAT,             ofpact_nat,         ofpact, "nat")          \
  |  |  ------------------
  |  |  |  | 8826|  2.49k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 2.49k, False: 185k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  2.49k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  125|  2.49k|    OFPACT(OUTPUT_TRUNC,    ofpact_output_trunc,ofpact, "output_trunc") \
  |  |  ------------------
  |  |  |  | 8826|  1.11k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.11k, False: 186k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.11k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  126|  3.08k|    OFPACT(CLONE,           ofpact_nest,        actions, "clone")       \
  |  |  ------------------
  |  |  |  | 8826|  3.08k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 3.08k, False: 184k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  3.08k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  127|  3.08k|    OFPACT(CHECK_PKT_LARGER, ofpact_check_pkt_larger, ofpact,           \
  |  |  ------------------
  |  |  |  | 8826|     12|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 12, False: 188k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     12|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  128|     12|           "check_pkt_larger")                                          \
  |  |  129|     12|                                                                        \
  |  |  130|     12|    /* Debugging actions.                                               \
  |  |  131|     12|     *                                                                  \
  |  |  132|     12|     * These are intentionally undocumented, subject to change, and     \
  |  |  133|     12|     * only accepted if ovs-vswitchd is started with --enable-dummy. */ \
  |  |  134|     12|    OFPACT(DEBUG_RECIRC, ofpact_null,           ofpact, "debug_recirc") \
  |  |  ------------------
  |  |  |  | 8826|      0|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 0, False: 188k]
  |  |  |  |  ------------------
  |  |  |  | 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: 188k]
  |  |  |  |  ------------------
  |  |  |  | 8827|      0|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  136|      0|                                                                        \
  |  |  137|      0|    /* Instructions ("meter" is an action in OF1.5+). */                \
  |  |  138|    328|    OFPACT(METER,           ofpact_meter,       ofpact, "meter")        \
  |  |  ------------------
  |  |  |  | 8826|    328|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 328, False: 187k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    328|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  139|    328|    OFPACT(CLEAR_ACTIONS,   ofpact_null,        ofpact, "clear_actions") \
  |  |  ------------------
  |  |  |  | 8826|    309|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 309, False: 187k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    309|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  140|  16.5k|    OFPACT(WRITE_ACTIONS,   ofpact_nest,        actions, "write_actions") \
  |  |  ------------------
  |  |  |  | 8826|  16.5k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 16.5k, False: 171k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  16.5k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  141|  16.5k|    OFPACT(WRITE_METADATA,  ofpact_metadata,    ofpact, "write_metadata") \
  |  |  ------------------
  |  |  |  | 8826|     89|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 89, False: 187k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     89|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  142|    829|    OFPACT(GOTO_TABLE,      ofpact_goto_table,  ofpact, "goto_table")
  |  |  ------------------
  |  |  |  | 8826|    829|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 829, False: 187k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    829|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  ------------------
 8829|      0|#undef OFPACT
 8830|      0|    default:
  ------------------
  |  Branch (8830:5): [True: 0, False: 188k]
  ------------------
 8831|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 8832|   188k|    }
 8833|   188k|}
ofp-actions.c:check_OUTPUT:
  717|  8.23k|{
  718|  8.23k|    return ofpact_check_output_port(a->port, cp->max_ports);
  719|  8.23k|}
ofp-actions.c:check_GROUP:
  756|  1.56k|{
  757|  1.56k|    return 0;
  758|  1.56k|}
ofp-actions.c:check_CONTROLLER:
 1074|    116|{
 1075|    116|    return 0;
 1076|    116|}
ofp-actions.c:check_ENQUEUE:
 1161|    166|{
 1162|    166|    if (ofp_to_u16(a->port) >= ofp_to_u16(cp->max_ports)
  ------------------
  |  Branch (1162:9): [True: 91, False: 75]
  ------------------
 1163|    166|        && a->port != OFPP_IN_PORT
  ------------------
  |  |   39|     91|#define OFPP_IN_PORT    OFP_PORT_C(0xfff8) /* Where the packet came in. */
  |  |  ------------------
  |  |  |  |  157|    257|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1163:12): [True: 10, False: 81]
  ------------------
 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|    166|    return 0;
 1168|    166|}
ofp-actions.c:check_OUTPUT_REG:
 1326|    197|{
 1327|    197|    return mf_check_src(&a->src, cp->match);
 1328|    197|}
ofp-actions.c:check_BUNDLE:
 1552|    877|{
 1553|    877|    return bundle_check(a, cp->max_ports, cp->match);
 1554|    877|}
ofp-actions.c:check_SET_FIELD:
 3352|  4.55k|{
 3353|  4.55k|    const struct mf_field *mf = a->field;
 3354|  4.55k|    struct flow *flow = &cp->match->flow;
 3355|  4.55k|    ovs_be16 *tci = &flow->vlans[0].tci;
 3356|       |
 3357|       |    /* Require OXM_OF_VLAN_VID to have an existing VLAN header. */
 3358|  4.55k|    if (!mf_are_prereqs_ok(mf, flow, NULL)
  ------------------
  |  Branch (3358:9): [True: 2.02k, False: 2.53k]
  ------------------
 3359|  2.53k|        || (mf->id == MFF_VLAN_VID && !(*tci & htons(VLAN_CFI)))) {
  ------------------
  |  Branch (3359:13): [True: 474, False: 2.05k]
  |  Branch (3359:39): [True: 18, False: 456]
  ------------------
 3360|  2.04k|        VLOG_WARN_RL(&rl, "set_field %s lacks correct prerequisites",
  ------------------
  |  |  224|  2.04k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  2.04k|    do {                                                                \
  |  |  |  |  288|  2.04k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  2.04k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 2.04k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  2.04k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 2.04k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3361|  2.04k|                     mf->name);
 3362|  2.04k|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 3363|  2.04k|    }
 3364|       |
 3365|       |    /* Remember if we saw a VLAN tag in the flow, to aid translating to
 3366|       |     * OpenFlow 1.1 if need be. */
 3367|  2.51k|    a->flow_has_vlan = (*tci & htons(VLAN_CFI)) != 0;
 3368|  2.51k|    if (mf->id == MFF_VLAN_TCI) {
  ------------------
  |  Branch (3368:9): [True: 34, False: 2.47k]
  ------------------
 3369|       |        /* The set field may add or remove the VLAN tag,
 3370|       |         * Mark the status temporarily. */
 3371|     34|        *tci = a->value->be16;
 3372|     34|    }
 3373|       |
 3374|  2.51k|    return 0;
 3375|  4.55k|}
ofp-actions.c:check_SET_VLAN_VID:
 1649|  5.87k|{
 1650|       |    /* Remember if we saw a vlan tag in the flow to aid translating to OpenFlow
 1651|       |     * 1.1+ if need be. */
 1652|  5.87k|    ovs_be16 *tci = &cp->match->flow.vlans[0].tci;
 1653|  5.87k|    a->flow_has_vlan = (*tci & htons(VLAN_CFI)) != 0;
 1654|  5.87k|    if (!a->flow_has_vlan && !a->push_vlan_if_needed) {
  ------------------
  |  Branch (1654:9): [True: 827, False: 5.04k]
  |  Branch (1654:30): [True: 113, False: 714]
  ------------------
 1655|    113|        inconsistent_match(&cp->usable_protocols);
 1656|    113|    }
 1657|       |
 1658|       |    /* Temporarily mark that we have a vlan tag. */
 1659|  5.87k|    *tci |= htons(VLAN_CFI);
 1660|       |
 1661|  5.87k|    return 0;
 1662|  5.87k|}
ofp-actions.c:inconsistent_match:
 8812|  46.9k|{
 8813|  46.9k|    *usable_protocols &= OFPUTIL_P_OF10_ANY;
  ------------------
  |  |   60|  46.9k|#define OFPUTIL_P_OF10_ANY (OFPUTIL_P_OF10_STD_ANY | OFPUTIL_P_OF10_NXM_ANY)
  |  |  ------------------
  |  |  |  |   58|  46.9k|#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|  46.9k|#define OFPUTIL_P_OF10_NXM_ANY (OFPUTIL_P_OF10_NXM | OFPUTIL_P_OF10_NXM_TID)
  |  |  ------------------
  ------------------
 8814|  46.9k|}
ofp-actions.c:check_SET_VLAN_PCP:
 1757|  5.21k|{
 1758|       |    /* Remember if we saw a vlan tag in the flow to aid translating to OpenFlow
 1759|       |     * 1.1+ if need be. */
 1760|  5.21k|    ovs_be16 *tci = &cp->match->flow.vlans[0].tci;
 1761|  5.21k|    a->flow_has_vlan = (*tci & htons(VLAN_CFI)) != 0;
 1762|  5.21k|    if (!a->flow_has_vlan && !a->push_vlan_if_needed) {
  ------------------
  |  Branch (1762:9): [True: 3.51k, False: 1.69k]
  |  Branch (1762:30): [True: 995, False: 2.52k]
  ------------------
 1763|    995|        inconsistent_match(&cp->usable_protocols);
 1764|    995|    }
 1765|       |
 1766|       |    /* Temporarily mark that we have a vlan tag. */
 1767|  5.21k|    *tci |= htons(VLAN_CFI);
 1768|       |
 1769|  5.21k|    return 0;
 1770|  5.21k|}
ofp-actions.c:check_STRIP_VLAN:
 1826|  8.82k|{
 1827|  8.82k|    if (!(cp->match->flow.vlans[0].tci & htons(VLAN_CFI))) {
  ------------------
  |  Branch (1827:9): [True: 4.24k, False: 4.57k]
  ------------------
 1828|  4.24k|        inconsistent_match(&cp->usable_protocols);
 1829|  4.24k|    }
 1830|       |    flow_pop_vlan(&cp->match->flow, NULL);
 1831|  8.82k|    return 0;
 1832|  8.82k|}
ofp-actions.c:check_PUSH_VLAN:
 1894|  3.03k|{
 1895|  3.03k|    struct flow *flow = &cp->match->flow;
 1896|  3.03k|    if (flow->vlans[FLOW_MAX_VLAN_HEADERS - 1].tci & htons(VLAN_CFI)) {
  ------------------
  |  |   75|  3.03k|#define FLOW_MAX_VLAN_HEADERS 2
  ------------------
  |  Branch (1896:9): [True: 666, False: 2.37k]
  ------------------
 1897|       |        /* Support maximum (FLOW_MAX_VLAN_HEADERS) VLAN headers. */
 1898|    666|        return OFPERR_OFPBAC_BAD_TAG;
 1899|    666|    }
 1900|       |    /* Temporary mark that we have a vlan tag. */
 1901|  2.37k|    flow_push_vlan_uninit(flow, NULL);
 1902|       |    flow->vlans[0].tci |= htons(VLAN_CFI);
 1903|  2.37k|    return 0;
 1904|  3.03k|}
ofp-actions.c:check_SET_ETH_SRC:
 1998|    555|{
 1999|    555|    return 0;
 2000|    555|}
ofp-actions.c:check_SET_ETH_DST:
 2005|    371|{
 2006|    371|    return 0;
 2007|    371|}
ofp-actions.c:check_SET_IPV4_SRC:
 2100|  4.26k|{
 2101|  4.26k|    return check_set_ipv4(cp);
 2102|  4.26k|}
ofp-actions.c:check_set_ipv4:
 2089|  11.9k|{
 2090|  11.9k|    ovs_be16 dl_type = get_dl_type(&cp->match->flow);
 2091|  11.9k|    if (dl_type != htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (2091:9): [True: 4.66k, False: 7.26k]
  ------------------
 2092|  4.66k|        inconsistent_match(&cp->usable_protocols);
 2093|  4.66k|    }
 2094|  11.9k|    return 0;
 2095|  11.9k|}
ofp-actions.c:check_SET_IPV4_DST:
 2107|  7.66k|{
 2108|  7.66k|    return check_set_ipv4(cp);
 2109|  7.66k|}
ofp-actions.c:check_SET_IP_DSCP:
 2176|  7.02k|{
 2177|  7.02k|    return check_set_ip(cp);
 2178|  7.02k|}
ofp-actions.c:check_set_ip:
 2166|  16.0k|{
 2167|  16.0k|    if (!is_ip_any(&cp->match->flow)) {
  ------------------
  |  Branch (2167:9): [True: 9.76k, False: 6.28k]
  ------------------
 2168|  9.76k|        inconsistent_match(&cp->usable_protocols);
 2169|  9.76k|    }
 2170|  16.0k|    return 0;
 2171|  16.0k|}
ofp-actions.c:check_SET_IP_ECN:
 2240|  3.61k|{
 2241|  3.61k|    return check_set_ip(cp);
 2242|  3.61k|}
ofp-actions.c:check_SET_IP_TTL:
 2295|  1.44k|{
 2296|  1.44k|    return check_set_ip(cp);
 2297|  1.44k|}
ofp-actions.c:check_SET_L4_SRC_PORT:
 2411|  5.73k|{
 2412|  5.73k|    return check_set_l4_port(a, cp);
 2413|  5.73k|}
ofp-actions.c:check_set_l4_port:
 2392|  14.3k|{
 2393|  14.3k|    const struct flow *flow = &cp->match->flow;
 2394|  14.3k|    if (!is_ip_any(flow)
  ------------------
  |  Branch (2394:9): [True: 5.86k, False: 8.50k]
  ------------------
 2395|  8.50k|        || flow->nw_frag & FLOW_NW_FRAG_LATER
  ------------------
  |  |   55|  22.8k|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  |  Branch (2395:12): [True: 0, False: 8.50k]
  ------------------
 2396|  8.50k|        || (flow->nw_proto != IPPROTO_TCP &&
  ------------------
  |  Branch (2396:13): [True: 7.36k, False: 1.14k]
  ------------------
 2397|  7.36k|            flow->nw_proto != IPPROTO_UDP &&
  ------------------
  |  Branch (2397:13): [True: 7.05k, False: 312]
  ------------------
 2398|  10.8k|            flow->nw_proto != IPPROTO_SCTP)) {
  ------------------
  |  Branch (2398:13): [True: 4.95k, False: 2.10k]
  ------------------
 2399|  10.8k|        inconsistent_match(&cp->usable_protocols);
 2400|  10.8k|    }
 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|  14.3k|    a->flow_ip_proto = flow->nw_proto;
 2405|       |
 2406|  14.3k|    return 0;
 2407|  14.3k|}
ofp-actions.c:check_SET_L4_DST_PORT:
 2417|  8.64k|{
 2418|  8.64k|    return check_set_l4_port(a, cp);
 2419|  8.64k|}
ofp-actions.c:check_REG_MOVE:
 2722|    277|{
 2723|    277|    return nxm_reg_move_check(a, cp->match);
 2724|    277|}
ofp-actions.c:check_STACK_PUSH:
 3572|    104|{
 3573|    104|    return nxm_stack_push_check(a, cp->match);
 3574|    104|}
ofp-actions.c:check_STACK_POP:
 3579|  1.40k|{
 3580|  1.40k|    return nxm_stack_pop_check(a, cp->match);
 3581|  1.40k|}
ofp-actions.c:check_DEC_TTL:
 3755|  3.96k|{
 3756|  3.96k|    return check_set_ip(cp);
 3757|  3.96k|}
ofp-actions.c:check_SET_MPLS_LABEL:
 3828|  3.04k|{
 3829|  3.04k|    return check_set_mpls(cp);
 3830|  3.04k|}
ofp-actions.c:check_set_mpls:
 3817|  11.8k|{
 3818|  11.8k|    ovs_be16 dl_type = get_dl_type(&cp->match->flow);
 3819|  11.8k|    if (!eth_type_mpls(dl_type)) {
  ------------------
  |  Branch (3819:9): [True: 8.90k, False: 2.96k]
  ------------------
 3820|  8.90k|        inconsistent_match(&cp->usable_protocols);
 3821|  8.90k|    }
 3822|  11.8k|    return 0;
 3823|  11.8k|}
ofp-actions.c:check_SET_MPLS_TC:
 3889|  1.13k|{
 3890|  1.13k|    return check_set_mpls(cp);
 3891|  1.13k|}
ofp-actions.c:check_SET_MPLS_TTL:
 3947|  1.17k|{
 3948|  1.17k|    return check_set_mpls(cp);
 3949|  1.17k|}
ofp-actions.c:check_DEC_MPLS_TTL:
 3984|  6.51k|{
 3985|  6.51k|    return check_set_mpls(cp);
 3986|  6.51k|}
ofp-actions.c:check_PUSH_MPLS:
 4037|  4.63k|{
 4038|  4.63k|    struct flow *flow = &cp->match->flow;
 4039|       |
 4040|  4.63k|    if (flow->packet_type != htonl(PT_ETH)) {
  ------------------
  |  Branch (4040:9): [True: 10, False: 4.62k]
  ------------------
 4041|     10|        inconsistent_match(&cp->usable_protocols);
 4042|     10|    }
 4043|  4.63k|    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|  4.63k|    flow->nw_proto = 0;
 4049|       |
 4050|  4.63k|    return 0;
 4051|  4.63k|}
ofp-actions.c:check_POP_MPLS:
 4094|  8.44k|{
 4095|  8.44k|    struct flow *flow = &cp->match->flow;
 4096|  8.44k|    ovs_be16 dl_type = get_dl_type(flow);
 4097|       |
 4098|  8.44k|    if (flow->packet_type != htonl(PT_ETH) || !eth_type_mpls(dl_type)) {
  ------------------
  |  Branch (4098:9): [True: 2.83k, False: 5.60k]
  |  Branch (4098:47): [True: 4.05k, False: 1.54k]
  ------------------
 4099|  6.89k|        inconsistent_match(&cp->usable_protocols);
 4100|  6.89k|    }
 4101|  8.44k|    flow->dl_type = a->ethertype;
 4102|  8.44k|    return 0;
 4103|  8.44k|}
ofp-actions.c:check_DEC_NSH_TTL:
 4829|  1.70k|{
 4830|  1.70k|    struct flow *flow = &cp->match->flow;
 4831|  1.70k|    if (flow->packet_type != htonl(PT_NSH) &&
  ------------------
  |  Branch (4831:9): [True: 652, False: 1.04k]
  ------------------
 4832|    652|        flow->dl_type != htons(ETH_TYPE_NSH)) {
  ------------------
  |  Branch (4832:9): [True: 288, False: 364]
  ------------------
 4833|    288|        inconsistent_match(&cp->usable_protocols);
 4834|    288|    }
 4835|  1.70k|    return 0;
 4836|  1.70k|}
ofp-actions.c:check_DELETE_FIELD:
 4256|     46|{
 4257|     46|    if (odf->field->id < MFF_TUN_METADATA0 ||
  ------------------
  |  Branch (4257:9): [True: 1, False: 45]
  ------------------
 4258|     45|        odf->field->id > MFF_TUN_METADATA63) {
  ------------------
  |  Branch (4258:9): [True: 10, False: 35]
  ------------------
 4259|     11|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 4260|     11|    }
 4261|     35|    return 0;
 4262|     46|}
ofp-actions.c:check_ENCAP:
 4664|  4.09k|{
 4665|  4.09k|    struct flow *flow = &cp->match->flow;
 4666|  4.09k|    flow->packet_type = a->new_pkt_type;
 4667|  4.09k|    if (pt_ns(flow->packet_type) == OFPHTN_ETHERTYPE) {
  ------------------
  |  Branch (4667:9): [True: 3.22k, False: 866]
  ------------------
 4668|  3.22k|        flow->dl_type = htons(pt_ns_type(flow->packet_type));
 4669|  3.22k|    }
 4670|  4.09k|    if (!is_ip_any(flow)) {
  ------------------
  |  Branch (4670:9): [True: 3.84k, False: 252]
  ------------------
 4671|  3.84k|        flow->nw_proto = 0;
 4672|  3.84k|    }
 4673|  4.09k|    return 0;
 4674|  4.09k|}
ofp-actions.c:check_DECAP:
 4781|  16.7k|{
 4782|  16.7k|    struct flow *flow = &cp->match->flow;
 4783|  16.7k|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (4783:9): [True: 11.2k, False: 5.49k]
  ------------------
 4784|       |        /* Adjust the packet_type to allow subsequent actions. */
 4785|  11.2k|        flow->packet_type = PACKET_TYPE_BE(OFPHTN_ETHERTYPE,
  ------------------
  |  | 1565|  11.2k|#define PACKET_TYPE_BE(NS, NS_TYPE) (htonl((NS) << 16 | (NS_TYPE)))
  ------------------
 4786|  11.2k|                                           ntohs(flow->dl_type));
 4787|  11.2k|    } else {
 4788|       |        /* The actual packet_type is only known after decapsulation.
 4789|       |         * Do not allow subsequent actions that depend on packet headers. */
 4790|  5.49k|        flow->packet_type = htonl(PT_UNKNOWN);
 4791|  5.49k|        flow->dl_type = OVS_BE16_MAX;
  ------------------
  |  |   42|  5.49k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
 4792|  5.49k|    }
 4793|  16.7k|    return 0;
 4794|  16.7k|}
ofp-actions.c:check_SET_TUNNEL:
 4177|     44|{
 4178|     44|    return 0;
 4179|     44|}
ofp-actions.c:check_SET_QUEUE:
 4299|    210|{
 4300|    210|    return 0;
 4301|    210|}
ofp-actions.c:check_POP_QUEUE:
 4337|    508|{
 4338|    508|    return 0;
 4339|    508|}
ofp-actions.c:check_FIN_TIMEOUT:
 4444|    365|{
 4445|    365|    if (cp->match->flow.nw_proto != IPPROTO_TCP) {
  ------------------
  |  Branch (4445:9): [True: 299, False: 66]
  ------------------
 4446|    299|        inconsistent_match(&cp->usable_protocols);
 4447|    299|    }
 4448|    365|    return 0;
 4449|    365|}
ofp-actions.c:check_RESUBMIT:
 5051|    243|{
 5052|    243|    if (a->with_ct_orig && !is_ct_valid(&cp->match->flow, &cp->match->wc,
  ------------------
  |  Branch (5052:9): [True: 11, False: 232]
  |  Branch (5052:28): [True: 11, False: 0]
  ------------------
 5053|     11|                                        NULL)) {
 5054|     11|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 5055|     11|    }
 5056|    232|    return 0;
 5057|    243|}
ofp-actions.c:check_LEARN:
 5646|  24.5k|{
 5647|  24.5k|    return learn_check(a, cp->match);
 5648|  24.5k|}
ofp-actions.c:check_CONJUNCTION:
 5739|    311|{
 5740|    311|    return 0;
 5741|    311|}
ofp-actions.c:check_MULTIPATH:
 5873|    313|{
 5874|    313|    return multipath_check(a, cp->match);
 5875|    313|}
ofp-actions.c:check_NOTE:
 5959|    298|{
 5960|    298|    return 0;
 5961|    298|}
ofp-actions.c:check_EXIT:
 5996|    452|{
 5997|    452|    return 0;
 5998|    452|}
ofp-actions.c:check_SAMPLE:
 6561|     94|{
 6562|     94|    return 0;
 6563|     94|}
ofp-actions.c:check_CT:
 7068|  4.50k|{
 7069|  4.50k|    struct flow *flow = &cp->match->flow;
 7070|       |
 7071|  4.50k|    if (!dl_type_is_ip_any(get_dl_type(flow))
  ------------------
  |  Branch (7071:9): [True: 173, False: 4.33k]
  ------------------
 7072|  4.33k|        || (flow->ct_state & CS_INVALID && a->flags & NX_CT_F_COMMIT)
  ------------------
  |  Branch (7072:13): [True: 0, False: 4.33k]
  |  Branch (7072:44): [True: 0, False: 0]
  ------------------
 7073|  4.33k|        || (a->alg == IPPORT_FTP && flow->nw_proto != IPPROTO_TCP)
  ------------------
  |  |  695|  8.66k|#define IPPORT_FTP  21
  ------------------
  |  Branch (7073:13): [True: 132, False: 4.20k]
  |  Branch (7073:37): [True: 66, False: 66]
  ------------------
 7074|  4.26k|        || (a->alg == IPPORT_TFTP && flow->nw_proto != IPPROTO_UDP)) {
  ------------------
  |  |  699|  8.53k|#define IPPORT_TFTP  69
  ------------------
  |  Branch (7074:13): [True: 36, False: 4.23k]
  |  Branch (7074:38): [True: 18, False: 18]
  ------------------
 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|    257|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 7079|    257|    }
 7080|       |
 7081|  4.24k|    if (a->zone_src.field) {
  ------------------
  |  Branch (7081:9): [True: 1.74k, False: 2.50k]
  ------------------
 7082|  1.74k|        return mf_check_src(&a->zone_src, cp->match);
 7083|  1.74k|    }
 7084|       |
 7085|  2.50k|    return check_subactions(a->actions, ofpact_ct_get_action_len(a), cp);
 7086|  4.24k|}
ofp-actions.c:check_subactions:
 6123|  5.59k|{
 6124|  5.59k|    struct ofpact_check_params sub = *cp;
 6125|  5.59k|    enum ofperr error = ofpacts_check(ofpacts, ofpacts_len, &sub);
 6126|  5.59k|    cp->usable_protocols &= sub.usable_protocols;
 6127|  5.59k|    return error;
 6128|  5.59k|}
ofp-actions.c:check_CT_CLEAR:
 7122|     53|{
 7123|     53|    return 0;
 7124|     53|}
ofp-actions.c:check_NAT:
 7480|  2.49k|{
 7481|  2.49k|    ovs_be16 dl_type = get_dl_type(&cp->match->flow);
 7482|  2.49k|    if (!dl_type_is_ip_any(dl_type) ||
  ------------------
  |  Branch (7482:9): [True: 0, False: 2.49k]
  ------------------
 7483|  2.49k|        (a->range_af == AF_INET && dl_type != htons(ETH_TYPE_IP)) ||
  ------------------
  |  Branch (7483:10): [True: 1.18k, False: 1.31k]
  |  Branch (7483:36): [True: 376, False: 809]
  ------------------
 7484|  2.12k|        (a->range_af == AF_INET6 && dl_type != htons(ETH_TYPE_IPV6))) {
  ------------------
  |  Branch (7484:10): [True: 0, False: 2.12k]
  |  Branch (7484:37): [True: 0, False: 0]
  ------------------
 7485|    376|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 7486|    376|    }
 7487|  2.12k|    return 0;
 7488|  2.49k|}
ofp-actions.c:check_OUTPUT_TRUNC:
 7550|  1.11k|{
 7551|  1.11k|    return ofpact_check_output_port(a->port, cp->max_ports);
 7552|  1.11k|}
ofp-actions.c:check_CLONE:
 6132|  3.08k|{
 6133|  3.08k|    return check_subactions(a->actions, ofpact_nest_get_action_len(a), cp);
 6134|  3.08k|}
ofp-actions.c:check_CHECK_PKT_LARGER:
 7911|     12|{
 7912|     12|    return 0;
 7913|     12|}
ofp-actions.c:check_METER:
 7601|    328|{
 7602|    328|    uint32_t mid = a->meter_id;
 7603|    328|    return mid == 0 || mid > OFPM13_MAX ? OFPERR_OFPMMFC_INVALID_METER : 0;
  ------------------
  |  Branch (7603:12): [True: 10, False: 318]
  |  Branch (7603:24): [True: 0, False: 318]
  ------------------
 7604|    328|}
ofp-actions.c:check_CLEAR_ACTIONS:
 7635|    309|{
 7636|    309|    return 0;
 7637|    309|}
ofp-actions.c:check_WRITE_ACTIONS:
 7698|  16.5k|{
 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|  16.5k|    struct ofpact_check_params tmp = *cp;
 7702|  16.5k|    return ofpacts_check(a->actions, ofpact_nest_get_action_len(a), &tmp);
 7703|  16.5k|}
ofp-actions.c:check_WRITE_METADATA:
 7794|     89|{
 7795|     89|    return 0;
 7796|     89|}
ofp-actions.c:check_GOTO_TABLE:
 7958|    829|{
 7959|    829|    if ((cp->table_id != 255 && a->table_id <= cp->table_id)
  ------------------
  |  Branch (7959:10): [True: 144, False: 685]
  |  Branch (7959:33): [True: 69, False: 75]
  ------------------
 7960|    760|        || (cp->n_tables != 255 && a->table_id >= cp->n_tables)) {
  ------------------
  |  Branch (7960:13): [True: 0, False: 760]
  |  Branch (7960:36): [True: 0, False: 0]
  ------------------
 7961|     69|        return OFPERR_OFPBIC_BAD_TABLE_ID;
 7962|     69|    }
 7963|    760|    return 0;
 7964|    829|}
ofp-actions.c:ofpacts_verify:
 9006|   188k|{
 9007|   188k|    const struct ofpact *a;
 9008|   188k|    enum ovs_instruction_type inst;
 9009|       |
 9010|   188k|    inst = OVSINST_OFPIT13_METER;
 9011|   223k|    OFPACT_FOR_EACH (a, ofpacts, ofpacts_len) {
  ------------------
  |  |  261|   399k|    for ((POS) = (OFPACTS); (POS) < ofpact_end(OFPACTS, OFPACTS_LEN);  \
  |  |  ------------------
  |  |  |  Branch (261:29): [True: 223k, False: 175k]
  |  |  ------------------
  |  |  262|   211k|         (POS) = ofpact_next(POS))
  ------------------
 9012|   223k|        enum ovs_instruction_type next;
 9013|   223k|        enum ofperr error;
 9014|       |
 9015|   223k|        if (a->type == OFPACT_CONJUNCTION) {
  ------------------
  |  Branch (9015:13): [True: 4.84k, False: 219k]
  ------------------
 9016|  10.4k|            OFPACT_FOR_EACH (a, ofpacts, ofpacts_len) {
  ------------------
  |  |  261|  12.5k|    for ((POS) = (OFPACTS); (POS) < ofpact_end(OFPACTS, OFPACTS_LEN);  \
  |  |  ------------------
  |  |  |  Branch (261:29): [True: 10.4k, False: 2.09k]
  |  |  ------------------
  |  |  262|  7.75k|         (POS) = ofpact_next(POS))
  ------------------
 9017|  10.4k|                if (a->type != OFPACT_CONJUNCTION && a->type != OFPACT_NOTE) {
  ------------------
  |  Branch (9017:21): [True: 8.08k, False: 2.41k]
  |  Branch (9017:54): [True: 2.74k, False: 5.34k]
  ------------------
 9018|  2.74k|                    verify_error(errorp, "\"conjunction\" actions may be used "
 9019|  2.74k|                                 "along with \"note\" but not any other kind "
 9020|  2.74k|                                 "of action (such as the \"%s\" action used "
 9021|  2.74k|                                 "here)", ofpact_name(a->type));
 9022|  2.74k|                    return OFPERR_NXBAC_BAD_CONJUNCTION;
 9023|  2.74k|                }
 9024|  10.4k|            }
 9025|  2.09k|            return 0;
 9026|  4.84k|        }
 9027|       |
 9028|   219k|        error = ofpacts_verify_nested(a, outer_action, errorp);
 9029|   219k|        if (error) {
  ------------------
  |  Branch (9029:13): [True: 7.75k, False: 211k]
  ------------------
 9030|  7.75k|            return error;
 9031|  7.75k|        }
 9032|       |
 9033|   211k|        next = ovs_instruction_type_from_ofpact_type(a->type, version);
 9034|   211k|        if (a > ofpacts
  ------------------
  |  Branch (9034:13): [True: 82.5k, False: 128k]
  ------------------
 9035|  82.5k|            && (inst == OVSINST_OFPIT11_APPLY_ACTIONS
  ------------------
  |  Branch (9035:16): [True: 38, False: 82.5k]
  |  Branch (9035:17): [True: 82.1k, False: 346]
  ------------------
 9036|  82.5k|                ? next < inst
 9037|  82.5k|                : next <= inst)) {
 9038|     38|            const char *name = ovs_instruction_name_from_type(inst);
 9039|     38|            const char *next_name = ovs_instruction_name_from_type(next);
 9040|       |
 9041|     38|            if (next == inst) {
  ------------------
  |  Branch (9041:17): [True: 19, False: 19]
  ------------------
 9042|     19|                verify_error(errorp, "duplicate %s instruction not allowed, "
 9043|     19|                             "for OpenFlow 1.1+ compatibility", name);
 9044|     19|            } else {
 9045|     19|                verify_error(errorp, "invalid instruction ordering: "
 9046|     19|                             "%s must appear before %s, "
 9047|     19|                             "for OpenFlow 1.1+ compatibility",
 9048|     19|                             next_name, name);
 9049|     19|            }
 9050|     38|            return OFPERR_OFPBAC_UNSUPPORTED_ORDER;
 9051|     38|        }
 9052|   211k|        if (!((1u << next) & allowed_ovsinsts)) {
  ------------------
  |  Branch (9052:13): [True: 34, False: 211k]
  ------------------
 9053|     34|            const char *name = ovs_instruction_name_from_type(next);
 9054|       |
 9055|     34|            if (next == OVSINST_OFPIT13_METER && version >= OFP15_VERSION) {
  ------------------
  |  Branch (9055:17): [True: 0, False: 34]
  |  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|     34|            } else {
 9059|     34|                verify_error(errorp, "%s instruction not allowed here", name);
 9060|     34|                return OFPERR_OFPBIC_UNSUP_INST;
 9061|     34|            }
 9062|     34|        }
 9063|       |
 9064|   211k|        inst = next;
 9065|   211k|    }
 9066|       |
 9067|   175k|    return 0;
 9068|   188k|}
ofp-actions.c:verify_error:
 8916|  10.5k|{
 8917|  10.5k|    va_list args;
 8918|  10.5k|    va_start(args, format);
 8919|  10.5k|    char *error = xvasprintf(format, args);
 8920|  10.5k|    va_end(args);
 8921|       |
 8922|  10.5k|    if (errorp) {
  ------------------
  |  Branch (8922:9): [True: 0, False: 10.5k]
  ------------------
 8923|      0|        *errorp = error;
 8924|  10.5k|    } else {
 8925|  10.5k|        VLOG_WARN("%s", error);
  ------------------
  |  |  209|  10.5k|#define VLOG_WARN(...) VLOG(VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  280|  10.5k|    do {                                                \
  |  |  |  |  281|  10.5k|        enum vlog_level level__ = LEVEL;                \
  |  |  |  |  282|  10.5k|        if (this_module.min_level >= level__) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (282:13): [True: 0, False: 10.5k]
  |  |  |  |  ------------------
  |  |  |  |  283|      0|            vlog(&this_module, level__, __VA_ARGS__);   \
  |  |  |  |  284|      0|        }                                               \
  |  |  |  |  285|  10.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (285:14): [Folded, False: 10.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8926|  10.5k|        free(error);
 8927|  10.5k|    }
 8928|  10.5k|}
ofp-actions.c:ofpacts_verify_nested:
 8949|   219k|{
 8950|   219k|    const struct mf_field *field = ofpact_get_mf_dst(a);
 8951|       |
 8952|   219k|    if (field && field_requires_ct(field->id) && outer_action != OFPACT_CT) {
  ------------------
  |  Branch (8952:9): [True: 19.7k, False: 199k]
  |  Branch (8952:18): [True: 1.33k, False: 18.4k]
  |  Branch (8952:50): [True: 324, False: 1.01k]
  ------------------
 8953|    324|        verify_error(errorp, "cannot set CT fields outside of ct action");
 8954|    324|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 8955|    324|    }
 8956|   218k|    if (a->type == OFPACT_NAT) {
  ------------------
  |  Branch (8956:9): [True: 11.3k, False: 207k]
  ------------------
 8957|  11.3k|        if (outer_action != OFPACT_CT) {
  ------------------
  |  Branch (8957:13): [True: 7.24k, False: 4.06k]
  ------------------
 8958|  7.24k|            verify_error(errorp,
 8959|  7.24k|                         "Cannot have NAT action outside of \"ct\" action");
 8960|  7.24k|            return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 8961|  7.24k|        }
 8962|  4.06k|        return 0;
 8963|  11.3k|    }
 8964|       |
 8965|   207k|    if (outer_action) {
  ------------------
  |  Branch (8965:9): [True: 1.19k, False: 206k]
  ------------------
 8966|  1.19k|        ovs_assert(outer_action == OFPACT_WRITE_ACTIONS
  ------------------
  |  |   62|  1.19k|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (8966:20): [True: 0, False: 1.19k]
  ------------------
 8967|  1.19k|                   || outer_action == OFPACT_CT
  ------------------
  |  Branch (8967:23): [True: 1.19k, False: 0]
  ------------------
 8968|      0|                   || outer_action == OFPACT_CLONE);
  ------------------
  |  Branch (8968:23): [True: 0, False: 0]
  ------------------
 8969|       |
 8970|  1.19k|        if (outer_action == OFPACT_CT) {
  ------------------
  |  Branch (8970:13): [True: 1.19k, False: 0]
  ------------------
 8971|  1.19k|            if (!field) {
  ------------------
  |  Branch (8971:17): [True: 106, False: 1.09k]
  ------------------
 8972|    106|                return unsupported_nesting(a->type, outer_action, errorp);
 8973|  1.09k|            } else if (!field_requires_ct(field->id)) {
  ------------------
  |  Branch (8973:24): [True: 81, False: 1.01k]
  ------------------
 8974|     81|                verify_error(errorp,
 8975|     81|                             "%s action doesn't support nested modification "
 8976|     81|                             "of %s", ofpact_name(outer_action), field->name);
 8977|     81|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 8978|     81|            }
 8979|  1.19k|        }
 8980|       |
 8981|  1.01k|        if (a->type == OFPACT_METER) {
  ------------------
  |  Branch (8981:13): [True: 0, False: 1.01k]
  ------------------
 8982|      0|            return unsupported_nesting(a->type, outer_action, errorp);
 8983|      0|        }
 8984|  1.01k|    }
 8985|       |
 8986|   207k|    return 0;
 8987|   207k|}
ofp-actions.c:field_requires_ct:
 8941|  20.8k|{
 8942|  20.8k|    return field == MFF_CT_MARK || field == MFF_CT_LABEL;
  ------------------
  |  Branch (8942:12): [True: 2.34k, False: 18.5k]
  |  Branch (8942:36): [True: 0, False: 18.5k]
  ------------------
 8943|  20.8k|}
ofp-actions.c:unsupported_nesting:
 8933|    106|{
 8934|    106|    verify_error(errorp, "%s action doesn't support nested action %s",
 8935|    106|                 ofpact_name(outer_action), ofpact_name(action));
 8936|    106|    return OFPERR_OFPBAC_BAD_ARGUMENT;
 8937|    106|}
ofp-actions.c:next_load_segment:
 2967|  7.19k|{
 2968|  7.19k|    int n_bits = sf->field->n_bits;
 2969|  7.19k|    int n_bytes = sf->field->n_bytes;
 2970|  7.19k|    int start = dst->ofs + dst->n_bits;
 2971|       |
 2972|  7.19k|    if (start < n_bits) {
  ------------------
  |  Branch (2972:9): [True: 6.17k, False: 1.02k]
  ------------------
 2973|  6.17k|        dst->field = sf->field;
 2974|  6.17k|        dst->ofs = bitwise_scan(ofpact_set_field_mask(sf), n_bytes, 1, start,
  ------------------
  |  |  563|  6.17k|    ALIGNED_CAST(union mf_value *,                                          \
  |  |  ------------------
  |  |  |  |  434|  6.17k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  ------------------
  |  |  564|  6.17k|                 (uint8_t *)(SF)->value +                                   \
  |  |  565|  6.17k|                            ROUND_UP((SF)->field->n_bytes, OFPACT_ALIGNTO))
  ------------------
 2975|  6.17k|                                n_bits);
 2976|  6.17k|        if (dst->ofs < n_bits) {
  ------------------
  |  Branch (2976:13): [True: 3.59k, False: 2.57k]
  ------------------
 2977|  3.59k|            dst->n_bits = bitwise_scan(ofpact_set_field_mask(sf), n_bytes, 0,
  ------------------
  |  |  563|  3.59k|    ALIGNED_CAST(union mf_value *,                                          \
  |  |  ------------------
  |  |  |  |  434|  3.59k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  ------------------
  |  |  564|  3.59k|                 (uint8_t *)(SF)->value +                                   \
  |  |  565|  3.59k|                            ROUND_UP((SF)->field->n_bytes, OFPACT_ALIGNTO))
  ------------------
 2978|  3.59k|                                       dst->ofs + 1,
 2979|  3.59k|                                       MIN(dst->ofs + 64, n_bits)) - dst->ofs;
  ------------------
  |  |   91|  3.59k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (91:20): [True: 2.41k, False: 1.18k]
  |  |  ------------------
  ------------------
 2980|  3.59k|            *value = bitwise_get(sf->value, n_bytes, dst->ofs, dst->n_bits);
 2981|  3.59k|            return true;
 2982|  3.59k|        }
 2983|  6.17k|    }
 2984|  3.59k|    return false;
 2985|  7.19k|}
ofp-actions.c:get_ofpact_map:
 9158|  55.2k|{
 9159|       |    /* OpenFlow 1.0 actions. */
 9160|  55.2k|    static const struct ofpact_map of10[] = {
 9161|  55.2k|        { OFPACT_OUTPUT, 0 },
 9162|  55.2k|        { OFPACT_SET_VLAN_VID, 1 },
 9163|  55.2k|        { OFPACT_SET_VLAN_PCP, 2 },
 9164|  55.2k|        { OFPACT_STRIP_VLAN, 3 },
 9165|  55.2k|        { OFPACT_SET_ETH_SRC, 4 },
 9166|  55.2k|        { OFPACT_SET_ETH_DST, 5 },
 9167|  55.2k|        { OFPACT_SET_IPV4_SRC, 6 },
 9168|  55.2k|        { OFPACT_SET_IPV4_DST, 7 },
 9169|  55.2k|        { OFPACT_SET_IP_DSCP, 8 },
 9170|  55.2k|        { OFPACT_SET_L4_SRC_PORT, 9 },
 9171|  55.2k|        { OFPACT_SET_L4_DST_PORT, 10 },
 9172|  55.2k|        { OFPACT_ENQUEUE, 11 },
 9173|  55.2k|        { 0, -1 },
 9174|  55.2k|    };
 9175|       |
 9176|       |    /* OpenFlow 1.1 actions. */
 9177|  55.2k|    static const struct ofpact_map of11[] = {
 9178|  55.2k|        { OFPACT_OUTPUT, 0 },
 9179|  55.2k|        { OFPACT_SET_VLAN_VID, 1 },
 9180|  55.2k|        { OFPACT_SET_VLAN_PCP, 2 },
 9181|  55.2k|        { OFPACT_SET_ETH_SRC, 3 },
 9182|  55.2k|        { OFPACT_SET_ETH_DST, 4 },
 9183|  55.2k|        { OFPACT_SET_IPV4_SRC, 5 },
 9184|  55.2k|        { OFPACT_SET_IPV4_DST, 6 },
 9185|  55.2k|        { OFPACT_SET_IP_DSCP, 7 },
 9186|  55.2k|        { OFPACT_SET_IP_ECN, 8 },
 9187|  55.2k|        { OFPACT_SET_L4_SRC_PORT, 9 },
 9188|  55.2k|        { OFPACT_SET_L4_DST_PORT, 10 },
 9189|       |        /* OFPAT_COPY_TTL_OUT (11) not supported. */
 9190|       |        /* OFPAT_COPY_TTL_IN (12) not supported. */
 9191|  55.2k|        { OFPACT_SET_MPLS_LABEL, 13 },
 9192|  55.2k|        { OFPACT_SET_MPLS_TC, 14 },
 9193|  55.2k|        { OFPACT_SET_MPLS_TTL, 15 },
 9194|  55.2k|        { OFPACT_DEC_MPLS_TTL, 16 },
 9195|  55.2k|        { OFPACT_PUSH_VLAN, 17 },
 9196|  55.2k|        { OFPACT_STRIP_VLAN, 18 },
 9197|  55.2k|        { OFPACT_PUSH_MPLS, 19 },
 9198|  55.2k|        { OFPACT_POP_MPLS, 20 },
 9199|  55.2k|        { OFPACT_SET_QUEUE, 21 },
 9200|  55.2k|        { OFPACT_GROUP, 22 },
 9201|  55.2k|        { OFPACT_SET_IP_TTL, 23 },
 9202|  55.2k|        { OFPACT_DEC_TTL, 24 },
 9203|  55.2k|        { 0, -1 },
 9204|  55.2k|    };
 9205|       |
 9206|       |    /* OpenFlow 1.2, 1.3, and 1.4 actions. */
 9207|  55.2k|    static const struct ofpact_map of12[] = {
 9208|  55.2k|        { OFPACT_OUTPUT, 0 },
 9209|       |        /* OFPAT_COPY_TTL_OUT (11) not supported. */
 9210|       |        /* OFPAT_COPY_TTL_IN (12) not supported. */
 9211|  55.2k|        { OFPACT_SET_MPLS_TTL, 15 },
 9212|  55.2k|        { OFPACT_DEC_MPLS_TTL, 16 },
 9213|  55.2k|        { OFPACT_PUSH_VLAN, 17 },
 9214|  55.2k|        { OFPACT_STRIP_VLAN, 18 },
 9215|  55.2k|        { OFPACT_PUSH_MPLS, 19 },
 9216|  55.2k|        { OFPACT_POP_MPLS, 20 },
 9217|  55.2k|        { OFPACT_SET_QUEUE, 21 },
 9218|  55.2k|        { OFPACT_GROUP, 22 },
 9219|  55.2k|        { OFPACT_SET_IP_TTL, 23 },
 9220|  55.2k|        { OFPACT_DEC_TTL, 24 },
 9221|  55.2k|        { OFPACT_SET_FIELD, 25 },
 9222|       |        /* OF1.3+ OFPAT_PUSH_PBB (26) not supported. */
 9223|       |        /* OF1.3+ OFPAT_POP_PBB (27) not supported. */
 9224|  55.2k|        { 0, -1 },
 9225|  55.2k|    };
 9226|       |
 9227|  55.2k|    switch (version) {
 9228|    976|    case OFP10_VERSION:
  ------------------
  |  Branch (9228:5): [True: 976, False: 54.3k]
  ------------------
 9229|    976|        return of10;
 9230|       |
 9231|  15.2k|    case OFP11_VERSION:
  ------------------
  |  Branch (9231:5): [True: 15.2k, False: 40.0k]
  ------------------
 9232|  15.2k|        return of11;
 9233|       |
 9234|  31.3k|    case OFP12_VERSION:
  ------------------
  |  Branch (9234:5): [True: 31.3k, False: 23.9k]
  ------------------
 9235|  31.3k|    case OFP13_VERSION:
  ------------------
  |  Branch (9235:5): [True: 0, False: 55.2k]
  ------------------
 9236|  37.0k|    case OFP14_VERSION:
  ------------------
  |  Branch (9236:5): [True: 5.75k, False: 49.5k]
  ------------------
 9237|  39.1k|    case OFP15_VERSION:
  ------------------
  |  Branch (9237:5): [True: 2.03k, False: 53.2k]
  ------------------
 9238|  39.1k|    default:
  ------------------
  |  Branch (9238:5): [True: 0, False: 55.2k]
  ------------------
 9239|  39.1k|        return of12;
 9240|  55.2k|    }
 9241|  55.2k|}
ofp-actions.c:ofpact_format:
 9465|   238k|{
 9466|   238k|    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|  10.9k|    OFPACT(OUTPUT,          ofpact_output,      ofpact, "output")       \
  |  |  ------------------
  |  |  |  | 9468|  10.9k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 10.9k, False: 227k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  10.9k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  10.9k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  10.9k|            break;
  |  |  ------------------
  |  |   65|  10.9k|    OFPACT(GROUP,           ofpact_group,       ofpact, "group")        \
  |  |  ------------------
  |  |  |  | 9468|    961|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 961, False: 237k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    961|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    961|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    961|            break;
  |  |  ------------------
  |  |   66|  3.93k|    OFPACT(CONTROLLER,      ofpact_controller,  userdata, "controller") \
  |  |  ------------------
  |  |  |  | 9468|  3.93k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 3.93k, False: 234k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  3.93k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  3.93k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  3.93k|            break;
  |  |  ------------------
  |  |   67|  3.93k|    OFPACT(ENQUEUE,         ofpact_enqueue,     ofpact, "enqueue")      \
  |  |  ------------------
  |  |  |  | 9468|    187|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 187, False: 238k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    187|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    187|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    187|            break;
  |  |  ------------------
  |  |   68|    273|    OFPACT(OUTPUT_REG,      ofpact_output_reg,  ofpact, "output_reg")   \
  |  |  ------------------
  |  |  |  | 9468|    273|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 273, False: 238k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    273|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    273|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    273|            break;
  |  |  ------------------
  |  |   69|  2.10k|    OFPACT(BUNDLE,          ofpact_bundle,      members, "bundle")      \
  |  |  ------------------
  |  |  |  | 9468|  2.10k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 2.10k, False: 236k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  2.10k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  2.10k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  2.10k|            break;
  |  |  ------------------
  |  |   70|  2.10k|                                                                        \
  |  |   71|  2.10k|    /* Header changes. */                                               \
  |  |   72|  12.5k|    OFPACT(SET_FIELD,       ofpact_set_field,   ofpact, "set_field")    \
  |  |  ------------------
  |  |  |  | 9468|  12.5k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 12.5k, False: 225k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  12.5k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  12.5k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  12.5k|            break;
  |  |  ------------------
  |  |   73|  12.5k|    OFPACT(SET_VLAN_VID,    ofpact_vlan_vid,    ofpact, "set_vlan_vid") \
  |  |  ------------------
  |  |  |  | 9468|  5.77k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 5.77k, False: 232k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  5.77k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  5.77k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  5.77k|            break;
  |  |  ------------------
  |  |   74|  5.77k|    OFPACT(SET_VLAN_PCP,    ofpact_vlan_pcp,    ofpact, "set_vlan_pcp") \
  |  |  ------------------
  |  |  |  | 9468|  4.60k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 4.60k, False: 233k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  4.60k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  4.60k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  4.60k|            break;
  |  |  ------------------
  |  |   75|  8.76k|    OFPACT(STRIP_VLAN,      ofpact_null,        ofpact, "strip_vlan")   \
  |  |  ------------------
  |  |  |  | 9468|  8.76k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 8.76k, False: 229k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  8.76k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  8.76k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  8.76k|            break;
  |  |  ------------------
  |  |   76|  8.76k|    OFPACT(PUSH_VLAN,       ofpact_push_vlan,   ofpact, "push_vlan")    \
  |  |  ------------------
  |  |  |  | 9468|  1.15k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.15k, False: 237k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.15k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.15k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.15k|            break;
  |  |  ------------------
  |  |   77|  1.15k|    OFPACT(SET_ETH_SRC,     ofpact_mac,         ofpact, "mod_dl_src")   \
  |  |  ------------------
  |  |  |  | 9468|    573|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 573, False: 237k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    573|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    573|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    573|            break;
  |  |  ------------------
  |  |   78|    573|    OFPACT(SET_ETH_DST,     ofpact_mac,         ofpact, "mod_dl_dst")   \
  |  |  ------------------
  |  |  |  | 9468|    378|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 378, False: 238k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    378|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    378|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    378|            break;
  |  |  ------------------
  |  |   79|  3.36k|    OFPACT(SET_IPV4_SRC,    ofpact_ipv4,        ofpact, "mod_nw_src")   \
  |  |  ------------------
  |  |  |  | 9468|  3.36k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 3.36k, False: 235k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  3.36k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  3.36k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  3.36k|            break;
  |  |  ------------------
  |  |   80|  6.87k|    OFPACT(SET_IPV4_DST,    ofpact_ipv4,        ofpact, "mod_nw_dst")   \
  |  |  ------------------
  |  |  |  | 9468|  6.87k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 6.87k, False: 231k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  6.87k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  6.87k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  6.87k|            break;
  |  |  ------------------
  |  |   81|  7.04k|    OFPACT(SET_IP_DSCP,     ofpact_dscp,        ofpact, "mod_nw_tos")   \
  |  |  ------------------
  |  |  |  | 9468|  7.04k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 7.04k, False: 231k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  7.04k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  7.04k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  7.04k|            break;
  |  |  ------------------
  |  |   82|  7.04k|    OFPACT(SET_IP_ECN,      ofpact_ecn,         ofpact, "mod_nw_ecn")   \
  |  |  ------------------
  |  |  |  | 9468|  4.09k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 4.09k, False: 234k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  4.09k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  4.09k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  4.09k|            break;
  |  |  ------------------
  |  |   83|  4.09k|    OFPACT(SET_IP_TTL,      ofpact_ip_ttl,      ofpact, "mod_nw_ttl")   \
  |  |  ------------------
  |  |  |  | 9468|  1.44k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.44k, False: 237k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.44k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.44k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.44k|            break;
  |  |  ------------------
  |  |   84|  14.1k|    OFPACT(SET_L4_SRC_PORT, ofpact_l4_port,     ofpact, "mod_tp_src")   \
  |  |  ------------------
  |  |  |  | 9468|  14.1k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 14.1k, False: 224k]
  |  |  |  |  ------------------
  |  |  |  | 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;
  |  |  ------------------
  |  |   85|  14.1k|    OFPACT(SET_L4_DST_PORT, ofpact_l4_port,     ofpact, "mod_tp_dst")   \
  |  |  ------------------
  |  |  |  | 9468|  8.65k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 8.65k, False: 229k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  8.65k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  8.65k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  8.65k|            break;
  |  |  ------------------
  |  |   86|  8.65k|    OFPACT(REG_MOVE,        ofpact_reg_move,    ofpact, "move")         \
  |  |  ------------------
  |  |  |  | 9468|    338|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 338, False: 238k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    338|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    338|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    338|            break;
  |  |  ------------------
  |  |   87|    338|    OFPACT(STACK_PUSH,      ofpact_stack,       ofpact, "push")         \
  |  |  ------------------
  |  |  |  | 9468|    200|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 200, False: 238k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    200|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    200|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    200|            break;
  |  |  ------------------
  |  |   88|  1.05k|    OFPACT(STACK_POP,       ofpact_stack,       ofpact, "pop")          \
  |  |  ------------------
  |  |  |  | 9468|  1.05k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.05k, False: 237k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.05k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.05k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.05k|            break;
  |  |  ------------------
  |  |   89|  6.57k|    OFPACT(DEC_TTL,         ofpact_cnt_ids,     cnt_ids, "dec_ttl")     \
  |  |  ------------------
  |  |  |  | 9468|  6.57k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 6.57k, False: 231k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  6.57k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  6.57k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  6.57k|            break;
  |  |  ------------------
  |  |   90|  6.57k|    OFPACT(SET_MPLS_LABEL,  ofpact_mpls_label,  ofpact, "set_mpls_label") \
  |  |  ------------------
  |  |  |  | 9468|    921|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 921, False: 237k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    921|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    921|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    921|            break;
  |  |  ------------------
  |  |   91|  1.14k|    OFPACT(SET_MPLS_TC,     ofpact_mpls_tc,     ofpact, "set_mpls_tc")  \
  |  |  ------------------
  |  |  |  | 9468|  1.14k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.14k, False: 237k]
  |  |  |  |  ------------------
  |  |  |  | 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;
  |  |  ------------------
  |  |   92|  2.35k|    OFPACT(SET_MPLS_TTL,    ofpact_mpls_ttl,    ofpact, "set_mpls_ttl") \
  |  |  ------------------
  |  |  |  | 9468|  2.35k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 2.35k, False: 236k]
  |  |  |  |  ------------------
  |  |  |  | 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;
  |  |  ------------------
  |  |   93|  6.59k|    OFPACT(DEC_MPLS_TTL,    ofpact_null,        ofpact, "dec_mpls_ttl") \
  |  |  ------------------
  |  |  |  | 9468|  6.59k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 6.59k, False: 231k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  6.59k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  6.59k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  6.59k|            break;
  |  |  ------------------
  |  |   94|  6.59k|    OFPACT(PUSH_MPLS,       ofpact_push_mpls,   ofpact, "push_mpls")    \
  |  |  ------------------
  |  |  |  | 9468|  4.63k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 4.63k, False: 233k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  4.63k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  4.63k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  4.63k|            break;
  |  |  ------------------
  |  |   95|  8.49k|    OFPACT(POP_MPLS,        ofpact_pop_mpls,    ofpact, "pop_mpls")     \
  |  |  ------------------
  |  |  |  | 9468|  8.49k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 8.49k, False: 229k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  8.49k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  8.49k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  8.49k|            break;
  |  |  ------------------
  |  |   96|  8.49k|    OFPACT(DEC_NSH_TTL,     ofpact_null,        ofpact, "dec_nsh_ttl")  \
  |  |  ------------------
  |  |  |  | 9468|  1.71k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.71k, False: 236k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.71k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.71k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.71k|            break;
  |  |  ------------------
  |  |   97|  1.71k|    OFPACT(DELETE_FIELD,    ofpact_delete_field, ofpact, "delete_field") \
  |  |  ------------------
  |  |  |  | 9468|     46|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 46, False: 238k]
  |  |  |  |  ------------------
  |  |  |  | 9469|     46|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|     46|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|     46|            break;
  |  |  ------------------
  |  |   98|     46|                                                                        \
  |  |   99|     46|    /* Generic encap & decap */                                         \
  |  |  100|  4.30k|    OFPACT(ENCAP,           ofpact_encap,       props, "encap")         \
  |  |  ------------------
  |  |  |  | 9468|  4.30k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 4.30k, False: 234k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  4.30k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  4.30k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  4.30k|            break;
  |  |  ------------------
  |  |  101|  12.2k|    OFPACT(DECAP,           ofpact_decap,       ofpact, "decap")        \
  |  |  ------------------
  |  |  |  | 9468|  12.2k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 12.2k, False: 226k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  12.2k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  12.2k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  12.2k|            break;
  |  |  ------------------
  |  |  102|  12.2k|                                                                        \
  |  |  103|  12.2k|    /* Metadata. */                                                     \
  |  |  104|  12.2k|    OFPACT(SET_TUNNEL,      ofpact_tunnel,      ofpact, "set_tunnel")   \
  |  |  ------------------
  |  |  |  | 9468|    475|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 475, False: 238k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    475|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    475|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    475|            break;
  |  |  ------------------
  |  |  105|    516|    OFPACT(SET_QUEUE,       ofpact_queue,       ofpact, "set_queue")    \
  |  |  ------------------
  |  |  |  | 9468|    516|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 516, False: 237k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    516|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    516|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    516|            break;
  |  |  ------------------
  |  |  106|    937|    OFPACT(POP_QUEUE,       ofpact_null,        ofpact, "pop_queue")    \
  |  |  ------------------
  |  |  |  | 9468|    937|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 937, False: 237k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    937|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    937|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    937|            break;
  |  |  ------------------
  |  |  107|    992|    OFPACT(FIN_TIMEOUT,     ofpact_fin_timeout, ofpact, "fin_timeout")  \
  |  |  ------------------
  |  |  |  | 9468|    992|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 992, False: 237k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    992|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    992|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    992|            break;
  |  |  ------------------
  |  |  108|    992|                                                                        \
  |  |  109|    992|    /* Flow table interaction. */                                       \
  |  |  110|  2.48k|    OFPACT(RESUBMIT,        ofpact_resubmit,    ofpact, "resubmit")     \
  |  |  ------------------
  |  |  |  | 9468|  2.48k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 2.48k, False: 235k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  2.48k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  2.48k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  2.48k|            break;
  |  |  ------------------
  |  |  111|  22.9k|    OFPACT(LEARN,           ofpact_learn,       specs, "learn")         \
  |  |  ------------------
  |  |  |  | 9468|  22.9k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 22.9k, False: 215k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  22.9k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  22.9k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  22.9k|            break;
  |  |  ------------------
  |  |  112|  22.9k|    OFPACT(CONJUNCTION,     ofpact_conjunction, ofpact, "conjunction")  \
  |  |  ------------------
  |  |  |  | 9468|  2.29k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 2.29k, False: 236k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  2.29k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  2.29k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  2.29k|            break;
  |  |  ------------------
  |  |  113|  2.29k|                                                                        \
  |  |  114|  2.29k|    /* Arithmetic. */                                                   \
  |  |  115|  2.29k|    OFPACT(MULTIPATH,       ofpact_multipath,   ofpact, "multipath")    \
  |  |  ------------------
  |  |  |  | 9468|  2.15k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 2.15k, False: 236k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  2.15k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  2.15k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  2.15k|            break;
  |  |  ------------------
  |  |  116|  2.15k|                                                                        \
  |  |  117|  2.15k|    /* Other. */                                                        \
  |  |  118|  5.04k|    OFPACT(NOTE,            ofpact_note,        data, "note")           \
  |  |  ------------------
  |  |  |  | 9468|  5.04k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 5.04k, False: 233k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  5.04k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  5.04k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  5.04k|            break;
  |  |  ------------------
  |  |  119|  5.04k|    OFPACT(EXIT,            ofpact_null,        ofpact, "exit")         \
  |  |  ------------------
  |  |  |  | 9468|  2.52k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 2.52k, False: 235k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  2.52k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  2.52k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  2.52k|            break;
  |  |  ------------------
  |  |  120|  5.13k|    OFPACT(SAMPLE,          ofpact_sample,      ofpact, "sample")       \
  |  |  ------------------
  |  |  |  | 9468|  5.13k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 5.13k, False: 233k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  5.13k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  5.13k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  5.13k|            break;
  |  |  ------------------
  |  |  121|  10.9k|    OFPACT(UNROLL_XLATE,    ofpact_unroll_xlate, ofpact, "unroll_xlate") \
  |  |  ------------------
  |  |  |  | 9468|  10.9k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 10.9k, False: 227k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  10.9k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  10.9k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  10.9k|            break;
  |  |  ------------------
  |  |  122|  10.9k|    OFPACT(CT,              ofpact_conntrack,   ofpact, "ct")           \
  |  |  ------------------
  |  |  |  | 9468|  10.0k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 10.0k, False: 228k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  10.0k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  10.0k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  10.0k|            break;
  |  |  ------------------
  |  |  123|  10.0k|    OFPACT(CT_CLEAR,        ofpact_null,        ofpact, "ct_clear")     \
  |  |  ------------------
  |  |  |  | 9468|    123|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 123, False: 238k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    123|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    123|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    123|            break;
  |  |  ------------------
  |  |  124|    123|    OFPACT(NAT,             ofpact_nat,         ofpact, "nat")          \
  |  |  ------------------
  |  |  |  | 9468|      0|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 0, False: 238k]
  |  |  |  |  ------------------
  |  |  |  | 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: 237k]
  |  |  |  |  ------------------
  |  |  |  | 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|  3.47k|    OFPACT(CLONE,           ofpact_nest,        actions, "clone")       \
  |  |  ------------------
  |  |  |  | 9468|  3.47k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 3.47k, False: 235k]
  |  |  |  |  ------------------
  |  |  |  | 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;
  |  |  ------------------
  |  |  127|  3.47k|    OFPACT(CHECK_PKT_LARGER, ofpact_check_pkt_larger, ofpact,           \
  |  |  ------------------
  |  |  |  | 9468|    504|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 504, False: 237k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    504|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    504|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    504|            break;
  |  |  ------------------
  |  |  128|    504|           "check_pkt_larger")                                          \
  |  |  129|    504|                                                                        \
  |  |  130|    504|    /* Debugging actions.                                               \
  |  |  131|    504|     *                                                                  \
  |  |  132|    504|     * These are intentionally undocumented, subject to change, and     \
  |  |  133|    504|     * only accepted if ovs-vswitchd is started with --enable-dummy. */ \
  |  |  134|    504|    OFPACT(DEBUG_RECIRC, ofpact_null,           ofpact, "debug_recirc") \
  |  |  ------------------
  |  |  |  | 9468|      0|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 0, False: 238k]
  |  |  |  |  ------------------
  |  |  |  | 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: 238k]
  |  |  |  |  ------------------
  |  |  |  | 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|    329|    OFPACT(METER,           ofpact_meter,       ofpact, "meter")        \
  |  |  ------------------
  |  |  |  | 9468|    329|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 329, False: 238k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    329|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    329|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    329|            break;
  |  |  ------------------
  |  |  139|    329|    OFPACT(CLEAR_ACTIONS,   ofpact_null,        ofpact, "clear_actions") \
  |  |  ------------------
  |  |  |  | 9468|    309|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 309, False: 238k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    309|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    309|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    309|            break;
  |  |  ------------------
  |  |  140|  15.3k|    OFPACT(WRITE_ACTIONS,   ofpact_nest,        actions, "write_actions") \
  |  |  ------------------
  |  |  |  | 9468|  15.3k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 15.3k, False: 223k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  15.3k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  15.3k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  15.3k|            break;
  |  |  ------------------
  |  |  141|  15.3k|    OFPACT(WRITE_METADATA,  ofpact_metadata,    ofpact, "write_metadata") \
  |  |  ------------------
  |  |  |  | 9468|  1.47k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.47k, False: 237k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.47k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.47k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.47k|            break;
  |  |  ------------------
  |  |  142|  1.47k|    OFPACT(GOTO_TABLE,      ofpact_goto_table,  ofpact, "goto_table")
  |  |  ------------------
  |  |  |  | 9468|    760|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 760, False: 237k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    760|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    760|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    760|            break;
  |  |  ------------------
  ------------------
 9472|      0|#undef OFPACT
 9473|      0|    default:
  ------------------
  |  Branch (9473:5): [True: 0, False: 238k]
  ------------------
 9474|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 9475|   238k|    }
 9476|   238k|}
ofp-actions.c:format_OUTPUT:
  704|  10.9k|{
  705|  10.9k|    if (ofp_to_u16(a->port) < ofp_to_u16(OFPP_MAX)) {
  ------------------
  |  |   33|  10.9k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|  10.9k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (705:9): [True: 5.59k, False: 5.39k]
  ------------------
  706|  5.59k|        ds_put_format(fp->s, "%soutput:%s", colors.special, colors.end);
  707|  5.59k|    }
  708|  10.9k|    ofputil_format_port(a->port, fp->port_map, fp->s);
  709|  10.9k|    if (a->port == OFPP_CONTROLLER) {
  ------------------
  |  |   45|  10.9k|#define OFPP_CONTROLLER OFP_PORT_C(0xfffd) /* Send to controller. */
  |  |  ------------------
  |  |  |  |  157|  10.9k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (709:9): [True: 2.08k, False: 8.90k]
  ------------------
  710|       |        ds_put_format(fp->s, ":%"PRIu16, a->max_len);
  711|  2.08k|    }
  712|  10.9k|}
ofp-actions.c:format_GROUP:
  748|    961|{
  749|       |    ds_put_format(fp->s, "%sgroup:%s%"PRIu32,
  750|    961|                  colors.special, colors.end, a->group_id);
  751|    961|}
ofp-actions.c:format_CONTROLLER:
 1029|  3.93k|{
 1030|  3.93k|    if (a->reason == OFPR_ACTION && !a->controller_id && !a->userdata_len
  ------------------
  |  Branch (1030:9): [True: 1.17k, False: 2.76k]
  |  Branch (1030:37): [True: 936, False: 241]
  |  Branch (1030:58): [True: 859, False: 77]
  ------------------
 1031|    859|        && !a->pause && a->meter_id == NX_CTLR_NO_METER) {
  ------------------
  |  |  307|    480|#define NX_CTLR_NO_METER 0
  ------------------
  |  Branch (1031:12): [True: 480, False: 379]
  |  Branch (1031:25): [True: 213, False: 267]
  ------------------
 1032|    213|        ds_put_format(fp->s, "%sCONTROLLER:%s%"PRIu16,
 1033|    213|                      colors.special, colors.end, a->max_len);
 1034|  3.72k|    } else {
 1035|  3.72k|        enum ofp_packet_in_reason reason = a->reason;
 1036|       |
 1037|  3.72k|        ds_put_format(fp->s, "%scontroller(%s", colors.paren, colors.end);
 1038|  3.72k|        if (reason != OFPR_ACTION) {
  ------------------
  |  Branch (1038:13): [True: 2.76k, False: 964]
  ------------------
 1039|  2.76k|            char reasonbuf[OFPUTIL_PACKET_IN_REASON_BUFSIZE];
 1040|       |
 1041|  2.76k|            ds_put_format(fp->s, "%sreason=%s%s,", colors.param, colors.end,
 1042|  2.76k|                          ofputil_packet_in_reason_to_string(
 1043|  2.76k|                              reason, reasonbuf, sizeof reasonbuf));
 1044|  2.76k|        }
 1045|  3.72k|        if (a->max_len != UINT16_MAX) {
  ------------------
  |  Branch (1045:13): [True: 3.22k, False: 503]
  ------------------
 1046|  3.22k|            ds_put_format(fp->s, "%smax_len=%s%"PRIu16",",
 1047|  3.22k|                          colors.param, colors.end, a->max_len);
 1048|  3.22k|        }
 1049|  3.72k|        if (a->controller_id != 0) {
  ------------------
  |  Branch (1049:13): [True: 2.46k, False: 1.26k]
  ------------------
 1050|  2.46k|            ds_put_format(fp->s, "%sid=%s%"PRIu16",",
 1051|  2.46k|                          colors.param, colors.end, a->controller_id);
 1052|  2.46k|        }
 1053|  3.72k|        if (a->userdata_len) {
  ------------------
  |  Branch (1053:13): [True: 77, False: 3.64k]
  ------------------
 1054|     77|            ds_put_format(fp->s, "%suserdata=%s", colors.param, colors.end);
 1055|     77|            ds_put_hex_with_delimiter(fp->s, a->userdata, a->userdata_len,
 1056|     77|                                      ".");
 1057|     77|            ds_put_char(fp->s, ',');
 1058|     77|        }
 1059|  3.72k|        if (a->pause) {
  ------------------
  |  Branch (1059:13): [True: 379, False: 3.34k]
  ------------------
 1060|    379|            ds_put_format(fp->s, "%spause%s,", colors.value, colors.end);
 1061|    379|        }
 1062|  3.72k|        if (a->meter_id != NX_CTLR_NO_METER) {
  ------------------
  |  |  307|  3.72k|#define NX_CTLR_NO_METER 0
  ------------------
  |  Branch (1062:13): [True: 268, False: 3.45k]
  ------------------
 1063|    268|            ds_put_format(fp->s, "%smeter_id=%s%"PRIu32",",
 1064|    268|                          colors.param, colors.end, a->meter_id);
 1065|    268|        }
 1066|  3.72k|        ds_chomp(fp->s, ',');
 1067|  3.72k|        ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 1068|  3.72k|    }
 1069|  3.93k|}
ofp-actions.c:format_ENQUEUE:
 1152|    187|{
 1153|    187|    ds_put_format(fp->s, "%senqueue:%s", colors.param, colors.end);
 1154|    187|    ofputil_format_port(a->port, fp->port_map, fp->s);
 1155|       |    ds_put_format(fp->s, ":%"PRIu32, a->queue);
 1156|    187|}
ofp-actions.c:format_OUTPUT_REG:
 1318|    273|{
 1319|    273|    ds_put_format(fp->s, "%soutput:%s", colors.special, colors.end);
 1320|    273|    mf_format_subfield(&a->src, fp->s);
 1321|    273|}
ofp-actions.c:format_BUNDLE:
 1545|  2.10k|{
 1546|  2.10k|    bundle_format(a, fp->port_map, fp->s);
 1547|  2.10k|}
ofp-actions.c:format_SET_FIELD:
 3326|  12.5k|{
 3327|  12.5k|    if (a->ofpact.raw == NXAST_RAW_REG_LOAD) {
  ------------------
  |  Branch (3327:9): [True: 3.59k, False: 8.98k]
  ------------------
 3328|  3.59k|        struct mf_subfield dst;
 3329|  3.59k|        uint64_t value;
 3330|       |
 3331|  3.59k|        dst.ofs = dst.n_bits = 0;
 3332|  7.19k|        while (next_load_segment(a, &dst, &value)) {
  ------------------
  |  Branch (3332:16): [True: 3.59k, False: 3.59k]
  ------------------
 3333|  3.59k|            ds_put_format(fp->s, "%sload:%s%#"PRIx64"%s->%s",
 3334|  3.59k|                          colors.special, colors.end, value,
 3335|  3.59k|                          colors.special, colors.end);
 3336|  3.59k|            mf_format_subfield(&dst, fp->s);
 3337|  3.59k|            ds_put_char(fp->s, ',');
 3338|  3.59k|        }
 3339|  3.59k|        ds_chomp(fp->s, ',');
 3340|  8.98k|    } else {
 3341|  8.98k|        ds_put_format(fp->s, "%sset_field:%s", colors.special, colors.end);
 3342|  8.98k|        mf_format(a->field, a->value, ofpact_set_field_mask(a),
  ------------------
  |  |  563|  8.98k|    ALIGNED_CAST(union mf_value *,                                          \
  |  |  ------------------
  |  |  |  |  434|  8.98k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  ------------------
  |  |  564|  8.98k|                 (uint8_t *)(SF)->value +                                   \
  |  |  565|  8.98k|                            ROUND_UP((SF)->field->n_bytes, OFPACT_ALIGNTO))
  ------------------
 3343|  8.98k|                  fp->port_map, fp->s);
 3344|  8.98k|        ds_put_format(fp->s, "%s->%s%s",
 3345|  8.98k|                      colors.special, colors.end, a->field->name);
 3346|  8.98k|    }
 3347|  12.5k|}
ofp-actions.c:format_SET_VLAN_VID:
 1641|  5.77k|{
 1642|  5.77k|    ds_put_format(fp->s, "%s%s:%s%"PRIu16, colors.param,
 1643|  5.77k|                  a->push_vlan_if_needed ? "mod_vlan_vid" : "set_vlan_vid",
  ------------------
  |  Branch (1643:19): [True: 5.43k, False: 344]
  ------------------
 1644|  5.77k|                  colors.end, a->vlan_vid);
 1645|  5.77k|}
ofp-actions.c:format_SET_VLAN_PCP:
 1749|  4.60k|{
 1750|  4.60k|    ds_put_format(fp->s, "%s%s:%s%"PRIu8, colors.param,
 1751|  4.60k|                  a->push_vlan_if_needed ? "mod_vlan_pcp" : "set_vlan_pcp",
  ------------------
  |  Branch (1751:19): [True: 3.53k, False: 1.06k]
  ------------------
 1752|  4.60k|                  colors.end, a->vlan_pcp);
 1753|  4.60k|}
ofp-actions.c:format_STRIP_VLAN:
 1816|  8.76k|{
 1817|  8.76k|    ds_put_format(fp->s, (a->ofpact.raw == OFPAT_RAW11_POP_VLAN
  ------------------
  |  Branch (1817:27): [True: 4.85k, False: 3.91k]
  ------------------
 1818|  8.76k|                    ? "%spop_vlan%s"
 1819|  8.76k|                    : "%sstrip_vlan%s"),
 1820|  8.76k|                  colors.value, colors.end);
 1821|  8.76k|}
ofp-actions.c:format_PUSH_VLAN:
 1886|  1.15k|{
 1887|  1.15k|    ds_put_format(fp->s, "%spush_vlan:%s%#"PRIx16,
 1888|       |                  colors.param, colors.end, ntohs(push_vlan->ethertype));
 1889|  1.15k|}
ofp-actions.c:format_SET_ETH_SRC:
 1982|    573|{
 1983|    573|    ds_put_format(fp->s, "%smod_dl_src:%s"ETH_ADDR_FMT,
  ------------------
  |  |  370|    573|    "%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8
  ------------------
 1984|    573|                  colors.param, colors.end, ETH_ADDR_ARGS(a->mac));
  ------------------
  |  |  371|    573|#define ETH_ADDR_ARGS(EA) ETH_ADDR_BYTES_ARGS((EA).ea)
  |  |  ------------------
  |  |  |  |  373|    573|         (EAB)[0], (EAB)[1], (EAB)[2], (EAB)[3], (EAB)[4], (EAB)[5]
  |  |  ------------------
  ------------------
 1985|    573|}
ofp-actions.c:format_SET_ETH_DST:
 1990|    378|{
 1991|    378|    ds_put_format(fp->s, "%smod_dl_dst:%s"ETH_ADDR_FMT,
  ------------------
  |  |  370|    378|    "%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8
  ------------------
 1992|    378|                  colors.param, colors.end, ETH_ADDR_ARGS(a->mac));
  ------------------
  |  |  371|    378|#define ETH_ADDR_ARGS(EA) ETH_ADDR_BYTES_ARGS((EA).ea)
  |  |  ------------------
  |  |  |  |  373|    378|         (EAB)[0], (EAB)[1], (EAB)[2], (EAB)[3], (EAB)[4], (EAB)[5]
  |  |  ------------------
  ------------------
 1993|    378|}
ofp-actions.c:format_SET_IPV4_SRC:
 2074|  3.36k|{
 2075|  3.36k|    ds_put_format(fp->s, "%smod_nw_src:%s"IP_FMT,
  ------------------
  |  |  628|  3.36k|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
 2076|       |                  colors.param, colors.end, IP_ARGS(a->ipv4));
  ------------------
  |  |  630|  3.36k|    ntohl(ip) >> 24,                            \
  |  |  631|  3.36k|    (ntohl(ip) >> 16) & 0xff,                   \
  |  |  632|  3.36k|    (ntohl(ip) >> 8) & 0xff,                    \
  |  |  633|  3.36k|    ntohl(ip) & 0xff
  ------------------
 2077|  3.36k|}
ofp-actions.c:format_SET_IPV4_DST:
 2082|  6.87k|{
 2083|  6.87k|    ds_put_format(fp->s, "%smod_nw_dst:%s"IP_FMT,
  ------------------
  |  |  628|  6.87k|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
 2084|       |                  colors.param, colors.end, IP_ARGS(a->ipv4));
  ------------------
  |  |  630|  6.87k|    ntohl(ip) >> 24,                            \
  |  |  631|  6.87k|    (ntohl(ip) >> 16) & 0xff,                   \
  |  |  632|  6.87k|    (ntohl(ip) >> 8) & 0xff,                    \
  |  |  633|  6.87k|    ntohl(ip) & 0xff
  ------------------
 2085|  6.87k|}
ofp-actions.c:format_SET_IP_DSCP:
 2159|  7.04k|{
 2160|  7.04k|    ds_put_format(fp->s, "%smod_nw_tos:%s%d",
 2161|  7.04k|                  colors.param, colors.end, a->dscp);
 2162|  7.04k|}
ofp-actions.c:format_SET_IP_ECN:
 2232|  4.09k|{
 2233|  4.09k|    ds_put_format(fp->s, "%smod_nw_ecn:%s%d",
 2234|  4.09k|                  colors.param, colors.end, a->ecn);
 2235|  4.09k|}
ofp-actions.c:format_SET_IP_TTL:
 2287|  1.44k|{
 2288|  1.44k|    ds_put_format(fp->s, "%smod_nw_ttl:%s%d",
 2289|  1.44k|                  colors.param, colors.end, a->ttl);
 2290|  1.44k|}
ofp-actions.c:format_SET_L4_SRC_PORT:
 2377|  14.1k|{
 2378|  14.1k|    ds_put_format(fp->s, "%smod_tp_src:%s%d",
 2379|  14.1k|                  colors.param, colors.end, a->port);
 2380|  14.1k|}
ofp-actions.c:format_SET_L4_DST_PORT:
 2385|  8.65k|{
 2386|  8.65k|    ds_put_format(fp->s, "%smod_tp_dst:%s%d",
 2387|  8.65k|                  colors.param, colors.end, a->port);
 2388|  8.65k|}
ofp-actions.c:format_REG_MOVE:
 2715|    338|{
 2716|    338|    nxm_format_reg_move(a, fp->s);
 2717|    338|}
ofp-actions.c:format_STACK_PUSH:
 3558|    200|{
 3559|    200|    nxm_format_stack_push(a, fp->s);
 3560|    200|}
ofp-actions.c:format_STACK_POP:
 3565|  1.05k|{
 3566|  1.05k|    nxm_format_stack_pop(a, fp->s);
 3567|  1.05k|}
ofp-actions.c:format_DEC_TTL:
 3736|  6.57k|{
 3737|  6.57k|    size_t i;
 3738|       |
 3739|  6.57k|    ds_put_format(fp->s, "%sdec_ttl%s", colors.paren, colors.end);
 3740|  6.57k|    if (a->ofpact.raw == NXAST_RAW_DEC_TTL_CNT_IDS) {
  ------------------
  |  Branch (3740:9): [True: 2.61k, False: 3.96k]
  ------------------
 3741|  2.61k|        ds_put_format(fp->s, "%s(%s", colors.paren, colors.end);
 3742|  8.78k|        for (i = 0; i < a->n_controllers; i++) {
  ------------------
  |  Branch (3742:21): [True: 6.17k, False: 2.61k]
  ------------------
 3743|  6.17k|            if (i) {
  ------------------
  |  Branch (3743:17): [True: 4.13k, False: 2.03k]
  ------------------
 3744|  4.13k|                ds_put_cstr(fp->s, ",");
 3745|  4.13k|            }
 3746|       |            ds_put_format(fp->s, "%"PRIu16, a->cnt_ids[i]);
 3747|  6.17k|        }
 3748|  2.61k|        ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 3749|  2.61k|    }
 3750|  6.57k|}
ofp-actions.c:format_SET_MPLS_LABEL:
 3809|    921|{
 3810|    921|    ds_put_format(fp->s, "%sset_mpls_label(%s%"PRIu32"%s)%s",
 3811|       |                  colors.paren, colors.end, ntohl(a->label),
 3812|    921|                  colors.paren, colors.end);
 3813|    921|}
ofp-actions.c:format_SET_MPLS_TC:
 3880|  1.14k|{
 3881|  1.14k|    ds_put_format(fp->s, "%sset_mpls_tc(%s%"PRIu8"%s)%s",
 3882|  1.14k|                  colors.paren, colors.end, a->tc,
 3883|  1.14k|                  colors.paren, colors.end);
 3884|  1.14k|}
ofp-actions.c:format_SET_MPLS_TTL:
 3938|  2.35k|{
 3939|  2.35k|    ds_put_format(fp->s, "%sset_mpls_ttl(%s%"PRIu8"%s)%s",
 3940|  2.35k|                  colors.paren, colors.end, a->ttl,
 3941|  2.35k|                  colors.paren, colors.end);
 3942|  2.35k|}
ofp-actions.c:format_DEC_MPLS_TTL:
 3977|  6.59k|{
 3978|  6.59k|    ds_put_format(fp->s, "%sdec_mpls_ttl%s", colors.value, colors.end);
 3979|  6.59k|}
ofp-actions.c:format_PUSH_MPLS:
 4029|  4.63k|{
 4030|  4.63k|    ds_put_format(fp->s, "%spush_mpls:%s0x%04"PRIx16,
 4031|       |                  colors.param, colors.end, ntohs(a->ethertype));
 4032|  4.63k|}
ofp-actions.c:format_POP_MPLS:
 4087|  8.49k|{
 4088|  8.49k|    ds_put_format(fp->s, "%spop_mpls:%s0x%04"PRIx16,
 4089|       |                  colors.param, colors.end, ntohs(a->ethertype));
 4090|  8.49k|}
ofp-actions.c:format_DEC_NSH_TTL:
 4822|  1.71k|{
 4823|  1.71k|    ds_put_format(fp->s, "%sdec_nsh_ttl%s", colors.special, colors.end);
 4824|  1.71k|}
ofp-actions.c:format_DELETE_FIELD:
 4247|     46|{
 4248|     46|    ds_put_format(fp->s, "%sdelete_field:%s", colors.param,
 4249|     46|                  colors.end);
 4250|     46|    ds_put_format(fp->s, "%s", odf->field->name);
 4251|     46|}
ofp-actions.c:format_ENCAP:
 4651|  4.30k|{
 4652|  4.30k|    ds_put_format(fp->s, "%sencap(%s", colors.paren, colors.end);
 4653|  4.30k|    ds_put_format(fp->s, "%s", format_encap_pkt_type(a->new_pkt_type));
 4654|  4.30k|    if (a->n_props > 0) {
  ------------------
  |  Branch (4654:9): [True: 208, False: 4.09k]
  ------------------
 4655|    208|        ds_put_format(fp->s, "%s(%s", colors.paren, colors.end);
 4656|    208|        format_ed_props(fp->s, a->n_props, a->props);
 4657|    208|        ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 4658|    208|    }
 4659|  4.30k|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 4660|  4.30k|}
ofp-actions.c:format_encap_pkt_type:
 4612|  4.30k|{
 4613|  4.30k|    switch (ntohl(pkt_type)) {
 4614|  1.07k|    case PT_ETH:
  ------------------
  |  Branch (4614:5): [True: 1.07k, False: 3.22k]
  ------------------
 4615|  1.07k|        return "ethernet";
 4616|  1.75k|    case PT_NSH:
  ------------------
  |  Branch (4616:5): [True: 1.75k, False: 2.55k]
  ------------------
 4617|  1.75k|        return "nsh";
 4618|    949|    case PT_MPLS:
  ------------------
  |  Branch (4618:5): [True: 949, False: 3.35k]
  ------------------
 4619|    949|        return "mpls";
 4620|    527|    case PT_MPLS_MC:
  ------------------
  |  Branch (4620:5): [True: 527, False: 3.77k]
  ------------------
 4621|    527|        return "mpls_mc";
 4622|      0|    default:
  ------------------
  |  Branch (4622:5): [True: 0, False: 4.30k]
  ------------------
 4623|      0|        return "UNKNOWN";
 4624|  4.30k|    }
 4625|  4.30k|}
ofp-actions.c:format_ed_props:
 4630|    208|{
 4631|    208|    const uint8_t *p = (uint8_t *) prop;
 4632|    208|    int i;
 4633|       |
 4634|    208|    if (n_props == 0) {
  ------------------
  |  Branch (4634:9): [True: 0, False: 208]
  ------------------
 4635|      0|        return;
 4636|      0|    }
 4637|    601|    for (i = 0; i < n_props; i++) {
  ------------------
  |  Branch (4637:17): [True: 393, False: 208]
  ------------------
 4638|    393|        format_ed_prop(s, prop);
 4639|    393|        ds_put_char(s, ',');
 4640|    393|        p += ROUND_UP(prop->len, 8);
  ------------------
  |  |  303|    393|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|    393|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
 4641|    393|        prop = ALIGNED_CAST(const struct ofpact_ed_prop *, p);
  ------------------
  |  |  434|    393|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4642|    393|    }
 4643|    208|    if (n_props > 0) {
  ------------------
  |  Branch (4643:9): [True: 208, False: 0]
  ------------------
 4644|    208|        ds_chomp(s, ',');
 4645|    208|    }
 4646|    208|}
ofp-actions.c:format_DECAP:
 4768|  12.2k|{
 4769|  12.2k|    ds_put_format(fp->s, "%sdecap(%s", colors.paren, colors.end);
 4770|  12.2k|    if (a->new_pkt_type != htonl(PT_USE_NEXT_PROTO)) {
  ------------------
  |  Branch (4770:9): [True: 12.0k, False: 235]
  ------------------
 4771|  12.0k|        ds_put_format(fp->s, "packet_type(ns=%"PRIu16",type=%#"PRIx16")",
 4772|  12.0k|                      pt_ns(a->new_pkt_type),
 4773|  12.0k|                      pt_ns_type(a->new_pkt_type));
 4774|  12.0k|    }
 4775|  12.2k|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 4776|  12.2k|}
ofp-actions.c:format_SET_TUNNEL:
 4167|    475|{
 4168|    475|    ds_put_format(fp->s, "%sset_tunnel%s:%s%#"PRIx64, colors.param,
 4169|    475|                  (a->tun_id > UINT32_MAX
  ------------------
  |  Branch (4169:20): [True: 352, False: 123]
  ------------------
 4170|    394|                   || a->ofpact.raw == NXAST_RAW_SET_TUNNEL64 ? "64" : ""),
  ------------------
  |  Branch (4170:23): [True: 42, False: 81]
  ------------------
 4171|    475|                  colors.end, a->tun_id);
 4172|    475|}
ofp-actions.c:format_SET_QUEUE:
 4291|    516|{
 4292|       |    ds_put_format(fp->s, "%sset_queue:%s%"PRIu32,
 4293|    516|                  colors.param, colors.end, a->queue_id);
 4294|    516|}
ofp-actions.c:format_POP_QUEUE:
 4330|    937|{
 4331|    937|    ds_put_format(fp->s, "%spop_queue%s", colors.value, colors.end);
 4332|    937|}
ofp-actions.c:format_FIN_TIMEOUT:
 4426|    992|{
 4427|    992|    ds_put_format(fp->s, "%sfin_timeout(%s", colors.paren, colors.end);
 4428|    992|    if (a->fin_idle_timeout) {
  ------------------
  |  Branch (4428:9): [True: 709, False: 283]
  ------------------
 4429|    709|        ds_put_format(fp->s, "%sidle_timeout=%s%"PRIu16",",
 4430|    709|                      colors.param, colors.end, a->fin_idle_timeout);
 4431|    709|    }
 4432|    992|    if (a->fin_hard_timeout) {
  ------------------
  |  Branch (4432:9): [True: 953, False: 39]
  ------------------
 4433|    953|        ds_put_format(fp->s, "%shard_timeout=%s%"PRIu16",",
 4434|    953|                      colors.param, colors.end, a->fin_hard_timeout);
 4435|    953|    }
 4436|    992|    ds_chomp(fp->s, ',');
 4437|    992|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 4438|    992|}
ofp-actions.c:format_RESUBMIT:
 5028|  2.48k|{
 5029|  2.48k|    if (a->in_port != OFPP_IN_PORT && a->table_id == 255) {
  ------------------
  |  |   39|  2.48k|#define OFPP_IN_PORT    OFP_PORT_C(0xfff8) /* Where the packet came in. */
  |  |  ------------------
  |  |  |  |  157|  4.97k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (5029:9): [True: 2.37k, False: 114]
  |  Branch (5029:39): [True: 267, False: 2.10k]
  ------------------
 5030|    267|        ds_put_format(fp->s, "%sresubmit:%s", colors.special, colors.end);
 5031|    267|        ofputil_format_port(a->in_port, fp->port_map, fp->s);
 5032|  2.22k|    } else {
 5033|  2.22k|        ds_put_format(fp->s, "%sresubmit(%s", colors.paren, colors.end);
 5034|  2.22k|        if (a->in_port != OFPP_IN_PORT) {
  ------------------
  |  |   39|  2.22k|#define OFPP_IN_PORT    OFP_PORT_C(0xfff8) /* Where the packet came in. */
  |  |  ------------------
  |  |  |  |  157|  2.22k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (5034:13): [True: 2.10k, False: 114]
  ------------------
 5035|  2.10k|            ofputil_format_port(a->in_port, fp->port_map, fp->s);
 5036|  2.10k|        }
 5037|  2.22k|        ds_put_char(fp->s, ',');
 5038|  2.22k|        if (a->table_id != 255) {
  ------------------
  |  Branch (5038:13): [True: 2.20k, False: 19]
  ------------------
 5039|  2.20k|            ofputil_format_table(a->table_id, fp->table_map, fp->s);
 5040|  2.20k|        }
 5041|  2.22k|        if (a->with_ct_orig) {
  ------------------
  |  Branch (5041:13): [True: 2.09k, False: 130]
  ------------------
 5042|  2.09k|            ds_put_cstr(fp->s, ",ct");
 5043|  2.09k|        }
 5044|  2.22k|        ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 5045|  2.22k|    }
 5046|  2.48k|}
ofp-actions.c:format_LEARN:
 5639|  22.9k|{
 5640|  22.9k|    learn_format(a, fp->port_map, fp->table_map, fp->s);
 5641|  22.9k|}
ofp-actions.c:format_CONJUNCTION:
 5701|  2.29k|{
 5702|  2.29k|    ds_put_format(fp->s, "%sconjunction(%s%"PRIu32",%d/%"PRIu8"%s)%s",
 5703|  2.29k|                  colors.paren, colors.end,
 5704|  2.29k|                  oc->id, oc->clause + 1, oc->n_clauses,
 5705|  2.29k|                  colors.paren, colors.end);
 5706|  2.29k|}
ofp-actions.c:format_MULTIPATH:
 5866|  2.15k|{
 5867|  2.15k|    multipath_format(a, fp->s);
 5868|  2.15k|}
ofp-actions.c:format_NOTE:
 5951|  5.04k|{
 5952|  5.04k|    ds_put_format(fp->s, "%snote:%s", colors.param, colors.end);
 5953|  5.04k|    ds_put_hex_with_delimiter(fp->s, a->data, a->length, ".");
 5954|  5.04k|}
ofp-actions.c:format_EXIT:
 5989|  2.52k|{
 5990|  2.52k|    ds_put_format(fp->s, "%sexit%s", colors.special, colors.end);
 5991|  2.52k|}
ofp-actions.c:format_SAMPLE:
 6527|  5.13k|{
 6528|  5.13k|    ds_put_format(fp->s, "%ssample(%s%sprobability=%s%"PRIu16
 6529|  5.13k|                  ",%scollector_set_id=%s%"PRIu32,
 6530|  5.13k|                  colors.paren, colors.end,
 6531|  5.13k|                  colors.param, colors.end, a->probability,
 6532|  5.13k|                  colors.param, colors.end, a->collector_set_id);
 6533|       |
 6534|  5.13k|    ds_put_format(fp->s, ",%sobs_domain_id=%s", colors.param, colors.end);
 6535|  5.13k|    if (a->obs_domain_src.field) {
  ------------------
  |  Branch (6535:9): [True: 546, False: 4.59k]
  ------------------
 6536|    546|        mf_format_subfield(&a->obs_domain_src, fp->s);
 6537|  4.59k|    } else {
 6538|  4.59k|        ds_put_format(fp->s, "%"PRIu32, a->obs_domain_imm);
 6539|  4.59k|    }
 6540|  5.13k|    ds_put_format(fp->s, ",%sobs_point_id=%s", colors.param, colors.end);
 6541|  5.13k|    if (a->obs_point_src.field) {
  ------------------
  |  Branch (6541:9): [True: 712, False: 4.42k]
  ------------------
 6542|    712|        mf_format_subfield(&a->obs_point_src, fp->s);
 6543|  4.42k|    } else {
 6544|  4.42k|        ds_put_format(fp->s, "%"PRIu32, a->obs_point_imm);
 6545|  4.42k|    }
 6546|  5.13k|    if (a->sampling_port != OFPP_NONE) {
  ------------------
  |  |   47|  5.13k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|  5.13k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (6546:9): [True: 4.97k, False: 161]
  ------------------
 6547|  4.97k|        ds_put_format(fp->s, ",%ssampling_port=%s", colors.param, colors.end);
 6548|  4.97k|        ofputil_format_port(a->sampling_port, fp->port_map, fp->s);
 6549|  4.97k|    }
 6550|  5.13k|    if (a->direction == NX_ACTION_SAMPLE_INGRESS) {
  ------------------
  |  Branch (6550:9): [True: 180, False: 4.95k]
  ------------------
 6551|    180|        ds_put_format(fp->s, ",%singress%s", colors.param, colors.end);
 6552|  4.95k|    } else if (a->direction == NX_ACTION_SAMPLE_EGRESS) {
  ------------------
  |  Branch (6552:16): [True: 1.77k, False: 3.18k]
  ------------------
 6553|  1.77k|        ds_put_format(fp->s, ",%segress%s", colors.param, colors.end);
 6554|  1.77k|    }
 6555|  5.13k|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 6556|  5.13k|}
ofp-actions.c:format_UNROLL_XLATE:
 6021|  10.9k|{
 6022|  10.9k|    ds_put_format(fp->s, "%sunroll_xlate(%s%stable=%s",
 6023|  10.9k|                  colors.paren,   colors.end,
 6024|  10.9k|                  colors.special, colors.end);
 6025|  10.9k|    ofputil_format_table(a->rule_table_id, fp->table_map, fp->s);
 6026|  10.9k|    ds_put_format(fp->s, ", %scookie=%s%"PRIu64"%s)%s",
 6027|  10.9k|                  colors.param,   colors.end, ntohll(a->rule_cookie),
 6028|  10.9k|                  colors.paren,   colors.end);
 6029|  10.9k|}
ofp-actions.c:format_CT:
 7025|  10.0k|{
 7026|  10.0k|    ds_put_format(fp->s, "%sct(%s", colors.paren, colors.end);
 7027|  10.0k|    if (a->flags & NX_CT_F_COMMIT) {
  ------------------
  |  Branch (7027:9): [True: 5.33k, False: 4.73k]
  ------------------
 7028|  5.33k|        ds_put_format(fp->s, "%scommit%s,", colors.value, colors.end);
 7029|  5.33k|    }
 7030|  10.0k|    if (a->flags & NX_CT_F_FORCE) {
  ------------------
  |  Branch (7030:9): [True: 1.52k, False: 8.55k]
  ------------------
 7031|  1.52k|        ds_put_format(fp->s, "%sforce%s,", colors.value, colors.end);
 7032|  1.52k|    }
 7033|  10.0k|    if (a->recirc_table != NX_CT_RECIRC_NONE) {
  ------------------
  |  |  692|  10.0k|#define NX_CT_RECIRC_NONE OFPTT_ALL
  ------------------
  |  Branch (7033:9): [True: 9.20k, False: 874]
  ------------------
 7034|  9.20k|        ds_put_format(fp->s, "%stable=%s", colors.special, colors.end);
 7035|  9.20k|        ofputil_format_table(a->recirc_table, fp->table_map, fp->s);
 7036|  9.20k|        ds_put_char(fp->s, ',');
 7037|  9.20k|    }
 7038|  10.0k|    if (a->zone_src.field) {
  ------------------
  |  Branch (7038:9): [True: 3.91k, False: 6.15k]
  ------------------
 7039|  3.91k|        ds_put_format(fp->s, "%szone=%s", colors.param, colors.end);
 7040|  3.91k|        mf_format_subfield(&a->zone_src, fp->s);
 7041|  3.91k|        ds_put_char(fp->s, ',');
 7042|  6.15k|    } else if (a->zone_imm) {
  ------------------
  |  Branch (7042:16): [True: 4.79k, False: 1.36k]
  ------------------
 7043|  4.79k|        ds_put_format(fp->s, "%szone=%s%"PRIu16",",
 7044|  4.79k|                      colors.param, colors.end, a->zone_imm);
 7045|  4.79k|    }
 7046|       |    /* If the first action is a NAT action, format it outside of the 'exec'
 7047|       |     * envelope. */
 7048|  10.0k|    const struct ofpact *action = a->actions;
 7049|  10.0k|    size_t actions_len = ofpact_ct_get_action_len(a);
 7050|  10.0k|    if (actions_len && action->type == OFPACT_NAT) {
  ------------------
  |  Branch (7050:9): [True: 3.82k, False: 6.25k]
  |  Branch (7050:24): [True: 3.15k, False: 665]
  ------------------
 7051|  3.15k|        format_NAT(ofpact_get_NAT(action), fp);
 7052|  3.15k|        ds_put_char(fp->s, ',');
 7053|  3.15k|        actions_len -= OFPACT_ALIGN(action->len);
  ------------------
  |  |  205|  3.15k|#define OFPACT_ALIGN(SIZE) ROUND_UP(SIZE, OFPACT_ALIGNTO)
  |  |  ------------------
  |  |  |  |  303|  3.15k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|  3.15k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7054|  3.15k|        action = ofpact_next(action);
 7055|  3.15k|    }
 7056|  10.0k|    if (actions_len) {
  ------------------
  |  Branch (7056:9): [True: 665, False: 9.41k]
  ------------------
 7057|    665|        ds_put_format(fp->s, "%sexec(%s", colors.paren, colors.end);
 7058|    665|        ofpacts_format(action, actions_len, fp);
 7059|    665|        ds_put_format(fp->s, "%s),%s", colors.paren, colors.end);
 7060|    665|    }
 7061|  10.0k|    format_alg(a->alg, fp->s);
 7062|  10.0k|    ds_chomp(fp->s, ',');
 7063|  10.0k|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 7064|  10.0k|}
ofp-actions.c:format_alg:
 7002|  10.0k|{
 7003|  10.0k|    switch(port) {
 7004|  1.18k|    case IPPORT_FTP:
  ------------------
  |  |  695|  1.18k|#define IPPORT_FTP  21
  ------------------
  |  Branch (7004:5): [True: 1.18k, False: 8.89k]
  ------------------
 7005|  1.18k|        ds_put_format(s, "%salg=%sftp,", colors.param, colors.end);
 7006|  1.18k|        break;
 7007|  1.97k|    case IPPORT_TFTP:
  ------------------
  |  |  699|  1.97k|#define IPPORT_TFTP  69
  ------------------
  |  Branch (7007:5): [True: 1.97k, False: 8.10k]
  ------------------
 7008|  1.97k|        ds_put_format(s, "%salg=%stftp,", colors.param, colors.end);
 7009|  1.97k|        break;
 7010|  2.37k|    case 0:
  ------------------
  |  Branch (7010:5): [True: 2.37k, False: 7.70k]
  ------------------
 7011|       |        /* Don't print. */
 7012|  2.37k|        break;
 7013|  4.54k|    default:
  ------------------
  |  Branch (7013:5): [True: 4.54k, False: 5.52k]
  ------------------
 7014|  4.54k|        ds_put_format(s, "%salg=%s%d,", colors.param, colors.end, port);
 7015|  4.54k|        break;
 7016|  10.0k|    }
 7017|  10.0k|}
ofp-actions.c:format_CT_CLEAR:
 7115|    123|{
 7116|    123|    ds_put_format(fp->s, "%sct_clear%s", colors.value, colors.end);
 7117|    123|}
ofp-actions.c:format_NAT:
 7306|  3.15k|{
 7307|  3.15k|    ds_put_format(fp->s, "%snat%s", colors.paren, colors.end);
 7308|       |
 7309|  3.15k|    if (a->flags & (NX_NAT_F_SRC | NX_NAT_F_DST)) {
  ------------------
  |  Branch (7309:9): [True: 3.03k, False: 127]
  ------------------
 7310|  3.03k|        ds_put_format(fp->s, "%s(%s", colors.paren, colors.end);
 7311|  3.03k|        ds_put_format(fp->s, a->flags & NX_NAT_F_SRC ? "%ssrc%s" : "%sdst%s",
  ------------------
  |  Branch (7311:30): [True: 2.15k, False: 880]
  ------------------
 7312|  3.03k|                      colors.param, colors.end);
 7313|       |
 7314|  3.03k|        if (a->range_af != AF_UNSPEC) {
  ------------------
  |  Branch (7314:13): [True: 1.71k, False: 1.31k]
  ------------------
 7315|  1.71k|            ds_put_format(fp->s, "%s=%s", colors.param, colors.end);
 7316|       |
 7317|  1.71k|            if (a->range_af == AF_INET) {
  ------------------
  |  Branch (7317:17): [True: 1.71k, False: 0]
  ------------------
 7318|  1.71k|                ds_put_format(fp->s, IP_FMT, IP_ARGS(a->range.addr.ipv4.min));
  ------------------
  |  |  628|  1.71k|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
                              ds_put_format(fp->s, IP_FMT, IP_ARGS(a->range.addr.ipv4.min));
  ------------------
  |  |  630|  1.71k|    ntohl(ip) >> 24,                            \
  |  |  631|  1.71k|    (ntohl(ip) >> 16) & 0xff,                   \
  |  |  632|  1.71k|    (ntohl(ip) >> 8) & 0xff,                    \
  |  |  633|  1.71k|    ntohl(ip) & 0xff
  ------------------
 7319|       |
 7320|  1.71k|                if (a->range.addr.ipv4.max
  ------------------
  |  Branch (7320:21): [True: 346, False: 1.37k]
  ------------------
 7321|    346|                    && a->range.addr.ipv4.max != a->range.addr.ipv4.min) {
  ------------------
  |  Branch (7321:24): [True: 232, False: 114]
  ------------------
 7322|    232|                    ds_put_format(fp->s, "-"IP_FMT,
  ------------------
  |  |  628|    232|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
 7323|    232|                                  IP_ARGS(a->range.addr.ipv4.max));
  ------------------
  |  |  630|    232|    ntohl(ip) >> 24,                            \
  |  |  631|    232|    (ntohl(ip) >> 16) & 0xff,                   \
  |  |  632|    232|    (ntohl(ip) >> 8) & 0xff,                    \
  |  |  633|    232|    ntohl(ip) & 0xff
  ------------------
 7324|    232|                }
 7325|  1.71k|            } 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.71k|            if (a->range.proto.min) {
  ------------------
  |  Branch (7337:17): [True: 1.02k, False: 695]
  ------------------
 7338|  1.02k|                ds_put_char(fp->s, ':');
 7339|  1.02k|                ds_put_format(fp->s, "%"PRIu16, a->range.proto.min);
 7340|       |
 7341|  1.02k|                if (a->range.proto.max
  ------------------
  |  Branch (7341:21): [True: 208, False: 814]
  ------------------
 7342|    208|                    && a->range.proto.max != a->range.proto.min) {
  ------------------
  |  Branch (7342:24): [True: 92, False: 116]
  ------------------
 7343|     92|                    ds_put_format(fp->s, "-%"PRIu16, a->range.proto.max);
 7344|     92|                }
 7345|  1.02k|            }
 7346|  1.71k|            ds_put_char(fp->s, ',');
 7347|       |
 7348|  1.71k|            if (a->flags & NX_NAT_F_PERSISTENT) {
  ------------------
  |  Branch (7348:17): [True: 1.19k, False: 518]
  ------------------
 7349|  1.19k|                ds_put_format(fp->s, "%spersistent%s,",
 7350|  1.19k|                              colors.value, colors.end);
 7351|  1.19k|            }
 7352|  1.71k|            if (a->flags & NX_NAT_F_PROTO_HASH) {
  ------------------
  |  Branch (7352:17): [True: 89, False: 1.62k]
  ------------------
 7353|     89|                ds_put_format(fp->s, "%shash%s,", colors.value, colors.end);
 7354|     89|            }
 7355|  1.71k|            if (a->flags & NX_NAT_F_PROTO_RANDOM) {
  ------------------
  |  Branch (7355:17): [True: 816, False: 901]
  ------------------
 7356|    816|                ds_put_format(fp->s, "%srandom%s,", colors.value, colors.end);
 7357|    816|            }
 7358|  1.71k|        }
 7359|  3.03k|        ds_chomp(fp->s, ',');
 7360|  3.03k|        ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 7361|  3.03k|    }
 7362|  3.15k|}
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|  3.47k|{
 6115|  3.47k|    ds_put_format(fp->s, "%sclone(%s", colors.paren, colors.end);
 6116|  3.47k|    ofpacts_format(a->actions, ofpact_nest_get_action_len(a), fp);
 6117|  3.47k|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 6118|  3.47k|}
ofp-actions.c:format_CHECK_PKT_LARGER:
 7902|    504|{
 7903|    504|    ds_put_format(fp->s, "%scheck_pkt_larger(%s%"PRIu32")->",
 7904|    504|                  colors.param, colors.end, a->pkt_len);
 7905|    504|    mf_format_subfield(&a->dst, fp->s);
 7906|    504|}
ofp-actions.c:format_METER:
 7593|    329|{
 7594|       |    ds_put_format(fp->s, "%smeter:%s%"PRIu32,
 7595|    329|                  colors.param, colors.end, a->meter_id);
 7596|    329|}
ofp-actions.c:format_CLEAR_ACTIONS:
 7628|    309|{
 7629|    309|    ds_put_format(fp->s, "%sclear_actions%s", colors.value, colors.end);
 7630|    309|}
ofp-actions.c:format_WRITE_ACTIONS:
 7689|  15.3k|{
 7690|  15.3k|    ds_put_format(fp->s, "%swrite_actions(%s", colors.paren, colors.end);
 7691|  15.3k|    ofpacts_format(a->actions, ofpact_nest_get_action_len(a), fp);
 7692|  15.3k|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 7693|  15.3k|}
ofp-actions.c:format_WRITE_METADATA:
 7783|  1.47k|{
 7784|  1.47k|    ds_put_format(fp->s, "%swrite_metadata:%s%#"PRIx64,
 7785|  1.47k|                  colors.param, colors.end, ntohll(a->metadata));
 7786|  1.47k|    if (a->mask != OVS_BE64_MAX) {
  ------------------
  |  |   44|  1.47k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  |  Branch (7786:9): [True: 1.41k, False: 67]
  ------------------
 7787|       |        ds_put_format(fp->s, "/%#"PRIx64, ntohll(a->mask));
 7788|  1.41k|    }
 7789|  1.47k|}
ofp-actions.c:format_GOTO_TABLE:
 7950|    760|{
 7951|    760|    ds_put_format(fp->s, "%sgoto_table:%s", colors.param, colors.end);
 7952|    760|    ofputil_format_table(a->table_id, fp->table_map, fp->s);
 7953|    760|}

ofp-actions.c:ofpact_decode:
 4645|   394k|{
 4646|   394k|    switch (raw) {
 4647|  12.7k|    case OFPAT_RAW10_OUTPUT:
  ------------------
  |  Branch (4647:5): [True: 12.7k, False: 381k]
  ------------------
 4648|  12.7k|        return decode_OFPAT_RAW10_OUTPUT(ALIGNED_CAST(const struct ofp10_action_output *, a), version, out);
  ------------------
  |  |  434|  12.7k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4649|       |
 4650|  2.17k|    case OFPAT_RAW11_OUTPUT:
  ------------------
  |  Branch (4650:5): [True: 2.17k, False: 392k]
  ------------------
 4651|  2.17k|        return decode_OFPAT_RAW11_OUTPUT(ALIGNED_CAST(const struct ofp11_action_output *, a), version, out);
  ------------------
  |  |  434|  2.17k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4652|       |
 4653|  9.87k|    case OFPAT_RAW10_SET_VLAN_VID:
  ------------------
  |  Branch (4653:5): [True: 9.87k, False: 384k]
  ------------------
 4654|  9.87k|        return decode_OFPAT_RAW10_SET_VLAN_VID(arg, version, out);
 4655|       |
 4656|  4.47k|    case OFPAT_RAW10_SET_VLAN_PCP:
  ------------------
  |  Branch (4656:5): [True: 4.47k, False: 389k]
  ------------------
 4657|  4.47k|        return decode_OFPAT_RAW10_SET_VLAN_PCP(arg, version, out);
 4658|       |
 4659|  1.24k|    case OFPAT_RAW11_SET_VLAN_VID:
  ------------------
  |  Branch (4659:5): [True: 1.24k, False: 393k]
  ------------------
 4660|  1.24k|        return decode_OFPAT_RAW11_SET_VLAN_VID(arg, version, out);
 4661|       |
 4662|  2.12k|    case OFPAT_RAW11_SET_VLAN_PCP:
  ------------------
  |  Branch (4662:5): [True: 2.12k, False: 392k]
  ------------------
 4663|  2.12k|        return decode_OFPAT_RAW11_SET_VLAN_PCP(arg, version, out);
 4664|       |
 4665|  4.19k|    case OFPAT_RAW11_PUSH_VLAN:
  ------------------
  |  Branch (4665:5): [True: 4.19k, False: 390k]
  ------------------
 4666|  4.19k|        return decode_OFPAT_RAW11_PUSH_VLAN(htons(arg), version, out);
 4667|       |
 4668|  5.77k|    case OFPAT_RAW10_STRIP_VLAN:
  ------------------
  |  Branch (4668:5): [True: 5.77k, False: 388k]
  ------------------
 4669|  5.77k|        return decode_OFPAT_RAW10_STRIP_VLAN(out);
 4670|       |
 4671|  5.67k|    case OFPAT_RAW11_POP_VLAN:
  ------------------
  |  Branch (4671:5): [True: 5.67k, False: 388k]
  ------------------
 4672|  5.67k|        return decode_OFPAT_RAW11_POP_VLAN(out);
 4673|       |
 4674|    579|    case OFPAT_RAW_SET_DL_SRC:
  ------------------
  |  Branch (4674:5): [True: 579, False: 393k]
  ------------------
 4675|    579|        return decode_OFPAT_RAW_SET_DL_SRC(ALIGNED_CAST(const struct ofp_action_dl_addr *, a), version, out);
  ------------------
  |  |  434|    579|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4676|       |
 4677|    403|    case OFPAT_RAW_SET_DL_DST:
  ------------------
  |  Branch (4677:5): [True: 403, False: 394k]
  ------------------
 4678|    403|        return decode_OFPAT_RAW_SET_DL_DST(ALIGNED_CAST(const struct ofp_action_dl_addr *, a), version, out);
  ------------------
  |  |  434|    403|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4679|       |
 4680|  5.97k|    case OFPAT_RAW_SET_NW_SRC:
  ------------------
  |  Branch (4680:5): [True: 5.97k, False: 388k]
  ------------------
 4681|  5.97k|        return decode_OFPAT_RAW_SET_NW_SRC(htonl(arg), version, out);
 4682|       |
 4683|  9.05k|    case OFPAT_RAW_SET_NW_DST:
  ------------------
  |  Branch (4683:5): [True: 9.05k, False: 385k]
  ------------------
 4684|  9.05k|        return decode_OFPAT_RAW_SET_NW_DST(htonl(arg), version, out);
 4685|       |
 4686|  9.44k|    case OFPAT_RAW_SET_NW_TOS:
  ------------------
  |  Branch (4686:5): [True: 9.44k, False: 385k]
  ------------------
 4687|  9.44k|        return decode_OFPAT_RAW_SET_NW_TOS(arg, version, out);
 4688|       |
 4689|  5.64k|    case OFPAT_RAW11_SET_NW_ECN:
  ------------------
  |  Branch (4689:5): [True: 5.64k, False: 388k]
  ------------------
 4690|  5.64k|        return decode_OFPAT_RAW11_SET_NW_ECN(arg, version, out);
 4691|       |
 4692|  18.4k|    case OFPAT_RAW_SET_TP_SRC:
  ------------------
  |  Branch (4692:5): [True: 18.4k, False: 376k]
  ------------------
 4693|  18.4k|        return decode_OFPAT_RAW_SET_TP_SRC(htons(arg), version, out);
 4694|       |
 4695|  10.3k|    case OFPAT_RAW_SET_TP_DST:
  ------------------
  |  Branch (4695:5): [True: 10.3k, False: 384k]
  ------------------
 4696|  10.3k|        return decode_OFPAT_RAW_SET_TP_DST(htons(arg), version, out);
 4697|       |
 4698|    208|    case OFPAT_RAW10_ENQUEUE:
  ------------------
  |  Branch (4698:5): [True: 208, False: 394k]
  ------------------
 4699|    208|        return decode_OFPAT_RAW10_ENQUEUE(ALIGNED_CAST(const struct ofp10_action_enqueue *, a), version, out);
  ------------------
  |  |  434|    208|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4700|       |
 4701|  3.16k|    case OFPAT_RAW_SET_MPLS_LABEL:
  ------------------
  |  Branch (4701:5): [True: 3.16k, False: 391k]
  ------------------
 4702|  3.16k|        return decode_OFPAT_RAW_SET_MPLS_LABEL(htonl(arg), version, out);
 4703|       |
 4704|  1.17k|    case OFPAT_RAW_SET_MPLS_TC:
  ------------------
  |  Branch (4704:5): [True: 1.17k, False: 393k]
  ------------------
 4705|  1.17k|        return decode_OFPAT_RAW_SET_MPLS_TC(arg, version, out);
 4706|       |
 4707|  2.50k|    case OFPAT_RAW_SET_MPLS_TTL:
  ------------------
  |  Branch (4707:5): [True: 2.50k, False: 391k]
  ------------------
 4708|  2.50k|        return decode_OFPAT_RAW_SET_MPLS_TTL(arg, version, out);
 4709|       |
 4710|  7.00k|    case OFPAT_RAW_DEC_MPLS_TTL:
  ------------------
  |  Branch (4710:5): [True: 7.00k, False: 387k]
  ------------------
 4711|  7.00k|        return decode_OFPAT_RAW_DEC_MPLS_TTL(out);
 4712|       |
 4713|  5.33k|    case OFPAT_RAW_PUSH_MPLS:
  ------------------
  |  Branch (4713:5): [True: 5.33k, False: 389k]
  ------------------
 4714|  5.33k|        return decode_OFPAT_RAW_PUSH_MPLS(htons(arg), version, out);
 4715|       |
 4716|  10.2k|    case OFPAT_RAW_POP_MPLS:
  ------------------
  |  Branch (4716:5): [True: 10.2k, False: 384k]
  ------------------
 4717|  10.2k|        return decode_OFPAT_RAW_POP_MPLS(htons(arg), version, out);
 4718|       |
 4719|    526|    case OFPAT_RAW_SET_QUEUE:
  ------------------
  |  Branch (4719:5): [True: 526, False: 393k]
  ------------------
 4720|    526|        return decode_OFPAT_RAW_SET_QUEUE(arg, version, out);
 4721|       |
 4722|  1.81k|    case OFPAT_RAW_GROUP:
  ------------------
  |  Branch (4722:5): [True: 1.81k, False: 392k]
  ------------------
 4723|  1.81k|        return decode_OFPAT_RAW_GROUP(arg, version, out);
 4724|       |
 4725|  1.46k|    case OFPAT_RAW11_SET_NW_TTL:
  ------------------
  |  Branch (4725:5): [True: 1.46k, False: 392k]
  ------------------
 4726|  1.46k|        return decode_OFPAT_RAW11_SET_NW_TTL(arg, version, out);
 4727|       |
 4728|  5.35k|    case OFPAT_RAW_DEC_NW_TTL:
  ------------------
  |  Branch (4728:5): [True: 5.35k, False: 389k]
  ------------------
 4729|  5.35k|        return decode_OFPAT_RAW_DEC_NW_TTL(out);
 4730|       |
 4731|  5.83k|    case NXAST_RAW_DEC_TTL_CNT_IDS:
  ------------------
  |  Branch (4731:5): [True: 5.83k, False: 388k]
  ------------------
 4732|  5.83k|        return decode_NXAST_RAW_DEC_TTL_CNT_IDS(ALIGNED_CAST(const struct nx_action_cnt_ids *, a), version, out);
  ------------------
  |  |  434|  5.83k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4733|       |
 4734|  10.1k|    case OFPAT_RAW12_SET_FIELD:
  ------------------
  |  Branch (4734:5): [True: 10.1k, False: 384k]
  ------------------
 4735|  10.1k|        return decode_OFPAT_RAW12_SET_FIELD(ALIGNED_CAST(const struct ofp12_action_set_field *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  10.1k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4736|       |
 4737|  12.2k|    case OFPAT_RAW15_SET_FIELD:
  ------------------
  |  Branch (4737:5): [True: 12.2k, False: 382k]
  ------------------
 4738|  12.2k|        return decode_OFPAT_RAW15_SET_FIELD(ALIGNED_CAST(const struct ofp12_action_set_field *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  12.2k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4739|       |
 4740|  5.24k|    case NXAST_RAW_REG_LOAD:
  ------------------
  |  Branch (4740:5): [True: 5.24k, False: 389k]
  ------------------
 4741|  5.24k|        return decode_NXAST_RAW_REG_LOAD(ALIGNED_CAST(const struct nx_action_reg_load *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  5.24k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4742|       |
 4743|  7.81k|    case NXAST_RAW_REG_LOAD2:
  ------------------
  |  Branch (4743:5): [True: 7.81k, False: 386k]
  ------------------
 4744|  7.81k|        return decode_NXAST_RAW_REG_LOAD2(ALIGNED_CAST(const struct ext_action_header *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  7.81k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4745|       |
 4746|  3.71k|    case OFPAT_RAW15_COPY_FIELD:
  ------------------
  |  Branch (4746:5): [True: 3.71k, False: 390k]
  ------------------
 4747|  3.71k|        return decode_OFPAT_RAW15_COPY_FIELD(ALIGNED_CAST(const struct ofp15_action_copy_field *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  3.71k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4748|       |
 4749|     67|    case ONFACT_RAW13_COPY_FIELD:
  ------------------
  |  Branch (4749:5): [True: 67, False: 394k]
  ------------------
 4750|     67|        return decode_ONFACT_RAW13_COPY_FIELD(ALIGNED_CAST(const struct onf_action_copy_field *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|     67|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4751|       |
 4752|  6.91k|    case NXAST_RAW_REG_MOVE:
  ------------------
  |  Branch (4752:5): [True: 6.91k, False: 387k]
  ------------------
 4753|  6.91k|        return decode_NXAST_RAW_REG_MOVE(ALIGNED_CAST(const struct nx_action_reg_move *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  6.91k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4754|       |
 4755|  1.07k|    case OFPAT_RAW15_METER:
  ------------------
  |  Branch (4755:5): [True: 1.07k, False: 393k]
  ------------------
 4756|  1.07k|        return decode_OFPAT_RAW15_METER(arg, version, out);
 4757|       |
 4758|    838|    case NXAST_RAW_RESUBMIT:
  ------------------
  |  Branch (4758:5): [True: 838, False: 393k]
  ------------------
 4759|    838|        return decode_NXAST_RAW_RESUBMIT(arg, version, out);
 4760|       |
 4761|    429|    case NXAST_RAW_RESUBMIT_TABLE:
  ------------------
  |  Branch (4761:5): [True: 429, False: 394k]
  ------------------
 4762|    429|        return decode_NXAST_RAW_RESUBMIT_TABLE(ALIGNED_CAST(const struct nx_action_resubmit *, a), version, out);
  ------------------
  |  |  434|    429|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4763|       |
 4764|  3.37k|    case NXAST_RAW_RESUBMIT_TABLE_CT:
  ------------------
  |  Branch (4764:5): [True: 3.37k, False: 391k]
  ------------------
 4765|  3.37k|        return decode_NXAST_RAW_RESUBMIT_TABLE_CT(ALIGNED_CAST(const struct nx_action_resubmit *, a), version, out);
  ------------------
  |  |  434|  3.37k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4766|       |
 4767|  1.57k|    case NXAST_RAW_SET_TUNNEL:
  ------------------
  |  Branch (4767:5): [True: 1.57k, False: 392k]
  ------------------
 4768|  1.57k|        return decode_NXAST_RAW_SET_TUNNEL(arg, version, out);
 4769|       |
 4770|    401|    case NXAST_RAW_SET_TUNNEL64:
  ------------------
  |  Branch (4770:5): [True: 401, False: 394k]
  ------------------
 4771|    401|        return decode_NXAST_RAW_SET_TUNNEL64(arg, version, out);
 4772|       |
 4773|  3.29k|    case NXAST_RAW_POP_QUEUE:
  ------------------
  |  Branch (4773:5): [True: 3.29k, False: 391k]
  ------------------
 4774|  3.29k|        return decode_NXAST_RAW_POP_QUEUE(out);
 4775|       |
 4776|  15.7k|    case NXAST_RAW_NOTE:
  ------------------
  |  Branch (4776:5): [True: 15.7k, False: 378k]
  ------------------
 4777|  15.7k|        return decode_NXAST_RAW_NOTE(ALIGNED_CAST(const struct nx_action_note *, a), version, out);
  ------------------
  |  |  434|  15.7k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4778|       |
 4779|  3.35k|    case NXAST_RAW_MULTIPATH:
  ------------------
  |  Branch (4779:5): [True: 3.35k, False: 391k]
  ------------------
 4780|  3.35k|        return decode_NXAST_RAW_MULTIPATH(ALIGNED_CAST(const struct nx_action_multipath *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  3.35k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4781|       |
 4782|  2.53k|    case NXAST_RAW_BUNDLE:
  ------------------
  |  Branch (4782:5): [True: 2.53k, False: 391k]
  ------------------
 4783|  2.53k|        return decode_NXAST_RAW_BUNDLE(ALIGNED_CAST(const struct nx_action_bundle *, a), version, out);
  ------------------
  |  |  434|  2.53k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4784|       |
 4785|  3.88k|    case NXAST_RAW_BUNDLE_LOAD:
  ------------------
  |  Branch (4785:5): [True: 3.88k, False: 390k]
  ------------------
 4786|  3.88k|        return decode_NXAST_RAW_BUNDLE_LOAD(ALIGNED_CAST(const struct nx_action_bundle *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  3.88k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4787|       |
 4788|  1.20k|    case NXAST_RAW_OUTPUT_REG:
  ------------------
  |  Branch (4788:5): [True: 1.20k, False: 393k]
  ------------------
 4789|  1.20k|        return decode_NXAST_RAW_OUTPUT_REG(ALIGNED_CAST(const struct nx_action_output_reg *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  1.20k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4790|       |
 4791|    640|    case NXAST_RAW_OUTPUT_REG2:
  ------------------
  |  Branch (4791:5): [True: 640, False: 393k]
  ------------------
 4792|    640|        return decode_NXAST_RAW_OUTPUT_REG2(ALIGNED_CAST(const struct nx_action_output_reg2 *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|    640|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4793|       |
 4794|  30.8k|    case NXAST_RAW_LEARN:
  ------------------
  |  Branch (4794:5): [True: 30.8k, False: 363k]
  ------------------
 4795|  30.8k|        return decode_NXAST_RAW_LEARN(ALIGNED_CAST(const struct nx_action_learn *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  30.8k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4796|       |
 4797|  2.86k|    case NXAST_RAW_LEARN2:
  ------------------
  |  Branch (4797:5): [True: 2.86k, False: 391k]
  ------------------
 4798|  2.86k|        return decode_NXAST_RAW_LEARN2(ALIGNED_CAST(const struct nx_action_learn2 *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  2.86k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4799|       |
 4800|  3.00k|    case NXAST_RAW_EXIT:
  ------------------
  |  Branch (4800:5): [True: 3.00k, False: 391k]
  ------------------
 4801|  3.00k|        return decode_NXAST_RAW_EXIT(out);
 4802|       |
 4803|  1.12k|    case NXAST_RAW_FIN_TIMEOUT:
  ------------------
  |  Branch (4803:5): [True: 1.12k, False: 393k]
  ------------------
 4804|  1.12k|        return decode_NXAST_RAW_FIN_TIMEOUT(ALIGNED_CAST(const struct nx_action_fin_timeout *, a), version, out);
  ------------------
  |  |  434|  1.12k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4805|       |
 4806|  3.28k|    case NXAST_RAW_CONTROLLER:
  ------------------
  |  Branch (4806:5): [True: 3.28k, False: 391k]
  ------------------
 4807|  3.28k|        return decode_NXAST_RAW_CONTROLLER(ALIGNED_CAST(const struct nx_action_controller *, a), version, out);
  ------------------
  |  |  434|  3.28k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4808|       |
 4809|  1.99k|    case NXAST_RAW_CONTROLLER2:
  ------------------
  |  Branch (4809:5): [True: 1.99k, False: 392k]
  ------------------
 4810|  1.99k|        return decode_NXAST_RAW_CONTROLLER2(ALIGNED_CAST(const struct ext_action_header *, a), version, out);
  ------------------
  |  |  434|  1.99k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4811|       |
 4812|    411|    case NXAST_RAW_WRITE_METADATA:
  ------------------
  |  Branch (4812:5): [True: 411, False: 394k]
  ------------------
 4813|    411|        return decode_NXAST_RAW_WRITE_METADATA(ALIGNED_CAST(const struct nx_action_write_metadata *, a), version, out);
  ------------------
  |  |  434|    411|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4814|       |
 4815|  1.69k|    case NXAST_RAW_STACK_PUSH:
  ------------------
  |  Branch (4815:5): [True: 1.69k, False: 392k]
  ------------------
 4816|  1.69k|        return decode_NXAST_RAW_STACK_PUSH(ALIGNED_CAST(const struct nx_action_stack *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  1.69k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4817|       |
 4818|  2.25k|    case NXAST_RAW_STACK_POP:
  ------------------
  |  Branch (4818:5): [True: 2.25k, False: 392k]
  ------------------
 4819|  2.25k|        return decode_NXAST_RAW_STACK_POP(ALIGNED_CAST(const struct nx_action_stack *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  2.25k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4820|       |
 4821|    196|    case NXAST_RAW_SAMPLE:
  ------------------
  |  Branch (4821:5): [True: 196, False: 394k]
  ------------------
 4822|    196|        return decode_NXAST_RAW_SAMPLE(ALIGNED_CAST(const struct nx_action_sample *, a), version, out);
  ------------------
  |  |  434|    196|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4823|       |
 4824|    875|    case NXAST_RAW_SAMPLE2:
  ------------------
  |  Branch (4824:5): [True: 875, False: 393k]
  ------------------
 4825|    875|        return decode_NXAST_RAW_SAMPLE2(ALIGNED_CAST(const struct nx_action_sample2 *, a), version, out);
  ------------------
  |  |  434|    875|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4826|       |
 4827|  6.12k|    case NXAST_RAW_SAMPLE3:
  ------------------
  |  Branch (4827:5): [True: 6.12k, False: 388k]
  ------------------
 4828|  6.12k|        return decode_NXAST_RAW_SAMPLE3(ALIGNED_CAST(const struct nx_action_sample2 *, a), version, out);
  ------------------
  |  |  434|  6.12k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4829|       |
 4830|  4.26k|    case NXAST_RAW_SAMPLE4:
  ------------------
  |  Branch (4830:5): [True: 4.26k, False: 390k]
  ------------------
 4831|  4.26k|        return decode_NXAST_RAW_SAMPLE4(ALIGNED_CAST(const struct nx_action_sample4 *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  4.26k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4832|       |
 4833|  7.25k|    case NXAST_RAW_CONJUNCTION:
  ------------------
  |  Branch (4833:5): [True: 7.25k, False: 387k]
  ------------------
 4834|  7.25k|        return decode_NXAST_RAW_CONJUNCTION(ALIGNED_CAST(const struct nx_action_conjunction *, a), version, out);
  ------------------
  |  |  434|  7.25k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4835|       |
 4836|  17.0k|    case NXAST_RAW_CT:
  ------------------
  |  Branch (4836:5): [True: 17.0k, False: 377k]
  ------------------
 4837|  17.0k|        return decode_NXAST_RAW_CT(ALIGNED_CAST(const struct nx_action_conntrack *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  17.0k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4838|       |
 4839|  32.8k|    case NXAST_RAW_NAT:
  ------------------
  |  Branch (4839:5): [True: 32.8k, False: 361k]
  ------------------
 4840|  32.8k|        return decode_NXAST_RAW_NAT(ALIGNED_CAST(const struct nx_action_nat *, a), version, out);
  ------------------
  |  |  434|  32.8k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4841|       |
 4842|  1.53k|    case NXAST_RAW_OUTPUT_TRUNC:
  ------------------
  |  Branch (4842:5): [True: 1.53k, False: 392k]
  ------------------
 4843|  1.53k|        return decode_NXAST_RAW_OUTPUT_TRUNC(ALIGNED_CAST(const struct nx_action_output_trunc *, a), version, out);
  ------------------
  |  |  434|  1.53k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4844|       |
 4845|  3.72k|    case NXAST_RAW_CLONE:
  ------------------
  |  Branch (4845:5): [True: 3.72k, False: 390k]
  ------------------
 4846|  3.72k|        return decode_NXAST_RAW_CLONE(ALIGNED_CAST(const struct ext_action_header *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  3.72k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4847|       |
 4848|    131|    case NXAST_RAW_CT_CLEAR:
  ------------------
  |  Branch (4848:5): [True: 131, False: 394k]
  ------------------
 4849|    131|        return decode_NXAST_RAW_CT_CLEAR(out);
 4850|       |
 4851|  9.65k|    case NXAST_RAW_ENCAP:
  ------------------
  |  Branch (4851:5): [True: 9.65k, False: 384k]
  ------------------
 4852|  9.65k|        return decode_NXAST_RAW_ENCAP(ALIGNED_CAST(const struct nx_action_encap *, a), version, out);
  ------------------
  |  |  434|  9.65k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4853|       |
 4854|  20.9k|    case NXAST_RAW_DECAP:
  ------------------
  |  Branch (4854:5): [True: 20.9k, False: 373k]
  ------------------
 4855|  20.9k|        return decode_NXAST_RAW_DECAP(ALIGNED_CAST(const struct nx_action_decap *, a), version, out);
  ------------------
  |  |  434|  20.9k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4856|       |
 4857|  1.75k|    case NXAST_RAW_DEC_NSH_TTL:
  ------------------
  |  Branch (4857:5): [True: 1.75k, False: 392k]
  ------------------
 4858|  1.75k|        return decode_NXAST_RAW_DEC_NSH_TTL(out);
 4859|       |
 4860|  2.24k|    case NXAST_RAW_CHECK_PKT_LARGER:
  ------------------
  |  Branch (4860:5): [True: 2.24k, False: 392k]
  ------------------
 4861|  2.24k|        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.24k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4862|       |
 4863|    560|    case NXAST_RAW_DELETE_FIELD:
  ------------------
  |  Branch (4863:5): [True: 560, False: 393k]
  ------------------
 4864|    560|        return decode_NXAST_RAW_DELETE_FIELD(ALIGNED_CAST(const struct nx_action_delete_field *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|    560|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4865|       |
 4866|    338|    case NXAST_RAW_DEBUG_SLOW:
  ------------------
  |  Branch (4866:5): [True: 338, False: 394k]
  ------------------
 4867|    338|        return decode_NXAST_RAW_DEBUG_SLOW(out);
 4868|       |
 4869|    198|    case NXAST_RAW_DEBUG_RECIRC:
  ------------------
  |  Branch (4869:5): [True: 198, False: 394k]
  ------------------
 4870|    198|        return decode_NXAST_RAW_DEBUG_RECIRC(out);
 4871|       |
 4872|      0|    default:
  ------------------
  |  Branch (4872:5): [True: 0, False: 394k]
  ------------------
 4873|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 4874|   394k|    }
 4875|   394k|}

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

ofputil_decode_role_message:
   42|  11.8k|{
   43|  11.8k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
   44|  11.8k|    enum ofpraw raw = ofpraw_pull_assert(&b);
   45|  11.8k|    if (raw == OFPRAW_OFPT12_ROLE_REQUEST ||
  ------------------
  |  Branch (45:9): [True: 1.11k, False: 10.7k]
  ------------------
   46|  10.7k|        raw == OFPRAW_OFPT12_ROLE_REPLY) {
  ------------------
  |  Branch (46:9): [True: 6.35k, False: 4.39k]
  ------------------
   47|  7.47k|        const struct ofp12_role_request *orr = b.msg;
   48|       |
   49|  7.47k|        if (orr->role != htonl(OFPCR12_ROLE_NOCHANGE) &&
  ------------------
  |  Branch (49:13): [True: 7.07k, False: 392]
  ------------------
   50|  7.07k|            orr->role != htonl(OFPCR12_ROLE_EQUAL) &&
  ------------------
  |  Branch (50:13): [True: 2.66k, False: 4.41k]
  ------------------
   51|  2.66k|            orr->role != htonl(OFPCR12_ROLE_PRIMARY) &&
  ------------------
  |  Branch (51:13): [True: 2.63k, False: 27]
  ------------------
   52|  2.63k|            orr->role != htonl(OFPCR12_ROLE_SECONDARY)) {
  ------------------
  |  Branch (52:13): [True: 2.17k, False: 465]
  ------------------
   53|  2.17k|            return OFPERR_OFPRRFC_BAD_ROLE;
   54|  2.17k|        }
   55|       |
   56|  5.29k|        rr->role = ntohl(orr->role);
   57|  5.29k|        if (raw == OFPRAW_OFPT12_ROLE_REQUEST
  ------------------
  |  Branch (57:13): [True: 918, False: 4.38k]
  |  Branch (57:13): [True: 278, False: 5.02k]
  ------------------
   58|  5.29k|            ? orr->role == htonl(OFPCR12_ROLE_NOCHANGE)
   59|  5.29k|            : orr->generation_id == OVS_BE64_MAX) {
  ------------------
  |  |   44|  4.38k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
   60|    278|            rr->have_generation_id = false;
   61|    278|            rr->generation_id = 0;
   62|  5.02k|        } else {
   63|  5.02k|            rr->have_generation_id = true;
   64|  5.02k|            rr->generation_id = ntohll(orr->generation_id);
   65|  5.02k|        }
   66|  5.29k|    } else if (raw == OFPRAW_NXT_ROLE_REQUEST ||
  ------------------
  |  Branch (66:16): [True: 3.17k, False: 1.21k]
  ------------------
   67|  4.39k|               raw == OFPRAW_NXT_ROLE_REPLY) {
  ------------------
  |  Branch (67:16): [True: 1.21k, False: 0]
  ------------------
   68|  4.39k|        const struct nx_role_request *nrr = b.msg;
   69|       |
   70|  4.39k|        BUILD_ASSERT(NX_ROLE_OTHER + 1 == OFPCR12_ROLE_EQUAL);
  ------------------
  |  |  271|  4.39k|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  ------------------
   71|  4.39k|        BUILD_ASSERT(NX_ROLE_PRIMARY + 1 == OFPCR12_ROLE_PRIMARY);
  ------------------
  |  |  271|  4.39k|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  ------------------
   72|  4.39k|        BUILD_ASSERT(NX_ROLE_SECONDARY + 1 == OFPCR12_ROLE_SECONDARY);
  ------------------
  |  |  271|  4.39k|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  ------------------
   73|       |
   74|  4.39k|        if (nrr->role != htonl(NX_ROLE_OTHER) &&
  ------------------
  |  Branch (74:13): [True: 4.32k, False: 66]
  ------------------
   75|  4.32k|            nrr->role != htonl(NX_ROLE_PRIMARY) &&
  ------------------
  |  Branch (75:13): [True: 4.26k, False: 66]
  ------------------
   76|  4.26k|            nrr->role != htonl(NX_ROLE_SECONDARY)) {
  ------------------
  |  Branch (76:13): [True: 327, False: 3.93k]
  ------------------
   77|    327|            return OFPERR_OFPRRFC_BAD_ROLE;
   78|    327|        }
   79|       |
   80|  4.06k|        rr->role = ntohl(nrr->role) + 1;
   81|  4.06k|        rr->have_generation_id = false;
   82|  4.06k|        rr->generation_id = 0;
   83|  4.06k|    } else {
   84|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
   85|      0|    }
   86|       |
   87|  9.36k|    return 0;
   88|  11.8k|}
ofputil_format_role_message:
  121|  9.36k|{
  122|  9.36k|    format_role_generic(string, rr->role, (rr->have_generation_id
  ------------------
  |  Branch (122:44): [True: 5.02k, False: 4.34k]
  ------------------
  123|  9.36k|                                           ? rr->generation_id
  124|       |                                           : UINT64_MAX));
  125|  9.36k|}
ofputil_decode_role_status:
  191|  1.61k|{
  192|  1.61k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  193|  1.61k|    enum ofpraw raw = ofpraw_pull_assert(&b);
  194|  1.61k|    ovs_assert(raw == OFPRAW_OFPT14_ROLE_STATUS ||
  ------------------
  |  |   62|  1.61k|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (194:16): [True: 1.61k, False: 0]
  ------------------
  195|      0|               raw == OFPRAW_ONFT13_ROLE_STATUS);
  ------------------
  |  Branch (195:16): [True: 0, False: 0]
  ------------------
  196|       |
  197|  1.61k|    const struct ofp14_role_status *r = b.msg;
  198|  1.61k|    if (r->role != htonl(OFPCR12_ROLE_NOCHANGE) &&
  ------------------
  |  Branch (198:9): [True: 1.03k, False: 584]
  ------------------
  199|  1.03k|        r->role != htonl(OFPCR12_ROLE_EQUAL) &&
  ------------------
  |  Branch (199:9): [True: 831, False: 200]
  ------------------
  200|    831|        r->role != htonl(OFPCR12_ROLE_PRIMARY) &&
  ------------------
  |  Branch (200:9): [True: 711, False: 120]
  ------------------
  201|    711|        r->role != htonl(OFPCR12_ROLE_SECONDARY)) {
  ------------------
  |  Branch (201:9): [True: 488, False: 223]
  ------------------
  202|    488|        return OFPERR_OFPRRFC_BAD_ROLE;
  203|    488|    }
  204|       |
  205|  1.12k|    rs->role = ntohl(r->role);
  206|  1.12k|    rs->generation_id = ntohll(r->generation_id);
  207|  1.12k|    rs->reason = r->reason;
  208|       |
  209|  1.12k|    return 0;
  210|  1.61k|}
ofputil_format_role_status:
  215|  1.12k|{
  216|  1.12k|    format_role_generic(string, rs->role, rs->generation_id);
  217|       |
  218|  1.12k|    ds_put_cstr(string, " reason=");
  219|       |
  220|  1.12k|    switch (rs->reason) {
  221|    215|    case OFPCRR_PRIMARY_REQUEST:
  ------------------
  |  Branch (221:5): [True: 215, False: 912]
  ------------------
  222|    215|        ds_put_cstr(string, "primary_request");
  223|    215|        break;
  224|     45|    case OFPCRR_CONFIG:
  ------------------
  |  Branch (224:5): [True: 45, False: 1.08k]
  ------------------
  225|     45|        ds_put_cstr(string, "configuration_changed");
  226|     45|        break;
  227|     81|    case OFPCRR_EXPERIMENTER:
  ------------------
  |  Branch (227:5): [True: 81, False: 1.04k]
  ------------------
  228|     81|        ds_put_cstr(string, "experimenter_data_changed");
  229|     81|        break;
  230|    290|    case OFPCRR_N_REASONS:
  ------------------
  |  Branch (230:5): [True: 290, False: 837]
  ------------------
  231|    786|    default:
  ------------------
  |  Branch (231:5): [True: 496, False: 631]
  ------------------
  232|    786|        ds_put_cstr(string, "(unknown)");
  233|    786|        break;
  234|  1.12k|    }
  235|  1.12k|}
ofputil_async_msg_type_to_string:
  239|   181k|{
  240|   181k|    switch (type) {
  241|  30.2k|    case OAM_PACKET_IN:      return "PACKET_IN";
  ------------------
  |  Branch (241:5): [True: 30.2k, False: 151k]
  ------------------
  242|  30.2k|    case OAM_PORT_STATUS:    return "PORT_STATUS";
  ------------------
  |  Branch (242:5): [True: 30.2k, False: 151k]
  ------------------
  243|  30.2k|    case OAM_FLOW_REMOVED:   return "FLOW_REMOVED";
  ------------------
  |  Branch (243:5): [True: 30.2k, False: 151k]
  ------------------
  244|  30.2k|    case OAM_ROLE_STATUS:    return "ROLE_STATUS";
  ------------------
  |  Branch (244:5): [True: 30.2k, False: 151k]
  ------------------
  245|  30.2k|    case OAM_TABLE_STATUS:   return "TABLE_STATUS";
  ------------------
  |  Branch (245:5): [True: 30.2k, False: 151k]
  ------------------
  246|  30.2k|    case OAM_REQUESTFORWARD: return "REQUESTFORWARD";
  ------------------
  |  Branch (246:5): [True: 30.2k, False: 151k]
  ------------------
  247|       |
  248|      0|    case OAM_N_TYPES:
  ------------------
  |  Branch (248:5): [True: 0, False: 181k]
  ------------------
  249|      0|    default:
  ------------------
  |  Branch (249:5): [True: 0, False: 181k]
  ------------------
  250|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  251|   181k|    }
  252|   181k|}
ofputil_decode_set_async_config:
  427|  22.8k|{
  428|  22.8k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  429|  22.8k|    enum ofpraw raw = ofpraw_pull_assert(&b);
  430|       |
  431|  22.8k|    if (raw == OFPRAW_OFPT13_SET_ASYNC ||
  ------------------
  |  Branch (431:9): [True: 425, False: 22.4k]
  ------------------
  432|  22.4k|        raw == OFPRAW_NXT_SET_ASYNC_CONFIG ||
  ------------------
  |  Branch (432:9): [True: 216, False: 22.2k]
  ------------------
  433|  22.2k|        raw == OFPRAW_OFPT13_GET_ASYNC_REPLY) {
  ------------------
  |  Branch (433:9): [True: 1.23k, False: 20.9k]
  ------------------
  434|  1.87k|        const struct nx_async_config *msg = ofpmsg_body(oh);
  435|       |
  436|  1.87k|        *ac = OFPUTIL_ASYNC_CFG_INIT;
  ------------------
  |  |   75|  1.87k|#define OFPUTIL_ASYNC_CFG_INIT (struct ofputil_async_cfg) { .primary[0] = 0 }
  ------------------
  437|  1.87k|        decode_legacy_async_masks(msg->packet_in_mask, OAM_PACKET_IN,
  438|  1.87k|                                  oh->version, ac);
  439|  1.87k|        decode_legacy_async_masks(msg->port_status_mask, OAM_PORT_STATUS,
  440|  1.87k|                                  oh->version, ac);
  441|  1.87k|        decode_legacy_async_masks(msg->flow_removed_mask, OAM_FLOW_REMOVED,
  442|  1.87k|                                  oh->version, ac);
  443|  20.9k|    } else if (raw == OFPRAW_OFPT14_SET_ASYNC ||
  ------------------
  |  Branch (443:16): [True: 3.91k, False: 17.0k]
  ------------------
  444|  17.0k|               raw == OFPRAW_OFPT14_GET_ASYNC_REPLY ||
  ------------------
  |  Branch (444:16): [True: 16.9k, False: 111]
  ------------------
  445|  20.9k|               raw == OFPRAW_NXT_SET_ASYNC_CONFIG2) {
  ------------------
  |  Branch (445:16): [True: 111, False: 0]
  ------------------
  446|  20.9k|        *ac = *basis;
  447|  34.4k|        while (b.size > 0) {
  ------------------
  |  Branch (447:16): [True: 21.2k, False: 13.2k]
  ------------------
  448|  21.2k|            struct ofpbuf property;
  449|  21.2k|            enum ofperr error;
  450|  21.2k|            uint64_t type;
  451|       |
  452|  21.2k|            error = ofpprop_pull__(&b, &property, 8, 0xfffe, &type);
  453|  21.2k|            if (error) {
  ------------------
  |  Branch (453:17): [True: 6.69k, False: 14.5k]
  ------------------
  454|  6.69k|                return error;
  455|  6.69k|            }
  456|       |
  457|  14.5k|            const struct ofp14_async_prop *ap
  458|  14.5k|                = get_ofp14_async_config_prop_by_prop_type(type);
  459|  14.5k|            error = (ap
  ------------------
  |  Branch (459:22): [True: 10.8k, False: 3.70k]
  ------------------
  460|  14.5k|                     ? parse_async_tlv(&property, ap, ac, oh->version, loose)
  461|  14.5k|                     : OFPPROP_UNKNOWN(loose, "async config", type));
  ------------------
  |  |  144|  3.70k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  462|  14.5k|            if (error) {
  ------------------
  |  Branch (462:17): [True: 1.02k, False: 13.5k]
  ------------------
  463|       |                /* Most messages use OFPBPC_BAD_TYPE but async has its own (who
  464|       |                 * knows why, it's OpenFlow. */
  465|  1.02k|                if (error == OFPERR_OFPBPC_BAD_TYPE) {
  ------------------
  |  Branch (465:21): [True: 345, False: 675]
  ------------------
  466|    345|                    error = OFPERR_OFPACFC_UNSUPPORTED;
  467|    345|                }
  468|  1.02k|                return error;
  469|  1.02k|            }
  470|  14.5k|        }
  471|  20.9k|    } else {
  472|      0|        return OFPERR_OFPBRC_BAD_VERSION;
  473|      0|    }
  474|  15.1k|    return 0;
  475|  22.8k|}
ofputil_format_set_async_config:
  667|  15.1k|{
  668|  45.3k|    for (int i = 0; i < 2; i++) {
  ------------------
  |  Branch (668:21): [True: 30.2k, False: 15.1k]
  ------------------
  669|  30.2k|        ds_put_format(string, "\n %s:\n", i == 0 ? "primary" : "secondary");
  ------------------
  |  Branch (669:43): [True: 15.1k, False: 15.1k]
  ------------------
  670|   211k|        for (uint32_t type = 0; type < OAM_N_TYPES; type++) {
  ------------------
  |  Branch (670:33): [True: 181k, False: 30.2k]
  ------------------
  671|   181k|            ds_put_format(string, "%16s:",
  672|   181k|                          ofputil_async_msg_type_to_string(type));
  673|       |
  674|   181k|            uint32_t role = i == 0 ? ac->primary[type] : ac->secondary[type];
  ------------------
  |  Branch (674:29): [True: 90.7k, False: 90.7k]
  ------------------
  675|  5.98M|            for (int j = 0; j < 32; j++) {
  ------------------
  |  Branch (675:29): [True: 5.80M, False: 181k]
  ------------------
  676|  5.80M|                if (role & (1u << j)) {
  ------------------
  |  Branch (676:21): [True: 51.3k, False: 5.75M]
  ------------------
  677|  51.3k|                    char reasonbuf[INT_STRLEN(int) + 1];
  678|  51.3k|                    const char *reason;
  679|       |
  680|  51.3k|                    reason = ofp_async_config_reason_to_string(
  681|  51.3k|                        j, type, reasonbuf, sizeof reasonbuf);
  682|  51.3k|                    if (reason[0]) {
  ------------------
  |  Branch (682:25): [True: 47.4k, False: 3.83k]
  ------------------
  683|  47.4k|                        ds_put_format(string, " %s", reason);
  684|  47.4k|                    }
  685|  51.3k|                }
  686|  5.80M|            }
  687|   181k|            if (!role) {
  ------------------
  |  Branch (687:17): [True: 166k, False: 15.2k]
  ------------------
  688|   166k|                ds_put_cstr(string, " (off)");
  689|   166k|            }
  690|   181k|            ds_put_char(string, '\n');
  691|   181k|        }
  692|  30.2k|    }
  693|  15.1k|}
ofp-connection.c:format_role_generic:
   93|  10.4k|{
   94|  10.4k|    ds_put_cstr(string, " role=");
   95|       |
   96|  10.4k|    switch (role) {
   97|    976|    case OFPCR12_ROLE_NOCHANGE:
  ------------------
  |  Branch (97:5): [True: 976, False: 9.51k]
  ------------------
   98|    976|        ds_put_cstr(string, "nochange");
   99|    976|        break;
  100|  4.68k|    case OFPCR12_ROLE_EQUAL:
  ------------------
  |  Branch (100:5): [True: 4.68k, False: 5.81k]
  ------------------
  101|  4.68k|        ds_put_cstr(string, "equal"); /* OF 1.2 wording */
  102|  4.68k|        break;
  103|    213|    case OFPCR12_ROLE_PRIMARY:
  ------------------
  |  Branch (103:5): [True: 213, False: 10.2k]
  ------------------
  104|    213|        ds_put_cstr(string, "primary");
  105|    213|        break;
  106|  4.62k|    case OFPCR12_ROLE_SECONDARY:
  ------------------
  |  Branch (106:5): [True: 4.62k, False: 5.87k]
  ------------------
  107|  4.62k|        ds_put_cstr(string, "secondary");
  108|  4.62k|        break;
  109|      0|    default:
  ------------------
  |  Branch (109:5): [True: 0, False: 10.4k]
  ------------------
  110|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  111|  10.4k|    }
  112|       |
  113|  10.4k|    if (generation_id != UINT64_MAX) {
  ------------------
  |  Branch (113:9): [True: 6.14k, False: 4.34k]
  ------------------
  114|       |        ds_put_format(string, " generation_id=%"PRIu64, generation_id);
  115|  6.14k|    }
  116|  10.4k|}
ofp-connection.c:decode_legacy_async_masks:
  393|  5.61k|{
  394|  16.8k|    for (int i = 0; i < 2; i++) {
  ------------------
  |  Branch (394:21): [True: 11.2k, False: 5.61k]
  ------------------
  395|  11.2k|        bool primary = i == 0;
  396|  11.2k|        const struct ofp14_async_prop *ap
  397|  11.2k|            = get_ofp14_async_config_prop_by_oam(oam, primary);
  398|       |        decode_async_mask(masks[i], ap, version, true, dst);
  399|  11.2k|    }
  400|  5.61k|}
ofp-connection.c:get_ofp14_async_config_prop_by_oam:
  292|  11.2k|{
  293|  39.3k|    FOR_EACH_ASYNC_PROP (ap) {
  ------------------
  |  |  275|  11.2k|    for (const struct ofp14_async_prop *VAR = async_props;      \
  |  |  276|  39.3k|         VAR < &async_props[ARRAY_SIZE(async_props)]; VAR++)
  |  |  ------------------
  |  |  |  |  297|  39.3k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  |  |  ------------------
  |  |  |  |  |  |   46|  39.3k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   41|  39.3k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   47|  39.3k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  39.3k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   44|  39.3k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (276:10): [True: 39.3k, False: 0]
  |  |  ------------------
  ------------------
  294|  39.3k|        if (ap->oam == oam && ap->primary == primary) {
  ------------------
  |  Branch (294:13): [True: 16.8k, False: 22.4k]
  |  Branch (294:31): [True: 11.2k, False: 5.61k]
  ------------------
  295|  11.2k|            return ap;
  296|  11.2k|        }
  297|  39.3k|    }
  298|      0|    return NULL;
  299|  11.2k|}
ofp-connection.c:decode_async_mask:
  323|  21.9k|{
  324|  21.9k|    uint32_t mask = ntohl(src);
  325|  21.9k|    uint32_t allowed = ofp14_async_prop_allowed(ap, version);
  326|  21.9k|    if (mask & ~allowed) {
  ------------------
  |  Branch (326:9): [True: 17.0k, False: 4.87k]
  ------------------
  327|  17.0k|        static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
  ------------------
  |  |  110|  17.0k|        {                                                                 \
  |  |  111|  17.0k|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|  68.2k|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [True: 0, Folded]
  |  |  |  |  |  Branch (37:48): [Folded, False: 17.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  17.0k|            0,                              /* first_dropped */           \
  |  |  113|  17.0k|            0,                              /* last_dropped */            \
  |  |  114|  17.0k|            0,                              /* n_dropped */               \
  |  |  115|  17.0k|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  17.0k|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  17.0k|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  17.0k|        }
  ------------------
  328|  17.0k|        OFPPROP_LOG(&rl, loose,
  ------------------
  |  |  139|  17.0k|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  17.0k|    do {                                                                \
  |  |  |  |  288|  34.1k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [True: 16.5k, False: 530]
  |  |  |  |  ------------------
  |  |  |  |  289|  17.0k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 17.0k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  17.0k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 17.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  329|  17.0k|                    "bad value %#x for %s (allowed mask %#x)",
  330|  17.0k|                    mask, ofputil_async_msg_type_to_string(ap->oam),
  331|  17.0k|                    allowed);
  332|  17.0k|        mask &= allowed;
  333|  17.0k|        if (!loose) {
  ------------------
  |  Branch (333:13): [True: 530, False: 16.5k]
  ------------------
  334|    530|            return OFPERR_OFPACFC_INVALID;
  335|    530|        }
  336|  17.0k|    }
  337|       |
  338|  21.4k|    if (ap->oam == OAM_PACKET_IN) {
  ------------------
  |  Branch (338:9): [True: 6.32k, False: 15.0k]
  ------------------
  339|  6.32k|        if (mask & (1u << OFPR_NO_MATCH)) {
  ------------------
  |  Branch (339:13): [True: 3.68k, False: 2.64k]
  ------------------
  340|  3.68k|            mask |= 1u << OFPR_EXPLICIT_MISS;
  341|  3.68k|            if (version < OFP13_VERSION) {
  ------------------
  |  Branch (341:17): [True: 405, False: 3.27k]
  ------------------
  342|    405|                mask |= 1u << OFPR_IMPLICIT_MISS;
  343|    405|            }
  344|  3.68k|        }
  345|  6.32k|    }
  346|       |
  347|  21.4k|    uint32_t *array = ap->primary ? dst->primary : dst->secondary;
  ------------------
  |  Branch (347:23): [True: 7.34k, False: 14.0k]
  ------------------
  348|  21.4k|    array[ap->oam] = mask;
  349|  21.4k|    return 0;
  350|  21.9k|}
ofp-connection.c:ofp14_async_prop_allowed:
  304|  21.9k|{
  305|  21.9k|    return version >= OFP14_VERSION ? prop->allowed14 : prop->allowed10;
  ------------------
  |  Branch (305:12): [True: 10.6k, False: 11.3k]
  ------------------
  306|  21.9k|}
ofp-connection.c:get_ofp14_async_config_prop_by_prop_type:
  280|  14.5k|{
  281|   107k|    FOR_EACH_ASYNC_PROP (ap) {
  ------------------
  |  |  275|  14.5k|    for (const struct ofp14_async_prop *VAR = async_props;      \
  |  |  276|   110k|         VAR < &async_props[ARRAY_SIZE(async_props)]; VAR++)
  |  |  ------------------
  |  |  |  |  297|   110k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  |  |  ------------------
  |  |  |  |  |  |   46|   110k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   41|   110k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   47|   110k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   110k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   44|   110k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (276:10): [True: 107k, False: 3.70k]
  |  |  ------------------
  ------------------
  282|   107k|        if (prop_type == ap->prop_type) {
  ------------------
  |  Branch (282:13): [True: 10.8k, False: 96.2k]
  ------------------
  283|  10.8k|            return ap;
  284|  10.8k|        }
  285|   107k|    }
  286|  3.70k|    return NULL;
  287|  14.5k|}
ofp-connection.c:parse_async_tlv:
  357|  10.8k|{
  358|  10.8k|    enum ofperr error;
  359|  10.8k|    ovs_be32 mask;
  360|       |
  361|  10.8k|    error  = ofpprop_parse_be32(property, &mask);
  362|  10.8k|    if (error) {
  ------------------
  |  Branch (362:9): [True: 108, False: 10.7k]
  ------------------
  363|    108|        return error;
  364|    108|    }
  365|       |
  366|  10.7k|    if (ofpprop_is_experimenter(ap->prop_type)) {
  ------------------
  |  Branch (366:9): [True: 0, False: 10.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|  10.7k|    return decode_async_mask(mask, ap, version, loose, ac);
  386|  10.7k|}
ofp-connection.c:ofp_async_config_reason_to_string:
  638|  51.3k|{
  639|  51.3k|    switch (type) {
  640|  19.0k|    case OAM_PACKET_IN:
  ------------------
  |  Branch (640:5): [True: 19.0k, False: 32.3k]
  ------------------
  641|  19.0k|        return ofputil_packet_in_reason_to_string(reason, reasonbuf, bufsize);
  642|       |
  643|  5.98k|    case OAM_PORT_STATUS:
  ------------------
  |  Branch (643:5): [True: 5.98k, False: 45.3k]
  ------------------
  644|  5.98k|        return ofp_port_reason_to_string(reason, reasonbuf, bufsize);
  645|       |
  646|  9.44k|    case OAM_FLOW_REMOVED:
  ------------------
  |  Branch (646:5): [True: 9.44k, False: 41.8k]
  ------------------
  647|  9.44k|        return ofp_flow_removed_reason_to_string(reason, reasonbuf, bufsize);
  648|       |
  649|  13.9k|    case OAM_ROLE_STATUS:
  ------------------
  |  Branch (649:5): [True: 13.9k, False: 37.4k]
  ------------------
  650|  13.9k|        return ofp_role_reason_to_string(reason, reasonbuf, bufsize);
  651|       |
  652|    874|    case OAM_TABLE_STATUS:
  ------------------
  |  Branch (652:5): [True: 874, False: 50.4k]
  ------------------
  653|    874|        return ofp_table_reason_to_string(reason, reasonbuf, bufsize);
  654|       |
  655|  2.10k|    case OAM_REQUESTFORWARD:
  ------------------
  |  Branch (655:5): [True: 2.10k, False: 49.2k]
  ------------------
  656|  2.10k|        return ofp_requestforward_reason_to_string(reason, reasonbuf, bufsize);
  657|       |
  658|      0|    case OAM_N_TYPES:
  ------------------
  |  Branch (658:5): [True: 0, False: 51.3k]
  ------------------
  659|      0|    default:
  ------------------
  |  Branch (659:5): [True: 0, False: 51.3k]
  ------------------
  660|      0|        return "Unknown asynchronous configuration message type";
  661|  51.3k|    }
  662|  51.3k|}
ofp-connection.c:ofp_port_reason_to_string:
  571|  5.98k|{
  572|  5.98k|    switch (reason) {
  573|  2.15k|    case OFPPR_ADD:
  ------------------
  |  Branch (573:5): [True: 2.15k, False: 3.83k]
  ------------------
  574|  2.15k|        return "add";
  575|       |
  576|  1.87k|    case OFPPR_DELETE:
  ------------------
  |  Branch (576:5): [True: 1.87k, False: 4.10k]
  ------------------
  577|  1.87k|        return "delete";
  578|       |
  579|  1.95k|    case OFPPR_MODIFY:
  ------------------
  |  Branch (579:5): [True: 1.95k, False: 4.02k]
  ------------------
  580|  1.95k|        return "modify";
  581|       |
  582|      0|    case OFPPR_N_REASONS:
  ------------------
  |  Branch (582:5): [True: 0, False: 5.98k]
  ------------------
  583|      0|    default:
  ------------------
  |  Branch (583:5): [True: 0, False: 5.98k]
  ------------------
  584|      0|        snprintf(reasonbuf, bufsize, "%d", (int) reason);
  585|      0|        return reasonbuf;
  586|  5.98k|    }
  587|  5.98k|}
ofp-connection.c:ofp_role_reason_to_string:
  595|  13.9k|{
  596|  13.9k|    switch (reason) {
  597|  4.66k|    case OFPCRR_PRIMARY_REQUEST:
  ------------------
  |  Branch (597:5): [True: 4.66k, False: 9.25k]
  ------------------
  598|  4.66k|        return "primary_request";
  599|       |
  600|  4.67k|    case OFPCRR_CONFIG:
  ------------------
  |  Branch (600:5): [True: 4.67k, False: 9.24k]
  ------------------
  601|  4.67k|        return "configuration_changed";
  602|       |
  603|  4.58k|    case OFPCRR_EXPERIMENTER:
  ------------------
  |  Branch (603:5): [True: 4.58k, False: 9.33k]
  ------------------
  604|  4.58k|        return "experimenter_data_changed";
  605|       |
  606|      0|    case OFPCRR_N_REASONS:
  ------------------
  |  Branch (606:5): [True: 0, False: 13.9k]
  ------------------
  607|      0|    default:
  ------------------
  |  Branch (607:5): [True: 0, False: 13.9k]
  ------------------
  608|      0|        snprintf(reasonbuf, bufsize, "%d", (int) reason);
  609|      0|        return reasonbuf;
  610|  13.9k|    }
  611|  13.9k|}
ofp-connection.c:ofp_requestforward_reason_to_string:
  619|  2.10k|{
  620|  2.10k|    switch (reason) {
  621|  1.05k|    case OFPRFR_GROUP_MOD:
  ------------------
  |  Branch (621:5): [True: 1.05k, False: 1.05k]
  ------------------
  622|  1.05k|        return "group_mod_request";
  623|       |
  624|  1.05k|    case OFPRFR_METER_MOD:
  ------------------
  |  Branch (624:5): [True: 1.05k, False: 1.05k]
  ------------------
  625|  1.05k|        return "meter_mod_request";
  626|       |
  627|      0|    case OFPRFR_N_REASONS:
  ------------------
  |  Branch (627:5): [True: 0, False: 2.10k]
  ------------------
  628|      0|    default:
  ------------------
  |  Branch (628:5): [True: 0, False: 2.10k]
  ------------------
  629|      0|        snprintf(reasonbuf, bufsize, "%d", (int) reason);
  630|      0|        return reasonbuf;
  631|  2.10k|    }
  632|  2.10k|}

ofp_ct_match_format:
  100|  6.03k|{
  101|  6.03k|    if (match->mark_mask) {
  ------------------
  |  Branch (101:9): [True: 1.27k, False: 4.76k]
  ------------------
  102|  1.27k|        ds_put_format(ds, "mark=%#"PRIx32, match->mark);
  103|  1.27k|        if (match->mark_mask != UINT32_MAX) {
  ------------------
  |  Branch (103:13): [True: 913, False: 363]
  ------------------
  104|    913|            ds_put_format(ds, "/%#"PRIx32, match->mark_mask);
  105|    913|        }
  106|  1.27k|        ds_put_char(ds, ' ');
  107|  1.27k|    }
  108|       |
  109|  6.03k|    if (!ovs_u128_is_zero(match->labels_mask)) {
  ------------------
  |  Branch (109:9): [True: 1.34k, False: 4.69k]
  ------------------
  110|  1.34k|        ovs_be128 be_value = hton128(match->labels);
  111|  1.34k|        ovs_be128 be_mask = hton128(match->labels_mask);
  112|       |
  113|  1.34k|        ds_put_cstr(ds, "labels=");
  114|  1.34k|        ds_put_hex(ds, &be_value, sizeof be_value);
  115|       |
  116|  1.34k|        if (!ovs_u128_is_ones(match->labels_mask)) {
  ------------------
  |  Branch (116:13): [True: 1.16k, False: 181]
  ------------------
  117|  1.16k|            ds_put_char(ds, '/');
  118|  1.16k|            ds_put_hex(ds, &be_mask, sizeof be_mask);
  119|  1.16k|        }
  120|  1.34k|        ds_put_char(ds, ' ');
  121|  1.34k|    }
  122|       |
  123|  6.03k|    ds_put_cstr(ds, "'");
  124|  6.03k|    ofp_ct_tuple_format(ds, &match->tuple_orig, match->ip_proto,
  125|  6.03k|                        match->l3_type);
  126|  6.03k|    ds_put_format(ds, ",ct_nw_proto=%u' '", match->ip_proto);
  127|  6.03k|    ofp_ct_tuple_format(ds, &match->tuple_reply, match->ip_proto,
  128|  6.03k|                        match->l3_type);
  129|  6.03k|    ds_put_cstr(ds, "'");
  130|  6.03k|}
ofp_ct_match_decode:
  473|  15.1k|{
  474|  15.1k|    uint32_t tlv_flags = 0;
  475|  15.1k|    struct ofpbuf msg = ofpbuf_const_initializer(oh, ntohs(oh->length));
  476|  15.1k|    ofpraw_pull_assert(&msg);
  477|       |
  478|  15.1k|    const struct nx_ct_flush *nx_flush = ofpbuf_pull(&msg, sizeof *nx_flush);
  479|       |
  480|  15.1k|    if (!is_all_zeros(nx_flush->pad, sizeof nx_flush->pad)) {
  ------------------
  |  Branch (480:9): [True: 2.06k, False: 13.0k]
  ------------------
  481|  2.06k|        return OFPERR_NXBRC_MUST_BE_ZERO;
  482|  2.06k|    }
  483|       |
  484|  13.0k|    match->ip_proto = nx_flush->ip_proto;
  485|       |
  486|  13.0k|    struct ofp_ct_tuple *orig = &match->tuple_orig;
  487|  13.0k|    struct ofp_ct_tuple *reply = &match->tuple_reply;
  488|       |
  489|  22.7k|    while (msg.size) {
  ------------------
  |  Branch (489:12): [True: 16.7k, False: 6.03k]
  ------------------
  490|  16.7k|        struct ofpbuf property;
  491|  16.7k|        uint64_t type;
  492|       |
  493|  16.7k|        enum ofperr error = ofpprop_pull(&msg, &property, &type);
  494|  16.7k|        if (error) {
  ------------------
  |  Branch (494:13): [True: 1.22k, False: 15.5k]
  ------------------
  495|  1.22k|            return error;
  496|  1.22k|        }
  497|       |
  498|  15.5k|        switch (type) {
  499|  8.43k|        case NXT_CT_ORIG_TUPLE:
  ------------------
  |  Branch (499:9): [True: 8.43k, False: 7.07k]
  ------------------
  500|  8.43k|            error = ofp_ct_tuple_decode_nested(&property, orig,
  501|  8.43k|                                               &match->l3_type);
  502|  8.43k|            break;
  503|       |
  504|  1.34k|        case NXT_CT_REPLY_TUPLE:
  ------------------
  |  Branch (504:9): [True: 1.34k, False: 14.1k]
  ------------------
  505|  1.34k|            error = ofp_ct_tuple_decode_nested(&property, reply,
  506|  1.34k|                                               &match->l3_type);
  507|  1.34k|            break;
  508|       |
  509|  1.30k|        case NXT_CT_ZONE_ID:
  ------------------
  |  Branch (509:9): [True: 1.30k, False: 14.2k]
  ------------------
  510|  1.30k|            if (with_zone) {
  ------------------
  |  Branch (510:17): [True: 0, False: 1.30k]
  ------------------
  511|      0|                *with_zone = true;
  512|      0|            }
  513|  1.30k|            error = ofpprop_parse_u16(&property, zone_id);
  514|  1.30k|            break;
  515|       |
  516|  1.88k|        case NXT_CT_MARK:
  ------------------
  |  Branch (516:9): [True: 1.88k, False: 13.6k]
  ------------------
  517|  1.88k|            error = ofpprop_parse_u32(&property, &match->mark);
  518|  1.88k|            break;
  519|       |
  520|    919|        case NXT_CT_MARK_MASK:
  ------------------
  |  Branch (520:9): [True: 919, False: 14.5k]
  ------------------
  521|    919|            error = ofpprop_parse_u32(&property, &match->mark_mask);
  522|    919|            break;
  523|       |
  524|     77|        case NXT_CT_LABELS:
  ------------------
  |  Branch (524:9): [True: 77, False: 15.4k]
  ------------------
  525|     77|            error = ofpprop_parse_u128(&property, &match->labels);
  526|     77|            break;
  527|       |
  528|  1.32k|        case NXT_CT_LABELS_MASK:
  ------------------
  |  Branch (528:9): [True: 1.32k, False: 14.1k]
  ------------------
  529|  1.32k|            error = ofpprop_parse_u128(&property, &match->labels_mask);
  530|  1.32k|            break;
  531|       |
  532|    220|        default:
  ------------------
  |  Branch (532:9): [True: 220, False: 15.2k]
  ------------------
  533|    220|            error = OFPPROP_UNKNOWN(false, "NXT_CT_FLUSH", type);
  ------------------
  |  |  144|    220|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  534|    220|            break;
  535|  15.5k|        }
  536|       |
  537|  15.5k|        if (error) {
  ------------------
  |  Branch (537:13): [True: 5.80k, False: 9.69k]
  ------------------
  538|  5.80k|            return error;
  539|  5.80k|        }
  540|       |
  541|  9.69k|        if (type < (sizeof tlv_flags * CHAR_BIT)) {
  ------------------
  |  Branch (541:13): [True: 9.69k, False: 0]
  ------------------
  542|  9.69k|            tlv_flags |= (UINT32_C(1) << type);
  543|  9.69k|        }
  544|  9.69k|    }
  545|       |
  546|       |    /* Consider the mask being all ones if it's not present but the value
  547|       |     * is specified. */
  548|  6.03k|    if (tlv_flags & (UINT32_C(1) << NXT_CT_MARK) &&
  ------------------
  |  Branch (548:9): [True: 1.17k, False: 4.86k]
  ------------------
  549|  1.17k|        !(tlv_flags & (UINT32_C(1) << NXT_CT_MARK_MASK))) {
  ------------------
  |  Branch (549:9): [True: 363, False: 810]
  ------------------
  550|    363|        match->mark_mask = UINT32_MAX;
  551|    363|    }
  552|       |
  553|  6.03k|    if (tlv_flags & (UINT32_C(1) << NXT_CT_LABELS) &&
  ------------------
  |  Branch (553:9): [True: 52, False: 5.98k]
  ------------------
  554|     52|        !(tlv_flags & (UINT32_C(1) << NXT_CT_LABELS_MASK))) {
  ------------------
  |  Branch (554:9): [True: 34, False: 18]
  ------------------
  555|     34|        match->labels_mask = OVS_U128_MAX;
  556|     34|    }
  557|       |
  558|  6.03k|    return 0;
  559|  13.0k|}
ofp-ct.c:ofp_ct_tuple_format:
   41|  12.0k|{
   42|  12.0k|    ds_put_cstr(ds, l3_type == AF_INET ? "ct_nw_src=": "ct_ipv6_src=");
  ------------------
  |  Branch (42:21): [True: 1.73k, False: 10.3k]
  ------------------
   43|  12.0k|    ipv6_format_mapped(&tuple->src, ds);
   44|  12.0k|    ds_put_cstr(ds, l3_type == AF_INET ? ",ct_nw_dst=": ",ct_ipv6_dst=");
  ------------------
  |  Branch (44:21): [True: 1.73k, False: 10.3k]
  ------------------
   45|  12.0k|    ipv6_format_mapped(&tuple->dst, ds);
   46|  12.0k|    if (ip_proto == IPPROTO_ICMP || ip_proto == IPPROTO_ICMPV6) {
  ------------------
  |  Branch (46:9): [True: 5.81k, False: 6.26k]
  |  Branch (46:37): [True: 196, False: 6.06k]
  ------------------
   47|  6.01k|        ds_put_format(ds, ",icmp_id=%u,icmp_type=%u,icmp_code=%u",
   48|  6.01k|                      ntohs(tuple->icmp_id), tuple->icmp_type,
   49|  6.01k|                      tuple->icmp_code);
   50|  6.06k|    } else {
   51|  6.06k|        ds_put_format(ds, ",ct_tp_src=%u,ct_tp_dst=%u", ntohs(tuple->src_port),
   52|       |                      ntohs(tuple->dst_port));
   53|  6.06k|    }
   54|  12.0k|}
ofp-ct.c:ofp_ct_tuple_decode_nested:
  376|  9.77k|{
  377|  9.77k|    struct ofpbuf nested;
  378|  9.77k|    enum ofperr error = ofpprop_parse_nested(property, &nested);
  379|  9.77k|    if (error) {
  ------------------
  |  Branch (379:9): [True: 121, False: 9.65k]
  ------------------
  380|    121|        return error;
  381|    121|    }
  382|       |
  383|  23.6k|    while (nested.size) {
  ------------------
  |  Branch (383:12): [True: 19.4k, False: 4.23k]
  ------------------
  384|  19.4k|        struct ofpbuf inner;
  385|  19.4k|        uint64_t type;
  386|       |
  387|  19.4k|        error = ofpprop_pull(&nested, &inner, &type);
  388|  19.4k|        if (error) {
  ------------------
  |  Branch (388:13): [True: 1.73k, False: 17.6k]
  ------------------
  389|  1.73k|            return error;
  390|  1.73k|        }
  391|  17.6k|        switch (type) {
  392|  5.54k|        case NXT_CT_TUPLE_SRC:
  ------------------
  |  Branch (392:9): [True: 5.54k, False: 12.1k]
  ------------------
  393|  5.54k|            error = ofpprop_pull_ipv6(&inner, &tuple->src, l3_type);
  394|  5.54k|            break;
  395|       |
  396|  7.13k|        case NXT_CT_TUPLE_DST:
  ------------------
  |  Branch (396:9): [True: 7.13k, False: 10.5k]
  ------------------
  397|  7.13k|            error = ofpprop_pull_ipv6(&inner, &tuple->dst, l3_type);
  398|  7.13k|            break;
  399|       |
  400|    224|        case NXT_CT_TUPLE_SRC_PORT:
  ------------------
  |  Branch (400:9): [True: 224, False: 17.4k]
  ------------------
  401|    224|            error = ofpprop_parse_be16(&inner, &tuple->src_port);
  402|    224|            break;
  403|       |
  404|  1.83k|        case NXT_CT_TUPLE_DST_PORT:
  ------------------
  |  Branch (404:9): [True: 1.83k, False: 15.8k]
  ------------------
  405|  1.83k|            error = ofpprop_parse_be16(&inner, &tuple->dst_port);
  406|  1.83k|            break;
  407|       |
  408|    157|        case NXT_CT_TUPLE_ICMP_ID:
  ------------------
  |  Branch (408:9): [True: 157, False: 17.5k]
  ------------------
  409|    157|            error = ofpprop_parse_be16(&inner, &tuple->icmp_id);
  410|    157|            break;
  411|       |
  412|    246|        case NXT_CT_TUPLE_ICMP_TYPE:
  ------------------
  |  Branch (412:9): [True: 246, False: 17.4k]
  ------------------
  413|    246|            error = ofpprop_parse_u8(&inner, &tuple->icmp_type);
  414|    246|            break;
  415|       |
  416|    170|        case NXT_CT_TUPLE_ICMP_CODE:
  ------------------
  |  Branch (416:9): [True: 170, False: 17.5k]
  ------------------
  417|    170|            error = ofpprop_parse_u8(&inner, &tuple->icmp_code);
  418|    170|            break;
  419|       |
  420|  2.36k|        default:
  ------------------
  |  Branch (420:9): [True: 2.36k, False: 15.3k]
  ------------------
  421|  2.36k|            error = OFPPROP_UNKNOWN(false, "NXT_CT_TUPLE", type);
  ------------------
  |  |  144|  2.36k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  422|  2.36k|            break;
  423|  17.6k|        }
  424|       |
  425|  17.6k|        if (error) {
  ------------------
  |  Branch (425:13): [True: 3.68k, False: 13.9k]
  ------------------
  426|  3.68k|            return error;
  427|  3.68k|        }
  428|  17.6k|    }
  429|       |
  430|  4.23k|    return 0;
  431|  9.65k|}
ofp-ct.c:ofpprop_pull_ipv6:
  352|  12.6k|{
  353|  12.6k|    if (ofpbuf_msgsize(property) < sizeof *addr) {
  ------------------
  |  Branch (353:9): [True: 1.06k, False: 11.6k]
  ------------------
  354|  1.06k|        return OFPERR_OFPBPC_BAD_LEN;
  355|  1.06k|    }
  356|       |
  357|  11.6k|    memcpy(addr, property->msg, sizeof *addr);
  358|       |
  359|  11.6k|    uint16_t l3 = 0;
  360|  11.6k|    if (!ipv6_is_zero(addr)) {
  ------------------
  |  Branch (360:9): [True: 10.5k, False: 1.10k]
  ------------------
  361|  10.5k|        l3 = IN6_IS_ADDR_V4MAPPED(addr) ? AF_INET : AF_INET6;
  ------------------
  |  Branch (361:14): [True: 1.11k, False: 9.40k]
  ------------------
  362|  10.5k|    }
  363|       |
  364|  11.6k|    if (*l3_type && l3 && *l3_type != l3) {
  ------------------
  |  Branch (364:9): [True: 3.47k, False: 8.13k]
  |  Branch (364:21): [True: 2.63k, False: 842]
  |  Branch (364:27): [True: 235, False: 2.40k]
  ------------------
  365|    235|        return OFPERR_OFPBPC_BAD_VALUE;
  366|    235|    }
  367|       |
  368|  11.3k|    *l3_type = l3;
  369|       |
  370|  11.3k|    return 0;
  371|  11.6k|}

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

ofperr_is_valid:
   76|  2.56M|{
   77|  2.56M|    return error >= OFPERR_OFS && error < OFPERR_OFS + OFPERR_N_ERRORS;
  ------------------
  |  |   52|  5.13M|#define OFPERR_OFS (1 << 30)
  ------------------
                  return error >= OFPERR_OFS && error < OFPERR_OFS + OFPERR_N_ERRORS;
  ------------------
  |  |   52|  2.55M|#define OFPERR_OFS (1 << 30)
  ------------------
                  return error >= OFPERR_OFS && error < OFPERR_OFS + OFPERR_N_ERRORS;
  ------------------
  |  |    3|  5.12M|#define OFPERR_N_ERRORS 198
  ------------------
  |  Branch (77:12): [True: 2.55M, False: 7.53k]
  |  Branch (77:35): [True: 2.55M, False: 114]
  ------------------
   78|  2.56M|}
ofperr_get_name:
   98|  2.56M|{
   99|  2.56M|    return (ofperr_is_valid(error)
  ------------------
  |  Branch (99:13): [True: 2.55M, False: 7.65k]
  ------------------
  100|  2.56M|            ? error_names[error - OFPERR_OFS]
  ------------------
  |  |   52|  2.55M|#define OFPERR_OFS (1 << 30)
  ------------------
  101|  2.56M|            : "<invalid>");
  102|  2.56M|}
ofperr_msg_format:
  248|   698k|{
  249|   698k|    ds_put_format(string, " %s\n", ofperr_get_name(error));
  250|       |
  251|   698k|    if (error == OFPERR_OFPHFC_INCOMPATIBLE || error == OFPERR_OFPHFC_EPERM) {
  ------------------
  |  Branch (251:9): [True: 22.2k, False: 676k]
  |  Branch (251:48): [True: 1.64k, False: 674k]
  ------------------
  252|  23.9k|        ds_put_printable(string, payload->data, payload->size);
  253|   674k|    } else {
  254|   674k|        char *s = ofp_to_string(payload->data, payload->size,
  255|   674k|                                port_map, table_map, 1);
  256|   674k|        ds_put_cstr(string, s);
  257|   674k|        free(s);
  258|   674k|    }
  259|   698k|}
ofperr_decode_msg:
  303|  1.06M|{
  304|  1.06M|    const struct ofp_error_msg *oem;
  305|  1.06M|    enum ofpraw raw;
  306|  1.06M|    uint16_t type, code;
  307|  1.06M|    uint32_t vendor;
  308|       |
  309|  1.06M|    if (payload) {
  ------------------
  |  Branch (309:9): [True: 1.06M, False: 0]
  ------------------
  310|  1.06M|        memset(payload, 0, sizeof *payload);
  311|  1.06M|    }
  312|       |
  313|       |    /* Pull off the error message. */
  314|  1.06M|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  315|  1.06M|    enum ofperr error = ofpraw_pull(&raw, &b);
  316|  1.06M|    if (error) {
  ------------------
  |  Branch (316:9): [True: 0, False: 1.06M]
  ------------------
  317|      0|        return 0;
  318|      0|    }
  319|  1.06M|    oem = ofpbuf_pull(&b, sizeof *oem);
  320|       |
  321|       |    /* Get the error type and code. */
  322|  1.06M|    vendor = 0;
  323|  1.06M|    type = ntohs(oem->type);
  324|  1.06M|    code = ntohs(oem->code);
  325|  1.06M|    if (type == NXET_VENDOR && code == NXVC_VENDOR_ERROR) {
  ------------------
  |  |   54|  2.12M|#define NXET_VENDOR 0xb0c2
  ------------------
  |  Branch (325:9): [True: 105k, False: 958k]
  |  Branch (325:32): [True: 92.1k, False: 13.2k]
  ------------------
  326|  92.1k|        const struct nx_vendor_error *nve = ofpbuf_try_pull(&b, sizeof *nve);
  327|  92.1k|        if (!nve) {
  ------------------
  |  Branch (327:13): [True: 230, False: 91.9k]
  ------------------
  328|    230|            return 0;
  329|    230|        }
  330|       |
  331|  91.9k|        vendor = ntohl(nve->vendor);
  332|  91.9k|        type = ntohs(nve->type);
  333|  91.9k|        code = ntohs(nve->code);
  334|   972k|    } else if (type == OFPET12_EXPERIMENTER) {
  ------------------
  |  |   59|   972k|#define OFPET12_EXPERIMENTER 0xffff
  ------------------
  |  Branch (334:16): [True: 186k, False: 785k]
  ------------------
  335|   186k|        const ovs_be32 *vendorp = ofpbuf_try_pull(&b, sizeof *vendorp);
  336|   186k|        if (!vendorp) {
  ------------------
  |  Branch (336:13): [True: 14.4k, False: 171k]
  ------------------
  337|  14.4k|            return 0;
  338|  14.4k|        }
  339|       |
  340|   171k|        vendor = ntohl(*vendorp);
  341|   171k|        type = code;
  342|   171k|        code = 0;
  343|   171k|    }
  344|       |
  345|       |    /* Translate the error type and code into an ofperr. */
  346|  1.04M|    error = ofperr_decode(oh->version, vendor, type, code);
  347|  1.04M|    if (error && payload) {
  ------------------
  |  Branch (347:9): [True: 698k, False: 351k]
  |  Branch (347:18): [True: 698k, False: 0]
  ------------------
  348|   698k|        ofpbuf_init(payload, b.size);
  349|   698k|        ofpbuf_push(payload, b.data, b.size);
  350|   698k|        ofpbuf_trim(payload);
  351|   698k|    }
  352|  1.04M|    return error;
  353|  1.06M|}
ofp-errors.c:ofperr_domain_from_version:
   46|  1.04M|{
   47|  1.04M|    switch (version) {
   48|   115k|    case OFP10_VERSION:
  ------------------
  |  Branch (48:5): [True: 115k, False: 934k]
  ------------------
   49|   115k|        return &ofperr_of10;
   50|   112k|    case OFP11_VERSION:
  ------------------
  |  Branch (50:5): [True: 112k, False: 937k]
  ------------------
   51|   112k|        return &ofperr_of11;
   52|   268k|    case OFP12_VERSION:
  ------------------
  |  Branch (52:5): [True: 268k, False: 781k]
  ------------------
   53|   268k|        return &ofperr_of12;
   54|   181k|    case OFP13_VERSION:
  ------------------
  |  Branch (54:5): [True: 181k, False: 868k]
  ------------------
   55|   181k|        return &ofperr_of13;
   56|   159k|    case OFP14_VERSION:
  ------------------
  |  Branch (56:5): [True: 159k, False: 889k]
  ------------------
   57|   159k|        return &ofperr_of14;
   58|   162k|    case OFP15_VERSION:
  ------------------
  |  Branch (58:5): [True: 162k, False: 887k]
  ------------------
   59|   162k|        return &ofperr_of15;
   60|  50.6k|    default:
  ------------------
  |  Branch (60:5): [True: 50.6k, False: 998k]
  ------------------
   61|       |        return NULL;
   62|  1.04M|    }
   63|  1.04M|}
ofp-errors.c:ofperr_decode:
   86|  1.04M|{
   87|  1.04M|    const struct ofperr_domain *domain = ofperr_domain_from_version(version);
   88|  1.04M|    return domain ? domain->decode(vendor, type, code) : 0;
  ------------------
  |  Branch (88:12): [True: 998k, False: 50.6k]
  ------------------
   89|  1.04M|}

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

ofputil_flow_mod_flags_format:
  111|  60.8k|{
  112|  60.8k|    if (flags & OFPUTIL_FF_SEND_FLOW_REM) {
  ------------------
  |  Branch (112:9): [True: 8.42k, False: 52.4k]
  ------------------
  113|  8.42k|        ds_put_cstr(s, "send_flow_rem ");
  114|  8.42k|    }
  115|  60.8k|    if (flags & OFPUTIL_FF_CHECK_OVERLAP) {
  ------------------
  |  Branch (115:9): [True: 8.87k, False: 51.9k]
  ------------------
  116|  8.87k|        ds_put_cstr(s, "check_overlap ");
  117|  8.87k|    }
  118|  60.8k|    if (flags & OFPUTIL_FF_RESET_COUNTS) {
  ------------------
  |  Branch (118:9): [True: 3.01k, False: 57.8k]
  ------------------
  119|  3.01k|        ds_put_cstr(s, "reset_counts ");
  120|  3.01k|    }
  121|  60.8k|    if (flags & OFPUTIL_FF_NO_PKT_COUNTS) {
  ------------------
  |  Branch (121:9): [True: 6.71k, False: 54.1k]
  ------------------
  122|  6.71k|        ds_put_cstr(s, "no_packet_counts ");
  123|  6.71k|    }
  124|  60.8k|    if (flags & OFPUTIL_FF_NO_BYT_COUNTS) {
  ------------------
  |  Branch (124:9): [True: 2.88k, False: 57.9k]
  ------------------
  125|  2.88k|        ds_put_cstr(s, "no_byte_counts ");
  126|  2.88k|    }
  127|  60.8k|    if (flags & OFPUTIL_FF_HIDDEN_FIELDS) {
  ------------------
  |  Branch (127:9): [True: 0, False: 60.8k]
  ------------------
  128|      0|        ds_put_cstr(s, "allow_hidden_fields ");
  129|      0|    }
  130|  60.8k|    if (flags & OFPUTIL_FF_NO_READONLY) {
  ------------------
  |  Branch (130:9): [True: 0, False: 60.8k]
  ------------------
  131|      0|        ds_put_cstr(s, "no_readonly_table ");
  132|      0|    }
  133|  60.8k|}
ofputil_decode_flow_mod:
  155|   143k|{
  156|   143k|    ovs_be16 raw_flags;
  157|   143k|    enum ofperr error;
  158|   143k|    struct match match;
  159|   143k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  160|   143k|    enum ofpraw raw = ofpraw_pull_assert(&b);
  161|   143k|    if (raw == OFPRAW_OFPT11_FLOW_MOD) {
  ------------------
  |  Branch (161:9): [True: 54.3k, False: 89.4k]
  ------------------
  162|       |        /* Standard OpenFlow 1.1+ flow_mod. */
  163|  54.3k|        const struct ofp11_flow_mod *ofm;
  164|       |
  165|  54.3k|        ofm = ofpbuf_pull(&b, sizeof *ofm);
  166|       |
  167|  54.3k|        error = ofputil_pull_ofp11_match(&b, tun_table, vl_mff_map, &match,
  168|  54.3k|                                         NULL);
  169|  54.3k|        if (error) {
  ------------------
  |  Branch (169:13): [True: 13.9k, False: 40.3k]
  ------------------
  170|  13.9k|            return error;
  171|  13.9k|        }
  172|       |
  173|       |        /* Translate the message. */
  174|  40.3k|        fm->priority = ntohs(ofm->priority);
  175|  40.3k|        if (ofm->command == OFPFC_ADD
  ------------------
  |  Branch (175:13): [True: 23.3k, False: 16.9k]
  ------------------
  176|  16.9k|            || (oh->version == OFP11_VERSION
  ------------------
  |  Branch (176:17): [True: 5.12k, False: 11.8k]
  ------------------
  177|  5.12k|                && (ofm->command == OFPFC_MODIFY ||
  ------------------
  |  Branch (177:21): [True: 2.97k, False: 2.15k]
  ------------------
  178|  2.15k|                    ofm->command == OFPFC_MODIFY_STRICT)
  ------------------
  |  Branch (178:21): [True: 913, False: 1.23k]
  ------------------
  179|  23.3k|                && ofm->cookie_mask == htonll(0))) {
  ------------------
  |  Branch (179:20): [True: 18, False: 3.87k]
  ------------------
  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|  23.3k|            fm->cookie = htonll(0);
  184|  23.3k|            fm->cookie_mask = htonll(0);
  185|  23.3k|            fm->new_cookie = ofm->cookie;
  186|  23.3k|        } else {
  187|  16.9k|            fm->cookie = ofm->cookie;
  188|  16.9k|            fm->cookie_mask = ofm->cookie_mask;
  189|  16.9k|            fm->new_cookie = OVS_BE64_MAX;
  ------------------
  |  |   44|  16.9k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  190|  16.9k|        }
  191|  40.3k|        fm->modify_cookie = false;
  192|  40.3k|        fm->command = ofm->command;
  193|       |
  194|       |        /* Get table ID.
  195|       |         *
  196|       |         * OF1.1 entirely forbids table_id == OFPTT_ALL.
  197|       |         * OF1.2+ allows table_id == OFPTT_ALL only for deletes. */
  198|  40.3k|        fm->table_id = ofm->table_id;
  199|  40.3k|        if (fm->table_id == OFPTT_ALL
  ------------------
  |  Branch (199:13): [True: 2.90k, False: 37.4k]
  ------------------
  200|  2.90k|            && (oh->version == OFP11_VERSION
  ------------------
  |  Branch (200:17): [True: 703, False: 2.20k]
  ------------------
  201|  2.20k|                || (ofm->command != OFPFC_DELETE &&
  ------------------
  |  Branch (201:21): [True: 339, False: 1.86k]
  ------------------
  202|    780|                    ofm->command != OFPFC_DELETE_STRICT))) {
  ------------------
  |  Branch (202:21): [True: 77, False: 262]
  ------------------
  203|    780|            return OFPERR_OFPFMFC_BAD_TABLE_ID;
  204|    780|        }
  205|       |
  206|  39.5k|        fm->idle_timeout = ntohs(ofm->idle_timeout);
  207|  39.5k|        fm->hard_timeout = ntohs(ofm->hard_timeout);
  208|  39.5k|        if (oh->version >= OFP14_VERSION && ofm->command == OFPFC_ADD) {
  ------------------
  |  Branch (208:13): [True: 34.6k, False: 4.94k]
  |  Branch (208:45): [True: 22.8k, False: 11.7k]
  ------------------
  209|  22.8k|            fm->importance = ntohs(ofm->importance);
  210|  22.8k|        } else {
  211|  16.7k|            fm->importance = 0;
  212|  16.7k|        }
  213|  39.5k|        fm->buffer_id = ntohl(ofm->buffer_id);
  214|  39.5k|        error = ofputil_port_from_ofp11(ofm->out_port, &fm->out_port);
  215|  39.5k|        if (error) {
  ------------------
  |  Branch (215:13): [True: 1.91k, False: 37.6k]
  ------------------
  216|  1.91k|            return error;
  217|  1.91k|        }
  218|       |
  219|  37.6k|        fm->out_group = (ofm->command == OFPFC_DELETE ||
  ------------------
  |  Branch (219:26): [True: 3.41k, False: 34.2k]
  ------------------
  220|  34.2k|                         ofm->command == OFPFC_DELETE_STRICT
  ------------------
  |  Branch (220:26): [True: 2.84k, False: 31.4k]
  ------------------
  221|  37.6k|                         ? ntohl(ofm->out_group)
  222|  37.6k|                         : OFPG_ANY);
  223|  37.6k|        raw_flags = ofm->flags;
  224|  89.4k|    } else {
  225|  89.4k|        uint16_t command;
  226|       |
  227|  89.4k|        if (raw == OFPRAW_OFPT10_FLOW_MOD) {
  ------------------
  |  Branch (227:13): [True: 84.7k, False: 4.74k]
  ------------------
  228|       |            /* Standard OpenFlow 1.0 flow_mod. */
  229|  84.7k|            const struct ofp10_flow_mod *ofm;
  230|       |
  231|       |            /* Get the ofp10_flow_mod. */
  232|  84.7k|            ofm = ofpbuf_pull(&b, sizeof *ofm);
  233|       |
  234|       |            /* Translate the rule. */
  235|  84.7k|            ofputil_match_from_ofp10_match(&ofm->match, &match);
  236|  84.7k|            ofputil_normalize_match(&match);
  237|       |
  238|       |            /* OpenFlow 1.0 says that exact-match rules have to have the
  239|       |             * highest possible priority. */
  240|  84.7k|            fm->priority = (ofm->match.wildcards & htonl(OFPFW10_ALL)
  ------------------
  |  Branch (240:29): [True: 75.2k, False: 9.51k]
  ------------------
  241|  84.7k|                            ? ntohs(ofm->priority)
  242|  84.7k|                            : UINT16_MAX);
  243|       |
  244|       |            /* Translate the message. */
  245|  84.7k|            command = ntohs(ofm->command);
  246|  84.7k|            fm->cookie = htonll(0);
  247|  84.7k|            fm->cookie_mask = htonll(0);
  248|  84.7k|            fm->new_cookie = ofm->cookie;
  249|  84.7k|            fm->idle_timeout = ntohs(ofm->idle_timeout);
  250|  84.7k|            fm->hard_timeout = ntohs(ofm->hard_timeout);
  251|  84.7k|            fm->importance = 0;
  252|  84.7k|            fm->buffer_id = ntohl(ofm->buffer_id);
  253|  84.7k|            fm->out_port = u16_to_ofp(ntohs(ofm->out_port));
  254|  84.7k|            fm->out_group = OFPG_ANY;
  255|  84.7k|            raw_flags = ofm->flags;
  256|  84.7k|        } else if (raw == OFPRAW_NXT_FLOW_MOD) {
  ------------------
  |  Branch (256:20): [True: 4.74k, False: 0]
  ------------------
  257|       |            /* Nicira extended flow_mod. */
  258|  4.74k|            const struct nx_flow_mod *nfm;
  259|       |
  260|       |            /* Dissect the message. */
  261|  4.74k|            nfm = ofpbuf_pull(&b, sizeof *nfm);
  262|  4.74k|            error = nx_pull_match(&b, ntohs(nfm->match_len),
  263|  4.74k|                                  &match, &fm->cookie, &fm->cookie_mask,
  264|  4.74k|                                  false, tun_table, vl_mff_map);
  265|  4.74k|            if (error) {
  ------------------
  |  Branch (265:17): [True: 512, False: 4.23k]
  ------------------
  266|    512|                return error;
  267|    512|            }
  268|       |
  269|       |            /* Translate the message. */
  270|  4.23k|            command = ntohs(nfm->command);
  271|  4.23k|            if ((command & 0xff) == OFPFC_ADD && fm->cookie_mask) {
  ------------------
  |  Branch (271:17): [True: 1.51k, False: 2.72k]
  |  Branch (271:50): [True: 173, False: 1.33k]
  ------------------
  272|       |                /* Flow additions may only set a new cookie, not match an
  273|       |                 * existing cookie. */
  274|    173|                return OFPERR_NXBRC_NXM_INVALID;
  275|    173|            }
  276|  4.05k|            fm->priority = ntohs(nfm->priority);
  277|  4.05k|            fm->new_cookie = nfm->cookie;
  278|  4.05k|            fm->idle_timeout = ntohs(nfm->idle_timeout);
  279|  4.05k|            fm->hard_timeout = ntohs(nfm->hard_timeout);
  280|  4.05k|            fm->importance = 0;
  281|  4.05k|            fm->buffer_id = ntohl(nfm->buffer_id);
  282|  4.05k|            fm->out_port = u16_to_ofp(ntohs(nfm->out_port));
  283|  4.05k|            fm->out_group = OFPG_ANY;
  284|  4.05k|            raw_flags = nfm->flags;
  285|  4.05k|        } else {
  286|      0|            OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  287|      0|        }
  288|       |
  289|  88.8k|        fm->modify_cookie = fm->new_cookie != OVS_BE64_MAX;
  ------------------
  |  |   44|  88.8k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  290|  88.8k|        if (protocol & OFPUTIL_P_TID) {
  ------------------
  |  |  103|  88.8k|#define OFPUTIL_P_TID (OFPUTIL_P_OF10_STD_TID | \
  |  |  104|  88.8k|                       OFPUTIL_P_OF10_NXM_TID | \
  |  |  105|  88.8k|                       OFPUTIL_P_OF11_STD |     \
  |  |  106|  88.8k|                       OFPUTIL_P_ANY_OXM)
  |  |  ------------------
  |  |  |  |   82|  88.8k|#define OFPUTIL_P_ANY_OXM (OFPUTIL_P_OF12_OXM | \
  |  |  |  |   83|  88.8k|                           OFPUTIL_P_OF13_OXM | \
  |  |  |  |   84|  88.8k|                           OFPUTIL_P_OF14_OXM | \
  |  |  |  |   85|  88.8k|                           OFPUTIL_P_OF15_OXM)
  |  |  ------------------
  ------------------
  |  Branch (290:13): [True: 88.8k, False: 0]
  ------------------
  291|  88.8k|            fm->command = command & 0xff;
  292|  88.8k|            fm->table_id = command >> 8;
  293|  88.8k|        } 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|  88.8k|    }
  302|       |
  303|       |    /* Check for mismatched conntrack original direction tuple address fields
  304|       |     * w.r.t. the IP version of the match. */
  305|   126k|    if (((match.wc.masks.ct_nw_src || match.wc.masks.ct_nw_dst)
  ------------------
  |  Branch (305:11): [True: 0, False: 126k]
  |  Branch (305:39): [True: 0, False: 126k]
  ------------------
  306|      0|         && match.flow.dl_type != htons(ETH_TYPE_IP))
  ------------------
  |  Branch (306:13): [True: 0, False: 0]
  ------------------
  307|   126k|        || ((ipv6_addr_is_set(&match.wc.masks.ct_ipv6_src)
  ------------------
  |  Branch (307:14): [True: 0, False: 126k]
  ------------------
  308|   126k|             || ipv6_addr_is_set(&match.wc.masks.ct_ipv6_dst))
  ------------------
  |  Branch (308:17): [True: 0, False: 126k]
  ------------------
  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|   126k|    if (fm->command > OFPFC_DELETE_STRICT) {
  ------------------
  |  Branch (313:9): [True: 8.54k, False: 117k]
  ------------------
  314|  8.54k|        return OFPERR_OFPFMFC_BAD_COMMAND;
  315|  8.54k|    }
  316|       |
  317|   117k|    fm->ofpacts_tlv_bitmap = 0;
  318|   117k|    error = ofpacts_pull_openflow_instructions(&b, b.size, oh->version,
  319|   117k|                                               vl_mff_map,
  320|   117k|                                               &fm->ofpacts_tlv_bitmap,
  321|   117k|                                               ofpacts);
  322|   117k|    if (error) {
  ------------------
  |  Branch (322:9): [True: 46.4k, False: 71.5k]
  ------------------
  323|  46.4k|        return error;
  324|  46.4k|    }
  325|  71.5k|    fm->ofpacts = ofpacts->data;
  326|  71.5k|    fm->ofpacts_len = ofpacts->size;
  327|       |
  328|  71.5k|    error = ofputil_decode_flow_mod_flags(raw_flags, fm->command,
  329|  71.5k|                                          oh->version, &fm->flags);
  330|  71.5k|    if (error) {
  ------------------
  |  Branch (330:9): [True: 2.54k, False: 68.9k]
  ------------------
  331|  2.54k|        return error;
  332|  2.54k|    }
  333|       |
  334|  68.9k|    if (fm->flags & OFPUTIL_FF_EMERG) {
  ------------------
  |  Branch (334:9): [True: 2.40k, False: 66.5k]
  ------------------
  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|  2.40k|        return (fm->hard_timeout || fm->idle_timeout
  ------------------
  |  Branch (341:17): [True: 1.82k, False: 583]
  |  Branch (341:37): [True: 10, False: 573]
  ------------------
  342|  2.40k|                ? OFPERR_OFPFMFC_BAD_EMERG_TIMEOUT
  343|  2.40k|                : OFPERR_OFPFMFC_TABLE_FULL);
  344|  2.40k|    }
  345|       |
  346|  66.5k|    struct ofpact_check_params cp = {
  347|  66.5k|        .match = &match,
  348|  66.5k|        .max_ports = max_port,
  349|  66.5k|        .table_id = fm->table_id,
  350|  66.5k|        .n_tables = max_table
  351|  66.5k|    };
  352|  66.5k|    error = ofpacts_check_consistency(fm->ofpacts, fm->ofpacts_len,
  353|  66.5k|                                      protocol, &cp);
  354|  66.5k|    if (!error) {
  ------------------
  |  Branch (354:9): [True: 58.0k, False: 8.50k]
  ------------------
  355|  58.0k|        minimatch_init(&fm->match, &match);
  356|  58.0k|    }
  357|  66.5k|    return error;
  358|  68.9k|}
ofputil_flow_mod_format:
  489|   143k|{
  490|   143k|    struct ofputil_flow_mod fm;
  491|   143k|    struct ofpbuf ofpacts;
  492|   143k|    bool need_priority;
  493|   143k|    enum ofperr error;
  494|   143k|    enum ofpraw raw;
  495|   143k|    enum ofputil_protocol protocol;
  496|       |
  497|   143k|    protocol = ofputil_protocol_from_ofp_version(oh->version);
  498|   143k|    protocol = ofputil_protocol_set_tid(protocol, true);
  499|       |
  500|   143k|    ofpbuf_init(&ofpacts, 64);
  501|   143k|    error = ofputil_decode_flow_mod(&fm, oh, protocol, NULL, NULL, &ofpacts,
  502|   143k|                                    OFPP_MAX, 255);
  ------------------
  |  |   33|   143k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|   143k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  503|   143k|    if (error) {
  ------------------
  |  Branch (503:9): [True: 85.7k, False: 58.0k]
  ------------------
  504|  85.7k|        ofpbuf_uninit(&ofpacts);
  505|  85.7k|        return error;
  506|  85.7k|    }
  507|       |
  508|  58.0k|    ds_put_char(s, ' ');
  509|  58.0k|    switch (fm.command) {
  510|  41.1k|    case OFPFC_ADD:
  ------------------
  |  Branch (510:5): [True: 41.1k, False: 16.9k]
  ------------------
  511|  41.1k|        ds_put_cstr(s, "ADD");
  512|  41.1k|        break;
  513|  6.92k|    case OFPFC_MODIFY:
  ------------------
  |  Branch (513:5): [True: 6.92k, False: 51.1k]
  ------------------
  514|  6.92k|        ds_put_cstr(s, "MOD");
  515|  6.92k|        break;
  516|  5.93k|    case OFPFC_MODIFY_STRICT:
  ------------------
  |  Branch (516:5): [True: 5.93k, False: 52.1k]
  ------------------
  517|  5.93k|        ds_put_cstr(s, "MOD_STRICT");
  518|  5.93k|        break;
  519|  2.46k|    case OFPFC_DELETE:
  ------------------
  |  Branch (519:5): [True: 2.46k, False: 55.6k]
  ------------------
  520|  2.46k|        ds_put_cstr(s, "DEL");
  521|  2.46k|        break;
  522|  1.60k|    case OFPFC_DELETE_STRICT:
  ------------------
  |  Branch (522:5): [True: 1.60k, False: 56.4k]
  ------------------
  523|  1.60k|        ds_put_cstr(s, "DEL_STRICT");
  524|  1.60k|        break;
  525|      0|    default:
  ------------------
  |  Branch (525:5): [True: 0, False: 58.0k]
  ------------------
  526|      0|        ds_put_format(s, "cmd:%d", fm.command);
  527|  58.0k|    }
  528|  58.0k|    if (fm.table_id != 0
  ------------------
  |  Branch (528:9): [True: 28.1k, False: 29.8k]
  ------------------
  529|  29.8k|        || ofputil_table_map_get_name(table_map, fm.table_id)) {
  ------------------
  |  Branch (529:12): [True: 0, False: 29.8k]
  ------------------
  530|  28.1k|        ds_put_format(s, " table:");
  531|  28.1k|        ofputil_format_table(fm.table_id, table_map, s);
  532|  28.1k|    }
  533|       |
  534|  58.0k|    ds_put_char(s, ' ');
  535|  58.0k|    ofpraw_decode(&raw, oh);
  536|  58.0k|    if (verbosity >= 3 && raw == OFPRAW_OFPT10_FLOW_MOD) {
  ------------------
  |  Branch (536:9): [True: 0, False: 58.0k]
  |  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|  58.0k|    } else if (verbosity >= 3 && raw == OFPRAW_NXT_FLOW_MOD) {
  ------------------
  |  Branch (542:16): [True: 0, False: 58.0k]
  |  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|  58.0k|    } else {
  554|  58.0k|        struct match match;
  555|  58.0k|        minimatch_expand(&fm.match, &match);
  556|  58.0k|        match_format(&match, port_map, s, fm.priority);
  557|       |
  558|       |        /* match_format() does print priority. */
  559|  58.0k|        need_priority = false;
  560|  58.0k|    }
  561|       |
  562|  58.0k|    if (ds_last(s) != ' ') {
  ------------------
  |  Branch (562:9): [True: 57.2k, False: 777]
  ------------------
  563|  57.2k|        ds_put_char(s, ' ');
  564|  57.2k|    }
  565|  58.0k|    if (fm.new_cookie != htonll(0) && fm.new_cookie != OVS_BE64_MAX) {
  ------------------
  |  |   44|  57.3k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  |  Branch (565:9): [True: 57.3k, False: 741]
  |  Branch (565:39): [True: 47.6k, False: 9.65k]
  ------------------
  566|  47.6k|        ds_put_format(s, "cookie:0x%"PRIx64" ", ntohll(fm.new_cookie));
  567|  47.6k|    }
  568|  58.0k|    if (fm.cookie_mask != htonll(0)) {
  ------------------
  |  Branch (568:9): [True: 9.65k, False: 48.4k]
  ------------------
  569|  9.65k|        ds_put_format(s, "cookie:0x%"PRIx64"/0x%"PRIx64" ",
  570|  9.65k|                ntohll(fm.cookie), ntohll(fm.cookie_mask));
  571|  9.65k|    }
  572|  58.0k|    if (fm.idle_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  58.0k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (572:9): [True: 46.8k, False: 11.2k]
  ------------------
  573|  46.8k|        ds_put_format(s, "idle:%"PRIu16" ", fm.idle_timeout);
  574|  46.8k|    }
  575|  58.0k|    if (fm.hard_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  58.0k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (575:9): [True: 49.4k, False: 8.61k]
  ------------------
  576|  49.4k|        ds_put_format(s, "hard:%"PRIu16" ", fm.hard_timeout);
  577|  49.4k|    }
  578|  58.0k|    if (fm.importance != 0) {
  ------------------
  |  Branch (578:9): [True: 9.85k, False: 48.2k]
  ------------------
  579|  9.85k|        ds_put_format(s, "importance:%"PRIu16" ", fm.importance);
  580|  9.85k|    }
  581|  58.0k|    if (fm.priority != OFP_DEFAULT_PRIORITY && need_priority) {
  ------------------
  |  |  138|   116k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
  |  Branch (581:9): [True: 57.2k, False: 785]
  |  Branch (581:48): [True: 0, False: 57.2k]
  ------------------
  582|      0|        ds_put_format(s, "pri:%d ", fm.priority);
  583|      0|    }
  584|  58.0k|    if (fm.buffer_id != UINT32_MAX) {
  ------------------
  |  Branch (584:9): [True: 56.7k, False: 1.36k]
  ------------------
  585|  56.7k|        ds_put_format(s, "buf:0x%"PRIx32" ", fm.buffer_id);
  586|  56.7k|    }
  587|  58.0k|    if (fm.out_port != OFPP_ANY) {
  ------------------
  |  |   80|  58.0k|#define OFPP_ANY OFPP_NONE
  |  |  ------------------
  |  |  |  |   47|  58.0k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|  58.0k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (587:9): [True: 53.6k, False: 4.38k]
  ------------------
  588|  53.6k|        ds_put_format(s, "out_port:");
  589|  53.6k|        ofputil_format_port(fm.out_port, port_map, s);
  590|  53.6k|        ds_put_char(s, ' ');
  591|  53.6k|    }
  592|       |
  593|  58.0k|    if (oh->version == OFP10_VERSION || oh->version == OFP11_VERSION) {
  ------------------
  |  Branch (593:9): [True: 36.4k, False: 21.6k]
  |  Branch (593:41): [True: 3.39k, False: 18.2k]
  ------------------
  594|       |        /* Don't print the reset_counts flag for OF1.0 and OF1.1 because those
  595|       |         * versions don't really have such a flag and printing one is likely to
  596|       |         * confuse people. */
  597|  39.8k|        fm.flags &= ~OFPUTIL_FF_RESET_COUNTS;
  598|  39.8k|    }
  599|  58.0k|    ofputil_flow_mod_flags_format(s, fm.flags);
  600|       |
  601|  58.0k|    ds_put_cstr(s, "actions=");
  602|  58.0k|    struct ofpact_format_params fp = {
  603|  58.0k|        .port_map = port_map,
  604|  58.0k|        .table_map = table_map,
  605|  58.0k|        .s = s,
  606|  58.0k|    };
  607|  58.0k|    ofpacts_format(fm.ofpacts, fm.ofpacts_len, &fp);
  608|  58.0k|    ofpbuf_uninit(&ofpacts);
  609|  58.0k|    minimatch_destroy(&fm.match);
  610|       |
  611|  58.0k|    return 0;
  612|  58.0k|}
ofputil_decode_flow_stats_request:
  697|  6.62k|{
  698|  6.62k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  699|  6.62k|    enum ofpraw raw = ofpraw_pull_assert(&b);
  700|  6.62k|    switch ((int) raw) {
  701|    426|    case OFPRAW_OFPST10_FLOW_REQUEST:
  ------------------
  |  Branch (701:5): [True: 426, False: 6.19k]
  ------------------
  702|    426|        return ofputil_decode_ofpst10_flow_request(fsr, b.data, false);
  703|       |
  704|  1.71k|    case OFPRAW_OFPST10_AGGREGATE_REQUEST:
  ------------------
  |  Branch (704:5): [True: 1.71k, False: 4.90k]
  ------------------
  705|  1.71k|        return ofputil_decode_ofpst10_flow_request(fsr, b.data, true);
  706|       |
  707|    713|    case OFPRAW_OFPST11_FLOW_REQUEST:
  ------------------
  |  Branch (707:5): [True: 713, False: 5.90k]
  ------------------
  708|    713|        return ofputil_decode_ofpst11_flow_request(fsr, &b, false, tun_table,
  709|    713|                                                   vl_mff_map);
  710|       |
  711|  2.46k|    case OFPRAW_OFPST11_AGGREGATE_REQUEST:
  ------------------
  |  Branch (711:5): [True: 2.46k, False: 4.16k]
  ------------------
  712|  2.46k|        return ofputil_decode_ofpst11_flow_request(fsr, &b, true, tun_table,
  713|  2.46k|                                                   vl_mff_map);
  714|       |
  715|    160|    case OFPRAW_OFPST15_AGGREGATE_REQUEST:
  ------------------
  |  Branch (715:5): [True: 160, False: 6.46k]
  ------------------
  716|    160|       return ofputil_decode_ofpst11_flow_request(fsr, &b, true,
  717|    160|                                                  tun_table, vl_mff_map);
  718|       |
  719|    962|    case OFPRAW_NXST_FLOW_REQUEST:
  ------------------
  |  Branch (719:5): [True: 962, False: 5.65k]
  ------------------
  720|    962|        return ofputil_decode_nxst_flow_request(fsr, &b, false, tun_table,
  721|    962|                                                vl_mff_map);
  722|       |
  723|    187|    case OFPRAW_NXST_AGGREGATE_REQUEST:
  ------------------
  |  Branch (723:5): [True: 187, False: 6.43k]
  ------------------
  724|    187|        return ofputil_decode_nxst_flow_request(fsr, &b, true, tun_table,
  725|    187|                                                vl_mff_map);
  726|       |
  727|      0|    default:
  ------------------
  |  Branch (727:5): [True: 0, False: 6.62k]
  ------------------
  728|       |        /* Hey, the caller lied. */
  729|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  730|  6.62k|    }
  731|  6.62k|}
ofputil_flow_stats_request_format:
  819|  2.34k|{
  820|  2.34k|    if (fsr->table_id != 0xff) {
  ------------------
  |  Branch (820:9): [True: 1.39k, False: 953]
  ------------------
  821|  1.39k|        ds_put_format(s, " table=");
  822|  1.39k|        ofputil_format_table(fsr->table_id, table_map, s);
  823|  1.39k|    }
  824|       |
  825|  2.34k|    if (fsr->out_port != OFPP_ANY) {
  ------------------
  |  |   80|  2.34k|#define OFPP_ANY OFPP_NONE
  |  |  ------------------
  |  |  |  |   47|  2.34k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|  2.34k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (825:9): [True: 2.04k, False: 296]
  ------------------
  826|  2.04k|        ds_put_cstr(s, " out_port=");
  827|  2.04k|        ofputil_format_port(fsr->out_port, port_map, s);
  828|  2.04k|    }
  829|       |
  830|  2.34k|    ds_put_char(s, ' ');
  831|  2.34k|    match_format(&fsr->match, port_map, s, OFP_DEFAULT_PRIORITY);
  ------------------
  |  |  138|  2.34k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
  832|  2.34k|}
ofputil_decode_flow_stats_reply:
  896|  30.0k|{
  897|  30.0k|    const struct ofp_header *oh;
  898|  30.0k|    size_t instructions_len;
  899|  30.0k|    enum ofperr error;
  900|  30.0k|    enum ofpraw raw;
  901|       |
  902|  30.0k|    error = (msg->header ? ofpraw_decode(&raw, msg->header)
  ------------------
  |  Branch (902:14): [True: 8.89k, False: 21.1k]
  ------------------
  903|  30.0k|             : ofpraw_pull(&raw, msg));
  904|  30.0k|    if (error) {
  ------------------
  |  Branch (904:9): [True: 0, False: 30.0k]
  ------------------
  905|      0|        return error;
  906|      0|    }
  907|  30.0k|    oh = msg->header;
  908|       |
  909|  30.0k|    if (!msg->size) {
  ------------------
  |  Branch (909:9): [True: 3.15k, False: 26.8k]
  ------------------
  910|  3.15k|        return EOF;
  911|  26.8k|    } else if (raw == OFPRAW_OFPST15_FLOW_REPLY) {
  ------------------
  |  Branch (911:16): [True: 14.4k, False: 12.4k]
  ------------------
  912|  14.4k|        const struct ofp15_flow_desc *ofd;
  913|  14.4k|        size_t length;
  914|  14.4k|        uint16_t padded_match_len;
  915|  14.4k|        uint16_t stat_len;
  916|  14.4k|        uint8_t oxs_field_set;
  917|       |
  918|  14.4k|        ofd = ofpbuf_try_pull(msg, sizeof *ofd);
  919|  14.4k|        if (!ofd) {
  ------------------
  |  Branch (919:13): [True: 3.44k, False: 11.0k]
  ------------------
  920|  3.44k|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply has %" PRIu32
  ------------------
  |  |  224|  3.44k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  3.44k|    do {                                                                \
  |  |  |  |  288|  3.44k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  3.44k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 3.44k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  3.44k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 3.44k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  921|  3.44k|                         " leftover " "bytes at end", msg->size);
  922|  3.44k|            return EINVAL;
  923|  3.44k|        }
  924|       |
  925|  11.0k|        length = ntohs(ofd->length);
  926|  11.0k|        if (length < sizeof *ofd) {
  ------------------
  |  Branch (926:13): [True: 893, False: 10.1k]
  ------------------
  927|    893|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply claims invalid "
  ------------------
  |  |  224|    893|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    893|    do {                                                                \
  |  |  |  |  288|    893|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    893|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 893]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    893|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 893]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  928|    893|                         "length %" PRIuSIZE, length);
  929|    893|            return EINVAL;
  930|    893|        }
  931|       |
  932|  10.1k|        if (ofputil_pull_ofp11_match(msg, NULL, NULL, &fs->match,
  ------------------
  |  Branch (932:13): [True: 2.25k, False: 7.89k]
  ------------------
  933|  10.1k|                                     &padded_match_len)) {
  934|  2.25k|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply bad match");
  ------------------
  |  |  224|  2.25k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  2.25k|    do {                                                                \
  |  |  |  |  288|  2.25k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  2.25k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 2.25k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  2.25k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 2.25k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  935|  2.25k|            return EINVAL;
  936|  2.25k|        }
  937|       |
  938|  7.89k|        fs->priority = ntohs(ofd->priority);
  939|  7.89k|        fs->table_id = ofd->table_id;
  940|  7.89k|        fs->cookie = ofd->cookie;
  941|  7.89k|        fs->idle_timeout = ntohs(ofd->idle_timeout);
  942|  7.89k|        fs->hard_timeout = ntohs(ofd->hard_timeout);
  943|  7.89k|        fs->importance = ntohs(ofd->importance);
  944|       |
  945|  7.89k|        error = ofputil_decode_flow_mod_flags(ofd->flags, -1, oh->version,
  946|  7.89k|                                                &fs->flags);
  947|  7.89k|        if (error) {
  ------------------
  |  Branch (947:13): [True: 763, False: 7.13k]
  ------------------
  948|    763|            return error;
  949|    763|        }
  950|       |
  951|  7.13k|        struct oxs_stats oxs;
  952|  7.13k|        if (oxs_pull_stat(msg, &oxs, &stat_len, &oxs_field_set)) {
  ------------------
  |  Branch (952:13): [True: 946, False: 6.18k]
  ------------------
  953|    946|            VLOG_WARN_RL(&rl, "OXS OFPST_FLOW reply bad stats");
  ------------------
  |  |  224|    946|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    946|    do {                                                                \
  |  |  |  |  288|    946|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    946|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 946]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    946|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 946]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  954|    946|            return EINVAL;
  955|    946|        }
  956|  6.18k|        fs->duration_sec = oxs.duration_sec;
  957|  6.18k|        fs->duration_nsec = oxs.duration_nsec;
  958|  6.18k|        fs->packet_count = oxs.packet_count;
  959|  6.18k|        fs->byte_count = oxs.byte_count;
  960|  6.18k|        fs->idle_age = oxs.idle_age == UINT32_MAX ? -1 : oxs.idle_age;
  ------------------
  |  Branch (960:24): [True: 6.18k, False: 0]
  ------------------
  961|  6.18k|        fs->hard_age = -1;
  962|       |
  963|  6.18k|        instructions_len = length - sizeof *ofd - padded_match_len - stat_len;
  964|  12.4k|    } else if (raw == OFPRAW_OFPST11_FLOW_REPLY
  ------------------
  |  Branch (964:16): [True: 1.69k, False: 10.7k]
  ------------------
  965|  10.7k|               || raw == OFPRAW_OFPST13_FLOW_REPLY) {
  ------------------
  |  Branch (965:19): [True: 3.35k, False: 7.35k]
  ------------------
  966|  5.04k|        const struct ofp11_flow_stats *ofs;
  967|  5.04k|        size_t length;
  968|  5.04k|        uint16_t padded_match_len;
  969|       |
  970|  5.04k|        ofs = ofpbuf_try_pull(msg, sizeof *ofs);
  971|  5.04k|        if (!ofs) {
  ------------------
  |  Branch (971:13): [True: 1.14k, False: 3.90k]
  ------------------
  972|  1.14k|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply has %"PRIu32" leftover "
  ------------------
  |  |  224|  1.14k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.14k|    do {                                                                \
  |  |  |  |  288|  1.14k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.14k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.14k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.14k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.14k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  973|  1.14k|                         "bytes at end", msg->size);
  974|  1.14k|            return OFPERR_OFPBRC_BAD_LEN;
  975|  1.14k|        }
  976|       |
  977|  3.90k|        length = ntohs(ofs->length);
  978|  3.90k|        if (length < sizeof *ofs) {
  ------------------
  |  Branch (978:13): [True: 68, False: 3.83k]
  ------------------
  979|     68|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply claims invalid "
  ------------------
  |  |  224|     68|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     68|    do {                                                                \
  |  |  |  |  288|     68|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     68|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 68]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     68|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 68]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  980|     68|                         "length %"PRIuSIZE, length);
  981|     68|            return OFPERR_OFPBRC_BAD_LEN;
  982|     68|        }
  983|       |
  984|  3.83k|        error = ofputil_pull_ofp11_match(msg, NULL, NULL, &fs->match,
  985|  3.83k|                                         &padded_match_len);
  986|  3.83k|        if (error) {
  ------------------
  |  Branch (986:13): [True: 849, False: 2.98k]
  ------------------
  987|    849|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply bad match");
  ------------------
  |  |  224|    849|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    849|    do {                                                                \
  |  |  |  |  288|    849|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    849|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 849]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    849|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 849]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  988|    849|            return error;
  989|    849|        }
  990|  2.98k|        instructions_len = length - sizeof *ofs - padded_match_len;
  991|       |
  992|  2.98k|        fs->priority = ntohs(ofs->priority);
  993|  2.98k|        fs->table_id = ofs->table_id;
  994|  2.98k|        fs->duration_sec = ntohl(ofs->duration_sec);
  995|  2.98k|        fs->duration_nsec = ntohl(ofs->duration_nsec);
  996|  2.98k|        fs->idle_timeout = ntohs(ofs->idle_timeout);
  997|  2.98k|        fs->hard_timeout = ntohs(ofs->hard_timeout);
  998|  2.98k|        if (oh->version >= OFP14_VERSION) {
  ------------------
  |  Branch (998:13): [True: 262, False: 2.72k]
  ------------------
  999|    262|            fs->importance = ntohs(ofs->importance);
 1000|  2.72k|        } else {
 1001|  2.72k|            fs->importance = 0;
 1002|  2.72k|        }
 1003|  2.98k|        if (raw == OFPRAW_OFPST13_FLOW_REPLY) {
  ------------------
  |  Branch (1003:13): [True: 1.86k, False: 1.12k]
  ------------------
 1004|  1.86k|            error = ofputil_decode_flow_mod_flags(ofs->flags, -1, oh->version,
 1005|  1.86k|                                                  &fs->flags);
 1006|  1.86k|            if (error) {
  ------------------
  |  Branch (1006:17): [True: 1.14k, False: 721]
  ------------------
 1007|  1.14k|                return error;
 1008|  1.14k|            }
 1009|  1.86k|        } else {
 1010|  1.12k|            fs->flags = 0;
 1011|  1.12k|        }
 1012|  1.84k|        fs->idle_age = -1;
 1013|  1.84k|        fs->hard_age = -1;
 1014|  1.84k|        fs->cookie = ofs->cookie;
 1015|  1.84k|        fs->packet_count = ntohll(ofs->packet_count);
 1016|  1.84k|        fs->byte_count = ntohll(ofs->byte_count);
 1017|  7.35k|    } else if (raw == OFPRAW_OFPST10_FLOW_REPLY) {
  ------------------
  |  Branch (1017:16): [True: 3.03k, False: 4.32k]
  ------------------
 1018|  3.03k|        const struct ofp10_flow_stats *ofs;
 1019|  3.03k|        size_t length;
 1020|       |
 1021|  3.03k|        ofs = ofpbuf_try_pull(msg, sizeof *ofs);
 1022|  3.03k|        if (!ofs) {
  ------------------
  |  Branch (1022:13): [True: 112, False: 2.91k]
  ------------------
 1023|    112|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply has %"PRIu32" leftover "
  ------------------
  |  |  224|    112|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    112|    do {                                                                \
  |  |  |  |  288|    112|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    112|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 112]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    112|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 112]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1024|    112|                         "bytes at end", msg->size);
 1025|    112|            return OFPERR_OFPBRC_BAD_LEN;
 1026|    112|        }
 1027|       |
 1028|  2.91k|        length = ntohs(ofs->length);
 1029|  2.91k|        if (length < sizeof *ofs) {
  ------------------
  |  Branch (1029:13): [True: 1.85k, False: 1.06k]
  ------------------
 1030|  1.85k|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply claims invalid "
  ------------------
  |  |  224|  1.85k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.85k|    do {                                                                \
  |  |  |  |  288|  1.85k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.85k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.85k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.85k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.85k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1031|  1.85k|                         "length %"PRIuSIZE, length);
 1032|  1.85k|            return OFPERR_OFPBRC_BAD_LEN;
 1033|  1.85k|        }
 1034|  1.06k|        instructions_len = length - sizeof *ofs;
 1035|       |
 1036|  1.06k|        fs->cookie = get_32aligned_be64(&ofs->cookie);
 1037|  1.06k|        ofputil_match_from_ofp10_match(&ofs->match, &fs->match);
 1038|  1.06k|        fs->priority = ntohs(ofs->priority);
 1039|  1.06k|        fs->table_id = ofs->table_id;
 1040|  1.06k|        fs->duration_sec = ntohl(ofs->duration_sec);
 1041|  1.06k|        fs->duration_nsec = ntohl(ofs->duration_nsec);
 1042|  1.06k|        fs->idle_timeout = ntohs(ofs->idle_timeout);
 1043|  1.06k|        fs->hard_timeout = ntohs(ofs->hard_timeout);
 1044|  1.06k|        fs->importance = 0;
 1045|  1.06k|        fs->idle_age = -1;
 1046|  1.06k|        fs->hard_age = -1;
 1047|  1.06k|        fs->packet_count = ntohll(get_32aligned_be64(&ofs->packet_count));
 1048|  1.06k|        fs->byte_count = ntohll(get_32aligned_be64(&ofs->byte_count));
 1049|  1.06k|        fs->flags = 0;
 1050|  4.32k|    } else if (raw == OFPRAW_NXST_FLOW_REPLY) {
  ------------------
  |  Branch (1050:16): [True: 4.32k, False: 0]
  ------------------
 1051|  4.32k|        const struct nx_flow_stats *nfs;
 1052|  4.32k|        size_t match_len, length;
 1053|       |
 1054|  4.32k|        nfs = ofpbuf_try_pull(msg, sizeof *nfs);
 1055|  4.32k|        if (!nfs) {
  ------------------
  |  Branch (1055:13): [True: 818, False: 3.50k]
  ------------------
 1056|    818|            VLOG_WARN_RL(&rl, "NXST_FLOW reply has %"PRIu32" leftover "
  ------------------
  |  |  224|    818|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    818|    do {                                                                \
  |  |  |  |  288|    818|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    818|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 818]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    818|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 818]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1057|    818|                         "bytes at end", msg->size);
 1058|    818|            return OFPERR_OFPBRC_BAD_LEN;
 1059|    818|        }
 1060|       |
 1061|  3.50k|        length = ntohs(nfs->length);
 1062|  3.50k|        match_len = ntohs(nfs->match_len);
 1063|  3.50k|        if (length < sizeof *nfs + ROUND_UP(match_len, 8)) {
  ------------------
  |  |  303|  3.50k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|  3.50k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (1063:13): [True: 991, False: 2.51k]
  ------------------
 1064|    991|            VLOG_WARN_RL(&rl, "NXST_FLOW reply with match_len=%"PRIuSIZE" "
  ------------------
  |  |  224|    991|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    991|    do {                                                                \
  |  |  |  |  288|    991|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    991|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 991]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    991|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 991]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1065|    991|                         "claims invalid length %"PRIuSIZE, match_len, length);
 1066|    991|            return OFPERR_OFPBRC_BAD_LEN;
 1067|    991|        }
 1068|  2.51k|        error = nx_pull_match(msg, match_len, &fs->match, NULL, NULL, false,
 1069|  2.51k|                              NULL, NULL);
 1070|  2.51k|        if (error) {
  ------------------
  |  Branch (1070:13): [True: 667, False: 1.84k]
  ------------------
 1071|    667|            return error;
 1072|    667|        }
 1073|  1.84k|        instructions_len = length - sizeof *nfs - ROUND_UP(match_len, 8);
  ------------------
  |  |  303|  1.84k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|  1.84k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
 1074|       |
 1075|  1.84k|        fs->cookie = nfs->cookie;
 1076|  1.84k|        fs->table_id = nfs->table_id;
 1077|  1.84k|        fs->duration_sec = ntohl(nfs->duration_sec);
 1078|  1.84k|        fs->duration_nsec = ntohl(nfs->duration_nsec);
 1079|  1.84k|        fs->priority = ntohs(nfs->priority);
 1080|  1.84k|        fs->idle_timeout = ntohs(nfs->idle_timeout);
 1081|  1.84k|        fs->hard_timeout = ntohs(nfs->hard_timeout);
 1082|  1.84k|        fs->importance = 0;
 1083|  1.84k|        fs->idle_age = -1;
 1084|  1.84k|        fs->hard_age = -1;
 1085|  1.84k|        if (flow_age_extension) {
  ------------------
  |  Branch (1085:13): [True: 1.84k, False: 0]
  ------------------
 1086|  1.84k|            if (nfs->idle_age) {
  ------------------
  |  Branch (1086:17): [True: 196, False: 1.65k]
  ------------------
 1087|    196|                fs->idle_age = ntohs(nfs->idle_age) - 1;
 1088|    196|            }
 1089|  1.84k|            if (nfs->hard_age) {
  ------------------
  |  Branch (1089:17): [True: 1.09k, False: 757]
  ------------------
 1090|  1.09k|                fs->hard_age = ntohs(nfs->hard_age) - 1;
 1091|  1.09k|            }
 1092|  1.84k|        }
 1093|  1.84k|        fs->packet_count = ntohll(nfs->packet_count);
 1094|  1.84k|        fs->byte_count = ntohll(nfs->byte_count);
 1095|  1.84k|        fs->flags = 0;
 1096|  1.84k|    } else {
 1097|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1098|      0|    }
 1099|       |
 1100|  10.9k|    error = ofpacts_pull_openflow_instructions(msg, instructions_len,
 1101|  10.9k|                                               oh->version, NULL, NULL,
 1102|  10.9k|                                               ofpacts);
 1103|  10.9k|    if (error) {
  ------------------
  |  Branch (1103:9): [True: 2.05k, False: 8.89k]
  ------------------
 1104|  2.05k|        VLOG_WARN_RL(&rl, "OFPST_FLOW reply bad instructions");
  ------------------
  |  |  224|  2.05k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  2.05k|    do {                                                                \
  |  |  |  |  288|  2.05k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  2.05k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 2.05k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  2.05k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 2.05k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1105|  2.05k|        return error;
 1106|  2.05k|    }
 1107|  8.89k|    fs->ofpacts = ofpacts->data;
 1108|  8.89k|    fs->ofpacts_len = ofpacts->size;
 1109|       |
 1110|  8.89k|    return 0;
 1111|  10.9k|}
ofputil_flow_stats_format:
 1292|  8.89k|{
 1293|  8.89k|    if (show_stats || fs->cookie) {
  ------------------
  |  Branch (1293:9): [True: 8.89k, False: 0]
  |  Branch (1293:23): [True: 0, False: 0]
  ------------------
 1294|  8.89k|        ds_put_format(string, "%scookie=%s0x%"PRIx64", ",
 1295|  8.89k|                      colors.param, colors.end, ntohll(fs->cookie));
 1296|  8.89k|    }
 1297|  8.89k|    if (show_stats) {
  ------------------
  |  Branch (1297:9): [True: 8.89k, False: 0]
  ------------------
 1298|  8.89k|        ds_put_format(string, "%sduration=%s", colors.param, colors.end);
 1299|  8.89k|        ofp_print_duration(string, fs->duration_sec, fs->duration_nsec);
 1300|  8.89k|        ds_put_cstr(string, ", ");
 1301|  8.89k|    }
 1302|       |
 1303|  8.89k|    if (show_stats || fs->table_id
  ------------------
  |  Branch (1303:9): [True: 8.89k, False: 0]
  |  Branch (1303:23): [True: 0, False: 0]
  ------------------
 1304|  8.89k|        || ofputil_table_map_get_name(table_map, fs->table_id) != NULL) {
  ------------------
  |  Branch (1304:12): [True: 0, False: 0]
  ------------------
 1305|  8.89k|        ds_put_format(string, "%stable=%s", colors.special, colors.end);
 1306|  8.89k|        ofputil_format_table(fs->table_id, table_map, string);
 1307|  8.89k|        ds_put_cstr(string, ", ");
 1308|  8.89k|    }
 1309|  8.89k|    if (show_stats) {
  ------------------
  |  Branch (1309:9): [True: 8.89k, False: 0]
  ------------------
 1310|  8.89k|        print_flow_stat(string, "n_packets", fs->packet_count);
 1311|  8.89k|        print_flow_stat(string, "n_bytes", fs->byte_count);
 1312|  8.89k|    }
 1313|  8.89k|    if (fs->idle_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  8.89k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (1313:9): [True: 6.65k, False: 2.24k]
  ------------------
 1314|  6.65k|        ds_put_format(string, "%sidle_timeout=%s%"PRIu16", ",
 1315|  6.65k|                      colors.param, colors.end, fs->idle_timeout);
 1316|  6.65k|    }
 1317|  8.89k|    if (fs->hard_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  8.89k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (1317:9): [True: 5.94k, False: 2.95k]
  ------------------
 1318|  5.94k|        ds_put_format(string, "%shard_timeout=%s%"PRIu16", ",
 1319|  5.94k|                      colors.param, colors.end, fs->hard_timeout);
 1320|  5.94k|    }
 1321|  8.89k|    if (fs->flags) {
  ------------------
  |  Branch (1321:9): [True: 2.76k, False: 6.13k]
  ------------------
 1322|  2.76k|        ofputil_flow_mod_flags_format(string, fs->flags);
 1323|  2.76k|    }
 1324|  8.89k|    if (fs->importance != 0) {
  ------------------
  |  Branch (1324:9): [True: 6.00k, False: 2.89k]
  ------------------
 1325|  6.00k|        ds_put_format(string, "%simportance=%s%"PRIu16", ",
 1326|  6.00k|                      colors.param, colors.end, fs->importance);
 1327|  6.00k|    }
 1328|  8.89k|    if (show_stats && fs->idle_age >= 0) {
  ------------------
  |  Branch (1328:9): [True: 8.89k, False: 0]
  |  Branch (1328:23): [True: 181, False: 8.71k]
  ------------------
 1329|    181|        ds_put_format(string, "%sidle_age=%s%d, ",
 1330|    181|                      colors.param, colors.end, fs->idle_age);
 1331|    181|    }
 1332|  8.89k|    if (show_stats && fs->hard_age >= 0 && fs->hard_age != fs->duration_sec) {
  ------------------
  |  Branch (1332:9): [True: 8.89k, False: 0]
  |  Branch (1332:23): [True: 1.07k, False: 7.82k]
  |  Branch (1332:44): [True: 1.04k, False: 34]
  ------------------
 1333|  1.04k|        ds_put_format(string, "%shard_age=%s%d, ",
 1334|  1.04k|                      colors.param, colors.end, fs->hard_age);
 1335|  1.04k|    }
 1336|       |
 1337|       |    /* Print the match, followed by a space (but omit the space if the match
 1338|       |     * was an empty string). */
 1339|  8.89k|    size_t length = string->length;
 1340|  8.89k|    match_format(&fs->match, port_map, string, fs->priority);
 1341|  8.89k|    if (string->length != length) {
  ------------------
  |  Branch (1341:9): [True: 8.86k, False: 35]
  ------------------
 1342|  8.86k|        ds_put_char(string, ' ');
 1343|  8.86k|    }
 1344|       |
 1345|  8.89k|    ds_put_format(string, "%sactions=%s", colors.actions, colors.end);
 1346|  8.89k|    struct ofpact_format_params fp = {
 1347|  8.89k|        .port_map = port_map,
 1348|  8.89k|        .table_map = table_map,
 1349|  8.89k|        .s = string,
 1350|  8.89k|    };
 1351|  8.89k|    ofpacts_format(fs->ofpacts, fs->ofpacts_len, &fp);
 1352|  8.89k|}
ofputil_decode_aggregate_stats_reply:
 1401|  3.14k|{
 1402|  3.14k|    struct ofpbuf msg = ofpbuf_const_initializer(reply, ntohs(reply->length));
 1403|  3.14k|    enum ofpraw raw;
 1404|       |
 1405|  3.14k|    raw = ofpraw_pull_assert(&msg);
 1406|  3.14k|    if (raw == OFPRAW_OFPST15_AGGREGATE_REPLY) {
  ------------------
  |  Branch (1406:9): [True: 2.94k, False: 196]
  ------------------
 1407|  2.94k|        struct oxs_stats oxs;
 1408|  2.94k|        uint16_t statlen;
 1409|  2.94k|        uint8_t oxs_field_set;
 1410|  2.94k|        enum ofperr error = oxs_pull_stat(&msg, &oxs, &statlen,
 1411|  2.94k|                                          &oxs_field_set);
 1412|  2.94k|        if (error) {
  ------------------
  |  Branch (1412:13): [True: 2.62k, False: 320]
  ------------------
 1413|  2.62k|            return error;
 1414|  2.62k|        }
 1415|    320|        stats->packet_count = oxs.packet_count;
 1416|    320|        stats->byte_count = oxs.byte_count;
 1417|    320|        stats->flow_count = oxs.flow_count;
 1418|    320|    } else {
 1419|    196|        struct ofp_aggregate_stats_reply *asr = msg.msg;
 1420|    196|        stats->packet_count = ntohll(get_32aligned_be64(&asr->packet_count));
 1421|    196|        stats->byte_count = ntohll(get_32aligned_be64(&asr->byte_count));
 1422|    196|        stats->flow_count = ntohl(asr->flow_count);
 1423|    196|    }
 1424|       |
 1425|    516|    return 0;
 1426|  3.14k|}
ofputil_aggregate_stats_format:
 1431|    516|{
 1432|    516|    ds_put_format(s, " packet_count=%"PRIu64, as->packet_count);
 1433|    516|    ds_put_format(s, " byte_count=%"PRIu64, as->byte_count);
 1434|       |    ds_put_format(s, " flow_count=%"PRIu32, as->flow_count);
 1435|    516|}
ofp-flow.c:ofputil_decode_flow_mod_flags:
   63|  81.2k|{
   64|  81.2k|    uint16_t raw_flags = ntohs(raw_flags_);
   65|  81.2k|    const struct ofputil_flow_mod_flag *f;
   66|       |
   67|  81.2k|    *flagsp = 0;
   68|   569k|    for (f = ofputil_flow_mod_flags; f->raw_flag; f++) {
  ------------------
  |  Branch (68:38): [True: 487k, False: 81.2k]
  ------------------
   69|   487k|        if (raw_flags & f->raw_flag
  ------------------
  |  Branch (69:13): [True: 54.8k, False: 432k]
  ------------------
   70|  54.8k|            && version >= f->min_version
  ------------------
  |  Branch (70:16): [True: 53.7k, False: 1.08k]
  ------------------
   71|  53.7k|            && (!f->max_version || version <= f->max_version)) {
  ------------------
  |  Branch (71:17): [True: 44.6k, False: 9.07k]
  |  Branch (71:36): [True: 3.58k, False: 5.49k]
  ------------------
   72|  48.2k|            raw_flags &= ~f->raw_flag;
   73|  48.2k|            *flagsp |= f->flag;
   74|  48.2k|        }
   75|   487k|    }
   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|  81.2k|    if ((version == OFP10_VERSION || version == OFP11_VERSION)
  ------------------
  |  Branch (82:10): [True: 45.3k, False: 35.9k]
  |  Branch (82:38): [True: 3.47k, False: 32.4k]
  ------------------
   83|  48.8k|        && command == OFPFC_ADD) {
  ------------------
  |  Branch (83:12): [True: 37.0k, False: 11.7k]
  ------------------
   84|  37.0k|        *flagsp |= OFPUTIL_FF_RESET_COUNTS;
   85|  37.0k|    }
   86|       |
   87|  81.2k|    return raw_flags ? OFPERR_OFPFMFC_BAD_FLAGS : 0;
  ------------------
  |  Branch (87:12): [True: 4.45k, False: 76.8k]
  ------------------
   88|  81.2k|}
ofp-flow.c:ofputil_decode_ofpst10_flow_request:
  618|  2.13k|{
  619|  2.13k|    fsr->aggregate = aggregate;
  620|  2.13k|    ofputil_match_from_ofp10_match(&ofsr->match, &fsr->match);
  621|  2.13k|    fsr->out_port = u16_to_ofp(ntohs(ofsr->out_port));
  622|  2.13k|    fsr->out_group = OFPG_ANY;
  623|  2.13k|    fsr->table_id = ofsr->table_id;
  624|  2.13k|    fsr->cookie = fsr->cookie_mask = htonll(0);
  625|       |
  626|  2.13k|    return 0;
  627|  2.13k|}
ofp-flow.c:ofputil_decode_ofpst11_flow_request:
  634|  3.33k|{
  635|  3.33k|    const struct ofp11_flow_stats_request *ofsr;
  636|  3.33k|    enum ofperr error;
  637|       |
  638|  3.33k|    ofsr = ofpbuf_pull(b, sizeof *ofsr);
  639|  3.33k|    fsr->aggregate = aggregate;
  640|  3.33k|    fsr->table_id = ofsr->table_id;
  641|  3.33k|    error = ofputil_port_from_ofp11(ofsr->out_port, &fsr->out_port);
  642|  3.33k|    if (error) {
  ------------------
  |  Branch (642:9): [True: 980, False: 2.35k]
  ------------------
  643|    980|        return error;
  644|    980|    }
  645|  2.35k|    fsr->out_group = ntohl(ofsr->out_group);
  646|  2.35k|    fsr->cookie = ofsr->cookie;
  647|  2.35k|    fsr->cookie_mask = ofsr->cookie_mask;
  648|  2.35k|    error = ofputil_pull_ofp11_match(b, tun_table, vl_mff_map, &fsr->match,
  649|  2.35k|                                     NULL);
  650|  2.35k|    if (error) {
  ------------------
  |  Branch (650:9): [True: 2.25k, False: 97]
  ------------------
  651|  2.25k|        return error;
  652|  2.25k|    }
  653|       |
  654|     97|    return 0;
  655|  2.35k|}
ofp-flow.c:ofputil_decode_nxst_flow_request:
  662|  1.14k|{
  663|  1.14k|    const struct nx_flow_stats_request *nfsr;
  664|  1.14k|    enum ofperr error;
  665|       |
  666|  1.14k|    nfsr = ofpbuf_pull(b, sizeof *nfsr);
  667|  1.14k|    error = nx_pull_match(b, ntohs(nfsr->match_len), &fsr->match,
  668|  1.14k|                          &fsr->cookie, &fsr->cookie_mask, false, tun_table,
  669|  1.14k|                          vl_mff_map);
  670|  1.14k|    if (error) {
  ------------------
  |  Branch (670:9): [True: 967, False: 182]
  ------------------
  671|    967|        return error;
  672|    967|    }
  673|    182|    if (b->size) {
  ------------------
  |  Branch (673:9): [True: 72, False: 110]
  ------------------
  674|     72|        return OFPERR_OFPBRC_BAD_LEN;
  675|     72|    }
  676|       |
  677|    110|    fsr->aggregate = aggregate;
  678|    110|    fsr->out_port = u16_to_ofp(ntohs(nfsr->out_port));
  679|    110|    fsr->out_group = OFPG_ANY;
  680|    110|    fsr->table_id = nfsr->table_id;
  681|       |
  682|    110|    return 0;
  683|    182|}
ofp-flow.c:print_flow_stat:
 1272|  17.7k|{
 1273|  17.7k|    ds_put_format(string, "%s%s=%s", colors.param, leader, colors.end);
 1274|  17.7k|    if (stat != UINT64_MAX) {
  ------------------
  |  Branch (1274:9): [True: 5.74k, False: 12.0k]
  ------------------
 1275|  5.74k|        ds_put_format(string, "%"PRIu64, stat);
 1276|  12.0k|    } else {
 1277|  12.0k|        ds_put_char(string, '?');
 1278|  12.0k|    }
 1279|  17.7k|    ds_put_cstr(string, ", ");
 1280|  17.7k|}

ofputil_format_group:
   66|  1.65k|{
   67|  1.65k|    char name[MAX_GROUP_NAME_LEN + 1];
   68|       |
   69|  1.65k|    ofputil_group_to_string(group_id, name, sizeof name);
   70|  1.65k|    ds_put_cstr(s, name);
   71|  1.65k|}
ofputil_group_to_string:
   81|  1.65k|{
   82|  1.65k|    switch (group_id) {
   83|    502|    case OFPG_ALL:
  ------------------
  |  Branch (83:5): [True: 502, False: 1.15k]
  ------------------
   84|    502|        ovs_strlcpy(namebuf, "ALL", bufsize);
   85|    502|        break;
   86|       |
   87|    173|    case OFPG_ANY:
  ------------------
  |  Branch (87:5): [True: 173, False: 1.47k]
  ------------------
   88|    173|        ovs_strlcpy(namebuf, "ANY", bufsize);
   89|    173|        break;
   90|       |
   91|    977|    default:
  ------------------
  |  Branch (91:5): [True: 977, False: 675]
  ------------------
   92|       |        snprintf(namebuf, bufsize, "%"PRIu32, group_id);
   93|    977|        break;
   94|  1.65k|    }
   95|  1.65k|}
ofputil_bucket_list_destroy:
  100|  51.1k|{
  101|  51.1k|    struct ofputil_bucket *bucket;
  102|       |
  103|  51.1k|    LIST_FOR_EACH_POP (bucket, list_node, buckets) {
  ------------------
  |  |  140|  67.6k|    while (!ovs_list_is_empty(LIST) ?                                         \
  |  |  ------------------
  |  |  |  Branch (140:12): [True: 16.5k, False: 51.1k]
  |  |  |  Branch (140:12): [True: 16.5k, False: 51.1k]
  |  |  ------------------
  |  |  141|  67.6k|           (INIT_CONTAINER(ITER, ovs_list_pop_front(LIST), MEMBER), 1) :      \
  |  |  ------------------
  |  |  |  |  150|  16.5k|    ((OBJECT) = NULL, ASSIGN_CONTAINER(OBJECT, POINTER, MEMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  |  143|  16.5k|    ((OBJECT) = OBJECT_CONTAINING(POINTER, OBJECT, MEMBER), (void) 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  134|  16.5k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  |  |  135|  16.5k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  108|  16.5k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  142|  67.6k|           (ITER = NULL, 0))
  ------------------
  104|  16.5k|        free(bucket->ofpacts);
  105|  16.5k|        free(bucket);
  106|  16.5k|    }
  107|  51.1k|}
ofputil_bucket_check_duplicate_id:
  169|  15.3k|{
  170|  15.3k|    struct ofputil_bucket *i, *j;
  171|       |
  172|  15.3k|    LIST_FOR_EACH (i, list_node, buckets) {
  ------------------
  |  |   76|  15.3k|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->next, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  171|  15.3k|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|  15.3k|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|  22.2k|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  185|  22.2k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 7.04k, False: 15.2k]
  |  |  |  |  |  Branch (185:6): [True: 7.04k, False: 15.2k]
  |  |  |  |  ------------------
  |  |  |  |  186|  22.2k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  7.04k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|  7.04k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|  7.04k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  22.2k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   78|  15.3k|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->next))
  |  |  ------------------
  |  |  |  |  193|  6.87k|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  6.87k|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  173|  10.3k|        LIST_FOR_EACH_REVERSE (j, list_node, buckets) {
  ------------------
  |  |   86|  7.04k|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->prev, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  171|  7.04k|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|  7.04k|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   87|  10.3k|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  185|  10.3k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 10.3k, False: 0]
  |  |  |  |  |  Branch (185:6): [True: 10.3k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  186|  10.3k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  10.3k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|  10.3k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|  10.3k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  10.3k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   88|  7.04k|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->prev))
  |  |  ------------------
  |  |  |  |  193|  3.35k|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  3.35k|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  174|  10.3k|            if (i == j) {
  ------------------
  |  Branch (174:17): [True: 6.87k, False: 3.52k]
  ------------------
  175|  6.87k|                break;
  176|  6.87k|            }
  177|  3.52k|            if (i->bucket_id == j->bucket_id) {
  ------------------
  |  Branch (177:17): [True: 166, False: 3.35k]
  ------------------
  178|    166|                return true;
  179|    166|            }
  180|  3.52k|        }
  181|  7.04k|    }
  182|       |
  183|  15.2k|    return false;
  184|  15.3k|}
ofputil_uninit_group_desc:
  231|  2.81k|{
  232|  2.81k|    ofputil_bucket_list_destroy(&gd->buckets);
  233|  2.81k|    ofputil_group_properties_destroy(&gd->props);
  234|  2.81k|}
ofputil_decode_group_desc_request:
  241|    600|{
  242|    600|    struct ofpbuf request = ofpbuf_const_initializer(oh, ntohs(oh->length));
  243|    600|    enum ofpraw raw = ofpraw_pull_assert(&request);
  244|    600|    if (raw == OFPRAW_OFPST11_GROUP_DESC_REQUEST) {
  ------------------
  |  Branch (244:9): [True: 211, False: 389]
  ------------------
  245|    211|        return OFPG_ALL;
  246|    389|    } else if (raw == OFPRAW_NXST_GROUP_DESC_REQUEST ||
  ------------------
  |  Branch (246:16): [True: 18, False: 371]
  ------------------
  247|    389|               raw == OFPRAW_OFPST15_GROUP_DESC_REQUEST) {
  ------------------
  |  Branch (247:16): [True: 371, False: 0]
  ------------------
  248|    389|        ovs_be32 *group_id = ofpbuf_pull(&request, sizeof *group_id);
  249|    389|        return ntohl(*group_id);
  250|    389|    } else {
  251|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  252|      0|    }
  253|    600|}
ofputil_group_desc_request_format:
  298|    600|{
  299|    600|    uint32_t group_id = ofputil_decode_group_desc_request(oh);
  300|    600|    ds_put_cstr(string, " group_id=");
  301|    600|    ofputil_format_group(group_id, string);
  302|       |
  303|    600|    return 0;
  304|    600|}
ofputil_decode_group_features_reply:
  422|  1.47k|{
  423|  1.47k|    const struct ofp12_group_features_stats *ogf = ofpmsg_body(oh);
  424|  1.47k|    int i;
  425|       |
  426|  1.47k|    features->types = ntohl(ogf->types);
  427|  1.47k|    features->capabilities = ntohl(ogf->capabilities);
  428|  7.35k|    for (i = 0; i < OFPGT12_N_TYPES; i++) {
  ------------------
  |  |  151|  7.35k|#define OFPGT12_N_TYPES 4
  ------------------
  |  Branch (428:17): [True: 5.88k, False: 1.47k]
  ------------------
  429|       |        features->max_groups[i] = ntohl(ogf->max_groups[i]);
  430|  5.88k|        features->ofpacts[i] = ofpact_bitmap_from_openflow(
  431|  5.88k|            ogf->actions[i], oh->version);
  432|  5.88k|    }
  433|  1.47k|}
ofputil_group_features_format:
  449|  1.47k|{
  450|  1.47k|    struct ofputil_group_features features;
  451|  1.47k|    int i;
  452|       |
  453|  1.47k|    ofputil_decode_group_features_reply(oh, &features);
  454|       |
  455|  1.47k|    ds_put_format(string, "\n Group table:\n");
  456|  1.47k|    ds_put_format(string, "    Types:  0x%"PRIx32"\n", features.types);
  457|  1.47k|    ds_put_format(string, "    Capabilities:  0x%"PRIx32"\n",
  458|  1.47k|                  features.capabilities);
  459|       |
  460|  7.35k|    for (i = 0; i < OFPGT12_N_TYPES; i++) {
  ------------------
  |  |  151|  7.35k|#define OFPGT12_N_TYPES 4
  ------------------
  |  Branch (460:17): [True: 5.88k, False: 1.47k]
  ------------------
  461|  5.88k|        if (features.types & (1u << i)) {
  ------------------
  |  Branch (461:13): [True: 4.37k, False: 1.50k]
  ------------------
  462|  4.37k|            ds_put_format(string, "    %s group:\n", group_type_to_string(i));
  463|  4.37k|            ds_put_format(string, "       max_groups=%#"PRIx32"\n",
  464|  4.37k|                          features.max_groups[i]);
  465|  4.37k|            ds_put_format(string, "       actions: ");
  466|  4.37k|            ofpact_bitmap_format(features.ofpacts[i], string);
  467|  4.37k|            ds_put_char(string, '\n');
  468|  4.37k|        }
  469|  5.88k|    }
  470|       |
  471|  1.47k|    return 0;
  472|  1.47k|}
ofputil_decode_group_stats_request:
  480|  1.05k|{
  481|  1.05k|    const struct ofp11_group_stats_request *gsr11 = ofpmsg_body(request);
  482|       |    *group_id = ntohl(gsr11->group_id);
  483|  1.05k|    return 0;
  484|  1.05k|}
ofputil_decode_group_stats_reply:
  500|  9.07k|{
  501|  9.07k|    struct ofp11_bucket_counter *obc;
  502|  9.07k|    struct ofp11_group_stats *ogs11;
  503|  9.07k|    enum ofpraw raw;
  504|  9.07k|    enum ofperr error;
  505|  9.07k|    size_t base_len;
  506|  9.07k|    size_t length;
  507|  9.07k|    size_t i;
  508|       |
  509|  9.07k|    gs->bucket_stats = NULL;
  510|  9.07k|    error = (msg->header ? ofpraw_decode(&raw, msg->header)
  ------------------
  |  Branch (510:14): [True: 5.03k, False: 4.03k]
  ------------------
  511|  9.07k|             : ofpraw_pull(&raw, msg));
  512|  9.07k|    if (error) {
  ------------------
  |  Branch (512:9): [True: 0, False: 9.07k]
  ------------------
  513|      0|        return error;
  514|      0|    }
  515|       |
  516|  9.07k|    if (!msg->size) {
  ------------------
  |  Branch (516:9): [True: 294, False: 8.78k]
  ------------------
  517|    294|        return EOF;
  518|    294|    }
  519|       |
  520|  8.78k|    if (raw == OFPRAW_OFPST11_GROUP_REPLY) {
  ------------------
  |  Branch (520:9): [True: 3.83k, False: 4.94k]
  ------------------
  521|  3.83k|        base_len = sizeof *ogs11;
  522|  3.83k|        ogs11 = ofpbuf_try_pull(msg, sizeof *ogs11);
  523|  3.83k|        gs->duration_sec = gs->duration_nsec = UINT32_MAX;
  524|  4.94k|    } else if (raw == OFPRAW_NXST_GROUP_REPLY ||
  ------------------
  |  Branch (524:16): [True: 1.45k, False: 3.49k]
  ------------------
  525|  4.94k|               raw == OFPRAW_OFPST13_GROUP_REPLY) {
  ------------------
  |  Branch (525:16): [True: 3.49k, False: 0]
  ------------------
  526|  4.94k|        struct ofp13_group_stats *ogs13;
  527|       |
  528|  4.94k|        base_len = sizeof *ogs13;
  529|  4.94k|        ogs13 = ofpbuf_try_pull(msg, sizeof *ogs13);
  530|  4.94k|        if (ogs13) {
  ------------------
  |  Branch (530:13): [True: 4.49k, False: 449]
  ------------------
  531|  4.49k|            ogs11 = &ogs13->gs;
  532|  4.49k|            gs->duration_sec = ntohl(ogs13->duration_sec);
  533|  4.49k|            gs->duration_nsec = ntohl(ogs13->duration_nsec);
  534|  4.49k|        } else {
  535|    449|            ogs11 = NULL;
  536|    449|        }
  537|  4.94k|    } else {
  538|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  539|      0|    }
  540|       |
  541|  8.78k|    if (!ogs11) {
  ------------------
  |  Branch (541:9): [True: 521, False: 8.25k]
  ------------------
  542|    521|        VLOG_WARN_RL(&rl, "%s reply has %"PRIu32" leftover bytes at end",
  ------------------
  |  |  224|    521|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    521|    do {                                                                \
  |  |  |  |  288|    521|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    521|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 521]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    521|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 521]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|    521|                     ofpraw_get_name(raw), msg->size);
  544|    521|        return OFPERR_OFPBRC_BAD_LEN;
  545|    521|    }
  546|  8.25k|    length = ntohs(ogs11->length);
  547|  8.25k|    if (length < sizeof base_len) {
  ------------------
  |  Branch (547:9): [True: 419, False: 7.84k]
  ------------------
  548|    419|        VLOG_WARN_RL(&rl, "%s reply claims invalid length %"PRIuSIZE,
  ------------------
  |  |  224|    419|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    419|    do {                                                                \
  |  |  |  |  288|    419|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    419|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 419]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    419|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 419]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  549|    419|                     ofpraw_get_name(raw), length);
  550|    419|        return OFPERR_OFPBRC_BAD_LEN;
  551|    419|    }
  552|       |
  553|  7.84k|    gs->group_id = ntohl(ogs11->group_id);
  554|  7.84k|    gs->ref_count = ntohl(ogs11->ref_count);
  555|  7.84k|    gs->packet_count = ntohll(ogs11->packet_count);
  556|  7.84k|    gs->byte_count = ntohll(ogs11->byte_count);
  557|       |
  558|  7.84k|    gs->n_buckets = (length - base_len) / sizeof *obc;
  559|  7.84k|    obc = ofpbuf_try_pull(msg, gs->n_buckets * sizeof *obc);
  560|  7.84k|    if (!obc) {
  ------------------
  |  Branch (560:9): [True: 2.80k, False: 5.03k]
  ------------------
  561|  2.80k|        VLOG_WARN_RL(&rl, "%s reply has %"PRIu32" leftover bytes at end",
  ------------------
  |  |  224|  2.80k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  2.80k|    do {                                                                \
  |  |  |  |  288|  2.80k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  2.80k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 2.80k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  2.80k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 2.80k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  562|  2.80k|                     ofpraw_get_name(raw), msg->size);
  563|  2.80k|        return OFPERR_OFPBRC_BAD_LEN;
  564|  2.80k|    }
  565|       |
  566|  5.03k|    gs->bucket_stats = xmalloc(gs->n_buckets * sizeof *gs->bucket_stats);
  567|  54.6k|    for (i = 0; i < gs->n_buckets; i++) {
  ------------------
  |  Branch (567:17): [True: 49.5k, False: 5.03k]
  ------------------
  568|  49.5k|        gs->bucket_stats[i].packet_count = ntohll(obc[i].packet_count);
  569|  49.5k|        gs->bucket_stats[i].byte_count = ntohll(obc[i].byte_count);
  570|  49.5k|    }
  571|       |
  572|  5.03k|    return 0;
  573|  7.84k|}
ofputil_group_stats_request_format:
  579|  1.05k|{
  580|  1.05k|    enum ofperr error;
  581|  1.05k|    uint32_t group_id;
  582|       |
  583|  1.05k|    error = ofputil_decode_group_stats_request(oh, &group_id);
  584|  1.05k|    if (error) {
  ------------------
  |  Branch (584:9): [True: 0, False: 1.05k]
  ------------------
  585|      0|        return error;
  586|      0|    }
  587|       |
  588|  1.05k|    ds_put_cstr(string, " group_id=");
  589|  1.05k|    ofputil_format_group(group_id, string);
  590|  1.05k|    return 0;
  591|  1.05k|}
ofputil_group_stats_format:
  595|  4.03k|{
  596|  4.03k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  597|  9.07k|    for (;;) {
  598|  9.07k|        struct ofputil_group_stats gs;
  599|  9.07k|        int retval;
  600|       |
  601|  9.07k|        retval = ofputil_decode_group_stats_reply(&b, &gs);
  602|  9.07k|        if (retval) {
  ------------------
  |  Branch (602:13): [True: 4.03k, False: 5.03k]
  ------------------
  603|  4.03k|            if (retval != EOF) {
  ------------------
  |  Branch (603:17): [True: 3.74k, False: 294]
  ------------------
  604|  3.74k|                ds_put_cstr(s, " ***parse error***");
  605|  3.74k|                return retval;
  606|  3.74k|            }
  607|    294|            break;
  608|  4.03k|        }
  609|       |
  610|  5.03k|        ds_put_char(s, '\n');
  611|       |
  612|  5.03k|        ds_put_char(s, ' ');
  613|  5.03k|        ds_put_format(s, "group_id=%"PRIu32",", gs.group_id);
  614|       |
  615|  5.03k|        if (gs.duration_sec != UINT32_MAX) {
  ------------------
  |  Branch (615:13): [True: 2.84k, False: 2.19k]
  ------------------
  616|  2.84k|            ds_put_cstr(s, "duration=");
  617|  2.84k|            ofp_print_duration(s, gs.duration_sec, gs.duration_nsec);
  618|  2.84k|            ds_put_char(s, ',');
  619|  2.84k|        }
  620|  5.03k|        ds_put_format(s, "ref_count=%"PRIu32",", gs.ref_count);
  621|  5.03k|        ds_put_format(s, "packet_count=%"PRIu64",", gs.packet_count);
  622|  5.03k|        ds_put_format(s, "byte_count=%"PRIu64"", gs.byte_count);
  623|       |
  624|  54.6k|        for (uint32_t bucket_i = 0; bucket_i < gs.n_buckets; bucket_i++) {
  ------------------
  |  Branch (624:37): [True: 49.5k, False: 5.03k]
  ------------------
  625|  49.5k|            if (gs.bucket_stats[bucket_i].packet_count != UINT64_MAX) {
  ------------------
  |  Branch (625:17): [True: 47.7k, False: 1.81k]
  ------------------
  626|  47.7k|                ds_put_format(s, ",bucket%"PRIu32":", bucket_i);
  627|  47.7k|                ds_put_format(s, "packet_count=%"PRIu64",", gs.bucket_stats[bucket_i].packet_count);
  628|  47.7k|                ds_put_format(s, "byte_count=%"PRIu64"", gs.bucket_stats[bucket_i].byte_count);
  629|  47.7k|            }
  630|  49.5k|        }
  631|       |
  632|  5.03k|        free(gs.bucket_stats);
  633|  5.03k|    }
  634|    294|    return 0;
  635|  4.03k|}
ofputil_group_properties_destroy:
 1525|  27.9k|{
 1526|  27.9k|    free(gp->fields.values);
 1527|  27.9k|}
ofputil_group_properties_format:
 1532|  15.0k|{
 1533|  15.0k|    if (!gp->selection_method[0]) {
  ------------------
  |  Branch (1533:9): [True: 10.3k, False: 4.66k]
  ------------------
 1534|  10.3k|        return;
 1535|  10.3k|    }
 1536|       |
 1537|  4.66k|    ds_put_format(ds, ",selection_method=%s", gp->selection_method);
 1538|  4.66k|    if (gp->selection_method_param) {
  ------------------
  |  Branch (1538:9): [True: 4.52k, False: 139]
  ------------------
 1539|  4.52k|        ds_put_format(ds, ",selection_method_param=%"PRIu64,
 1540|  4.52k|                      gp->selection_method_param);
 1541|  4.52k|    }
 1542|       |
 1543|  4.66k|    size_t n = bitmap_count1(gp->fields.used.bm, MFF_N_IDS);
 1544|  4.66k|    if (n == 1) {
  ------------------
  |  Branch (1544:9): [True: 546, False: 4.12k]
  ------------------
 1545|    546|        ds_put_cstr(ds, ",fields=");
 1546|    546|        oxm_format_field_array(ds, &gp->fields);
 1547|  4.12k|    } else if (n > 1) {
  ------------------
  |  Branch (1547:16): [True: 3.32k, False: 795]
  ------------------
 1548|  3.32k|        ds_put_cstr(ds, ",fields(");
 1549|  3.32k|        oxm_format_field_array(ds, &gp->fields);
 1550|  3.32k|        ds_put_char(ds, ')');
 1551|  3.32k|    }
 1552|  4.66k|}
ofputil_decode_group_desc_reply:
 1793|  13.0k|{
 1794|  13.0k|    ofputil_init_group_properties(&gd->props);
 1795|       |
 1796|  13.0k|    switch (version)
 1797|  13.0k|    {
 1798|    564|    case OFP11_VERSION:
  ------------------
  |  Branch (1798:5): [True: 564, False: 12.4k]
  ------------------
 1799|  3.54k|    case OFP12_VERSION:
  ------------------
  |  Branch (1799:5): [True: 2.98k, False: 10.0k]
  ------------------
 1800|  3.63k|    case OFP13_VERSION:
  ------------------
  |  Branch (1800:5): [True: 88, False: 12.9k]
  ------------------
 1801|  3.81k|    case OFP14_VERSION:
  ------------------
  |  Branch (1801:5): [True: 183, False: 12.8k]
  ------------------
 1802|  3.81k|        return ofputil_decode_ofp11_group_desc_reply(gd, msg, version);
 1803|       |
 1804|  8.66k|    case OFP10_VERSION:
  ------------------
  |  Branch (1804:5): [True: 8.66k, False: 4.36k]
  ------------------
 1805|  9.21k|    case OFP15_VERSION:
  ------------------
  |  Branch (1805:5): [True: 547, False: 12.4k]
  ------------------
 1806|  9.21k|        return ofputil_decode_ofp15_group_desc_reply(gd, msg, version);
 1807|       |
 1808|      0|    default:
  ------------------
  |  Branch (1808:5): [True: 0, False: 13.0k]
  ------------------
 1809|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1810|  13.0k|    }
 1811|  13.0k|}
ofputil_bucket_format:
 1846|  6.83k|{
 1847|  6.83k|    ds_put_cstr(s, "bucket=");
 1848|       |
 1849|  6.83k|    ofp_print_bucket_id(s, "bucket_id:", bucket->bucket_id, ofp_version);
 1850|  6.83k|    if (bucket->weight != (type == OFPGT11_SELECT ? 1 : 0)) {
  ------------------
  |  Branch (1850:9): [True: 2.79k, False: 4.03k]
  |  Branch (1850:28): [True: 2.69k, False: 4.13k]
  ------------------
 1851|  2.79k|        ds_put_format(s, "weight:%"PRIu16",", bucket->weight);
 1852|  2.79k|    }
 1853|  6.83k|    if (bucket->watch_port != OFPP_NONE) {
  ------------------
  |  |   47|  6.83k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|  6.83k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1853:9): [True: 1.57k, False: 5.26k]
  ------------------
 1854|  1.57k|        ds_put_cstr(s, "watch_port:");
 1855|  1.57k|        ofputil_format_port(bucket->watch_port, port_map, s);
 1856|  1.57k|        ds_put_char(s, ',');
 1857|  1.57k|    }
 1858|  6.83k|    if (bucket->watch_group != OFPG_ANY) {
  ------------------
  |  Branch (1858:9): [True: 2.92k, False: 3.91k]
  ------------------
 1859|  2.92k|        ds_put_format(s, "watch_group:%"PRIu32",", bucket->watch_group);
 1860|  2.92k|    }
 1861|       |
 1862|  6.83k|    ds_put_cstr(s, "actions=");
 1863|  6.83k|    struct ofpact_format_params fp = {
 1864|  6.83k|        .port_map = port_map,
 1865|  6.83k|        .table_map = table_map,
 1866|  6.83k|        .s = s,
 1867|  6.83k|    };
 1868|  6.83k|    ofpacts_format(bucket->ofpacts, bucket->ofpacts_len, &fp);
 1869|  6.83k|}
ofputil_group_format:
 1879|  15.0k|{
 1880|  15.0k|    ds_put_format(s, "group_id=%"PRIu32, group_id);
 1881|       |
 1882|  15.0k|    if (!suppress_type) {
  ------------------
  |  Branch (1882:9): [True: 11.3k, False: 3.71k]
  ------------------
 1883|  11.3k|        static const char *type_str[] = { "all", "select", "indirect",
 1884|  11.3k|                                          "ff", "unknown" };
 1885|  11.3k|        ds_put_format(s, ",type=%s", type_str[type > 4 ? 4 : type]);
  ------------------
  |  Branch (1885:47): [True: 633, False: 10.7k]
  ------------------
 1886|  11.3k|    }
 1887|       |
 1888|  15.0k|    ofputil_group_properties_format(props, s);
 1889|       |
 1890|  15.0k|    if (!bucket && !p_buckets) {
  ------------------
  |  Branch (1890:9): [True: 15.0k, False: 0]
  |  Branch (1890:20): [True: 0, False: 15.0k]
  ------------------
 1891|      0|        return;
 1892|      0|    }
 1893|       |
 1894|  15.0k|    ds_put_char(s, ',');
 1895|       |
 1896|  15.0k|    if (bucket) {
  ------------------
  |  Branch (1896:9): [True: 0, False: 15.0k]
  ------------------
 1897|      0|        ofputil_bucket_format(s, bucket, type, ofp_version, NULL, NULL);
 1898|  15.0k|    } else {
 1899|  15.0k|        LIST_FOR_EACH (bucket, list_node, p_buckets) {
  ------------------
  |  |   76|  15.0k|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->next, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  171|  15.0k|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|  15.0k|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|  21.8k|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  185|  21.8k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 6.83k, False: 15.0k]
  |  |  |  |  |  Branch (185:6): [True: 6.83k, False: 15.0k]
  |  |  |  |  ------------------
  |  |  |  |  186|  21.8k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  6.83k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|  6.83k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|  6.83k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  21.8k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   78|  15.0k|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->next))
  |  |  ------------------
  |  |  |  |  193|  6.83k|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  6.83k|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1900|  6.83k|            ofputil_bucket_format(s, bucket, type, ofp_version,
 1901|  6.83k|                                port_map, table_map);
 1902|  6.83k|            ds_put_char(s, ',');
 1903|  6.83k|        }
 1904|  15.0k|        ds_chomp(s, ',');
 1905|  15.0k|    }
 1906|  15.0k|}
ofputil_group_desc_format:
 1912|  11.0k|{
 1913|  11.0k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
 1914|  13.0k|    for (;;) {
 1915|  13.0k|        struct ofputil_group_desc gd;
 1916|  13.0k|        int retval;
 1917|       |
 1918|  13.0k|        retval = ofputil_decode_group_desc_reply(&gd, &b, oh->version);
 1919|  13.0k|        if (retval) {
  ------------------
  |  Branch (1919:13): [True: 11.0k, False: 1.93k]
  ------------------
 1920|  11.0k|            return retval != EOF ? retval : 0;
  ------------------
  |  Branch (1920:20): [True: 10.2k, False: 834]
  ------------------
 1921|  11.0k|        }
 1922|       |
 1923|  1.93k|        ds_put_char(s, '\n');
 1924|  1.93k|        ds_put_char(s, ' ');
 1925|  1.93k|        ofputil_group_format(s, gd.group_id, gd.type, NULL, &gd.buckets,
 1926|       |                             &gd.props, oh->version, false,
 1927|  1.93k|                             port_map, table_map);
 1928|  1.93k|        ofputil_uninit_group_desc(&gd);
 1929|  1.93k|     }
 1930|  11.0k|}
ofputil_uninit_group_mod:
 1934|  25.1k|{
 1935|  25.1k|    ofputil_bucket_list_destroy(&gm->buckets);
 1936|  25.1k|    ofputil_group_properties_destroy(&gm->props);
 1937|  25.1k|}
ofputil_decode_group_mod:
 2310|  47.7k|{
 2311|  47.7k|    ofputil_init_group_properties(&gm->props);
 2312|       |
 2313|  47.7k|    enum ofp_version ofp_version = oh->version;
 2314|  47.7k|    struct ofpbuf msg = ofpbuf_const_initializer(oh, ntohs(oh->length));
 2315|  47.7k|    ofpraw_pull_assert(&msg);
 2316|       |
 2317|  47.7k|    enum ofperr err;
 2318|  47.7k|    switch (ofp_version) {
 2319|  4.01k|    case OFP11_VERSION:
  ------------------
  |  Branch (2319:5): [True: 4.01k, False: 43.7k]
  ------------------
 2320|  9.26k|    case OFP12_VERSION:
  ------------------
  |  Branch (2320:5): [True: 5.24k, False: 42.4k]
  ------------------
 2321|  10.1k|    case OFP13_VERSION:
  ------------------
  |  Branch (2321:5): [True: 917, False: 46.8k]
  ------------------
 2322|  18.9k|    case OFP14_VERSION:
  ------------------
  |  Branch (2322:5): [True: 8.78k, False: 38.9k]
  ------------------
 2323|  18.9k|        err = ofputil_pull_ofp11_group_mod(&msg, ofp_version, gm);
 2324|  18.9k|        break;
 2325|       |
 2326|     66|    case OFP10_VERSION:
  ------------------
  |  Branch (2326:5): [True: 66, False: 47.6k]
  ------------------
 2327|  28.7k|    case OFP15_VERSION:
  ------------------
  |  Branch (2327:5): [True: 28.6k, False: 19.0k]
  ------------------
 2328|  28.7k|        err = ofputil_pull_ofp15_group_mod(&msg, ofp_version, gm);
 2329|  28.7k|        break;
 2330|       |
 2331|      0|    default:
  ------------------
  |  Branch (2331:5): [True: 0, False: 47.7k]
  ------------------
 2332|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 2333|  47.7k|    }
 2334|  47.7k|    if (err) {
  ------------------
  |  Branch (2334:9): [True: 27.4k, False: 20.3k]
  ------------------
 2335|  27.4k|        return err;
 2336|  27.4k|    }
 2337|       |
 2338|  20.3k|    err = ofputil_check_group_mod(gm);
 2339|  20.3k|    if (err) {
  ------------------
  |  Branch (2339:9): [True: 7.19k, False: 13.1k]
  ------------------
 2340|  7.19k|        ofputil_uninit_group_mod(gm);
 2341|  7.19k|    }
 2342|  20.3k|    return err;
 2343|  47.7k|}
ofputil_group_mod_format__:
 2350|  13.1k|{
 2351|  13.1k|    bool bucket_command = false;
 2352|       |
 2353|  13.1k|    ds_put_char(s, '\n');
 2354|       |
 2355|  13.1k|    ds_put_char(s, ' ');
 2356|  13.1k|    switch (gm->command) {
 2357|  6.30k|    case OFPGC11_ADD:
  ------------------
  |  Branch (2357:5): [True: 6.30k, False: 6.81k]
  ------------------
 2358|  6.30k|        ds_put_cstr(s, "ADD");
 2359|  6.30k|        break;
 2360|       |
 2361|  1.77k|    case OFPGC11_MODIFY:
  ------------------
  |  Branch (2361:5): [True: 1.77k, False: 11.3k]
  ------------------
 2362|  1.77k|        ds_put_cstr(s, "MOD");
 2363|  1.77k|        break;
 2364|       |
 2365|    402|    case OFPGC11_ADD_OR_MOD:
  ------------------
  |  Branch (2365:5): [True: 402, False: 12.7k]
  ------------------
 2366|    402|        ds_put_cstr(s, "ADD_OR_MOD");
 2367|    402|        break;
 2368|       |
 2369|    918|    case OFPGC11_DELETE:
  ------------------
  |  Branch (2369:5): [True: 918, False: 12.1k]
  ------------------
 2370|    918|        ds_put_cstr(s, "DEL");
 2371|    918|        break;
 2372|       |
 2373|  2.81k|    case OFPGC15_INSERT_BUCKET:
  ------------------
  |  Branch (2373:5): [True: 2.81k, False: 10.2k]
  ------------------
 2374|  2.81k|        ds_put_cstr(s, "INSERT_BUCKET");
 2375|  2.81k|        bucket_command = true;
 2376|  2.81k|        break;
 2377|       |
 2378|    895|    case OFPGC15_REMOVE_BUCKET:
  ------------------
  |  Branch (2378:5): [True: 895, False: 12.2k]
  ------------------
 2379|    895|        ds_put_cstr(s, "REMOVE_BUCKET");
 2380|    895|        bucket_command = true;
 2381|    895|        break;
 2382|       |
 2383|      0|    default:
  ------------------
  |  Branch (2383:5): [True: 0, False: 13.1k]
  ------------------
 2384|      0|        ds_put_format(s, "cmd:%"PRIu16"", gm->command);
 2385|  13.1k|    }
 2386|  13.1k|    ds_put_char(s, ' ');
 2387|       |
 2388|  13.1k|    if (bucket_command) {
  ------------------
  |  Branch (2388:9): [True: 3.71k, False: 9.40k]
  ------------------
 2389|  3.71k|        ofp_print_bucket_id(s, "command_bucket_id:",
 2390|  3.71k|                            gm->command_bucket_id, ofp_version);
 2391|  3.71k|    }
 2392|       |
 2393|       |    ofputil_group_format(s, gm->group_id, gm->type, NULL, &gm->buckets,
 2394|  13.1k|                         &gm->props, ofp_version, bucket_command,
 2395|  13.1k|                         port_map, table_map);
 2396|  13.1k|}
ofputil_group_mod_format:
 2402|  45.8k|{
 2403|  45.8k|    struct ofputil_group_mod gm;
 2404|  45.8k|    int error;
 2405|       |
 2406|  45.8k|    error = ofputil_decode_group_mod(oh, &gm);
 2407|  45.8k|    if (error) {
  ------------------
  |  Branch (2407:9): [True: 33.8k, False: 11.9k]
  ------------------
 2408|  33.8k|        return error;
 2409|  33.8k|    }
 2410|  11.9k|    ofputil_group_mod_format__(s, oh->version, &gm, port_map, table_map);
 2411|  11.9k|    ofputil_uninit_group_mod(&gm);
 2412|  11.9k|    return 0;
 2413|  45.8k|}
ofp-group.c:group_type_to_string:
  437|  4.37k|{
  438|  4.37k|    switch (type) {
  439|  1.38k|    case OFPGT11_ALL: return "all";
  ------------------
  |  Branch (439:5): [True: 1.38k, False: 2.99k]
  ------------------
  440|  1.33k|    case OFPGT11_SELECT: return "select";
  ------------------
  |  Branch (440:5): [True: 1.33k, False: 3.03k]
  ------------------
  441|  1.34k|    case OFPGT11_INDIRECT: return "indirect";
  ------------------
  |  Branch (441:5): [True: 1.34k, False: 3.03k]
  ------------------
  442|    310|    case OFPGT11_FF: return "fast failover";
  ------------------
  |  Branch (442:5): [True: 310, False: 4.06k]
  ------------------
  443|      0|    default: OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  |  Branch (443:5): [True: 0, False: 4.37k]
  ------------------
  444|  4.37k|    }
  445|  4.37k|}
ofp-group.c:ofputil_init_group_properties:
 1511|  60.7k|{
 1512|  60.7k|    memset(gp, 0, sizeof *gp);
 1513|  60.7k|}
ofp-group.c:ofputil_decode_ofp11_group_desc_reply:
 1686|  3.81k|{
 1687|  3.81k|    struct ofp11_group_desc_stats *ogds;
 1688|  3.81k|    size_t length;
 1689|       |
 1690|  3.81k|    if (!msg->header) {
  ------------------
  |  Branch (1690:9): [True: 2.00k, False: 1.80k]
  ------------------
 1691|  2.00k|        ofpraw_pull_assert(msg);
 1692|  2.00k|    }
 1693|       |
 1694|  3.81k|    if (!msg->size) {
  ------------------
  |  Branch (1694:9): [True: 490, False: 3.32k]
  ------------------
 1695|    490|        return EOF;
 1696|    490|    }
 1697|       |
 1698|  3.32k|    ogds = ofpbuf_try_pull(msg, sizeof *ogds);
 1699|  3.32k|    if (!ogds) {
  ------------------
  |  Branch (1699:9): [True: 0, False: 3.32k]
  ------------------
 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|  3.32k|    gd->type = ogds->type;
 1705|  3.32k|    gd->group_id = ntohl(ogds->group_id);
 1706|       |
 1707|  3.32k|    length = ntohs(ogds->length);
 1708|  3.32k|    if (length < sizeof *ogds || length - sizeof *ogds > msg->size) {
  ------------------
  |  Branch (1708:9): [True: 570, False: 2.75k]
  |  Branch (1708:34): [True: 940, False: 1.81k]
  ------------------
 1709|  1.51k|        VLOG_WARN_RL(&rl, "OFPST11_GROUP_DESC reply claims invalid "
  ------------------
  |  |  224|  1.51k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.51k|    do {                                                                \
  |  |  |  |  288|  1.51k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.51k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.51k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.51k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.51k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1710|  1.51k|                     "length %"PRIuSIZE, length);
 1711|  1.51k|        return OFPERR_OFPBRC_BAD_LEN;
 1712|  1.51k|    }
 1713|       |
 1714|  1.81k|    return ofputil_pull_ofp11_buckets(msg, length - sizeof *ogds, version,
 1715|  1.81k|                                      &gd->buckets);
 1716|  3.32k|}
ofp-group.c:ofputil_pull_ofp11_buckets:
 1319|  20.7k|{
 1320|  20.7k|    struct ofp11_bucket *ob;
 1321|  20.7k|    uint32_t bucket_id = 0;
 1322|       |
 1323|  20.7k|    ovs_list_init(buckets);
 1324|  27.6k|    while (buckets_length > 0) {
  ------------------
  |  Branch (1324:12): [True: 14.7k, False: 12.9k]
  ------------------
 1325|  14.7k|        struct ofputil_bucket *bucket;
 1326|  14.7k|        struct ofpbuf ofpacts;
 1327|  14.7k|        enum ofperr error;
 1328|  14.7k|        size_t ob_len;
 1329|       |
 1330|  14.7k|        ob = (buckets_length >= sizeof *ob
  ------------------
  |  Branch (1330:15): [True: 14.6k, False: 132]
  ------------------
 1331|  14.7k|              ? ofpbuf_try_pull(msg, sizeof *ob)
 1332|  14.7k|              : NULL);
 1333|  14.7k|        if (!ob) {
  ------------------
  |  Branch (1333:13): [True: 132, False: 14.6k]
  ------------------
 1334|    132|            VLOG_WARN_RL(&rl, "buckets end with %"PRIuSIZE" leftover bytes",
  ------------------
  |  |  224|    132|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    132|    do {                                                                \
  |  |  |  |  288|    132|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    132|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 132]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    132|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 132]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1335|    132|                         buckets_length);
 1336|    132|            ofputil_bucket_list_destroy(buckets);
 1337|    132|            return OFPERR_OFPGMFC_BAD_BUCKET;
 1338|    132|        }
 1339|       |
 1340|  14.6k|        ob_len = ntohs(ob->len);
 1341|  14.6k|        if (ob_len < sizeof *ob) {
  ------------------
  |  Branch (1341:13): [True: 2.64k, False: 11.9k]
  ------------------
 1342|  2.64k|            VLOG_WARN_RL(&rl, "OpenFlow message bucket length "
  ------------------
  |  |  224|  2.64k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  2.64k|    do {                                                                \
  |  |  |  |  288|  2.64k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  2.64k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 2.64k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  2.64k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 2.64k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1343|  2.64k|                         "%"PRIuSIZE" is not valid", ob_len);
 1344|  2.64k|            ofputil_bucket_list_destroy(buckets);
 1345|  2.64k|            return OFPERR_OFPGMFC_BAD_BUCKET;
 1346|  11.9k|        } else if (ob_len > buckets_length) {
  ------------------
  |  Branch (1346:20): [True: 1.61k, False: 10.3k]
  ------------------
 1347|  1.61k|            VLOG_WARN_RL(&rl, "OpenFlow message bucket length %"PRIuSIZE" "
  ------------------
  |  |  224|  1.61k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.61k|    do {                                                                \
  |  |  |  |  288|  1.61k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.61k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.61k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.61k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.61k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1348|  1.61k|                         "exceeds remaining buckets data size %"PRIuSIZE,
 1349|  1.61k|                         ob_len, buckets_length);
 1350|  1.61k|            ofputil_bucket_list_destroy(buckets);
 1351|  1.61k|            return OFPERR_OFPGMFC_BAD_BUCKET;
 1352|  1.61k|        }
 1353|  10.3k|        buckets_length -= ob_len;
 1354|       |
 1355|  10.3k|        ofpbuf_init(&ofpacts, 0);
 1356|  10.3k|        error = ofpacts_pull_openflow_actions(msg, ob_len - sizeof *ob,
 1357|  10.3k|                                              version, NULL, NULL, &ofpacts);
 1358|  10.3k|        if (error) {
  ------------------
  |  Branch (1358:13): [True: 2.91k, False: 7.45k]
  ------------------
 1359|  2.91k|            ofpbuf_uninit(&ofpacts);
 1360|  2.91k|            ofputil_bucket_list_destroy(buckets);
 1361|  2.91k|            return error;
 1362|  2.91k|        }
 1363|       |
 1364|  7.45k|        bucket = xzalloc(sizeof *bucket);
 1365|  7.45k|        bucket->weight = ntohs(ob->weight);
 1366|  7.45k|        error = ofputil_port_from_ofp11(ob->watch_port, &bucket->watch_port);
 1367|  7.45k|        if (error) {
  ------------------
  |  Branch (1367:13): [True: 543, False: 6.90k]
  ------------------
 1368|    543|            ofpbuf_uninit(&ofpacts);
 1369|    543|            ofputil_bucket_list_destroy(buckets);
 1370|    543|            free(bucket);
 1371|    543|            return OFPERR_OFPGMFC_BAD_WATCH;
 1372|    543|        }
 1373|  6.90k|        bucket->watch_group = ntohl(ob->watch_group);
 1374|  6.90k|        bucket->bucket_id = bucket_id++;
 1375|       |
 1376|  6.90k|        bucket->ofpacts = ofpbuf_steal_data(&ofpacts);
 1377|  6.90k|        bucket->ofpacts_len = ofpacts.size;
 1378|  6.90k|        ovs_list_push_back(buckets, &bucket->list_node);
 1379|  6.90k|    }
 1380|       |
 1381|  12.9k|    return 0;
 1382|  20.7k|}
ofp-group.c:ofputil_decode_ofp15_group_desc_reply:
 1722|  9.21k|{
 1723|  9.21k|    struct ofp15_group_desc_stats *ogds;
 1724|  9.21k|    uint16_t length, bucket_list_len;
 1725|  9.21k|    int error;
 1726|       |
 1727|  9.21k|    if (!msg->header) {
  ------------------
  |  Branch (1727:9): [True: 9.08k, False: 123]
  ------------------
 1728|  9.08k|        ofpraw_pull_assert(msg);
 1729|  9.08k|    }
 1730|       |
 1731|  9.21k|    if (!msg->size) {
  ------------------
  |  Branch (1731:9): [True: 344, False: 8.86k]
  ------------------
 1732|    344|        return EOF;
 1733|    344|    }
 1734|       |
 1735|  8.86k|    ogds = ofpbuf_try_pull(msg, sizeof *ogds);
 1736|  8.86k|    if (!ogds) {
  ------------------
  |  Branch (1736:9): [True: 81, False: 8.78k]
  ------------------
 1737|     81|        VLOG_WARN_RL(&rl, "OFPST11_GROUP_DESC reply has %"PRIu32" "
  ------------------
  |  |  224|     81|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     81|    do {                                                                \
  |  |  |  |  288|     81|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  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]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1738|     81|                     "leftover bytes at end", msg->size);
 1739|     81|        return OFPERR_OFPBRC_BAD_LEN;
 1740|     81|    }
 1741|  8.78k|    gd->type = ogds->type;
 1742|  8.78k|    gd->group_id = ntohl(ogds->group_id);
 1743|       |
 1744|  8.78k|    length = ntohs(ogds->length);
 1745|  8.78k|    if (length < sizeof *ogds || length - sizeof *ogds > msg->size) {
  ------------------
  |  Branch (1745:9): [True: 1.66k, False: 7.12k]
  |  Branch (1745:34): [True: 2.00k, False: 5.11k]
  ------------------
 1746|  3.67k|        VLOG_WARN_RL(&rl, "OFPST11_GROUP_DESC reply claims invalid "
  ------------------
  |  |  224|  3.67k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  3.67k|    do {                                                                \
  |  |  |  |  288|  3.67k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  3.67k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 3.67k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  3.67k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 3.67k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1747|  3.67k|                     "length %u", length);
 1748|  3.67k|        return OFPERR_OFPBRC_BAD_LEN;
 1749|  3.67k|    }
 1750|       |
 1751|  5.11k|    bucket_list_len = ntohs(ogds->bucket_list_len);
 1752|  5.11k|    if (length < bucket_list_len + sizeof *ogds) {
  ------------------
  |  Branch (1752:9): [True: 201, False: 4.91k]
  ------------------
 1753|    201|        VLOG_WARN_RL(&rl, "OFPST11_GROUP_DESC reply claims invalid "
  ------------------
  |  |  224|    201|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    201|    do {                                                                \
  |  |  |  |  288|    201|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    201|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 201]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    201|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 201]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1754|    201|                     "bucket list length %u", bucket_list_len);
 1755|    201|        return OFPERR_OFPBRC_BAD_LEN;
 1756|    201|    }
 1757|  4.91k|    error = ofputil_pull_ofp15_buckets(msg, bucket_list_len, version, gd->type,
 1758|  4.91k|                                       &gd->buckets);
 1759|  4.91k|    if (error) {
  ------------------
  |  Branch (1759:9): [True: 3.90k, False: 1.00k]
  ------------------
 1760|  3.90k|        return error;
 1761|  3.90k|    }
 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|  1.00k|    error = parse_ofp15_group_properties(
 1772|  1.00k|        msg, gd->type, OFPGC15_ADD, &gd->props,
 1773|  1.00k|        length - sizeof *ogds - bucket_list_len);
 1774|  1.00k|    if (error) {
  ------------------
  |  Branch (1774:9): [True: 883, False: 123]
  ------------------
 1775|    883|        ofputil_uninit_group_desc(gd);
 1776|    883|    }
 1777|  1.00k|    return error;
 1778|  4.91k|}
ofp-group.c:ofputil_pull_ofp15_buckets:
 1388|  30.3k|{
 1389|  30.3k|    ovs_list_init(buckets);
 1390|  40.0k|    while (buckets_length > 0) {
  ------------------
  |  Branch (1390:12): [True: 24.6k, False: 15.3k]
  ------------------
 1391|  24.6k|        struct ofputil_bucket *bucket = NULL;
 1392|  24.6k|        struct ofpbuf ofpacts;
 1393|  24.6k|        enum ofperr err = OFPERR_OFPGMFC_BAD_BUCKET;
 1394|  24.6k|        size_t ob_len, actions_len, properties_len;
 1395|  24.6k|        ovs_be32 watch_port = ofputil_port_to_ofp11(OFPP_ANY);
  ------------------
  |  |   80|  24.6k|#define OFPP_ANY OFPP_NONE
  |  |  ------------------
  |  |  |  |   47|  24.6k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|  24.6k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1396|  24.6k|        ovs_be32 watch_group = htonl(OFPG_ANY);
 1397|  24.6k|        ovs_be16 weight = htons(group_type == OFPGT11_SELECT ? 1 : 0);
  ------------------
  |  Branch (1397:27): [True: 1.98k, False: 22.6k]
  ------------------
 1398|       |
 1399|  24.6k|        ofpbuf_init(&ofpacts, 0);
 1400|       |
 1401|  24.6k|        struct ofp15_bucket *ob = ofpbuf_try_pull(msg, sizeof *ob);
 1402|  24.6k|        if (!ob) {
  ------------------
  |  Branch (1402:13): [True: 0, False: 24.6k]
  ------------------
 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|  24.6k|        ob_len = ntohs(ob->len);
 1409|  24.6k|        actions_len = ntohs(ob->action_array_len);
 1410|       |
 1411|  24.6k|        if (ob_len < sizeof *ob) {
  ------------------
  |  Branch (1411:13): [True: 620, False: 24.0k]
  ------------------
 1412|    620|            VLOG_WARN_RL(&rl, "OpenFlow message bucket length "
  ------------------
  |  |  224|    620|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    620|    do {                                                                \
  |  |  |  |  288|    620|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    620|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 620]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    620|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 620]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1413|    620|                         "%"PRIuSIZE" is not valid", ob_len);
 1414|    620|            goto err;
 1415|  24.0k|        } else if (ob_len > buckets_length) {
  ------------------
  |  Branch (1415:20): [True: 1.85k, False: 22.1k]
  ------------------
 1416|  1.85k|            VLOG_WARN_RL(&rl, "OpenFlow message bucket length "
  ------------------
  |  |  224|  1.85k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.85k|    do {                                                                \
  |  |  |  |  288|  1.85k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.85k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.85k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.85k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.85k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1417|  1.85k|                         "%"PRIuSIZE" exceeds remaining buckets data size %"
 1418|  1.85k|                         PRIuSIZE, ob_len, buckets_length);
 1419|  1.85k|            goto err;
 1420|  22.1k|        } else if (actions_len > ob_len - sizeof *ob) {
  ------------------
  |  Branch (1420:20): [True: 4.09k, False: 18.0k]
  ------------------
 1421|  4.09k|            VLOG_WARN_RL(&rl, "OpenFlow message bucket actions "
  ------------------
  |  |  224|  4.09k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  4.09k|    do {                                                                \
  |  |  |  |  288|  4.09k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  4.09k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 4.09k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  4.09k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 4.09k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1422|  4.09k|                         "length %"PRIuSIZE" exceeds remaining bucket "
 1423|  4.09k|                         "data size %"PRIuSIZE, actions_len,
 1424|  4.09k|                         ob_len - sizeof *ob);
 1425|  4.09k|            goto err;
 1426|  4.09k|        }
 1427|  18.0k|        buckets_length -= ob_len;
 1428|       |
 1429|  18.0k|        err = ofpacts_pull_openflow_actions(msg, actions_len, version,
 1430|  18.0k|                                            NULL, NULL, &ofpacts);
 1431|  18.0k|        if (err) {
  ------------------
  |  Branch (1431:13): [True: 5.32k, False: 12.7k]
  ------------------
 1432|  5.32k|            goto err;
 1433|  5.32k|        }
 1434|       |
 1435|  12.7k|        properties_len = ob_len - sizeof *ob - actions_len;
 1436|  12.7k|        struct ofpbuf properties = ofpbuf_const_initializer(
 1437|  12.7k|            ofpbuf_pull(msg, properties_len), properties_len);
 1438|  15.8k|        while (properties.size > 0) {
  ------------------
  |  Branch (1438:16): [True: 5.44k, False: 10.3k]
  ------------------
 1439|  5.44k|            struct ofpbuf payload;
 1440|  5.44k|            uint64_t type;
 1441|       |
 1442|  5.44k|            err = ofpprop_pull(&properties, &payload, &type);
 1443|  5.44k|            if (err) {
  ------------------
  |  Branch (1443:17): [True: 1.10k, False: 4.34k]
  ------------------
 1444|  1.10k|                goto err;
 1445|  1.10k|            }
 1446|       |
 1447|  4.34k|            switch (type) {
 1448|  2.08k|            case OFPGBPT15_WEIGHT:
  ------------------
  |  Branch (1448:13): [True: 2.08k, False: 2.25k]
  ------------------
 1449|  2.08k|                err = ofpprop_parse_be16(&payload, &weight);
 1450|  2.08k|                break;
 1451|       |
 1452|  1.33k|            case OFPGBPT15_WATCH_PORT:
  ------------------
  |  Branch (1452:13): [True: 1.33k, False: 3.01k]
  ------------------
 1453|  1.33k|                err = ofpprop_parse_be32(&payload, &watch_port);
 1454|  1.33k|                break;
 1455|       |
 1456|    279|            case OFPGBPT15_WATCH_GROUP:
  ------------------
  |  Branch (1456:13): [True: 279, False: 4.06k]
  ------------------
 1457|    279|                err = ofpprop_parse_be32(&payload, &watch_group);
 1458|    279|                break;
 1459|       |
 1460|    649|            default:
  ------------------
  |  Branch (1460:13): [True: 649, False: 3.69k]
  ------------------
 1461|    649|                err = OFPPROP_UNKNOWN(false, "group bucket", type);
  ------------------
  |  |  144|    649|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
 1462|    649|                break;
 1463|  4.34k|            }
 1464|       |
 1465|  4.34k|            if (err) {
  ------------------
  |  Branch (1465:17): [True: 1.25k, False: 3.09k]
  ------------------
 1466|  1.25k|                goto err;
 1467|  1.25k|            }
 1468|  4.34k|        }
 1469|       |
 1470|  10.3k|        bucket = xzalloc(sizeof *bucket);
 1471|       |
 1472|  10.3k|        bucket->weight = ntohs(weight);
 1473|  10.3k|        err = ofputil_port_from_ofp11(watch_port, &bucket->watch_port);
 1474|  10.3k|        if (err) {
  ------------------
  |  Branch (1474:13): [True: 476, False: 9.90k]
  ------------------
 1475|    476|            err = OFPERR_OFPGMFC_BAD_WATCH;
 1476|    476|            goto err;
 1477|    476|        }
 1478|  9.90k|        bucket->watch_group = ntohl(watch_group);
 1479|  9.90k|        bucket->bucket_id = ntohl(ob->bucket_id);
 1480|  9.90k|        if (bucket->bucket_id > OFPG15_BUCKET_MAX) {
  ------------------
  |  Branch (1480:13): [True: 222, False: 9.67k]
  ------------------
 1481|    222|            VLOG_WARN_RL(&rl, "bucket id (%u) is out of range",
  ------------------
  |  |  224|    222|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    222|    do {                                                                \
  |  |  |  |  288|    222|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    222|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 222]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    222|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 222]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1482|    222|                         bucket->bucket_id);
 1483|    222|            err = OFPERR_OFPGMFC_BAD_BUCKET;
 1484|    222|            goto err;
 1485|    222|        }
 1486|       |
 1487|  9.67k|        bucket->ofpacts = ofpbuf_steal_data(&ofpacts);
 1488|  9.67k|        bucket->ofpacts_len = ofpacts.size;
 1489|  9.67k|        ovs_list_push_back(buckets, &bucket->list_node);
 1490|       |
 1491|  9.67k|        continue;
 1492|       |
 1493|  14.9k|    err:
 1494|  14.9k|        free(bucket);
 1495|  14.9k|        ofpbuf_uninit(&ofpacts);
 1496|  14.9k|        ofputil_bucket_list_destroy(buckets);
 1497|  14.9k|        return err;
 1498|  9.90k|    }
 1499|       |
 1500|  15.3k|    if (ofputil_bucket_check_duplicate_id(buckets)) {
  ------------------
  |  Branch (1500:9): [True: 166, False: 15.2k]
  ------------------
 1501|    166|        VLOG_WARN_RL(&rl, "Duplicate bucket id");
  ------------------
  |  |  224|    166|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    166|    do {                                                                \
  |  |  |  |  288|    166|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    166|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 166]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    166|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 166]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1502|    166|        ofputil_bucket_list_destroy(buckets);
 1503|    166|        return OFPERR_OFPGMFC_BAD_BUCKET;
 1504|    166|    }
 1505|       |
 1506|  15.2k|    return 0;
 1507|  15.3k|}
ofp-group.c:parse_ofp15_group_properties:
 1649|  15.2k|{
 1650|  15.2k|    struct ofpbuf properties = ofpbuf_const_initializer(
 1651|  15.2k|        ofpbuf_pull(msg, properties_len), properties_len);
 1652|  19.9k|    while (properties.size > 0) {
  ------------------
  |  Branch (1652:12): [True: 10.4k, False: 9.51k]
  ------------------
 1653|  10.4k|        struct ofpbuf payload;
 1654|  10.4k|        enum ofperr error;
 1655|  10.4k|        uint64_t type;
 1656|       |
 1657|  10.4k|        error = ofpprop_pull(&properties, &payload, &type);
 1658|  10.4k|        if (error) {
  ------------------
  |  Branch (1658:13): [True: 737, False: 9.68k]
  ------------------
 1659|    737|            return error;
 1660|    737|        }
 1661|       |
 1662|  9.68k|        switch (type) {
 1663|  1.06k|        case OFPPROP_EXP(NTR_VENDOR_ID, NTRT_SELECTION_METHOD):
  ------------------
  |  |   67|  1.06k|    (((uint64_t) (EXP_ID) << 32) | (EXP_TYPE))
  ------------------
  |  Branch (1663:9): [True: 1.06k, False: 8.62k]
  ------------------
 1664|  8.06k|        case OFPPROP_EXP(NTR_COMPAT_VENDOR_ID, NTRT_SELECTION_METHOD):
  ------------------
  |  |   67|  8.06k|    (((uint64_t) (EXP_ID) << 32) | (EXP_TYPE))
  ------------------
  |  Branch (1664:9): [True: 7.00k, False: 2.68k]
  ------------------
 1665|  8.06k|            error = parse_group_prop_ntr_selection_method(&payload, group_type,
 1666|  8.06k|                                                          group_cmd, gp);
 1667|  8.06k|            break;
 1668|       |
 1669|  1.62k|        default:
  ------------------
  |  Branch (1669:9): [True: 1.62k, False: 8.06k]
  ------------------
 1670|  1.62k|            error = OFPPROP_UNKNOWN(false, "group", type);
  ------------------
  |  |  144|  1.62k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
 1671|  1.62k|            break;
 1672|  9.68k|        }
 1673|       |
 1674|  9.68k|        if (error) {
  ------------------
  |  Branch (1674:13): [True: 4.96k, False: 4.72k]
  ------------------
 1675|  4.96k|            return error;
 1676|  4.96k|        }
 1677|  9.68k|    }
 1678|       |
 1679|  9.51k|    return 0;
 1680|  15.2k|}
ofp-group.c:parse_group_prop_ntr_selection_method:
 1559|  8.06k|{
 1560|  8.06k|    struct ntr_group_prop_selection_method *prop = payload->data;
 1561|  8.06k|    size_t fields_len, method_len;
 1562|  8.06k|    enum ofperr error;
 1563|       |
 1564|  8.06k|    switch (group_type) {
 1565|  7.26k|    case OFPGT11_SELECT:
  ------------------
  |  Branch (1565:5): [True: 7.26k, False: 807]
  ------------------
 1566|  7.26k|        break;
 1567|     61|    case OFPGT11_ALL:
  ------------------
  |  Branch (1567:5): [True: 61, False: 8.00k]
  ------------------
 1568|    166|    case OFPGT11_INDIRECT:
  ------------------
  |  Branch (1568:5): [True: 105, False: 7.96k]
  ------------------
 1569|    248|    case OFPGT11_FF:
  ------------------
  |  Branch (1569:5): [True: 82, False: 7.98k]
  ------------------
 1570|    248|        OFPPROP_LOG(&rl, false, "ntr selection method property is "
  ------------------
  |  |  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]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1571|    248|                    "only allowed for select groups");
 1572|    248|        return OFPERR_OFPBPC_BAD_VALUE;
 1573|    559|    default:
  ------------------
  |  Branch (1573:5): [True: 559, False: 7.50k]
  ------------------
 1574|    559|        return OFPERR_OFPGMFC_BAD_TYPE;
 1575|  8.06k|    }
 1576|       |
 1577|  7.26k|    switch (group_cmd) {
 1578|  5.51k|    case OFPGC15_ADD:
  ------------------
  |  Branch (1578:5): [True: 5.51k, False: 1.74k]
  ------------------
 1579|  6.16k|    case OFPGC15_MODIFY:
  ------------------
  |  Branch (1579:5): [True: 647, False: 6.61k]
  ------------------
 1580|  6.21k|    case OFPGC15_ADD_OR_MOD:
  ------------------
  |  Branch (1580:5): [True: 51, False: 7.21k]
  ------------------
 1581|  6.21k|        break;
 1582|     67|    case OFPGC15_DELETE:
  ------------------
  |  Branch (1582:5): [True: 67, False: 7.19k]
  ------------------
 1583|    512|    case OFPGC15_INSERT_BUCKET:
  ------------------
  |  Branch (1583:5): [True: 445, False: 6.81k]
  ------------------
 1584|    578|    case OFPGC15_REMOVE_BUCKET:
  ------------------
  |  Branch (1584:5): [True: 66, False: 7.19k]
  ------------------
 1585|    578|        OFPPROP_LOG(&rl, false, "ntr selection method property is "
  ------------------
  |  |  139|    578|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    578|    do {                                                                \
  |  |  |  |  288|  1.15k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 578]
  |  |  |  |  ------------------
  |  |  |  |  289|    578|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 578]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    578|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 578]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1586|    578|                    "only allowed for add and delete group modifications");
 1587|    578|        return OFPERR_OFPBPC_BAD_VALUE;
 1588|    469|    default:
  ------------------
  |  Branch (1588:5): [True: 469, False: 6.79k]
  ------------------
 1589|    469|        return OFPERR_OFPGMFC_BAD_COMMAND;
 1590|  7.26k|    }
 1591|       |
 1592|  6.21k|    if (payload->size < sizeof *prop) {
  ------------------
  |  Branch (1592:9): [True: 35, False: 6.17k]
  ------------------
 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|  6.17k|    method_len = strnlen(prop->selection_method, NTR_MAX_SELECTION_METHOD_LEN);
  ------------------
  |  |   34|  6.17k|#define NTR_MAX_SELECTION_METHOD_LEN 16
  ------------------
 1599|       |
 1600|  6.17k|    if (method_len == NTR_MAX_SELECTION_METHOD_LEN) {
  ------------------
  |  |   34|  6.17k|#define NTR_MAX_SELECTION_METHOD_LEN 16
  ------------------
  |  Branch (1600:9): [True: 18, False: 6.16k]
  ------------------
 1601|     18|        OFPPROP_LOG(&rl, false,
  ------------------
  |  |  139|     18|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     18|    do {                                                                \
  |  |  |  |  288|     36|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 18]
  |  |  |  |  ------------------
  |  |  |  |  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]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1602|     18|                    "ntr selection method is not null terminated");
 1603|     18|        return OFPERR_OFPBPC_BAD_VALUE;
 1604|     18|    }
 1605|       |
 1606|  6.16k|    if (strcmp("hash", prop->selection_method)
  ------------------
  |  Branch (1606:9): [True: 549, False: 5.61k]
  ------------------
 1607|    549|        && strcmp("dp_hash", prop->selection_method)) {
  ------------------
  |  Branch (1607:12): [True: 536, False: 13]
  ------------------
 1608|    536|        OFPPROP_LOG(&rl, false,
  ------------------
  |  |  139|    536|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    536|    do {                                                                \
  |  |  |  |  288|  1.07k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 536]
  |  |  |  |  ------------------
  |  |  |  |  289|    536|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 536]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    536|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 536]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1609|    536|                    "ntr selection method '%s' is not supported",
 1610|    536|                    prop->selection_method);
 1611|    536|        return OFPERR_OFPBPC_BAD_VALUE;
 1612|    536|    }
 1613|       |    /* 'method_len' is now non-zero. */
 1614|       |
 1615|  5.62k|    strcpy(gp->selection_method, prop->selection_method);
 1616|  5.62k|    gp->selection_method_param = ntohll(prop->selection_method_param);
 1617|       |
 1618|  5.62k|    ofpbuf_pull(payload, sizeof *prop);
 1619|       |
 1620|  5.62k|    fields_len = ntohs(prop->length) - sizeof *prop;
 1621|  5.62k|    if (fields_len && strcmp("hash", gp->selection_method)) {
  ------------------
  |  Branch (1621:9): [True: 4.79k, False: 835]
  |  Branch (1621:23): [True: 10, False: 4.78k]
  ------------------
 1622|     10|        OFPPROP_LOG(&rl, false, "ntr selection method %s "
  ------------------
  |  |  139|     10|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     10|    do {                                                                \
  |  |  |  |  288|     20|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 10]
  |  |  |  |  ------------------
  |  |  |  |  289|     10|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 10]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     10|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 10]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1623|     10|                    "does not support fields", gp->selection_method);
 1624|     10|        return OFPERR_OFPBPC_BAD_VALUE;
 1625|     10|    }
 1626|       |
 1627|  5.61k|    if (fields_len > 0) {
  ------------------
  |  Branch (1627:9): [True: 4.78k, False: 835]
  ------------------
 1628|  4.78k|        error = oxm_pull_field_array(payload->data, fields_len,
 1629|  4.78k|                &gp->fields);
 1630|  4.78k|        if (error) {
  ------------------
  |  Branch (1630:13): [True: 886, False: 3.89k]
  ------------------
 1631|    886|            OFPPROP_LOG(&rl, false,
  ------------------
  |  |  139|    886|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    886|    do {                                                                \
  |  |  |  |  288|  1.77k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 886]
  |  |  |  |  ------------------
  |  |  |  |  289|    886|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 886]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    886|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 886]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1632|    886|                    "ntr selection method fields are invalid");
 1633|    886|            return error;
 1634|    886|        }
 1635|  4.78k|    } else {
 1636|       |        /* Selection_method "hash: w/o fields means default hash method. */
 1637|    835|        gp->fields.values_size = 0;
 1638|    835|    }
 1639|       |
 1640|  4.72k|    return 0;
 1641|  5.61k|}
ofp-group.c:ofp_print_bucket_id:
 1816|  10.5k|{
 1817|  10.5k|    if (ofp_version > OFP10_VERSION && ofp_version < OFP15_VERSION) {
  ------------------
  |  Branch (1817:9): [True: 10.5k, False: 10]
  |  Branch (1817:40): [True: 3.25k, False: 7.28k]
  ------------------
 1818|  3.25k|        return;
 1819|  3.25k|    }
 1820|       |
 1821|  7.29k|    ds_put_cstr(s, label);
 1822|       |
 1823|  7.29k|    switch (bucket_id) {
 1824|     70|    case OFPG15_BUCKET_FIRST:
  ------------------
  |  Branch (1824:5): [True: 70, False: 7.22k]
  ------------------
 1825|     70|        ds_put_cstr(s, "first");
 1826|     70|        break;
 1827|  1.10k|    case OFPG15_BUCKET_LAST:
  ------------------
  |  Branch (1827:5): [True: 1.10k, False: 6.18k]
  ------------------
 1828|  1.10k|        ds_put_cstr(s, "last");
 1829|  1.10k|        break;
 1830|    465|    case OFPG15_BUCKET_ALL:
  ------------------
  |  Branch (1830:5): [True: 465, False: 6.82k]
  ------------------
 1831|    465|        ds_put_cstr(s, "all");
 1832|    465|        break;
 1833|  5.64k|    default:
  ------------------
  |  Branch (1833:5): [True: 5.64k, False: 1.64k]
  ------------------
 1834|  5.64k|        ds_put_format(s, "%"PRIu32, bucket_id);
 1835|  5.64k|        break;
 1836|  7.29k|    }
 1837|       |
 1838|  7.29k|    ds_put_char(s, ',');
 1839|  7.29k|}
ofp-group.c:ofputil_pull_ofp11_group_mod:
 2152|  18.9k|{
 2153|  18.9k|    const struct ofp11_group_mod *ogm;
 2154|  18.9k|    enum ofperr error;
 2155|       |
 2156|  18.9k|    ogm = ofpbuf_pull(msg, sizeof *ogm);
 2157|  18.9k|    gm->command = ntohs(ogm->command);
 2158|  18.9k|    gm->type = ogm->type;
 2159|  18.9k|    gm->group_id = ntohl(ogm->group_id);
 2160|  18.9k|    gm->command_bucket_id = OFPG15_BUCKET_ALL;
 2161|       |
 2162|  18.9k|    error = ofputil_pull_ofp11_buckets(msg, msg->size, ofp_version,
 2163|  18.9k|                                       &gm->buckets);
 2164|       |
 2165|       |    /* OF1.3.5+ prescribes an error when an OFPGC_DELETE includes buckets. */
 2166|  18.9k|    if (!error
  ------------------
  |  Branch (2166:9): [True: 11.1k, False: 7.84k]
  ------------------
 2167|  11.1k|        && ofp_version >= OFP13_VERSION
  ------------------
  |  Branch (2167:12): [True: 8.01k, False: 3.11k]
  ------------------
 2168|  8.01k|        && gm->command == OFPGC11_DELETE
  ------------------
  |  Branch (2168:12): [True: 510, False: 7.50k]
  ------------------
 2169|    510|        && !ovs_list_is_empty(&gm->buckets)) {
  ------------------
  |  Branch (2169:12): [True: 204, False: 306]
  ------------------
 2170|    204|        error = OFPERR_OFPGMFC_INVALID_GROUP;
 2171|    204|        ofputil_bucket_list_destroy(&gm->buckets);
 2172|    204|    }
 2173|       |
 2174|  18.9k|    return error;
 2175|  18.9k|}
ofp-group.c:ofputil_pull_ofp15_group_mod:
 2180|  28.7k|{
 2181|  28.7k|    const struct ofp15_group_mod *ogm;
 2182|  28.7k|    uint16_t bucket_list_len;
 2183|  28.7k|    enum ofperr error = OFPERR_OFPGMFC_BAD_BUCKET;
 2184|       |
 2185|  28.7k|    ogm = ofpbuf_pull(msg, sizeof *ogm);
 2186|  28.7k|    gm->command = ntohs(ogm->command);
 2187|  28.7k|    gm->type = ogm->type;
 2188|  28.7k|    gm->group_id = ntohl(ogm->group_id);
 2189|       |
 2190|  28.7k|    gm->command_bucket_id = ntohl(ogm->command_bucket_id);
 2191|  28.7k|    switch (gm->command) {
 2192|  8.80k|    case OFPGC15_REMOVE_BUCKET:
  ------------------
  |  Branch (2192:5): [True: 8.80k, False: 19.9k]
  ------------------
 2193|  8.80k|        if (gm->command_bucket_id == OFPG15_BUCKET_ALL) {
  ------------------
  |  Branch (2193:13): [True: 607, False: 8.19k]
  ------------------
 2194|    607|            error = 0;
 2195|    607|        }
 2196|       |        /* Fall through */
 2197|  18.4k|    case OFPGC15_INSERT_BUCKET:
  ------------------
  |  Branch (2197:5): [True: 9.64k, False: 19.1k]
  ------------------
 2198|  18.4k|        if (gm->command_bucket_id <= OFPG15_BUCKET_MAX ||
  ------------------
  |  Branch (2198:13): [True: 16.1k, False: 2.27k]
  ------------------
 2199|  2.27k|            gm->command_bucket_id == OFPG15_BUCKET_FIRST
  ------------------
  |  Branch (2199:13): [True: 72, False: 2.20k]
  ------------------
 2200|  17.8k|            || gm->command_bucket_id == OFPG15_BUCKET_LAST) {
  ------------------
  |  Branch (2200:16): [True: 1.57k, False: 629]
  ------------------
 2201|  17.8k|            error = 0;
 2202|  17.8k|        }
 2203|  18.4k|        break;
 2204|       |
 2205|  6.66k|    case OFPGC11_ADD:
  ------------------
  |  Branch (2205:5): [True: 6.66k, False: 22.0k]
  ------------------
 2206|  7.39k|    case OFPGC11_MODIFY:
  ------------------
  |  Branch (2206:5): [True: 729, False: 28.0k]
  ------------------
 2207|  7.49k|    case OFPGC11_ADD_OR_MOD:
  ------------------
  |  Branch (2207:5): [True: 100, False: 28.6k]
  ------------------
 2208|  7.56k|    case OFPGC11_DELETE:
  ------------------
  |  Branch (2208:5): [True: 69, False: 28.6k]
  ------------------
 2209|  10.3k|    default:
  ------------------
  |  Branch (2209:5): [True: 2.73k, False: 26.0k]
  ------------------
 2210|  10.3k|        if (gm->command_bucket_id == OFPG15_BUCKET_ALL) {
  ------------------
  |  Branch (2210:13): [True: 8.19k, False: 2.10k]
  ------------------
 2211|  8.19k|            error = 0;
 2212|  8.19k|        }
 2213|  10.3k|        break;
 2214|  28.7k|    }
 2215|  28.7k|    if (error) {
  ------------------
  |  Branch (2215:9): [True: 2.13k, False: 26.6k]
  ------------------
 2216|  2.13k|        VLOG_WARN_RL(&rl,
  ------------------
  |  |  224|  2.13k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  2.13k|    do {                                                                \
  |  |  |  |  288|  2.13k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  2.13k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 2.13k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  2.13k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 2.13k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2217|  2.13k|                     "group command bucket id (%u) is out of range",
 2218|  2.13k|                     gm->command_bucket_id);
 2219|  2.13k|        return OFPERR_OFPGMFC_BAD_BUCKET;
 2220|  2.13k|    }
 2221|       |
 2222|  26.6k|    bucket_list_len = ntohs(ogm->bucket_array_len);
 2223|  26.6k|    if (bucket_list_len > msg->size) {
  ------------------
  |  Branch (2223:9): [True: 1.21k, False: 25.4k]
  ------------------
 2224|  1.21k|        return OFPERR_OFPBRC_BAD_LEN;
 2225|  1.21k|    }
 2226|  25.4k|    error = ofputil_pull_ofp15_buckets(msg, bucket_list_len, ofp_version,
 2227|  25.4k|                                       gm->type, &gm->buckets);
 2228|  25.4k|    if (error) {
  ------------------
  |  Branch (2228:9): [True: 11.2k, False: 14.2k]
  ------------------
 2229|  11.2k|        return error;
 2230|  11.2k|    }
 2231|       |
 2232|  14.2k|    error = parse_ofp15_group_properties(msg, gm->type, gm->command,
 2233|  14.2k|                                         &gm->props, msg->size);
 2234|  14.2k|    if (error) {
  ------------------
  |  Branch (2234:9): [True: 4.81k, False: 9.39k]
  ------------------
 2235|  4.81k|        ofputil_uninit_group_mod(gm);
 2236|  4.81k|    }
 2237|  14.2k|    return error;
 2238|  25.4k|}
ofp-group.c:ofputil_check_group_mod:
 2242|  20.3k|{
 2243|  20.3k|    switch (gm->type) {
 2244|  3.27k|    case OFPGT11_INDIRECT:
  ------------------
  |  Branch (2244:5): [True: 3.27k, False: 17.0k]
  ------------------
 2245|  3.27k|        if (gm->command != OFPGC11_DELETE
  ------------------
  |  Branch (2245:13): [True: 2.44k, False: 828]
  ------------------
 2246|  2.44k|            && !ovs_list_is_singleton(&gm->buckets) ) {
  ------------------
  |  Branch (2246:16): [True: 394, False: 2.04k]
  ------------------
 2247|    394|            return OFPERR_OFPGMFC_INVALID_GROUP;
 2248|    394|        }
 2249|  2.87k|        break;
 2250|  4.95k|    case OFPGT11_ALL:
  ------------------
  |  Branch (2250:5): [True: 4.95k, False: 15.3k]
  ------------------
 2251|  11.4k|    case OFPGT11_SELECT:
  ------------------
  |  Branch (2251:5): [True: 6.53k, False: 13.7k]
  ------------------
 2252|  13.8k|    case OFPGT11_FF:
  ------------------
  |  Branch (2252:5): [True: 2.41k, False: 17.9k]
  ------------------
 2253|  13.8k|        break;
 2254|  3.14k|    default:
  ------------------
  |  Branch (2254:5): [True: 3.14k, False: 17.1k]
  ------------------
 2255|  3.14k|        return OFPERR_OFPGMFC_BAD_TYPE;
 2256|  20.3k|    }
 2257|       |
 2258|  16.7k|    switch (gm->command) {
 2259|  7.31k|    case OFPGC11_ADD:
  ------------------
  |  Branch (2259:5): [True: 7.31k, False: 9.45k]
  ------------------
 2260|  9.09k|    case OFPGC11_MODIFY:
  ------------------
  |  Branch (2260:5): [True: 1.78k, False: 14.9k]
  ------------------
 2261|  9.50k|    case OFPGC11_ADD_OR_MOD:
  ------------------
  |  Branch (2261:5): [True: 402, False: 16.3k]
  ------------------
 2262|  10.4k|    case OFPGC11_DELETE:
  ------------------
  |  Branch (2262:5): [True: 918, False: 15.8k]
  ------------------
 2263|  14.6k|    case OFPGC15_INSERT_BUCKET:
  ------------------
  |  Branch (2263:5): [True: 4.19k, False: 12.5k]
  ------------------
 2264|  14.6k|        break;
 2265|  1.09k|    case OFPGC15_REMOVE_BUCKET:
  ------------------
  |  Branch (2265:5): [True: 1.09k, False: 15.6k]
  ------------------
 2266|  1.09k|        if (!ovs_list_is_empty(&gm->buckets)) {
  ------------------
  |  Branch (2266:13): [True: 196, False: 895]
  ------------------
 2267|    196|            return OFPERR_OFPGMFC_BAD_BUCKET;
 2268|    196|        }
 2269|    895|        break;
 2270|  1.06k|    default:
  ------------------
  |  Branch (2270:5): [True: 1.06k, False: 15.7k]
  ------------------
 2271|  1.06k|        return OFPERR_OFPGMFC_BAD_COMMAND;
 2272|  16.7k|    }
 2273|       |
 2274|  15.5k|    struct ofputil_bucket *bucket;
 2275|  15.5k|    LIST_FOR_EACH (bucket, list_node, &gm->buckets) {
  ------------------
  |  |   76|  15.5k|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->next, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  171|  15.5k|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|  15.5k|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|  22.4k|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  185|  22.4k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 9.32k, False: 13.1k]
  |  |  |  |  |  Branch (185:6): [True: 9.32k, False: 13.1k]
  |  |  |  |  ------------------
  |  |  |  |  186|  22.4k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  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)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  22.4k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   78|  15.5k|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->next))
  |  |  ------------------
  |  |  |  |  193|  6.92k|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  6.92k|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2276|  9.32k|        if (bucket->weight && gm->type != OFPGT11_SELECT
  ------------------
  |  Branch (2276:13): [True: 1.20k, False: 8.11k]
  |  Branch (2276:31): [True: 1.03k, False: 175]
  ------------------
 2277|  1.03k|            && gm->command != OFPGC15_INSERT_BUCKET) {
  ------------------
  |  Branch (2277:16): [True: 428, False: 605]
  ------------------
 2278|    428|            return OFPERR_OFPGMFC_INVALID_GROUP;
 2279|    428|        }
 2280|       |
 2281|  8.89k|        switch (gm->type) {
 2282|  3.48k|        case OFPGT11_ALL:
  ------------------
  |  Branch (2282:9): [True: 3.48k, False: 5.41k]
  ------------------
 2283|  4.91k|        case OFPGT11_INDIRECT:
  ------------------
  |  Branch (2283:9): [True: 1.42k, False: 7.47k]
  ------------------
 2284|  4.91k|            if (ofputil_bucket_has_liveness(bucket)) {
  ------------------
  |  Branch (2284:17): [True: 906, False: 4.00k]
  ------------------
 2285|    906|                return OFPERR_OFPGMFC_WATCH_UNSUPPORTED;
 2286|    906|            }
 2287|  4.00k|            break;
 2288|  4.00k|        case OFPGT11_SELECT:
  ------------------
  |  Branch (2288:9): [True: 2.69k, False: 6.20k]
  ------------------
 2289|  2.69k|            break;
 2290|  1.28k|        case OFPGT11_FF:
  ------------------
  |  Branch (2290:9): [True: 1.28k, False: 7.60k]
  ------------------
 2291|  1.28k|            if (!ofputil_bucket_has_liveness(bucket)) {
  ------------------
  |  Branch (2291:17): [True: 1.06k, False: 226]
  ------------------
 2292|  1.06k|                return OFPERR_OFPGMFC_INVALID_GROUP;
 2293|  1.06k|            }
 2294|    226|            break;
 2295|    226|        default:
  ------------------
  |  Branch (2295:9): [True: 0, False: 8.89k]
  ------------------
 2296|       |            /* Returning BAD TYPE to be consistent
 2297|       |             * though gm->type has been checked already. */
 2298|      0|            return OFPERR_OFPGMFC_BAD_TYPE;
 2299|  8.89k|        }
 2300|  8.89k|    }
 2301|       |
 2302|  13.1k|    return 0;
 2303|  15.5k|}

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

ofputil_wildcard_from_ofpfw10:
   67|  88.1k|{
   68|  88.1k|    BUILD_ASSERT_DECL(FLOW_WC_SEQ == 43);
  ------------------
  |  |  270|  88.1k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  ------------------
   69|       |
   70|       |    /* Initialize most of wc. */
   71|  88.1k|    flow_wildcards_init_catchall(wc);
   72|       |
   73|  88.1k|    if (!(ofpfw & OFPFW10_IN_PORT)) {
  ------------------
  |  Branch (73:9): [True: 72.5k, False: 15.5k]
  ------------------
   74|  72.5k|        wc->masks.in_port.ofp_port = u16_to_ofp(UINT16_MAX);
   75|  72.5k|    }
   76|       |
   77|  88.1k|    if (!(ofpfw & OFPFW10_NW_TOS)) {
  ------------------
  |  Branch (77:9): [True: 59.8k, False: 28.3k]
  ------------------
   78|  59.8k|        wc->masks.nw_tos |= IP_DSCP_MASK;
  ------------------
  |  |  724|  59.8k|#define IP_DSCP_MASK 0xfc
  ------------------
   79|  59.8k|    }
   80|       |
   81|  88.1k|    if (!(ofpfw & OFPFW10_NW_PROTO)) {
  ------------------
  |  Branch (81:9): [True: 61.2k, False: 26.9k]
  ------------------
   82|  61.2k|        wc->masks.nw_proto = UINT8_MAX;
   83|  61.2k|    }
   84|  88.1k|    wc->masks.nw_src = ofputil_wcbits_to_netmask(ofpfw
   85|  88.1k|                                                 >> OFPFW10_NW_SRC_SHIFT);
   86|  88.1k|    wc->masks.nw_dst = ofputil_wcbits_to_netmask(ofpfw
   87|  88.1k|                                                 >> OFPFW10_NW_DST_SHIFT);
   88|       |
   89|  88.1k|    if (!(ofpfw & OFPFW10_TP_SRC)) {
  ------------------
  |  Branch (89:9): [True: 62.5k, False: 25.5k]
  ------------------
   90|  62.5k|        wc->masks.tp_src = OVS_BE16_MAX;
  ------------------
  |  |   42|  62.5k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
   91|  62.5k|    }
   92|  88.1k|    if (!(ofpfw & OFPFW10_TP_DST)) {
  ------------------
  |  Branch (92:9): [True: 66.5k, False: 21.5k]
  ------------------
   93|  66.5k|        wc->masks.tp_dst = OVS_BE16_MAX;
  ------------------
  |  |   42|  66.5k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
   94|  66.5k|    }
   95|       |
   96|  88.1k|    if (!(ofpfw & OFPFW10_DL_SRC)) {
  ------------------
  |  Branch (96:9): [True: 64.4k, False: 23.6k]
  ------------------
   97|  64.4k|        WC_MASK_FIELD(wc, dl_src);
  ------------------
  |  |  201|  64.4k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
   98|  64.4k|    }
   99|  88.1k|    if (!(ofpfw & OFPFW10_DL_DST)) {
  ------------------
  |  Branch (99:9): [True: 59.4k, False: 28.6k]
  ------------------
  100|  59.4k|        WC_MASK_FIELD(wc, dl_dst);
  ------------------
  |  |  201|  59.4k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
  101|  59.4k|    }
  102|  88.1k|    if (!(ofpfw & OFPFW10_DL_TYPE)) {
  ------------------
  |  Branch (102:9): [True: 78.2k, False: 9.86k]
  ------------------
  103|  78.2k|        wc->masks.dl_type = OVS_BE16_MAX;
  ------------------
  |  |   42|  78.2k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  104|  78.2k|    }
  105|       |
  106|       |    /* VLAN TCI mask. */
  107|  88.1k|    if (!(ofpfw & OFPFW10_DL_VLAN_PCP)) {
  ------------------
  |  Branch (107:9): [True: 65.2k, False: 22.9k]
  ------------------
  108|  65.2k|        wc->masks.vlans[0].tci |= htons(VLAN_PCP_MASK | VLAN_CFI);
  109|  65.2k|    }
  110|  88.1k|    if (!(ofpfw & OFPFW10_DL_VLAN)) {
  ------------------
  |  Branch (110:9): [True: 55.3k, False: 32.7k]
  ------------------
  111|       |        wc->masks.vlans[0].tci |= htons(VLAN_VID_MASK | VLAN_CFI);
  112|  55.3k|    }
  113|  88.1k|}
ofputil_match_from_ofp10_match:
  119|  88.1k|{
  120|  88.1k|    uint32_t ofpfw = ntohl(ofmatch->wildcards) & OFPFW10_ALL;
  121|       |
  122|       |    /* Initialize match->wc. */
  123|  88.1k|    memset(&match->flow, 0, sizeof match->flow);
  124|  88.1k|    ofputil_wildcard_from_ofpfw10(ofpfw, &match->wc);
  125|  88.1k|    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|  88.1k|    const uint32_t ofpfw_data_bits = (OFPFW10_NW_TOS | OFPFW10_NW_PROTO
  130|  88.1k|                                      | OFPFW10_TP_SRC | OFPFW10_TP_DST
  131|  88.1k|                                      | OFPFW10_DL_SRC | OFPFW10_DL_DST
  132|  88.1k|                                      | OFPFW10_DL_TYPE
  133|  88.1k|                                      | OFPFW10_DL_VLAN | OFPFW10_DL_VLAN_PCP);
  134|  88.1k|    if ((ofpfw & ofpfw_data_bits) != ofpfw_data_bits
  ------------------
  |  Branch (134:9): [True: 84.6k, False: 3.41k]
  ------------------
  135|  3.41k|        || ofputil_wcbits_to_netmask(ofpfw >> OFPFW10_NW_SRC_SHIFT)
  ------------------
  |  Branch (135:12): [True: 774, False: 2.64k]
  ------------------
  136|  87.3k|        || ofputil_wcbits_to_netmask(ofpfw >> OFPFW10_NW_DST_SHIFT)) {
  ------------------
  |  Branch (136:12): [True: 1.84k, False: 794]
  ------------------
  137|  87.3k|        match_set_default_packet_type(match);
  138|  87.3k|    }
  139|       |
  140|       |    /* Initialize most of match->flow. */
  141|  88.1k|    match->flow.nw_src = ofmatch->nw_src;
  142|  88.1k|    match->flow.nw_dst = ofmatch->nw_dst;
  143|  88.1k|    match->flow.in_port.ofp_port = u16_to_ofp(ntohs(ofmatch->in_port));
  144|  88.1k|    match->flow.dl_type = ofputil_dl_type_from_openflow(ofmatch->dl_type);
  145|  88.1k|    match->flow.tp_src = ofmatch->tp_src;
  146|  88.1k|    match->flow.tp_dst = ofmatch->tp_dst;
  147|  88.1k|    match->flow.dl_src = ofmatch->dl_src;
  148|  88.1k|    match->flow.dl_dst = ofmatch->dl_dst;
  149|  88.1k|    match->flow.nw_tos = ofmatch->nw_tos & IP_DSCP_MASK;
  ------------------
  |  |  724|  88.1k|#define IP_DSCP_MASK 0xfc
  ------------------
  150|  88.1k|    match->flow.nw_proto = ofmatch->nw_proto;
  151|       |
  152|       |    /* Translate VLANs. */
  153|  88.1k|    if (!(ofpfw & OFPFW10_DL_VLAN) &&
  ------------------
  |  Branch (153:9): [True: 55.3k, False: 32.7k]
  ------------------
  154|  55.3k|        ofmatch->dl_vlan == htons(OFP10_VLAN_NONE)) {
  ------------------
  |  Branch (154:9): [True: 5.20k, False: 50.1k]
  ------------------
  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|  5.20k|        match->flow.vlans[0].tci = htons(0);
  164|  5.20k|        match->wc.masks.vlans[0].tci = htons(0xffff);
  165|  82.9k|    } else {
  166|  82.9k|        ovs_be16 vid, pcp, tci;
  167|  82.9k|        uint16_t hpcp;
  168|       |
  169|  82.9k|        vid = ofmatch->dl_vlan & htons(VLAN_VID_MASK);
  170|  82.9k|        hpcp = (ofmatch->dl_vlan_pcp << VLAN_PCP_SHIFT) & VLAN_PCP_MASK;
  ------------------
  |  |  498|  82.9k|#define VLAN_PCP_SHIFT 13
  ------------------
                      hpcp = (ofmatch->dl_vlan_pcp << VLAN_PCP_SHIFT) & VLAN_PCP_MASK;
  ------------------
  |  |  497|  82.9k|#define VLAN_PCP_MASK 0xe000
  ------------------
  171|  82.9k|        pcp = htons(hpcp);
  172|  82.9k|        tci = vid | pcp | htons(VLAN_CFI);
  173|  82.9k|        match->flow.vlans[0].tci = tci & match->wc.masks.vlans[0].tci;
  174|  82.9k|    }
  175|       |
  176|       |    /* Clean up. */
  177|  88.1k|    match_zero_wildcarded_fields(match);
  178|  88.1k|}
ofputil_pull_ofp11_match:
  262|  88.3k|{
  263|  88.3k|    struct ofp11_match_header *omh = buf->data;
  264|  88.3k|    uint16_t match_len;
  265|       |
  266|  88.3k|    if (buf->size < sizeof *omh) {
  ------------------
  |  Branch (266:9): [True: 373, False: 87.9k]
  ------------------
  267|    373|        return OFPERR_OFPBMC_BAD_LEN;
  268|    373|    }
  269|       |
  270|  87.9k|    match_len = ntohs(omh->length);
  271|       |
  272|  87.9k|    switch (ntohs(omh->type)) {
  273|  12.6k|    case OFPMT_STANDARD: {
  ------------------
  |  Branch (273:5): [True: 12.6k, False: 75.3k]
  ------------------
  274|  12.6k|        struct ofp11_match *om;
  275|       |
  276|  12.6k|        if (match_len != sizeof *om || buf->size < sizeof *om) {
  ------------------
  |  Branch (276:13): [True: 3.17k, False: 9.43k]
  |  Branch (276:40): [True: 71, False: 9.36k]
  ------------------
  277|  3.24k|            return OFPERR_OFPBMC_BAD_LEN;
  278|  3.24k|        }
  279|  9.36k|        om = ofpbuf_pull(buf, sizeof *om);
  280|  9.36k|        if (padded_match_len) {
  ------------------
  |  Branch (280:13): [True: 20, False: 9.34k]
  ------------------
  281|     20|            *padded_match_len = match_len;
  282|     20|        }
  283|  9.36k|        return ofputil_match_from_ofp11_match(om, match);
  284|  12.6k|    }
  285|       |
  286|  65.1k|    case OFPMT_OXM:
  ------------------
  |  Branch (286:5): [True: 65.1k, False: 22.8k]
  ------------------
  287|  65.1k|        if (padded_match_len) {
  ------------------
  |  Branch (287:13): [True: 15.2k, False: 49.8k]
  ------------------
  288|  15.2k|            *padded_match_len = ROUND_UP(match_len, 8);
  ------------------
  |  |  303|  15.2k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|  15.2k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  289|  15.2k|        }
  290|  65.1k|        return oxm_pull_match(buf, false, tun_table, vl_mff_map, match);
  291|       |
  292|  10.2k|    default:
  ------------------
  |  Branch (292:5): [True: 10.2k, False: 77.7k]
  ------------------
  293|  10.2k|        return OFPERR_OFPBMC_BAD_TYPE;
  294|  87.9k|    }
  295|  87.9k|}
ofputil_match_from_ofp11_match:
  302|  9.36k|{
  303|  9.36k|    uint16_t wc = ntohl(ofmatch->wildcards);
  304|  9.36k|    bool ipv4, arp, rarp;
  305|       |
  306|  9.36k|    match_init_catchall(match);
  307|  9.36k|    match->flow.tunnel.metadata.tab = NULL;
  308|       |
  309|  9.36k|    if (!(wc & OFPFW11_IN_PORT)) {
  ------------------
  |  Branch (309:9): [True: 3.96k, False: 5.40k]
  ------------------
  310|  3.96k|        ofp_port_t ofp_port;
  311|  3.96k|        enum ofperr error;
  312|       |
  313|  3.96k|        error = ofputil_port_from_ofp11(ofmatch->in_port, &ofp_port);
  314|  3.96k|        if (error) {
  ------------------
  |  Branch (314:13): [True: 91, False: 3.87k]
  ------------------
  315|     91|            return OFPERR_OFPBMC_BAD_VALUE;
  316|     91|        }
  317|  3.87k|        match_set_in_port(match, ofp_port);
  318|  3.87k|    }
  319|       |
  320|  9.27k|    struct eth_addr dl_src_mask = eth_addr_invert(ofmatch->dl_src_mask);
  321|  9.27k|    struct eth_addr dl_dst_mask = eth_addr_invert(ofmatch->dl_dst_mask);
  322|  9.27k|    if (!eth_addr_is_zero(dl_src_mask) || !eth_addr_is_zero(dl_dst_mask)) {
  ------------------
  |  Branch (322:9): [True: 8.54k, False: 732]
  |  Branch (322:43): [True: 625, False: 107]
  ------------------
  323|  9.16k|        match_set_dl_src_masked(match, ofmatch->dl_src, dl_src_mask);
  324|  9.16k|        match_set_dl_dst_masked(match, ofmatch->dl_dst, dl_dst_mask);
  325|  9.16k|        match_set_default_packet_type(match);
  326|  9.16k|    }
  327|       |
  328|  9.27k|    if (!(wc & OFPFW11_DL_VLAN)) {
  ------------------
  |  Branch (328:9): [True: 7.03k, False: 2.24k]
  ------------------
  329|  7.03k|        if (ofmatch->dl_vlan == htons(OFPVID11_NONE)) {
  ------------------
  |  Branch (329:13): [True: 1.84k, False: 5.19k]
  ------------------
  330|       |            /* Match only packets without a VLAN tag. */
  331|  1.84k|            match->flow.vlans[0].tci = htons(0);
  332|  1.84k|            match->wc.masks.vlans[0].tci = OVS_BE16_MAX;
  ------------------
  |  |   42|  1.84k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  333|  5.19k|        } else {
  334|  5.19k|            if (ofmatch->dl_vlan == htons(OFPVID11_ANY)) {
  ------------------
  |  Branch (334:17): [True: 1.39k, False: 3.80k]
  ------------------
  335|       |                /* Match any packet with a VLAN tag regardless of VID. */
  336|  1.39k|                match->flow.vlans[0].tci = htons(VLAN_CFI);
  337|  1.39k|                match->wc.masks.vlans[0].tci = htons(VLAN_CFI);
  338|  3.80k|            } else if (ntohs(ofmatch->dl_vlan) < 4096) {
  ------------------
  |  Branch (338:24): [True: 3.55k, False: 247]
  ------------------
  339|       |                /* Match only packets with the specified VLAN VID. */
  340|  3.55k|                match->flow.vlans[0].tci = htons(VLAN_CFI) | ofmatch->dl_vlan;
  341|  3.55k|                match->wc.masks.vlans[0].tci = htons(VLAN_CFI | VLAN_VID_MASK);
  342|  3.55k|            } else {
  343|       |                /* Invalid VID. */
  344|    247|                return OFPERR_OFPBMC_BAD_VALUE;
  345|    247|            }
  346|       |
  347|  4.94k|            if (!(wc & OFPFW11_DL_VLAN_PCP)) {
  ------------------
  |  Branch (347:17): [True: 1.93k, False: 3.01k]
  ------------------
  348|  1.93k|                if (ofmatch->dl_vlan_pcp <= 7) {
  ------------------
  |  Branch (348:21): [True: 1.85k, False: 81]
  ------------------
  349|  1.85k|                    match->flow.vlans[0].tci |= htons(ofmatch->dl_vlan_pcp
  350|  1.85k|                                                  << VLAN_PCP_SHIFT);
  351|  1.85k|                    match->wc.masks.vlans[0].tci |= htons(VLAN_PCP_MASK);
  352|  1.85k|                } else {
  353|       |                    /* Invalid PCP. */
  354|     81|                    return OFPERR_OFPBMC_BAD_VALUE;
  355|     81|                }
  356|  1.93k|            }
  357|  4.94k|        }
  358|  6.70k|        match_set_default_packet_type(match);
  359|  6.70k|    }
  360|       |
  361|  8.94k|    if (!(wc & OFPFW11_DL_TYPE)) {
  ------------------
  |  Branch (361:9): [True: 7.11k, False: 1.82k]
  ------------------
  362|  7.11k|        match_set_dl_type(match,
  363|  7.11k|                          ofputil_dl_type_from_openflow(ofmatch->dl_type));
  364|  7.11k|        match_set_default_packet_type(match);
  365|  7.11k|    }
  366|       |
  367|  8.94k|    ipv4 = match->flow.dl_type == htons(ETH_TYPE_IP);
  368|  8.94k|    arp = match->flow.dl_type == htons(ETH_TYPE_ARP);
  369|  8.94k|    rarp = match->flow.dl_type == htons(ETH_TYPE_RARP);
  370|       |
  371|  8.94k|    if (ipv4 && !(wc & OFPFW11_NW_TOS)) {
  ------------------
  |  Branch (371:9): [True: 2.58k, False: 6.36k]
  |  Branch (371:17): [True: 2.11k, False: 462]
  ------------------
  372|  2.11k|        if (ofmatch->nw_tos & ~IP_DSCP_MASK) {
  ------------------
  |  |  724|  2.11k|#define IP_DSCP_MASK 0xfc
  ------------------
  |  Branch (372:13): [True: 71, False: 2.04k]
  ------------------
  373|       |            /* Invalid TOS. */
  374|     71|            return OFPERR_OFPBMC_BAD_VALUE;
  375|     71|        }
  376|       |
  377|  2.04k|        match_set_nw_dscp(match, ofmatch->nw_tos);
  378|  2.04k|    }
  379|       |
  380|  8.87k|    if (ipv4 || arp || rarp) {
  ------------------
  |  Branch (380:9): [True: 2.50k, False: 6.36k]
  |  Branch (380:17): [True: 343, False: 6.02k]
  |  Branch (380:24): [True: 46, False: 5.97k]
  ------------------
  381|  2.89k|        if (!(wc & OFPFW11_NW_PROTO)) {
  ------------------
  |  Branch (381:13): [True: 2.59k, False: 308]
  ------------------
  382|  2.59k|            match_set_nw_proto(match, ofmatch->nw_proto);
  383|  2.59k|        }
  384|  2.89k|        match_set_nw_src_masked(match, ofmatch->nw_src, ~ofmatch->nw_src_mask);
  385|  2.89k|        match_set_nw_dst_masked(match, ofmatch->nw_dst, ~ofmatch->nw_dst_mask);
  386|  2.89k|    }
  387|       |
  388|  8.87k|#define OFPFW11_TP_ALL (OFPFW11_TP_SRC | OFPFW11_TP_DST)
  389|  8.87k|    if (ipv4 && (wc & OFPFW11_TP_ALL) != OFPFW11_TP_ALL) {
  ------------------
  |  |  388|  2.50k|#define OFPFW11_TP_ALL (OFPFW11_TP_SRC | OFPFW11_TP_DST)
  ------------------
                  if (ipv4 && (wc & OFPFW11_TP_ALL) != OFPFW11_TP_ALL) {
  ------------------
  |  |  388|  2.50k|#define OFPFW11_TP_ALL (OFPFW11_TP_SRC | OFPFW11_TP_DST)
  ------------------
  |  Branch (389:9): [True: 2.50k, False: 6.36k]
  |  Branch (389:17): [True: 2.09k, False: 412]
  ------------------
  390|  2.09k|        switch (match->flow.nw_proto) {
  391|    573|        case IPPROTO_ICMP:
  ------------------
  |  Branch (391:9): [True: 573, False: 1.52k]
  ------------------
  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|    573|            if (!(wc & OFPFW11_TP_SRC)) {
  ------------------
  |  Branch (399:17): [True: 535, False: 38]
  ------------------
  400|    535|                uint16_t icmp_type = ntohs(ofmatch->tp_src);
  401|    535|                if (icmp_type < 0x100) {
  ------------------
  |  Branch (401:21): [True: 276, False: 259]
  ------------------
  402|    276|                    match_set_icmp_type(match, icmp_type);
  403|    276|                } else {
  404|    259|                    return OFPERR_OFPBMC_BAD_FIELD;
  405|    259|                }
  406|    535|            }
  407|    314|            if (!(wc & OFPFW11_TP_DST)) {
  ------------------
  |  Branch (407:17): [True: 215, False: 99]
  ------------------
  408|    215|                uint16_t icmp_code = ntohs(ofmatch->tp_dst);
  409|    215|                if (icmp_code < 0x100) {
  ------------------
  |  Branch (409:21): [True: 91, False: 124]
  ------------------
  410|     91|                    match_set_icmp_code(match, icmp_code);
  411|    124|                } else {
  412|    124|                    return OFPERR_OFPBMC_BAD_FIELD;
  413|    124|                }
  414|    215|            }
  415|    190|            break;
  416|       |
  417|    190|        case IPPROTO_TCP:
  ------------------
  |  Branch (417:9): [True: 43, False: 2.05k]
  ------------------
  418|     85|        case IPPROTO_UDP:
  ------------------
  |  Branch (418:9): [True: 42, False: 2.05k]
  ------------------
  419|  1.05k|        case IPPROTO_SCTP:
  ------------------
  |  Branch (419:9): [True: 965, False: 1.13k]
  ------------------
  420|  1.05k|            if (!(wc & (OFPFW11_TP_SRC))) {
  ------------------
  |  Branch (420:17): [True: 85, False: 965]
  ------------------
  421|     85|                match_set_tp_src(match, ofmatch->tp_src);
  422|     85|            }
  423|  1.05k|            if (!(wc & (OFPFW11_TP_DST))) {
  ------------------
  |  Branch (423:17): [True: 969, False: 81]
  ------------------
  424|    969|                match_set_tp_dst(match, ofmatch->tp_dst);
  425|    969|            }
  426|  1.05k|            break;
  427|       |
  428|    474|        default:
  ------------------
  |  Branch (428:9): [True: 474, False: 1.62k]
  ------------------
  429|       |            /* OF1.1 says explicitly to ignore this. */
  430|    474|            break;
  431|  2.09k|        }
  432|  2.09k|    }
  433|       |
  434|  8.49k|    if (eth_type_mpls(match->flow.dl_type)) {
  ------------------
  |  Branch (434:9): [True: 1.53k, False: 6.96k]
  ------------------
  435|  1.53k|        if (!(wc & OFPFW11_MPLS_LABEL)) {
  ------------------
  |  Branch (435:13): [True: 1.22k, False: 306]
  ------------------
  436|  1.22k|            match_set_mpls_label(match, 0, ofmatch->mpls_label);
  437|  1.22k|        }
  438|  1.53k|        if (!(wc & OFPFW11_MPLS_TC)) {
  ------------------
  |  Branch (438:13): [True: 1.32k, False: 208]
  ------------------
  439|  1.32k|            match_set_mpls_tc(match, 0, ofmatch->mpls_tc);
  440|  1.32k|        }
  441|  1.53k|    }
  442|       |
  443|  8.49k|    match_set_metadata_masked(match, ofmatch->metadata,
  444|  8.49k|                              ~ofmatch->metadata_mask);
  445|       |
  446|  8.49k|    return 0;
  447|  8.87k|}
ofputil_dl_type_from_openflow:
  632|  95.2k|{
  633|  95.2k|    return (ofp_dl_type == htons(OFP_DL_TYPE_NOT_ETH_TYPE)
  ------------------
  |  Branch (633:13): [True: 103, False: 95.1k]
  ------------------
  634|  95.2k|            ? htons(FLOW_DL_TYPE_NONE)
  635|  95.2k|            : ofp_dl_type);
  636|  95.2k|}
ofputil_decode_tlv_table_mod:
  709|  2.32k|{
  710|  2.32k|    struct ofpbuf msg = ofpbuf_const_initializer(oh, ntohs(oh->length));
  711|  2.32k|    ofpraw_pull_assert(&msg);
  712|       |
  713|  2.32k|    struct nx_tlv_table_mod *nx_ttm = ofpbuf_pull(&msg, sizeof *nx_ttm);
  714|  2.32k|    ttm->command = ntohs(nx_ttm->command);
  715|  2.32k|    if (ttm->command > NXTTMC_CLEAR) {
  ------------------
  |  Branch (715:9): [True: 526, False: 1.79k]
  ------------------
  716|    526|        VLOG_WARN_RL(&rl, "tlv table mod command (%u) is out of range",
  ------------------
  |  |  224|    526|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    526|    do {                                                                \
  |  |  |  |  288|    526|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    526|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 526]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    526|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 526]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  717|    526|                     ttm->command);
  718|    526|        return OFPERR_NXTTMFC_BAD_COMMAND;
  719|    526|    }
  720|       |
  721|  1.79k|    return decode_tlv_table_mappings(&msg, TUN_METADATA_NUM_OPTS,
  ------------------
  |  |   26|  1.79k|#define TUN_METADATA_NUM_OPTS 64
  ------------------
  722|  1.79k|                                        &ttm->mappings);
  723|  2.32k|}
ofputil_format_tlv_table_mod:
  745|    700|{
  746|    700|    ds_put_cstr(s, "\n ");
  747|       |
  748|    700|    switch (ttm->command) {
  ------------------
  |  Branch (748:13): [True: 700, False: 0]
  ------------------
  749|    606|    case NXTTMC_ADD:
  ------------------
  |  Branch (749:5): [True: 606, False: 94]
  ------------------
  750|    606|        ds_put_cstr(s, "ADD");
  751|    606|        break;
  752|     59|    case NXTTMC_DELETE:
  ------------------
  |  Branch (752:5): [True: 59, False: 641]
  ------------------
  753|     59|        ds_put_cstr(s, "DEL");
  754|     59|        break;
  755|     35|    case NXTTMC_CLEAR:
  ------------------
  |  Branch (755:5): [True: 35, False: 665]
  ------------------
  756|     35|        ds_put_cstr(s, "CLEAR");
  757|     35|        break;
  758|    700|    }
  759|       |
  760|    700|    if (ttm->command != NXTTMC_CLEAR) {
  ------------------
  |  Branch (760:9): [True: 665, False: 35]
  ------------------
  761|    665|        print_tlv_table(s, &ttm->mappings);
  762|    665|    }
  763|    700|}
ofputil_decode_tlv_table_reply:
  791|  2.28k|{
  792|  2.28k|    struct ofpbuf msg = ofpbuf_const_initializer(oh, ntohs(oh->length));
  793|  2.28k|    ofpraw_pull_assert(&msg);
  794|       |
  795|  2.28k|    struct nx_tlv_table_reply *nx_ttr = ofpbuf_pull(&msg, sizeof *nx_ttr);
  796|  2.28k|    ttr->max_option_space = ntohl(nx_ttr->max_option_space);
  797|  2.28k|    ttr->max_fields = ntohs(nx_ttr->max_fields);
  798|       |
  799|  2.28k|    return decode_tlv_table_mappings(&msg, ttr->max_fields, &ttr->mappings);
  800|  2.28k|}
ofputil_format_tlv_table_reply:
  839|    703|{
  840|    703|    ds_put_char(s, '\n');
  841|       |
  842|    703|    const struct ofputil_tlv_map *map;
  843|    703|    int allocated_space = 0;
  844|  1.12k|    LIST_FOR_EACH (map, list_node, &ttr->mappings) {
  ------------------
  |  |   76|    703|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->next, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  171|    703|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|    703|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|  1.82k|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  185|  1.82k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 1.12k, False: 703]
  |  |  |  |  |  Branch (185:6): [True: 1.12k, False: 703]
  |  |  |  |  ------------------
  |  |  |  |  186|  1.82k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  1.12k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|  1.12k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|  1.12k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  1.82k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   78|  1.12k|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->next))
  |  |  ------------------
  |  |  |  |  193|  1.12k|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  1.12k|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  845|  1.12k|        allocated_space += map->option_len;
  846|  1.12k|    }
  847|       |
  848|    703|    ds_put_format(s, " max option space=%"PRIu32" max fields=%"PRIu16"\n",
  849|    703|                  ttr->max_option_space, ttr->max_fields);
  850|    703|    ds_put_format(s, " allocated option space=%d\n", allocated_space);
  851|    703|    ds_put_char(s, '\n');
  852|    703|    print_tlv_table(s, &ttr->mappings);
  853|    703|}
ofputil_uninit_tlv_table:
  857|  4.07k|{
  858|  4.07k|    struct ofputil_tlv_map *map;
  859|       |
  860|  8.85k|    LIST_FOR_EACH_POP (map, list_node, mappings) {
  ------------------
  |  |  140|  12.9k|    while (!ovs_list_is_empty(LIST) ?                                         \
  |  |  ------------------
  |  |  |  Branch (140:12): [True: 8.85k, False: 4.07k]
  |  |  |  Branch (140:12): [True: 8.85k, False: 4.07k]
  |  |  ------------------
  |  |  141|  12.9k|           (INIT_CONTAINER(ITER, ovs_list_pop_front(LIST), MEMBER), 1) :      \
  |  |  ------------------
  |  |  |  |  150|  8.85k|    ((OBJECT) = NULL, ASSIGN_CONTAINER(OBJECT, POINTER, MEMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  |  143|  8.85k|    ((OBJECT) = OBJECT_CONTAINING(POINTER, OBJECT, MEMBER), (void) 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  134|  8.85k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  |  |  135|  8.85k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  108|  8.85k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  142|  12.9k|           (ITER = NULL, 0))
  ------------------
  861|  8.85k|        free(map);
  862|  8.85k|    }
  863|  4.07k|}
ofputil_normalize_match:
 1000|  84.7k|{
 1001|       |    ofputil_normalize_match__(match, true);
 1002|  84.7k|}
ofp-match.c:ofputil_wcbits_to_netmask:
   44|   182k|{
   45|   182k|    wcbits &= 0x3f;
   46|   182k|    return wcbits < 32 ? htonl(~((1u << wcbits) - 1)) : 0;
  ------------------
  |  Branch (46:12): [True: 125k, False: 56.8k]
  ------------------
   47|   182k|}
ofp-match.c:decode_tlv_table_mappings:
  672|  4.07k|{
  673|  4.07k|    ovs_list_init(mappings);
  674|       |
  675|  10.2k|    while (msg->size) {
  ------------------
  |  Branch (675:12): [True: 8.85k, False: 1.40k]
  ------------------
  676|  8.85k|        struct nx_tlv_map *nx_map;
  677|  8.85k|        struct ofputil_tlv_map *map;
  678|       |
  679|  8.85k|        nx_map = ofpbuf_pull(msg, sizeof *nx_map);
  680|  8.85k|        map = xmalloc(sizeof *map);
  681|  8.85k|        ovs_list_push_back(mappings, &map->list_node);
  682|       |
  683|  8.85k|        map->option_class = ntohs(nx_map->option_class);
  684|  8.85k|        map->option_type = nx_map->option_type;
  685|       |
  686|  8.85k|        map->option_len = nx_map->option_len;
  687|  8.85k|        if (map->option_len % 4 || map->option_len > TLV_MAX_OPT_SIZE) {
  ------------------
  |  |   26|  7.44k|#define TLV_MAX_OPT_SIZE 124
  ------------------
  |  Branch (687:13): [True: 1.41k, False: 7.44k]
  |  Branch (687:36): [True: 524, False: 6.91k]
  ------------------
  688|  1.93k|            VLOG_WARN_RL(&rl, "tlv table option length (%u) is not a "
  ------------------
  |  |  224|  1.93k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.93k|    do {                                                                \
  |  |  |  |  288|  1.93k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.93k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.93k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.93k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.93k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  689|  1.93k|                         "valid option size", map->option_len);
  690|  1.93k|            ofputil_uninit_tlv_table(mappings);
  691|  1.93k|            return OFPERR_NXTTMFC_BAD_OPT_LEN;
  692|  1.93k|        }
  693|       |
  694|  6.91k|        map->index = ntohs(nx_map->index);
  695|  6.91k|        if (map->index >= max_fields) {
  ------------------
  |  Branch (695:13): [True: 737, False: 6.18k]
  ------------------
  696|    737|            VLOG_WARN_RL(&rl, "tlv table field index (%u) is too large "
  ------------------
  |  |  224|    737|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    737|    do {                                                                \
  |  |  |  |  288|    737|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    737|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 737]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    737|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 737]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  697|    737|                         "(max %u)", map->index, max_fields - 1);
  698|    737|            ofputil_uninit_tlv_table(mappings);
  699|    737|            return OFPERR_NXTTMFC_BAD_FIELD_IDX;
  700|    737|        }
  701|  6.91k|    }
  702|       |
  703|  1.40k|    return 0;
  704|  4.07k|}
ofp-match.c:print_tlv_table:
  727|  1.36k|{
  728|  1.36k|    struct ofputil_tlv_map *map;
  729|       |
  730|  1.36k|    ds_put_cstr(s, " mapping table:\n");
  731|  1.36k|    ds_put_cstr(s, "  class  type  length  match field\n");
  732|  1.36k|    ds_put_cstr(s, " ------  ----  ------  --------------");
  733|       |
  734|  2.37k|    LIST_FOR_EACH (map, list_node, mappings) {
  ------------------
  |  |   76|  1.36k|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->next, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  171|  1.36k|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|  1.36k|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|  3.73k|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  185|  3.73k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 2.37k, False: 1.36k]
  |  |  |  |  |  Branch (185:6): [True: 2.37k, False: 1.36k]
  |  |  |  |  ------------------
  |  |  |  |  186|  3.73k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  2.37k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|  2.37k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|  2.37k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  3.73k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   78|  2.37k|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->next))
  |  |  ------------------
  |  |  |  |  193|  2.37k|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  2.37k|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  735|  2.37k|        ds_put_format(s, "\n %#6"PRIx16"  %#4"PRIx8"  %6"PRIu8"  "
  736|       |                      "tun_metadata%"PRIu16,
  737|  2.37k|                      map->option_class, map->option_type, map->option_len,
  738|  2.37k|                      map->index);
  739|  2.37k|    }
  740|  1.36k|}
ofp-match.c:ofputil_normalize_match__:
  867|  84.7k|{
  868|  84.7k|    enum {
  869|  84.7k|        MAY_NW_ADDR     = 1 << 0, /* nw_src, nw_dst */
  870|  84.7k|        MAY_TP_ADDR     = 1 << 1, /* tp_src, tp_dst */
  871|  84.7k|        MAY_NW_PROTO    = 1 << 2, /* nw_proto */
  872|  84.7k|        MAY_IPVx        = 1 << 3, /* tos, frag, ttl */
  873|  84.7k|        MAY_ARP_SHA     = 1 << 4, /* arp_sha */
  874|  84.7k|        MAY_ARP_THA     = 1 << 5, /* arp_tha */
  875|  84.7k|        MAY_IPV6        = 1 << 6, /* ipv6_src, ipv6_dst, ipv6_label */
  876|  84.7k|        MAY_ND_TARGET   = 1 << 7, /* nd_target */
  877|  84.7k|        MAY_MPLS        = 1 << 8, /* mpls label and tc */
  878|  84.7k|        MAY_ETHER       = 1 << 9, /* dl_src, dl_dst */
  879|  84.7k|    } may_match;
  880|       |
  881|  84.7k|    struct flow_wildcards wc = match->wc;
  882|  84.7k|    ovs_be16 dl_type;
  883|       |
  884|       |    /* Figure out what fields may be matched. */
  885|       |    /* Check the packet_type first and extract dl_type. */
  886|  84.7k|    if (wc.masks.packet_type == 0 || match_has_default_packet_type(match)) {
  ------------------
  |  Branch (886:9): [True: 773, False: 83.9k]
  |  Branch (886:38): [True: 83.9k, False: 0]
  ------------------
  887|  84.7k|        may_match = MAY_ETHER;
  888|  84.7k|        dl_type = match->flow.dl_type;
  889|  84.7k|    } 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|  84.7k|    if (dl_type == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (897:9): [True: 21.2k, False: 63.5k]
  ------------------
  898|  21.2k|        may_match |= MAY_NW_PROTO | MAY_IPVx | MAY_NW_ADDR;
  899|  21.2k|        if (match->flow.nw_proto == IPPROTO_TCP ||
  ------------------
  |  Branch (899:13): [True: 2.58k, False: 18.6k]
  ------------------
  900|  18.6k|            match->flow.nw_proto == IPPROTO_UDP ||
  ------------------
  |  Branch (900:13): [True: 1.26k, False: 17.3k]
  ------------------
  901|  17.3k|            match->flow.nw_proto == IPPROTO_SCTP ||
  ------------------
  |  Branch (901:13): [True: 1.54k, False: 15.8k]
  ------------------
  902|  15.8k|            match->flow.nw_proto == IPPROTO_ICMP) {
  ------------------
  |  Branch (902:13): [True: 1.53k, False: 14.2k]
  ------------------
  903|  6.92k|            may_match |= MAY_TP_ADDR;
  904|  6.92k|        }
  905|  63.5k|    } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (905:16): [True: 4.11k, False: 59.4k]
  ------------------
  906|  4.11k|        may_match |= MAY_NW_PROTO | MAY_IPVx | MAY_IPV6;
  907|  4.11k|        if (match->flow.nw_proto == IPPROTO_TCP ||
  ------------------
  |  Branch (907:13): [True: 446, False: 3.67k]
  ------------------
  908|  3.67k|            match->flow.nw_proto == IPPROTO_UDP ||
  ------------------
  |  Branch (908:13): [True: 333, False: 3.33k]
  ------------------
  909|  3.33k|            match->flow.nw_proto == IPPROTO_SCTP) {
  ------------------
  |  Branch (909:13): [True: 781, False: 2.55k]
  ------------------
  910|  1.56k|            may_match |= MAY_TP_ADDR;
  911|  2.55k|        } else if (match->flow.nw_proto == IPPROTO_ICMPV6) {
  ------------------
  |  Branch (911:20): [True: 1.15k, False: 1.40k]
  ------------------
  912|  1.15k|            may_match |= MAY_TP_ADDR;
  913|  1.15k|            if (match->flow.tp_src == htons(ND_NEIGHBOR_SOLICIT)) {
  ------------------
  |  Branch (913:17): [True: 34, False: 1.12k]
  ------------------
  914|     34|                may_match |= MAY_ND_TARGET | MAY_ARP_SHA;
  915|  1.12k|            } else if (match->flow.tp_src == htons(ND_NEIGHBOR_ADVERT)) {
  ------------------
  |  Branch (915:24): [True: 672, False: 450]
  ------------------
  916|    672|                may_match |= MAY_ND_TARGET | MAY_ARP_THA;
  917|    672|            }
  918|  1.15k|        }
  919|  59.4k|    } else if (dl_type == htons(ETH_TYPE_ARP) ||
  ------------------
  |  Branch (919:16): [True: 1.58k, False: 57.8k]
  ------------------
  920|  57.8k|               dl_type == htons(ETH_TYPE_RARP)) {
  ------------------
  |  Branch (920:16): [True: 297, False: 57.5k]
  ------------------
  921|  1.88k|        may_match |= MAY_NW_PROTO | MAY_NW_ADDR | MAY_ARP_SHA | MAY_ARP_THA;
  922|  57.5k|    } else if (eth_type_mpls(dl_type)) {
  ------------------
  |  Branch (922:16): [True: 268, False: 57.2k]
  ------------------
  923|    268|        may_match |= MAY_MPLS;
  924|    268|    }
  925|       |
  926|       |    /* Clear the fields that may not be matched. */
  927|  84.7k|    if (!(may_match & MAY_ETHER)) {
  ------------------
  |  Branch (927:9): [True: 0, False: 84.7k]
  ------------------
  928|      0|        wc.masks.dl_src = wc.masks.dl_dst = eth_addr_zero;
  929|      0|    }
  930|  84.7k|    if (!(may_match & MAY_NW_ADDR)) {
  ------------------
  |  Branch (930:9): [True: 61.6k, False: 23.0k]
  ------------------
  931|  61.6k|        wc.masks.nw_src = wc.masks.nw_dst = htonl(0);
  932|  61.6k|    }
  933|  84.7k|    if (!(may_match & MAY_TP_ADDR)) {
  ------------------
  |  Branch (933:9): [True: 75.1k, False: 9.64k]
  ------------------
  934|  75.1k|        wc.masks.tp_src = wc.masks.tp_dst = htons(0);
  935|  75.1k|    }
  936|  84.7k|    if (!(may_match & MAY_NW_PROTO)) {
  ------------------
  |  Branch (936:9): [True: 57.5k, False: 27.2k]
  ------------------
  937|  57.5k|        wc.masks.nw_proto = 0;
  938|  57.5k|    }
  939|  84.7k|    if (!(may_match & MAY_IPVx)) {
  ------------------
  |  Branch (939:9): [True: 59.4k, False: 25.3k]
  ------------------
  940|  59.4k|        wc.masks.nw_tos = 0;
  941|  59.4k|        wc.masks.nw_ttl = 0;
  942|  59.4k|    }
  943|  84.7k|    if (!(may_match & MAY_ARP_SHA)) {
  ------------------
  |  Branch (943:9): [True: 82.8k, False: 1.91k]
  ------------------
  944|  82.8k|        WC_UNMASK_FIELD(&wc, arp_sha);
  ------------------
  |  |  205|  82.8k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
  945|  82.8k|    }
  946|  84.7k|    if (!(may_match & MAY_ARP_THA)) {
  ------------------
  |  Branch (946:9): [True: 82.2k, False: 2.55k]
  ------------------
  947|  82.2k|        WC_UNMASK_FIELD(&wc, arp_tha);
  ------------------
  |  |  205|  82.2k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
  948|  82.2k|    }
  949|  84.7k|    if (!(may_match & MAY_IPV6)) {
  ------------------
  |  Branch (949:9): [True: 80.6k, False: 4.11k]
  ------------------
  950|  80.6k|        wc.masks.ipv6_src = wc.masks.ipv6_dst = in6addr_any;
  951|  80.6k|        wc.masks.ipv6_label = htonl(0);
  952|  80.6k|    }
  953|  84.7k|    if (!(may_match & MAY_ND_TARGET)) {
  ------------------
  |  Branch (953:9): [True: 84.0k, False: 706]
  ------------------
  954|  84.0k|        wc.masks.nd_target = in6addr_any;
  955|  84.0k|    }
  956|  84.7k|    if (!(may_match & MAY_MPLS)) {
  ------------------
  |  Branch (956:9): [True: 84.4k, False: 268]
  ------------------
  957|  84.4k|        memset(wc.masks.mpls_lse, 0, sizeof wc.masks.mpls_lse);
  958|  84.4k|    }
  959|       |
  960|       |    /* Log any changes. */
  961|  84.7k|    if (!flow_wildcards_equal(&wc, &match->wc)) {
  ------------------
  |  Branch (961:9): [True: 76.4k, False: 8.33k]
  ------------------
  962|  76.4k|        bool log = may_log && !VLOG_DROP_INFO(&rl);
  ------------------
  |  |  235|   152k|#define VLOG_DROP_INFO(RL) vlog_should_drop(&this_module, VLL_INFO, RL)
  ------------------
  |  Branch (962:20): [True: 76.4k, False: 0]
  |  Branch (962:31): [True: 0, False: 76.4k]
  ------------------
  963|  76.4k|        char *pre = (log
  ------------------
  |  Branch (963:22): [True: 0, False: 76.4k]
  ------------------
  964|  76.4k|                     ? match_to_string(match, NULL, OFP_DEFAULT_PRIORITY)
  ------------------
  |  |  138|      0|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
  965|  76.4k|                     : NULL);
  966|       |
  967|  76.4k|        match->wc = wc;
  968|  76.4k|        match_zero_wildcarded_fields(match);
  969|       |
  970|  76.4k|        if (log) {
  ------------------
  |  Branch (970:13): [True: 0, False: 76.4k]
  ------------------
  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|  76.4k|    }
  979|  84.7k|}

ofputil_format_meter_id:
   34|  7.46k|{
   35|  7.46k|    if (meter_id <= OFPM13_MAX) {
  ------------------
  |  Branch (35:9): [True: 4.14k, False: 3.31k]
  ------------------
   36|  4.14k|        ds_put_format(s, "meter%c%"PRIu32, separator, meter_id);
   37|  4.14k|    } else {
   38|  3.31k|        const char *name;
   39|  3.31k|        switch (meter_id) {
   40|    378|        case OFPM13_SLOWPATH:
  ------------------
  |  Branch (40:9): [True: 378, False: 2.94k]
  ------------------
   41|    378|            name = "slowpath";
   42|    378|            break;
   43|    104|        case OFPM13_CONTROLLER:
  ------------------
  |  Branch (43:9): [True: 104, False: 3.21k]
  ------------------
   44|    104|            name = "controller";
   45|    104|            break;
   46|    444|        case OFPM13_ALL:
  ------------------
  |  Branch (46:9): [True: 444, False: 2.87k]
  ------------------
   47|    444|            name = "all";
   48|    444|            break;
   49|  2.39k|        default:
  ------------------
  |  Branch (49:9): [True: 2.39k, False: 926]
  ------------------
   50|  2.39k|            name = "unknown";
   51|  3.31k|        }
   52|  3.31k|        ds_put_format(s, "meter%c%s", separator, name);
   53|  3.31k|    }
   54|  7.46k|}
ofputil_format_meter_band:
   59|  2.23k|{
   60|  2.23k|    ds_put_cstr(s, "\ntype=");
   61|  2.23k|    switch (mb->type) {
   62|  2.16k|    case OFPMBT13_DROP:
  ------------------
  |  Branch (62:5): [True: 2.16k, False: 74]
  ------------------
   63|  2.16k|        ds_put_cstr(s, "drop");
   64|  2.16k|        break;
   65|     74|    case OFPMBT13_DSCP_REMARK:
  ------------------
  |  Branch (65:5): [True: 74, False: 2.16k]
  ------------------
   66|     74|        ds_put_cstr(s, "dscp_remark");
   67|     74|        break;
   68|      0|    default:
  ------------------
  |  Branch (68:5): [True: 0, False: 2.23k]
  ------------------
   69|      0|        ds_put_format(s, "%u", mb->type);
   70|  2.23k|    }
   71|       |
   72|  2.23k|    ds_put_format(s, " rate=%"PRIu32, mb->rate);
   73|       |
   74|  2.23k|    if (flags & OFPMF13_BURST) {
  ------------------
  |  Branch (74:9): [True: 77, False: 2.15k]
  ------------------
   75|     77|        ds_put_format(s, " burst_size=%"PRIu32, mb->burst_size);
   76|     77|    }
   77|  2.23k|    if (mb->type == OFPMBT13_DSCP_REMARK) {
  ------------------
  |  Branch (77:9): [True: 74, False: 2.16k]
  ------------------
   78|       |        ds_put_format(s, " prec_level=%"PRIu8, mb->prec_level);
   79|     74|    }
   80|  2.23k|}
ofputil_decode_meter_mod:
  126|  13.5k|{
  127|  13.5k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  128|  13.5k|    ofpraw_pull_assert(&b);
  129|  13.5k|    const struct ofp13_meter_mod *omm = ofpbuf_pull(&b, sizeof *omm);
  130|       |
  131|       |    /* Translate the message. */
  132|  13.5k|    mm->command = ntohs(omm->command);
  133|  13.5k|    if (mm->command != OFPMC13_ADD &&
  ------------------
  |  Branch (133:9): [True: 9.01k, False: 4.58k]
  ------------------
  134|  9.01k|        mm->command != OFPMC13_MODIFY &&
  ------------------
  |  Branch (134:9): [True: 2.47k, False: 6.54k]
  ------------------
  135|  2.47k|        mm->command != OFPMC13_DELETE) {
  ------------------
  |  Branch (135:9): [True: 2.25k, False: 220]
  ------------------
  136|  2.25k|        return OFPERR_OFPMMFC_BAD_COMMAND;
  137|  2.25k|    }
  138|  11.3k|    mm->meter.meter_id = ntohl(omm->meter_id);
  139|       |
  140|  11.3k|    if (mm->command == OFPMC13_DELETE) {
  ------------------
  |  Branch (140:9): [True: 220, False: 11.1k]
  ------------------
  141|    220|        mm->meter.flags = 0;
  142|    220|        mm->meter.n_bands = 0;
  143|    220|        mm->meter.bands = NULL;
  144|  11.1k|    } else {
  145|  11.1k|        enum ofperr error;
  146|       |
  147|  11.1k|        mm->meter.flags = ntohs(omm->flags);
  148|  11.1k|        if (mm->meter.flags & OFPMF13_KBPS &&
  ------------------
  |  Branch (148:13): [True: 4.09k, False: 7.02k]
  ------------------
  149|  4.09k|            mm->meter.flags & OFPMF13_PKTPS) {
  ------------------
  |  Branch (149:13): [True: 3.64k, False: 446]
  ------------------
  150|  3.64k|            return OFPERR_OFPMMFC_BAD_FLAGS;
  151|  3.64k|        }
  152|       |
  153|  7.47k|        error = ofputil_pull_bands(&b, b.size, &mm->meter.n_bands, bands);
  154|  7.47k|        if (error) {
  ------------------
  |  Branch (154:13): [True: 5.65k, False: 1.82k]
  ------------------
  155|  5.65k|            return error;
  156|  5.65k|        }
  157|  1.82k|        mm->meter.bands = bands->data;
  158|  1.82k|    }
  159|  2.04k|    return 0;
  160|  11.3k|}
ofputil_decode_meter_request:
  164|  2.16k|{
  165|  2.16k|    const struct ofp13_meter_multipart_request *omr = ofpmsg_body(oh);
  166|       |    *meter_id = ntohl(omr->meter_id);
  167|  2.16k|}
ofputil_decode_meter_config:
  289|  2.97k|{
  290|  2.97k|    const struct ofp13_meter_config *omc;
  291|  2.97k|    enum ofperr err;
  292|       |
  293|       |    /* Pull OpenFlow headers for the first call. */
  294|  2.97k|    if (!msg->header) {
  ------------------
  |  Branch (294:9): [True: 1.82k, False: 1.14k]
  ------------------
  295|  1.82k|        ofpraw_pull_assert(msg);
  296|  1.82k|    }
  297|       |
  298|  2.97k|    if (!msg->size) {
  ------------------
  |  Branch (298:9): [True: 760, False: 2.21k]
  ------------------
  299|    760|        return EOF;
  300|    760|    }
  301|       |
  302|  2.21k|    omc = ofpbuf_try_pull(msg, sizeof *omc);
  303|  2.21k|    if (!omc) {
  ------------------
  |  Branch (303:9): [True: 0, False: 2.21k]
  ------------------
  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|  2.21k|    ofpbuf_clear(bands);
  310|  2.21k|    err = ofputil_pull_bands(msg, ntohs(omc->length) - sizeof *omc,
  311|  2.21k|                             &mc->n_bands, bands);
  312|  2.21k|    if (err) {
  ------------------
  |  Branch (312:9): [True: 1.06k, False: 1.14k]
  ------------------
  313|  1.06k|        return err;
  314|  1.06k|    }
  315|  1.14k|    mc->meter_id = ntohl(omc->meter_id);
  316|  1.14k|    mc->flags = ntohs(omc->flags);
  317|  1.14k|    mc->bands = bands->data;
  318|       |
  319|  1.14k|    return 0;
  320|  2.21k|}
ofputil_format_meter_config:
  347|  3.18k|{
  348|  3.18k|    uint16_t i;
  349|       |
  350|  3.18k|    ofputil_format_meter_id(s, mc->meter_id, '=');
  351|  3.18k|    ds_put_char(s, ' ');
  352|       |
  353|  3.18k|    ofp_print_meter_flags(s, mc->flags);
  354|       |
  355|  3.18k|    ds_put_cstr(s, "bands=");
  356|  5.42k|    for (i = 0; i < mc->n_bands; ++i) {
  ------------------
  |  Branch (356:17): [True: 2.23k, False: 3.18k]
  ------------------
  357|  2.23k|        ofputil_format_meter_band(s, mc->flags, &mc->bands[i]);
  358|  2.23k|    }
  359|  3.18k|    ds_put_char(s, '\n');
  360|  3.18k|}
ofputil_decode_meter_stats:
  404|  6.16k|{
  405|  6.16k|    const struct ofp13_meter_stats *oms;
  406|  6.16k|    enum ofperr err;
  407|       |
  408|       |    /* Pull OpenFlow headers for the first call. */
  409|  6.16k|    if (!msg->header) {
  ------------------
  |  Branch (409:9): [True: 4.05k, False: 2.10k]
  ------------------
  410|  4.05k|        ofpraw_pull_assert(msg);
  411|  4.05k|    }
  412|       |
  413|  6.16k|    if (!msg->size) {
  ------------------
  |  Branch (413:9): [True: 429, False: 5.73k]
  ------------------
  414|    429|        return EOF;
  415|    429|    }
  416|       |
  417|  5.73k|    oms = ofpbuf_try_pull(msg, sizeof *oms);
  418|  5.73k|    if (!oms) {
  ------------------
  |  Branch (418:9): [True: 1.61k, False: 4.12k]
  ------------------
  419|  1.61k|        VLOG_WARN_RL(&rl, "OFPMP_METER reply has %"PRIu32" leftover bytes "
  ------------------
  |  |  224|  1.61k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.61k|    do {                                                                \
  |  |  |  |  288|  1.61k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.61k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.61k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.61k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.61k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  420|  1.61k|                     "at end", msg->size);
  421|  1.61k|        return OFPERR_OFPBRC_BAD_LEN;
  422|  1.61k|    }
  423|       |
  424|  4.12k|    ofpbuf_clear(bands);
  425|  4.12k|    err = ofputil_pull_band_stats(msg, ntohs(oms->len) - sizeof *oms,
  426|  4.12k|                                  &ms->n_bands, bands);
  427|  4.12k|    if (err) {
  ------------------
  |  Branch (427:9): [True: 2.01k, False: 2.10k]
  ------------------
  428|  2.01k|        return err;
  429|  2.01k|    }
  430|  2.10k|    ms->meter_id = ntohl(oms->meter_id);
  431|  2.10k|    ms->flow_count = ntohl(oms->flow_count);
  432|  2.10k|    ms->packet_in_count = ntohll(oms->packet_in_count);
  433|  2.10k|    ms->byte_in_count = ntohll(oms->byte_in_count);
  434|  2.10k|    ms->duration_sec = ntohl(oms->duration_sec);
  435|  2.10k|    ms->duration_nsec = ntohl(oms->duration_nsec);
  436|  2.10k|    ms->bands = bands->data;
  437|       |
  438|  2.10k|    return 0;
  439|  4.12k|}
ofputil_format_meter_stats:
  443|  2.10k|{
  444|  2.10k|    uint16_t i;
  445|       |
  446|  2.10k|    ofputil_format_meter_id(s, ms->meter_id, ':');
  447|  2.10k|    ds_put_char(s, ' ');
  448|  2.10k|    ds_put_format(s, "flow_count:%"PRIu32" ", ms->flow_count);
  449|  2.10k|    ds_put_format(s, "packet_in_count:%"PRIu64" ", ms->packet_in_count);
  450|  2.10k|    ds_put_format(s, "byte_in_count:%"PRIu64" ", ms->byte_in_count);
  451|  2.10k|    ds_put_cstr(s, "duration:");
  452|  2.10k|    ofp_print_duration(s, ms->duration_sec, ms->duration_nsec);
  453|  2.10k|    ds_put_char(s, ' ');
  454|       |
  455|  2.10k|    ds_put_cstr(s, "bands:\n");
  456|  4.17k|    for (i = 0; i < ms->n_bands; ++i) {
  ------------------
  |  Branch (456:17): [True: 2.07k, False: 2.10k]
  ------------------
  457|  2.07k|        ds_put_format(s, "%d: ", i);
  458|  2.07k|        ds_put_format(s, "packet_count:%"PRIu64" ", ms->bands[i].packet_count);
  459|  2.07k|        ds_put_format(s, "byte_count:%"PRIu64"\n", ms->bands[i].byte_count);
  460|  2.07k|    }
  461|  2.10k|}
ofputil_decode_meter_features:
  466|    934|{
  467|    934|    const struct ofp13_meter_features *omf = ofpmsg_body(oh);
  468|       |
  469|    934|    mf->max_meters = ntohl(omf->max_meter);
  470|    934|    mf->band_types = ntohl(omf->band_types);
  471|       |    mf->capabilities = ntohl(omf->capabilities);
  472|    934|    mf->max_bands = omf->max_bands;
  473|    934|    mf->max_color = omf->max_color;
  474|    934|}
ofputil_format_meter_features:
  524|    934|{
  525|    934|    ds_put_format(s, "\nmax_meter:%"PRIu32, mf->max_meters);
  526|    934|    ds_put_format(s, " max_bands:%"PRIu8, mf->max_bands);
  527|    934|    ds_put_format(s, " max_color:%"PRIu8"\n", mf->max_color);
  528|       |
  529|    934|    ds_put_cstr(s, "band_types: ");
  530|    934|    ofp_print_bit_names(s, mf->band_types,
  531|    934|                        ofputil_meter_band_types_to_name, ' ');
  532|    934|    ds_put_char(s, '\n');
  533|       |
  534|    934|    ds_put_cstr(s, "capabilities: ");
  535|    934|    ofp_print_bit_names(s, mf->capabilities,
  536|    934|                        ofputil_meter_capabilities_to_name, ' ');
  537|    934|    ds_put_char(s, '\n');
  538|    934|}
ofputil_format_meter_mod:
  797|  2.04k|{
  798|  2.04k|    switch (mm->command) {
  799|  1.15k|    case OFPMC13_ADD:
  ------------------
  |  Branch (799:5): [True: 1.15k, False: 887]
  ------------------
  800|  1.15k|        ds_put_cstr(s, " ADD ");
  801|  1.15k|        break;
  802|    667|    case OFPMC13_MODIFY:
  ------------------
  |  Branch (802:5): [True: 667, False: 1.37k]
  ------------------
  803|    667|        ds_put_cstr(s, " MOD ");
  804|    667|        break;
  805|    220|    case OFPMC13_DELETE:
  ------------------
  |  Branch (805:5): [True: 220, False: 1.82k]
  ------------------
  806|    220|        ds_put_cstr(s, " DEL ");
  807|    220|        break;
  808|      0|    default:
  ------------------
  |  Branch (808:5): [True: 0, False: 2.04k]
  ------------------
  809|      0|        ds_put_format(s, " cmd:%d ", mm->command);
  810|  2.04k|    }
  811|       |
  812|  2.04k|    ofputil_format_meter_config(s, &mm->meter);
  813|  2.04k|}
ofp-meter.c:ofputil_pull_bands:
   85|  9.68k|{
   86|  9.68k|    const struct ofp13_meter_band_header *ombh;
   87|  9.68k|    struct ofputil_meter_band *mb;
   88|  9.68k|    uint16_t n = 0;
   89|       |
   90|  9.68k|    ombh = ofpbuf_try_pull(msg, len);
   91|  9.68k|    if (!ombh) {
  ------------------
  |  Branch (91:9): [True: 717, False: 8.97k]
  ------------------
   92|    717|        return OFPERR_OFPBRC_BAD_LEN;
   93|    717|    }
   94|       |
   95|  11.5k|    while (len >= sizeof (struct ofp13_meter_band_drop)) {
  ------------------
  |  Branch (95:12): [True: 4.24k, False: 7.30k]
  ------------------
   96|  4.24k|        size_t ombh_len = ntohs(ombh->len);
   97|       |        /* All supported band types have the same length. */
   98|  4.24k|        if (ombh_len != sizeof (struct ofp13_meter_band_drop)) {
  ------------------
  |  Branch (98:13): [True: 962, False: 3.27k]
  ------------------
   99|    962|            return OFPERR_OFPBRC_BAD_LEN;
  100|    962|        }
  101|  3.27k|        mb = ofpbuf_put_uninit(bands, sizeof *mb);
  102|  3.27k|        mb->type = ntohs(ombh->type);
  103|  3.27k|        if (mb->type != OFPMBT13_DROP && mb->type != OFPMBT13_DSCP_REMARK) {
  ------------------
  |  Branch (103:13): [True: 902, False: 2.37k]
  |  Branch (103:42): [True: 709, False: 193]
  ------------------
  104|    709|            return OFPERR_OFPMMFC_BAD_BAND;
  105|    709|        }
  106|  2.56k|        mb->rate = ntohl(ombh->rate);
  107|  2.56k|        mb->burst_size = ntohl(ombh->burst_size);
  108|  2.56k|        mb->prec_level = (mb->type == OFPMBT13_DSCP_REMARK) ?
  ------------------
  |  Branch (108:26): [True: 193, False: 2.37k]
  ------------------
  109|  2.37k|            ((struct ofp13_meter_band_dscp_remark *)ombh)->prec_level : 0;
  110|  2.56k|        n++;
  111|  2.56k|        len -= ombh_len;
  112|  2.56k|        ombh = ALIGNED_CAST(struct ofp13_meter_band_header *,
  ------------------
  |  |  434|  2.56k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  113|  2.56k|                            (char *) ombh + ombh_len);
  114|  2.56k|    }
  115|  7.30k|    if (len) {
  ------------------
  |  Branch (115:9): [True: 4.33k, False: 2.96k]
  ------------------
  116|  4.33k|        return OFPERR_OFPBRC_BAD_LEN;
  117|  4.33k|    }
  118|  2.96k|    *n_bands = n;
  119|  2.96k|    return 0;
  120|  7.30k|}
ofp-meter.c:ofp_print_meter_flags:
  324|  3.18k|{
  325|  3.18k|    if (flags & OFPMF13_KBPS) {
  ------------------
  |  Branch (325:9): [True: 1.28k, False: 1.90k]
  ------------------
  326|  1.28k|        ds_put_cstr(s, "kbps ");
  327|  1.28k|    }
  328|  3.18k|    if (flags & OFPMF13_PKTPS) {
  ------------------
  |  Branch (328:9): [True: 1.10k, False: 2.08k]
  ------------------
  329|  1.10k|        ds_put_cstr(s, "pktps ");
  330|  1.10k|    }
  331|  3.18k|    if (flags & OFPMF13_BURST) {
  ------------------
  |  Branch (331:9): [True: 642, False: 2.54k]
  ------------------
  332|    642|        ds_put_cstr(s, "burst ");
  333|    642|    }
  334|  3.18k|    if (flags & OFPMF13_STATS) {
  ------------------
  |  Branch (334:9): [True: 1.09k, False: 2.09k]
  ------------------
  335|  1.09k|        ds_put_cstr(s, "stats ");
  336|  1.09k|    }
  337|       |
  338|  3.18k|    flags &= ~(OFPMF13_KBPS | OFPMF13_PKTPS | OFPMF13_BURST | OFPMF13_STATS);
  339|  3.18k|    if (flags) {
  ------------------
  |  Branch (339:9): [True: 2.10k, False: 1.08k]
  ------------------
  340|  2.10k|        ds_put_format(s, "flags:0x%x ", (unsigned)flags);
  341|  2.10k|    }
  342|  3.18k|}
ofp-meter.c:ofputil_pull_band_stats:
  365|  4.12k|{
  366|  4.12k|    const struct ofp13_meter_band_stats *ombs;
  367|  4.12k|    struct ofputil_meter_band_stats *mbs;
  368|  4.12k|    uint16_t n, i;
  369|       |
  370|  4.12k|    ombs = ofpbuf_try_pull(msg, len);
  371|  4.12k|    if (!ombs) {
  ------------------
  |  Branch (371:9): [True: 1.46k, False: 2.66k]
  ------------------
  372|  1.46k|        return OFPERR_OFPBRC_BAD_LEN;
  373|  1.46k|    }
  374|       |
  375|  2.66k|    n = len / sizeof *ombs;
  376|  2.66k|    if (len != n * sizeof *ombs) {
  ------------------
  |  Branch (376:9): [True: 555, False: 2.10k]
  ------------------
  377|    555|        return OFPERR_OFPBRC_BAD_LEN;
  378|    555|    }
  379|       |
  380|  2.10k|    mbs = ofpbuf_put_uninit(bands, len);
  381|       |
  382|  4.17k|    for (i = 0; i < n; ++i) {
  ------------------
  |  Branch (382:17): [True: 2.07k, False: 2.10k]
  ------------------
  383|  2.07k|        mbs[i].packet_count = ntohll(ombs[i].packet_band_count);
  384|  2.07k|        mbs[i].byte_count = ntohll(ombs[i].byte_band_count);
  385|  2.07k|    }
  386|  2.10k|    *n_bands = n;
  387|  2.10k|    return 0;
  388|  2.66k|}
ofp-meter.c:ofputil_meter_band_types_to_name:
  497|  5.89k|{
  498|  5.89k|    switch (bit) {
  ------------------
  |  Branch (498:13): [True: 337, False: 5.55k]
  ------------------
  499|    279|    case 1 << OFPMBT13_DROP:          return "drop";
  ------------------
  |  Branch (499:5): [True: 279, False: 5.61k]
  ------------------
  500|     58|    case 1 << OFPMBT13_DSCP_REMARK:   return "dscp_remark";
  ------------------
  |  Branch (500:5): [True: 58, False: 5.83k]
  ------------------
  501|  5.89k|    }
  502|       |
  503|  5.55k|    return NULL;
  504|  5.89k|}
ofp-meter.c:ofputil_meter_capabilities_to_name:
  508|  6.72k|{
  509|  6.72k|    enum ofp13_meter_flags flag = bit;
  510|       |
  511|  6.72k|    switch (flag) {
  ------------------
  |  Branch (511:13): [True: 788, False: 5.93k]
  ------------------
  512|    245|    case OFPMF13_KBPS:    return "kbps";
  ------------------
  |  Branch (512:5): [True: 245, False: 6.47k]
  ------------------
  513|    224|    case OFPMF13_PKTPS:   return "pktps";
  ------------------
  |  Branch (513:5): [True: 224, False: 6.49k]
  ------------------
  514|    235|    case OFPMF13_BURST:   return "burst";
  ------------------
  |  Branch (514:5): [True: 235, False: 6.48k]
  ------------------
  515|     84|    case OFPMF13_STATS:   return "stats";
  ------------------
  |  Branch (515:5): [True: 84, False: 6.63k]
  ------------------
  516|  6.72k|    }
  517|       |
  518|  5.93k|    return NULL;
  519|  6.72k|}

ofp_flow_removed_reason_to_string:
   44|  15.1k|{
   45|  15.1k|    switch (reason) {
   46|  4.30k|    case OFPRR_IDLE_TIMEOUT:
  ------------------
  |  Branch (46:5): [True: 4.30k, False: 10.8k]
  ------------------
   47|  4.30k|        return "idle";
   48|  2.50k|    case OFPRR_HARD_TIMEOUT:
  ------------------
  |  Branch (48:5): [True: 2.50k, False: 12.6k]
  ------------------
   49|  2.50k|        return "hard";
   50|  1.55k|    case OFPRR_DELETE:
  ------------------
  |  Branch (50:5): [True: 1.55k, False: 13.5k]
  ------------------
   51|  1.55k|        return "delete";
   52|  1.23k|    case OFPRR_GROUP_DELETE:
  ------------------
  |  Branch (52:5): [True: 1.23k, False: 13.8k]
  ------------------
   53|  1.23k|        return "group_delete";
   54|  1.94k|    case OFPRR_EVICTION:
  ------------------
  |  Branch (54:5): [True: 1.94k, False: 13.1k]
  ------------------
   55|  1.94k|        return "eviction";
   56|    909|    case OFPRR_METER_DELETE:
  ------------------
  |  Branch (56:5): [True: 909, False: 14.2k]
  ------------------
   57|    909|        return "meter_delete";
   58|      3|    case OVS_OFPRR_NONE:
  ------------------
  |  Branch (58:5): [True: 3, False: 15.1k]
  ------------------
   59|  2.67k|    default:
  ------------------
  |  Branch (59:5): [True: 2.67k, False: 12.4k]
  ------------------
   60|  2.67k|        snprintf(reasonbuf, bufsize, "%d", (int) reason);
   61|  2.67k|        return reasonbuf;
   62|  15.1k|    }
   63|  15.1k|}
ofputil_decode_flow_removed:
   71|  12.5k|{
   72|  12.5k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
   73|  12.5k|    enum ofpraw raw = ofpraw_pull_assert(&b);
   74|  12.5k|    if (raw == OFPRAW_OFPT15_FLOW_REMOVED) {
  ------------------
  |  Branch (74:9): [True: 5.13k, False: 7.39k]
  ------------------
   75|  5.13k|        const struct ofp15_flow_removed *ofr;
   76|  5.13k|        enum ofperr error;
   77|       |
   78|  5.13k|        ofr = ofpbuf_pull(&b, sizeof *ofr);
   79|       |
   80|  5.13k|        error = ofputil_pull_ofp11_match(&b, NULL, NULL,  &fr->match, NULL);
   81|  5.13k|        if (error) {
  ------------------
  |  Branch (81:13): [True: 1.46k, False: 3.67k]
  ------------------
   82|  1.46k|            return error;
   83|  1.46k|        }
   84|       |
   85|  3.67k|        struct oxs_stats stats;
   86|  3.67k|        uint16_t statlen;
   87|  3.67k|        uint8_t oxs_field_set;
   88|  3.67k|        error = oxs_pull_stat(&b, &stats, &statlen, &oxs_field_set);
   89|  3.67k|        if (error) {
  ------------------
  |  Branch (89:13): [True: 2.97k, False: 694]
  ------------------
   90|  2.97k|            return error;
   91|  2.97k|        }
   92|       |
   93|    694|        fr->cookie = ofr->cookie;
   94|    694|        fr->priority = ntohs(ofr->priority);
   95|    694|        fr->reason = ofr->reason;
   96|    694|        fr->table_id = ofr->table_id;
   97|    694|        fr->duration_sec = stats.duration_sec;
   98|    694|        fr->duration_nsec = stats.duration_nsec;
   99|    694|        fr->idle_timeout = ntohs(ofr->idle_timeout);
  100|    694|        fr->hard_timeout = ntohs(ofr->hard_timeout);
  101|    694|        fr->packet_count = stats.packet_count;
  102|    694|        fr->byte_count = stats.byte_count;
  103|  7.39k|    } else if (raw == OFPRAW_OFPT11_FLOW_REMOVED) {
  ------------------
  |  Branch (103:16): [True: 5.88k, False: 1.50k]
  ------------------
  104|  5.88k|        const struct ofp12_flow_removed *ofr;
  105|  5.88k|        enum ofperr error;
  106|       |
  107|  5.88k|        ofr = ofpbuf_pull(&b, sizeof *ofr);
  108|       |
  109|  5.88k|        error = ofputil_pull_ofp11_match(&b, NULL, NULL, &fr->match, NULL);
  110|  5.88k|        if (error) {
  ------------------
  |  Branch (110:13): [True: 2.36k, False: 3.52k]
  ------------------
  111|  2.36k|            return error;
  112|  2.36k|        }
  113|       |
  114|  3.52k|        fr->priority = ntohs(ofr->priority);
  115|  3.52k|        fr->cookie = ofr->cookie;
  116|  3.52k|        fr->reason = ofr->reason;
  117|  3.52k|        fr->table_id = ofr->table_id;
  118|  3.52k|        fr->duration_sec = ntohl(ofr->duration_sec);
  119|  3.52k|        fr->duration_nsec = ntohl(ofr->duration_nsec);
  120|  3.52k|        fr->idle_timeout = ntohs(ofr->idle_timeout);
  121|  3.52k|        fr->hard_timeout = ntohs(ofr->hard_timeout);
  122|  3.52k|        fr->packet_count = ntohll(ofr->packet_count);
  123|  3.52k|        fr->byte_count = ntohll(ofr->byte_count);
  124|  3.52k|    } else if (raw == OFPRAW_OFPT10_FLOW_REMOVED) {
  ------------------
  |  Branch (124:16): [True: 150, False: 1.35k]
  ------------------
  125|    150|        const struct ofp10_flow_removed *ofr;
  126|       |
  127|    150|        ofr = ofpbuf_pull(&b, sizeof *ofr);
  128|       |
  129|    150|        ofputil_match_from_ofp10_match(&ofr->match, &fr->match);
  130|    150|        fr->priority = ntohs(ofr->priority);
  131|    150|        fr->cookie = ofr->cookie;
  132|    150|        fr->reason = ofr->reason;
  133|    150|        fr->table_id = 255;
  134|    150|        fr->duration_sec = ntohl(ofr->duration_sec);
  135|    150|        fr->duration_nsec = ntohl(ofr->duration_nsec);
  136|    150|        fr->idle_timeout = ntohs(ofr->idle_timeout);
  137|    150|        fr->hard_timeout = 0;
  138|    150|        fr->packet_count = ntohll(ofr->packet_count);
  139|    150|        fr->byte_count = ntohll(ofr->byte_count);
  140|  1.35k|    } else if (raw == OFPRAW_NXT_FLOW_REMOVED) {
  ------------------
  |  Branch (140:16): [True: 1.35k, False: 0]
  ------------------
  141|  1.35k|        struct nx_flow_removed *nfr;
  142|  1.35k|        enum ofperr error;
  143|       |
  144|  1.35k|        nfr = ofpbuf_pull(&b, sizeof *nfr);
  145|  1.35k|        error = nx_pull_match(&b, ntohs(nfr->match_len), &fr->match, NULL,
  146|  1.35k|                              NULL, false, NULL, NULL);
  147|  1.35k|        if (error) {
  ------------------
  |  Branch (147:13): [True: 163, False: 1.19k]
  ------------------
  148|    163|            return error;
  149|    163|        }
  150|  1.19k|        if (b.size) {
  ------------------
  |  Branch (150:13): [True: 290, False: 904]
  ------------------
  151|    290|            return OFPERR_OFPBRC_BAD_LEN;
  152|    290|        }
  153|       |
  154|    904|        fr->priority = ntohs(nfr->priority);
  155|    904|        fr->cookie = nfr->cookie;
  156|    904|        fr->reason = nfr->reason;
  157|    904|        fr->table_id = nfr->table_id ? nfr->table_id - 1 : 255;
  ------------------
  |  Branch (157:24): [True: 486, False: 418]
  ------------------
  158|    904|        fr->duration_sec = ntohl(nfr->duration_sec);
  159|    904|        fr->duration_nsec = ntohl(nfr->duration_nsec);
  160|    904|        fr->idle_timeout = ntohs(nfr->idle_timeout);
  161|    904|        fr->hard_timeout = 0;
  162|    904|        fr->packet_count = ntohll(nfr->packet_count);
  163|    904|        fr->byte_count = ntohll(nfr->byte_count);
  164|    904|    } else {
  165|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  166|      0|    }
  167|       |
  168|  5.27k|    return 0;
  169|  12.5k|}
ofputil_flow_removed_format:
  302|  5.27k|{
  303|  5.27k|    char reasonbuf[OFP_FLOW_REMOVED_REASON_BUFSIZE];
  304|       |
  305|  5.27k|    ds_put_char(s, ' ');
  306|  5.27k|    match_format(&fr->match, port_map, s, fr->priority);
  307|       |
  308|  5.27k|    ds_put_format(s, " reason=%s",
  309|  5.27k|                  ofp_flow_removed_reason_to_string(fr->reason, reasonbuf,
  310|  5.27k|                                                    sizeof reasonbuf));
  311|       |
  312|  5.27k|    if (fr->table_id != 255) {
  ------------------
  |  Branch (312:9): [True: 4.66k, False: 605]
  ------------------
  313|  4.66k|        ds_put_format(s, " table_id=");
  314|  4.66k|        ofputil_format_table(fr->table_id, table_map, s);
  315|  4.66k|    }
  316|       |
  317|  5.27k|    if (fr->cookie != htonll(0)) {
  ------------------
  |  Branch (317:9): [True: 4.71k, False: 554]
  ------------------
  318|  4.71k|        ds_put_format(s, " cookie:0x%"PRIx64, ntohll(fr->cookie));
  319|  4.71k|    }
  320|  5.27k|    ds_put_cstr(s, " duration");
  321|  5.27k|    ofp_print_duration(s, fr->duration_sec, fr->duration_nsec);
  322|  5.27k|    ds_put_format(s, " idle%"PRIu16, fr->idle_timeout);
  323|  5.27k|    if (fr->hard_timeout) {
  ------------------
  |  Branch (323:9): [True: 1.41k, False: 3.85k]
  ------------------
  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|  1.41k|    }
  328|  5.27k|    ds_put_format(s, " pkts%"PRIu64" bytes%"PRIu64"\n",
  329|  5.27k|                  fr->packet_count, fr->byte_count);
  330|  5.27k|}
ofputil_decode_flow_monitor_request:
  439|  16.2k|{
  440|  16.2k|    uint16_t flags;
  441|  16.2k|    enum ofperr error;
  442|  16.2k|    enum ofpraw raw;
  443|       |
  444|  16.2k|    error = (msg->header ? ofpraw_decode(&raw, msg->header)
  ------------------
  |  Branch (444:14): [True: 8.24k, False: 8.02k]
  ------------------
  445|  16.2k|             : ofpraw_pull(&raw, msg));
  446|  16.2k|    if (error) {
  ------------------
  |  Branch (446:9): [True: 0, False: 16.2k]
  ------------------
  447|      0|        return error;
  448|      0|    }
  449|       |
  450|  16.2k|    if (!msg->size) {
  ------------------
  |  Branch (450:9): [True: 3.88k, False: 12.3k]
  ------------------
  451|  3.88k|        return EOF;
  452|  3.88k|    }
  453|       |
  454|  12.3k|    switch ((int) raw) {
  455|  7.81k|    case OFPRAW_NXST_FLOW_MONITOR_REQUEST: {
  ------------------
  |  Branch (455:5): [True: 7.81k, False: 4.57k]
  ------------------
  456|  7.81k|        struct nx_flow_monitor_request *nfmr;
  457|       |
  458|  7.81k|        nfmr = ofpbuf_try_pull(msg, sizeof *nfmr);
  459|  7.81k|        if (!nfmr) {
  ------------------
  |  Branch (459:13): [True: 936, False: 6.87k]
  ------------------
  460|    936|            VLOG_WARN_RL(&rl, "NXST_FLOW_MONITOR request has %"PRIu32" "
  ------------------
  |  |  224|    936|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    936|    do {                                                                \
  |  |  |  |  288|    936|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    936|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 936]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    936|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 936]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  461|    936|                    "leftover bytes at end", msg->size);
  462|    936|            return OFPERR_OFPBRC_BAD_LEN;
  463|    936|        }
  464|       |
  465|  6.87k|        flags = ntohs(nfmr->flags);
  466|  6.87k|        if (!(flags & (NXFMF_ADD | NXFMF_DELETE | NXFMF_MODIFY))
  ------------------
  |  Branch (466:13): [True: 367, False: 6.50k]
  ------------------
  467|  6.50k|            || flags & ~(NXFMF_INITIAL | NXFMF_ADD | NXFMF_DELETE
  ------------------
  |  Branch (467:16): [True: 578, False: 5.93k]
  ------------------
  468|  6.50k|                         | NXFMF_MODIFY | NXFMF_ACTIONS | NXFMF_OWN)) {
  469|    945|            VLOG_WARN_RL(&rl, "NXST_FLOW_MONITOR has bad flags %#"PRIx16,
  ------------------
  |  |  224|    945|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    945|    do {                                                                \
  |  |  |  |  288|    945|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    945|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 945]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    945|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 945]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  470|    945|                         flags);
  471|    945|            return OFPERR_OFPMOFC_BAD_FLAGS;
  472|    945|        }
  473|       |
  474|  5.93k|        if (!is_all_zeros(nfmr->zeros, sizeof nfmr->zeros)) {
  ------------------
  |  Branch (474:13): [True: 655, False: 5.27k]
  ------------------
  475|    655|            return OFPERR_NXBRC_MUST_BE_ZERO;
  476|    655|        }
  477|       |
  478|  5.27k|        rq->id = ntohl(nfmr->id);
  479|  5.27k|        rq->command = OFPFMC_ADD;
  480|  5.27k|        rq->flags = nx_to_ofp_flow_monitor_flags(flags);
  481|  5.27k|        rq->out_port = u16_to_ofp(ntohs(nfmr->out_port));
  482|  5.27k|        rq->table_id = nfmr->table_id;
  483|  5.27k|        rq->out_group = OFPG_ANY;
  484|       |
  485|  5.27k|        return nx_pull_match(msg, ntohs(nfmr->match_len), &rq->match, NULL,
  486|  5.27k|                NULL, false, NULL, NULL);
  487|  5.93k|    }
  488|      0|    case OFPRAW_ONFST13_FLOW_MONITOR_REQUEST: {
  ------------------
  |  Branch (488:5): [True: 0, False: 12.3k]
  ------------------
  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|  4.57k|    case OFPRAW_OFPST14_FLOW_MONITOR_REQUEST: {
  ------------------
  |  Branch (523:5): [True: 4.57k, False: 7.81k]
  ------------------
  524|  4.57k|        struct ofp14_flow_monitor_request *ofmr;
  525|       |
  526|  4.57k|        ofmr = ofpbuf_try_pull(msg, sizeof *ofmr);
  527|  4.57k|        if (!ofmr) {
  ------------------
  |  Branch (527:13): [True: 284, False: 4.28k]
  ------------------
  528|    284|            VLOG_WARN_RL(&rl, "OFPST_FLOW_MONITOR request has %"PRIu32" "
  ------------------
  |  |  224|    284|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    284|    do {                                                                \
  |  |  |  |  288|    284|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    284|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 284]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    284|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 284]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  529|    284|                    "leftover bytes at end", msg->size);
  530|    284|            return OFPERR_OFPBRC_BAD_LEN;
  531|    284|        }
  532|       |
  533|  4.28k|        flags = ntohs(ofmr->flags);
  534|  4.28k|        rq->id = ntohl(ofmr->monitor_id);
  535|  4.28k|        rq->command = ofmr->command;
  536|       |
  537|  4.28k|        if (ofmr->command == OFPFMC_DELETE) {
  ------------------
  |  Branch (537:13): [True: 243, False: 4.04k]
  ------------------
  538|    243|            return ofputil_pull_ofp11_match(msg, NULL, NULL, &rq->match, NULL);
  539|    243|        }
  540|       |
  541|  4.04k|        if (!(flags & (OFPFMF_ADD | OFPFMF_REMOVED | OFPFMF_MODIFY))
  ------------------
  |  Branch (541:13): [True: 117, False: 3.92k]
  ------------------
  542|  3.92k|                || flags & ~(OFPFMF_INITIAL | OFPFMF_ADD | OFPFMF_REMOVED
  ------------------
  |  Branch (542:20): [True: 184, False: 3.74k]
  ------------------
  543|  3.92k|                    | OFPFMF_MODIFY | OFPFMF_INSTRUCTIONS | OFPFMF_ONLY_OWN)) {
  544|    301|            VLOG_WARN_RL(&rl, "OFPST_FLOW_MONITOR has bad flags %#"PRIx16,
  ------------------
  |  |  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]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  545|    301|                         flags);
  546|    301|            return OFPERR_OFPMOFC_BAD_FLAGS;
  547|    301|        }
  548|       |
  549|  3.74k|        rq->command = ofmr->command;
  550|  3.74k|        rq->flags = flags;
  551|  3.74k|        error = ofputil_port_from_ofp11(ofmr->out_port, &rq->out_port);
  552|  3.74k|        if (error) {
  ------------------
  |  Branch (552:13): [True: 527, False: 3.21k]
  ------------------
  553|    527|            return error;
  554|    527|        }
  555|  3.21k|        rq->out_group = ntohl(ofmr->out_group);
  556|  3.21k|        rq->table_id = ofmr->table_id;
  557|       |
  558|  3.21k|        return ofputil_pull_ofp11_match(msg, NULL, NULL, &rq->match, NULL);
  559|  3.74k|    }
  560|      0|    default:
  ------------------
  |  Branch (560:5): [True: 0, False: 12.3k]
  ------------------
  561|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  562|  12.3k|    }
  563|  12.3k|}
ofputil_flow_monitor_request_format:
  678|  8.24k|{
  679|  8.24k|    if (request->command == OFPFMC_DELETE) {
  ------------------
  |  Branch (679:9): [True: 126, False: 8.11k]
  ------------------
  680|    126|        ds_put_format(s, "\n id=%"PRIu32" command=%s", request->id,
  681|    126|                      ofp_flow_monitor_command_to_string(request->command));
  682|    126|        return;
  683|    126|    }
  684|  8.11k|    ds_put_format(s, "\n id=%"PRIu32" flags=", request->id);
  685|  8.11k|    ofp_print_bit_names(s, request->flags,
  686|  8.11k|                        ofp_flow_monitor_flags_to_name, ',');
  687|       |
  688|  8.11k|    if (request->out_port != OFPP_NONE) {
  ------------------
  |  |   47|  8.11k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|  8.11k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (688:9): [True: 6.06k, False: 2.05k]
  ------------------
  689|  6.06k|        ds_put_cstr(s, " out_port=");
  690|  6.06k|        ofputil_format_port(request->out_port, port_map, s);
  691|  6.06k|    }
  692|       |
  693|  8.11k|    if (request->out_group && (request->out_group != OFPG_ANY)) {
  ------------------
  |  Branch (693:9): [True: 8.09k, False: 23]
  |  Branch (693:31): [True: 2.91k, False: 5.18k]
  ------------------
  694|  2.91k|        ds_put_format(s, " out_group=%d", request->out_group);
  695|  2.91k|    }
  696|       |
  697|  8.11k|    if (request->table_id != 0xff) {
  ------------------
  |  Branch (697:9): [True: 6.20k, False: 1.91k]
  ------------------
  698|  6.20k|        ds_put_format(s, " table=");
  699|  6.20k|        ofputil_format_table(request->table_id, table_map, s);
  700|  6.20k|    }
  701|       |
  702|  8.11k|    if (request->command != OFPFMC_DELETE) {
  ------------------
  |  Branch (702:9): [True: 8.11k, False: 0]
  ------------------
  703|  8.11k|        ds_put_char(s, ' ');
  704|  8.11k|        match_format(&request->match, port_map, s, OFP_DEFAULT_PRIORITY);
  ------------------
  |  |  138|  8.11k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
  705|  8.11k|        ds_chomp(s, ' ');
  706|  8.11k|    }
  707|  8.11k|}
ofputil_decode_flow_update:
  824|  52.1k|{
  825|  52.1k|    unsigned int length;
  826|  52.1k|    struct ofp_header *oh;
  827|  52.1k|    enum ofperr error;
  828|  52.1k|    enum ofpraw raw;
  829|       |
  830|  52.1k|    if (!msg->header) {
  ------------------
  |  Branch (830:9): [True: 29.0k, False: 23.1k]
  ------------------
  831|  29.0k|        ofpraw_pull_assert(msg);
  832|  29.0k|    }
  833|       |
  834|  52.1k|    error = ofpraw_decode(&raw, msg->header);
  835|  52.1k|    if (error) {
  ------------------
  |  Branch (835:9): [True: 0, False: 52.1k]
  ------------------
  836|      0|        return error;
  837|      0|    }
  838|       |
  839|  52.1k|    ofpbuf_clear(ofpacts);
  840|  52.1k|    if (!msg->size) {
  ------------------
  |  Branch (840:9): [True: 7.29k, False: 44.8k]
  ------------------
  841|  7.29k|        return EOF;
  842|  7.29k|    }
  843|       |
  844|  44.8k|    oh = msg->header;
  845|       |
  846|  44.8k|    switch ((int) raw) {
  847|      0|    case OFPRAW_ONFST13_FLOW_MONITOR_REPLY:
  ------------------
  |  Branch (847:5): [True: 0, False: 44.8k]
  ------------------
  848|  5.16k|    case OFPRAW_NXST_FLOW_MONITOR_REPLY: {
  ------------------
  |  Branch (848:5): [True: 5.16k, False: 39.7k]
  ------------------
  849|  5.16k|        struct nx_flow_update_header *nfuh;
  850|  5.16k|        enum nx_flow_update_event nx_event;
  851|       |
  852|  5.16k|        if (msg->size < sizeof(struct nx_flow_update_header)) {
  ------------------
  |  Branch (852:13): [True: 0, False: 5.16k]
  ------------------
  853|      0|            goto bad_len;
  854|      0|        }
  855|       |
  856|  5.16k|        nfuh = msg->data;
  857|  5.16k|        length = ntohs(nfuh->length);
  858|  5.16k|        if (length > msg->size || length % 8) {
  ------------------
  |  Branch (858:13): [True: 239, False: 4.92k]
  |  Branch (858:35): [True: 24, False: 4.90k]
  ------------------
  859|    263|            goto bad_len;
  860|    263|        }
  861|       |
  862|  4.90k|        nx_event = ntohs(nfuh->event);
  863|  4.90k|        if (nx_event == NXFME_ABBREV) {
  ------------------
  |  Branch (863:13): [True: 1.04k, False: 3.86k]
  ------------------
  864|  1.04k|            struct nx_flow_update_abbrev *nfua;
  865|       |
  866|  1.04k|            if (length != sizeof *nfua) {
  ------------------
  |  Branch (866:17): [True: 97, False: 946]
  ------------------
  867|     97|                goto bad_len;
  868|     97|            }
  869|       |
  870|    946|            nfua = ofpbuf_pull(msg, sizeof *nfua);
  871|    946|            update->xid = nfua->xid;
  872|  3.86k|        } else if (nx_event == NXFME_ADDED
  ------------------
  |  Branch (872:20): [True: 1.81k, False: 2.04k]
  ------------------
  873|  2.04k|                   || nx_event == NXFME_DELETED
  ------------------
  |  Branch (873:23): [True: 289, False: 1.75k]
  ------------------
  874|  3.24k|                   || nx_event == NXFME_MODIFIED) {
  ------------------
  |  Branch (874:23): [True: 1.14k, False: 615]
  ------------------
  875|  3.24k|            struct nx_flow_update_full *nfuf;
  876|  3.24k|            unsigned int actions_len;
  877|  3.24k|            unsigned int match_len;
  878|       |
  879|  3.24k|            if (length < sizeof *nfuf) {
  ------------------
  |  Branch (879:17): [True: 872, False: 2.37k]
  ------------------
  880|    872|                goto bad_len;
  881|    872|            }
  882|       |
  883|  2.37k|            nfuf = ofpbuf_pull(msg, sizeof *nfuf);
  884|  2.37k|            match_len = ntohs(nfuf->match_len);
  885|  2.37k|            if (sizeof *nfuf + match_len > length) {
  ------------------
  |  Branch (885:17): [True: 478, False: 1.89k]
  ------------------
  886|    478|                goto bad_len;
  887|    478|            }
  888|       |
  889|  1.89k|            update->reason = ntohs(nfuf->reason);
  890|  1.89k|            update->idle_timeout = ntohs(nfuf->idle_timeout);
  891|  1.89k|            update->hard_timeout = ntohs(nfuf->hard_timeout);
  892|  1.89k|            update->table_id = nfuf->table_id;
  893|  1.89k|            update->cookie = nfuf->cookie;
  894|  1.89k|            update->priority = ntohs(nfuf->priority);
  895|       |
  896|  1.89k|            if (raw == OFPRAW_ONFST13_FLOW_MONITOR_REPLY) {
  ------------------
  |  Branch (896:17): [True: 0, False: 1.89k]
  ------------------
  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.89k|            } else {
  913|  1.89k|                error = nx_pull_match(msg, match_len, &update->match, NULL,
  914|  1.89k|                                      NULL, false, NULL, NULL);
  915|  1.89k|                if (error) {
  ------------------
  |  Branch (915:21): [True: 33, False: 1.86k]
  ------------------
  916|     33|                    return error;
  917|     33|                }
  918|       |
  919|  1.86k|                actions_len = length - sizeof *nfuf - ROUND_UP(match_len, 8);
  ------------------
  |  |  303|  1.86k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|  1.86k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  920|  1.86k|                error = ofpacts_pull_openflow_actions(
  921|  1.86k|                    msg, actions_len, oh->version, NULL, NULL, ofpacts);
  922|  1.86k|                if (error) {
  ------------------
  |  Branch (922:21): [True: 19, False: 1.84k]
  ------------------
  923|     19|                    return error;
  924|     19|                }
  925|  1.86k|            }
  926|       |
  927|  1.84k|            update->ofpacts = ofpacts->data;
  928|  1.84k|            update->ofpacts_len = ofpacts->size;
  929|  1.84k|        } else {
  930|    615|            VLOG_WARN_RL(&rl, "NXST_FLOW_MONITOR reply has bad event %"PRIu16,
  ------------------
  |  |  224|    615|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    615|    do {                                                                \
  |  |  |  |  288|    615|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    615|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 615]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    615|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 615]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  931|    615|                         ntohs(nfuh->event));
  932|    615|            return OFPERR_NXBRC_FM_BAD_EVENT;
  933|    615|        }
  934|       |
  935|  2.79k|        update->event = nx_to_ofp_flow_update_event(nx_event);
  936|  2.79k|        return 0;
  937|  4.90k|    }
  938|  39.7k|    case OFPRAW_OFPST14_FLOW_MONITOR_REPLY: {
  ------------------
  |  Branch (938:5): [True: 39.7k, False: 5.16k]
  ------------------
  939|  39.7k|        struct ofp_flow_update_header *ofuh;
  940|  39.7k|        uint16_t padded_match_len = 0;
  941|       |
  942|  39.7k|        if (msg->size < sizeof(struct ofp_flow_update_header)) {
  ------------------
  |  Branch (942:13): [True: 0, False: 39.7k]
  ------------------
  943|      0|            goto bad_len;
  944|      0|        }
  945|       |
  946|  39.7k|        ofuh = msg->data;
  947|  39.7k|        update->event = ntohs(ofuh->event);
  948|  39.7k|        length = ntohs(ofuh->length);
  949|  39.7k|        if (length > msg->size || length % 8) {
  ------------------
  |  Branch (949:13): [True: 9.74k, False: 29.9k]
  |  Branch (949:35): [True: 4.49k, False: 25.4k]
  ------------------
  950|  14.2k|            goto bad_len;
  951|  14.2k|        }
  952|       |
  953|  25.4k|        if (update->event == OFPFME_ABBREV) {
  ------------------
  |  Branch (953:13): [True: 7.90k, False: 17.5k]
  ------------------
  954|  7.90k|            struct ofp_flow_update_abbrev *ofua;
  955|       |
  956|  7.90k|            if (length != sizeof *ofua) {
  ------------------
  |  Branch (956:17): [True: 66, False: 7.83k]
  ------------------
  957|     66|                goto bad_len;
  958|     66|            }
  959|       |
  960|  7.83k|            ofua = ofpbuf_pull(msg, sizeof *ofua);
  961|  7.83k|            update->xid = ofua->xid;
  962|  7.83k|            return 0;
  963|  17.5k|        } else if (update->event == OFPFME_PAUSED
  ------------------
  |  Branch (963:20): [True: 4.84k, False: 12.7k]
  ------------------
  964|  13.1k|                   || update->event == OFPFME_RESUMED) {
  ------------------
  |  Branch (964:23): [True: 8.29k, False: 4.41k]
  ------------------
  965|  13.1k|            struct ofp_flow_update_paused *ofup OVS_UNUSED;
  966|       |
  967|  13.1k|            if (length != sizeof *ofup) {
  ------------------
  |  Branch (967:17): [True: 2.23k, False: 10.9k]
  ------------------
  968|  2.23k|                goto bad_len;
  969|  2.23k|            }
  970|       |
  971|  10.9k|            ofup = ofpbuf_pull(msg, sizeof *ofup);
  972|  10.9k|            return 0;
  973|  13.1k|        } else if (update->event == OFPFME_INITIAL
  ------------------
  |  Branch (973:20): [True: 1.81k, False: 2.60k]
  ------------------
  974|  2.60k|                   || update->event == OFPFME_ADDED
  ------------------
  |  Branch (974:23): [True: 1.37k, False: 1.23k]
  ------------------
  975|  1.23k|                   || update->event == OFPFME_REMOVED
  ------------------
  |  Branch (975:23): [True: 236, False: 996]
  ------------------
  976|  3.49k|                   || update->event == OFPFME_MODIFIED) {
  ------------------
  |  Branch (976:23): [True: 73, False: 923]
  ------------------
  977|  3.49k|            struct ofp_flow_update_full *ofuf;
  978|  3.49k|            unsigned int instructions_len;
  979|       |
  980|  3.49k|            if (length < sizeof *ofuf) {
  ------------------
  |  Branch (980:17): [True: 321, False: 3.17k]
  ------------------
  981|    321|                goto bad_len;
  982|    321|            }
  983|       |
  984|  3.17k|            ofuf = ofpbuf_pull(msg, sizeof *ofuf);
  985|  3.17k|            if (sizeof *ofuf > length) {
  ------------------
  |  Branch (985:17): [True: 0, False: 3.17k]
  ------------------
  986|      0|                goto bad_len;
  987|      0|            }
  988|       |
  989|  3.17k|            update->reason = ofuf->reason;
  990|  3.17k|            update->idle_timeout = ntohs(ofuf->idle_timeout);
  991|  3.17k|            update->hard_timeout = ntohs(ofuf->hard_timeout);
  992|  3.17k|            update->table_id = ofuf->table_id;
  993|  3.17k|            update->cookie = ofuf->cookie;
  994|  3.17k|            update->priority = ntohs(ofuf->priority);
  995|       |
  996|  3.17k|            error = ofputil_pull_ofp11_match(
  997|  3.17k|                msg, NULL, NULL, &update->match, &padded_match_len);
  998|  3.17k|            if (error) {
  ------------------
  |  Branch (998:17): [True: 301, False: 2.87k]
  ------------------
  999|    301|                return error;
 1000|    301|            }
 1001|       |
 1002|  2.87k|            instructions_len = length - sizeof *ofuf - padded_match_len;
 1003|  2.87k|            error = ofpacts_pull_openflow_instructions(
 1004|  2.87k|                msg, instructions_len, oh->version, NULL, NULL, ofpacts);
 1005|  2.87k|            if (error) {
  ------------------
  |  Branch (1005:17): [True: 1.30k, False: 1.56k]
  ------------------
 1006|  1.30k|                return error;
 1007|  1.30k|            }
 1008|       |
 1009|  1.56k|            update->ofpacts = ofpacts->data;
 1010|  1.56k|            update->ofpacts_len = ofpacts->size;
 1011|  1.56k|            return 0;
 1012|  2.87k|        } else {
 1013|    923|            VLOG_WARN_RL(&rl, "NXST_FLOW_MONITOR reply has bad event %"PRIu16,
  ------------------
  |  |  224|    923|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    923|    do {                                                                \
  |  |  |  |  288|    923|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    923|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 923]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    923|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 923]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1014|    923|                         ntohs(ofuh->event));
 1015|    923|            return OFPERR_NXBRC_FM_BAD_EVENT;
 1016|    923|        }
 1017|  25.4k|    }
 1018|      0|    default:
  ------------------
  |  Branch (1018:5): [True: 0, False: 44.8k]
  ------------------
 1019|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1020|  44.8k|    }
 1021|  18.5k|bad_len:
 1022|  18.5k|    VLOG_WARN_RL(&rl, "%s has %"PRIu32" leftover bytes at end",
  ------------------
  |  |  224|  18.5k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  18.5k|    do {                                                                \
  |  |  |  |  288|  18.5k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  18.5k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 18.5k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  18.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 18.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1023|  18.5k|                 ofpraw_get_name(raw), msg->size);
 1024|  18.5k|    return OFPERR_OFPBRC_BAD_LEN;
 1025|  44.8k|}
ofputil_decode_flow_monitor_cancel:
 1029|    126|{
 1030|    126|    enum ofperr error;
 1031|    126|    enum ofpraw raw;
 1032|       |
 1033|    126|    error = ofpraw_decode(&raw, oh);
 1034|    126|    if (error) {
  ------------------
  |  Branch (1034:9): [True: 0, False: 126]
  ------------------
 1035|      0|        return error;
 1036|      0|    }
 1037|       |
 1038|    126|    switch ((int) raw) {
 1039|      0|    case OFPRAW_ONFT13_FLOW_MONITOR_CANCEL:
  ------------------
  |  Branch (1039:5): [True: 0, False: 126]
  ------------------
 1040|    126|    case OFPRAW_NXT_FLOW_MONITOR_CANCEL: {
  ------------------
  |  Branch (1040:5): [True: 126, False: 0]
  ------------------
 1041|    126|        const struct nx_flow_monitor_cancel *cancel = ofpmsg_body(oh);
 1042|    126|        return ntohl(cancel->id);
 1043|      0|    }
 1044|      0|    default:
  ------------------
  |  Branch (1044:5): [True: 0, False: 126]
  ------------------
 1045|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1046|    126|    }
 1047|    126|}
ofputil_flow_update_format:
 1285|  23.1k|{
 1286|  23.1k|    char reasonbuf[OFP_FLOW_REMOVED_REASON_BUFSIZE];
 1287|       |
 1288|  23.1k|    ds_put_cstr(s, "\n event=");
 1289|  23.1k|    switch (update->event) {
  ------------------
  |  Branch (1289:13): [True: 23.1k, False: 0]
  ------------------
 1290|  1.40k|    case OFPFME_INITIAL:
  ------------------
  |  Branch (1290:5): [True: 1.40k, False: 21.7k]
  ------------------
 1291|  1.40k|        ds_put_cstr(s, "INITIAL");
 1292|  1.40k|        break;
 1293|       |
 1294|    711|    case OFPFME_ADDED:
  ------------------
  |  Branch (1294:5): [True: 711, False: 22.3k]
  ------------------
 1295|    711|        ds_put_cstr(s, "ADDED");
 1296|    711|        break;
 1297|       |
 1298|    408|    case OFPFME_REMOVED:
  ------------------
  |  Branch (1298:5): [True: 408, False: 22.6k]
  ------------------
 1299|    408|        ds_put_format(s, "DELETED reason=%s",
 1300|    408|                      ofp_flow_removed_reason_to_string(update->reason,
 1301|    408|                                                        reasonbuf,
 1302|    408|                                                        sizeof reasonbuf));
 1303|    408|        break;
 1304|       |
 1305|    889|    case OFPFME_MODIFIED:
  ------------------
  |  Branch (1305:5): [True: 889, False: 22.2k]
  ------------------
 1306|    889|        ds_put_cstr(s, "MODIFIED");
 1307|    889|        break;
 1308|       |
 1309|  8.78k|    case OFPFME_ABBREV:
  ------------------
  |  Branch (1309:5): [True: 8.78k, False: 14.3k]
  ------------------
 1310|  8.78k|        ds_put_format(s, "ABBREV xid=0x%"PRIx32, ntohl(update->xid));
 1311|  8.78k|        return;
 1312|       |
 1313|  4.84k|    case OFPFME_PAUSED:
  ------------------
  |  Branch (1313:5): [True: 4.84k, False: 18.2k]
  ------------------
 1314|  4.84k|        ds_put_cstr(s, "PAUSED");
 1315|  4.84k|        return;
 1316|       |
 1317|  6.06k|    case OFPFME_RESUMED:
  ------------------
  |  Branch (1317:5): [True: 6.06k, False: 17.0k]
  ------------------
 1318|  6.06k|        ds_put_cstr(s, "RESUMED");
 1319|  6.06k|        return;
 1320|       |
 1321|  23.1k|    }
 1322|       |
 1323|  3.41k|    ds_put_format(s, " table=");
 1324|  3.41k|    ofputil_format_table(update->table_id, table_map, s);
 1325|  3.41k|    if (update->idle_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  3.41k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (1325:9): [True: 765, False: 2.64k]
  ------------------
 1326|    765|        ds_put_format(s, " idle_timeout=%"PRIu16, update->idle_timeout);
 1327|    765|    }
 1328|  3.41k|    if (update->hard_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  3.41k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (1328:9): [True: 1.87k, False: 1.53k]
  ------------------
 1329|  1.87k|        ds_put_format(s, " hard_timeout=%"PRIu16, update->hard_timeout);
 1330|  1.87k|    }
 1331|  3.41k|    ds_put_format(s, " cookie=%#"PRIx64, ntohll(update->cookie));
 1332|       |
 1333|  3.41k|    ds_put_char(s, ' ');
 1334|  3.41k|    match_format(&update->match, port_map, s, OFP_DEFAULT_PRIORITY);
  ------------------
  |  |  138|  3.41k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
 1335|       |
 1336|  3.41k|    if (update->ofpacts_len) {
  ------------------
  |  Branch (1336:9): [True: 1.45k, False: 1.95k]
  ------------------
 1337|  1.45k|        if (s->string[s->length - 1] != ' ') {
  ------------------
  |  Branch (1337:13): [True: 1.39k, False: 69]
  ------------------
 1338|  1.39k|            ds_put_char(s, ' ');
 1339|  1.39k|        }
 1340|  1.45k|        ds_put_cstr(s, "actions=");
 1341|  1.45k|        struct ofpact_format_params fp = {
 1342|  1.45k|            .port_map = port_map,
 1343|  1.45k|            .table_map = table_map,
 1344|  1.45k|            .s = s,
 1345|  1.45k|        };
 1346|  1.45k|        ofpacts_format(update->ofpacts, update->ofpacts_len, &fp);
 1347|  1.45k|    }
 1348|  3.41k|}
ofputil_decode_requestforward:
 1401|  4.26k|{
 1402|  4.26k|    rf->new_buckets = NULL;
 1403|  4.26k|    rf->group_existed = -1;
 1404|       |
 1405|  4.26k|    struct ofpbuf b = ofpbuf_const_initializer(outer, ntohs(outer->length));
 1406|       |
 1407|       |    /* Skip past outer message. */
 1408|  4.26k|    enum ofpraw raw_msg_type = ofpraw_pull_assert(&b);
 1409|  4.26k|    ovs_assert(raw_msg_type == OFPRAW_OFPT14_REQUESTFORWARD ||
  ------------------
  |  |   62|  4.26k|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (1409:16): [True: 4.23k, False: 34]
  ------------------
 1410|     34|               raw_msg_type == OFPRAW_ONFT13_REQUESTFORWARD ||
  ------------------
  |  Branch (1410:16): [True: 0, False: 34]
  ------------------
 1411|     34|               raw_msg_type == OFPRAW_NXT_REQUESTFORWARD);
  ------------------
  |  Branch (1411:16): [True: 34, False: 0]
  ------------------
 1412|       |
 1413|       |    /* Validate inner message. */
 1414|  4.26k|    if (b.size < sizeof(struct ofp_header)) {
  ------------------
  |  Branch (1414:9): [True: 0, False: 4.26k]
  ------------------
 1415|      0|        return OFPERR_OFPBFC_MSG_BAD_LEN;
 1416|      0|    }
 1417|  4.26k|    const struct ofp_header *inner = b.data;
 1418|  4.26k|    unsigned int inner_len = ntohs(inner->length);
 1419|  4.26k|    if (inner_len < sizeof(struct ofp_header) || inner_len > b.size) {
  ------------------
  |  Branch (1419:9): [True: 115, False: 4.15k]
  |  Branch (1419:50): [True: 1.03k, False: 3.12k]
  ------------------
 1420|  1.14k|        return OFPERR_OFPBFC_MSG_BAD_LEN;
 1421|  1.14k|    }
 1422|  3.12k|    if (inner->version != outer->version) {
  ------------------
  |  Branch (1422:9): [True: 201, False: 2.92k]
  ------------------
 1423|    201|        return OFPERR_OFPBRC_BAD_VERSION;
 1424|    201|    }
 1425|       |
 1426|       |    /* Parse inner message. */
 1427|  2.92k|    enum ofptype type;
 1428|  2.92k|    enum ofperr error = ofptype_decode(&type, inner);
 1429|  2.92k|    if (error) {
  ------------------
  |  Branch (1429:9): [True: 96, False: 2.82k]
  ------------------
 1430|     96|        return error;
 1431|     96|    }
 1432|       |
 1433|  2.82k|    rf->xid = inner->xid;
 1434|  2.82k|    if (type == OFPTYPE_GROUP_MOD) {
  ------------------
  |  Branch (1434:9): [True: 1.88k, False: 941]
  ------------------
 1435|  1.88k|        rf->reason = OFPRFR_GROUP_MOD;
 1436|  1.88k|        rf->group_mod = xmalloc(sizeof *rf->group_mod);
 1437|  1.88k|        error = ofputil_decode_group_mod(inner, rf->group_mod);
 1438|  1.88k|        if (error) {
  ------------------
  |  Branch (1438:13): [True: 729, False: 1.15k]
  ------------------
 1439|    729|            free(rf->group_mod);
 1440|    729|            return error;
 1441|    729|        }
 1442|  1.88k|    } else if (type == OFPTYPE_METER_MOD) {
  ------------------
  |  Branch (1442:16): [True: 640, False: 301]
  ------------------
 1443|    640|        rf->reason = OFPRFR_METER_MOD;
 1444|    640|        rf->meter_mod = xmalloc(sizeof *rf->meter_mod);
 1445|    640|        ofpbuf_init(&rf->bands, 64);
 1446|    640|        error = ofputil_decode_meter_mod(inner, rf->meter_mod, &rf->bands);
 1447|    640|        if (error) {
  ------------------
  |  Branch (1447:13): [True: 573, False: 67]
  ------------------
 1448|    573|            free(rf->meter_mod);
 1449|    573|            ofpbuf_uninit(&rf->bands);
 1450|    573|            return error;
 1451|    573|        }
 1452|    640|    } else {
 1453|    301|        return OFPERR_OFPBFC_MSG_UNSUP;
 1454|    301|    }
 1455|       |
 1456|  1.22k|    return 0;
 1457|  2.82k|}
ofputil_format_requestforward:
 1465|  1.22k|{
 1466|  1.22k|    ds_put_cstr(string, " reason=");
 1467|       |
 1468|  1.22k|    switch (rf->reason) {
  ------------------
  |  Branch (1468:13): [True: 1.22k, False: 0]
  ------------------
 1469|  1.15k|    case OFPRFR_GROUP_MOD:
  ------------------
  |  Branch (1469:5): [True: 1.15k, False: 67]
  ------------------
 1470|  1.15k|        ds_put_cstr(string, "group_mod");
 1471|  1.15k|        ofputil_group_mod_format__(string, ofp_version, rf->group_mod,
 1472|  1.15k|                                   port_map, table_map);
 1473|  1.15k|        break;
 1474|       |
 1475|     67|    case OFPRFR_METER_MOD:
  ------------------
  |  Branch (1475:5): [True: 67, False: 1.15k]
  ------------------
 1476|     67|        ds_put_cstr(string, "meter_mod");
 1477|     67|        ofputil_format_meter_mod(string, rf->meter_mod);
 1478|     67|        break;
 1479|       |
 1480|      0|    case OFPRFR_N_REASONS:
  ------------------
  |  Branch (1480:5): [True: 0, False: 1.22k]
  ------------------
 1481|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1482|  1.22k|    }
 1483|  1.22k|}
ofputil_destroy_requestforward:
 1490|  1.22k|{
 1491|  1.22k|    if (!rf) {
  ------------------
  |  Branch (1491:9): [True: 0, False: 1.22k]
  ------------------
 1492|      0|        return;
 1493|      0|    }
 1494|       |
 1495|  1.22k|    switch (rf->reason) {
  ------------------
  |  Branch (1495:13): [True: 1.22k, False: 0]
  ------------------
 1496|  1.15k|    case OFPRFR_GROUP_MOD:
  ------------------
  |  Branch (1496:5): [True: 1.15k, False: 67]
  ------------------
 1497|  1.15k|        ofputil_uninit_group_mod(rf->group_mod);
 1498|  1.15k|        free(rf->group_mod);
 1499|       |        /* 'rf' does not own rf->new_buckets. */
 1500|  1.15k|        break;
 1501|       |
 1502|     67|    case OFPRFR_METER_MOD:
  ------------------
  |  Branch (1502:5): [True: 67, False: 1.15k]
  ------------------
 1503|     67|        ofpbuf_uninit(&rf->bands);
 1504|     67|        free(rf->meter_mod);
 1505|     67|        break;
 1506|       |
 1507|      0|    case OFPRFR_N_REASONS:
  ------------------
  |  Branch (1507:5): [True: 0, False: 1.22k]
  ------------------
 1508|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1509|  1.22k|    }
 1510|  1.22k|}
ofp-monitor.c:nx_to_ofp_flow_monitor_flags:
  334|  5.27k|{
  335|  5.27k|    uint16_t oxm_flags = 0;
  336|       |
  337|  5.27k|    if (flags & NXFMF_INITIAL) {
  ------------------
  |  Branch (337:9): [True: 2.65k, False: 2.62k]
  ------------------
  338|  2.65k|        oxm_flags |= OFPFMF_INITIAL;
  339|  2.65k|    }
  340|  5.27k|    if (flags & NXFMF_ADD) {
  ------------------
  |  Branch (340:9): [True: 3.24k, False: 2.03k]
  ------------------
  341|  3.24k|        oxm_flags |= OFPFMF_ADD;
  342|  3.24k|    }
  343|  5.27k|    if (flags & NXFMF_DELETE) {
  ------------------
  |  Branch (343:9): [True: 1.27k, False: 4.00k]
  ------------------
  344|  1.27k|        oxm_flags |= OFPFMF_REMOVED;
  345|  1.27k|    }
  346|  5.27k|    if (flags & NXFMF_MODIFY) {
  ------------------
  |  Branch (346:9): [True: 4.29k, False: 981]
  ------------------
  347|  4.29k|        oxm_flags |= OFPFMF_MODIFY;
  348|  4.29k|    }
  349|  5.27k|    if (flags & NXFMF_ACTIONS) {
  ------------------
  |  Branch (349:9): [True: 1.66k, False: 3.61k]
  ------------------
  350|  1.66k|        oxm_flags |= OFPFMF_INSTRUCTIONS;
  351|  1.66k|    }
  352|  5.27k|    if (flags & NXFMF_OWN) {
  ------------------
  |  Branch (352:9): [True: 2.23k, False: 3.03k]
  ------------------
  353|  2.23k|        oxm_flags |= OFPFMF_ONLY_OWN;
  354|  2.23k|    }
  355|       |
  356|  5.27k|    return oxm_flags;
  357|  5.27k|}
ofp-monitor.c:ofp_flow_monitor_command_to_string:
  663|    126|{
  664|    126|    switch (command) {
  665|      0|    case OFPFMC_ADD: return "add";
  ------------------
  |  Branch (665:5): [True: 0, False: 126]
  ------------------
  666|      0|    case OFPFMC_MODIFY: return "modify";
  ------------------
  |  Branch (666:5): [True: 0, False: 126]
  ------------------
  667|    126|    case OFPFMC_DELETE: return "delete";
  ------------------
  |  Branch (667:5): [True: 126, False: 0]
  ------------------
  668|      0|    default:
  ------------------
  |  Branch (668:5): [True: 0, False: 126]
  ------------------
  669|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  670|    126|    }
  671|    126|}
ofp-monitor.c:ofp_flow_monitor_flags_to_name:
  645|  30.7k|{
  646|  30.7k|    enum ofp14_flow_monitor_flags fmf = bit;
  647|       |
  648|  30.7k|    switch (fmf) {
  ------------------
  |  Branch (648:13): [True: 30.7k, False: 0]
  ------------------
  649|  5.34k|    case OFPFMF_INITIAL: return "initial";
  ------------------
  |  Branch (649:5): [True: 5.34k, False: 25.3k]
  ------------------
  650|  5.10k|    case OFPFMF_ADD: return "add";
  ------------------
  |  Branch (650:5): [True: 5.10k, False: 25.6k]
  ------------------
  651|  4.01k|    case OFPFMF_REMOVED: return "delete";
  ------------------
  |  Branch (651:5): [True: 4.01k, False: 26.7k]
  ------------------
  652|  7.05k|    case OFPFMF_MODIFY: return "modify";
  ------------------
  |  Branch (652:5): [True: 7.05k, False: 23.6k]
  ------------------
  653|  4.30k|    case OFPFMF_INSTRUCTIONS: return "actions";
  ------------------
  |  Branch (653:5): [True: 4.30k, False: 26.4k]
  ------------------
  654|      0|    case OFPFMF_NO_ABBREV: return "no-abbrev";
  ------------------
  |  Branch (654:5): [True: 0, False: 30.7k]
  ------------------
  655|  4.92k|    case OFPFMF_ONLY_OWN: return "own";
  ------------------
  |  Branch (655:5): [True: 4.92k, False: 25.8k]
  ------------------
  656|  30.7k|    }
  657|       |
  658|      0|    return NULL;
  659|  30.7k|}
ofp-monitor.c:nx_to_ofp_flow_update_event:
  388|  2.79k|{
  389|  2.79k|    switch (event) {
  390|    709|    case NXFME_ADDED:
  ------------------
  |  Branch (390:5): [True: 709, False: 2.08k]
  ------------------
  391|    709|        return OFPFME_ADDED;
  392|    247|    case NXFME_DELETED:
  ------------------
  |  Branch (392:5): [True: 247, False: 2.54k]
  ------------------
  393|    247|        return OFPFME_REMOVED;
  394|    889|    case NXFME_MODIFIED:
  ------------------
  |  Branch (394:5): [True: 889, False: 1.90k]
  ------------------
  395|    889|        return OFPFME_MODIFIED;
  396|    946|    case NXFME_ABBREV:
  ------------------
  |  Branch (396:5): [True: 946, False: 1.84k]
  ------------------
  397|    946|        return OFPFME_ABBREV;
  398|      0|     default:
  ------------------
  |  Branch (398:6): [True: 0, False: 2.79k]
  ------------------
  399|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  400|  2.79k|    }
  401|  2.79k|}

ofphdrs_len:
  368|  14.5k|{
  369|  14.5k|    if (hdrs->type == OFPT_VENDOR) {
  ------------------
  |  |   32|  14.5k|#define OFPT_VENDOR 4
  ------------------
  |  Branch (369:9): [True: 859, False: 13.6k]
  ------------------
  370|    859|        return sizeof(struct ofp_vendor_header);
  371|    859|    }
  372|       |
  373|  13.6k|    switch ((enum ofp_version) hdrs->version) {
  ------------------
  |  Branch (373:13): [True: 12.6k, False: 996]
  ------------------
  374|  1.61k|    case OFP10_VERSION:
  ------------------
  |  Branch (374:5): [True: 1.61k, False: 12.0k]
  ------------------
  375|  1.61k|        if (hdrs->type == OFPT10_STATS_REQUEST ||
  ------------------
  |  |   33|  3.23k|#define OFPT10_STATS_REQUEST 16
  ------------------
  |  Branch (375:13): [True: 1.57k, False: 45]
  ------------------
  376|  1.59k|            hdrs->type == OFPT10_STATS_REPLY) {
  ------------------
  |  |   34|     45|#define OFPT10_STATS_REPLY 17
  ------------------
  |  Branch (376:13): [True: 26, False: 19]
  ------------------
  377|  1.59k|            return (hdrs->stat == OFPST_VENDOR
  ------------------
  |  |   37|  1.59k|#define OFPST_VENDOR 0xffff
  ------------------
  |  Branch (377:21): [True: 26, False: 1.57k]
  ------------------
  378|  1.59k|                    ? sizeof(struct nicira10_stats_msg)
  379|  1.59k|                    : sizeof(struct ofp10_stats_msg));
  380|  1.59k|        }
  381|     19|        break;
  382|       |
  383|  1.10k|    case OFP11_VERSION:
  ------------------
  |  Branch (383:5): [True: 1.10k, False: 12.5k]
  ------------------
  384|  2.18k|    case OFP12_VERSION:
  ------------------
  |  Branch (384:5): [True: 1.08k, False: 12.5k]
  ------------------
  385|  4.54k|    case OFP13_VERSION:
  ------------------
  |  Branch (385:5): [True: 2.35k, False: 11.3k]
  ------------------
  386|  8.83k|    case OFP14_VERSION:
  ------------------
  |  Branch (386:5): [True: 4.29k, False: 9.39k]
  ------------------
  387|  11.0k|    case OFP15_VERSION:
  ------------------
  |  Branch (387:5): [True: 2.23k, False: 11.4k]
  ------------------
  388|  11.0k|        if (hdrs->type == OFPT11_STATS_REQUEST ||
  ------------------
  |  |   35|  22.1k|#define OFPT11_STATS_REQUEST 18
  ------------------
  |  Branch (388:13): [True: 6.76k, False: 4.30k]
  ------------------
  389|  9.28k|            hdrs->type == OFPT11_STATS_REPLY) {
  ------------------
  |  |   36|  4.30k|#define OFPT11_STATS_REPLY 19
  ------------------
  |  Branch (389:13): [True: 2.51k, False: 1.78k]
  ------------------
  390|  9.28k|            return (hdrs->stat == OFPST_VENDOR
  ------------------
  |  |   37|  9.28k|#define OFPST_VENDOR 0xffff
  ------------------
  |  Branch (390:21): [True: 28, False: 9.25k]
  ------------------
  391|  9.28k|                    ? sizeof(struct ofp11_vendor_stats_msg)
  392|  9.28k|                    : sizeof(struct ofp11_stats_msg));
  393|  9.28k|        }
  394|  1.78k|        break;
  395|  13.6k|    }
  396|       |
  397|  2.80k|    return sizeof(struct ofp_header);
  398|  13.6k|}
ofpraw_decode:
  409|  3.21M|{
  410|       |    struct ofpbuf msg = ofpbuf_const_initializer(oh, ntohs(oh->length));
  411|  3.21M|    return ofpraw_pull(raw, &msg);
  412|  3.21M|}
ofpraw_decode_assert:
  422|  19.8k|{
  423|  19.8k|    enum ofpraw raw;
  424|  19.8k|    ovs_assert(!ofpraw_decode(&raw, oh));
  ------------------
  |  |   62|  19.8k|#define ovs_assert ovs_ignore
  ------------------
  425|  19.8k|    return raw;
  426|  19.8k|}
ofpraw_pull:
  485|  5.25M|{
  486|       |    /* Set default outputs. */
  487|  5.25M|    msg->header = msg->data;
  488|  5.25M|    msg->msg = msg->header;
  489|  5.25M|    *rawp = 0;
  490|       |
  491|  5.25M|    struct ofphdrs hdrs;
  492|  5.25M|    enum ofperr error = ofphdrs_decode(&hdrs, msg->data, msg->size);
  493|  5.25M|    if (error) {
  ------------------
  |  Branch (493:9): [True: 71.2k, False: 5.18M]
  ------------------
  494|  71.2k|        return error;
  495|  71.2k|    }
  496|       |
  497|  5.18M|    enum ofpraw raw;
  498|  5.18M|    error = ofpraw_from_ofphdrs(&raw, &hdrs);
  499|  5.18M|    if (error) {
  ------------------
  |  Branch (499:9): [True: 697k, False: 4.48M]
  ------------------
  500|   697k|        return error;
  501|   697k|    }
  502|       |
  503|  4.48M|    const struct raw_info *info = raw_info_get(raw);
  504|  4.48M|    const struct raw_instance *instance = raw_instance_get(info, hdrs.version);
  505|  4.48M|    error = ofpraw_check_length(info, instance, msg->size);
  506|  4.48M|    if (error) {
  ------------------
  |  Branch (506:9): [True: 133k, False: 4.35M]
  ------------------
  507|   133k|        return error;
  508|   133k|    }
  509|       |
  510|  4.35M|    msg->header = ofpbuf_pull(msg, instance->hdrs_len);
  511|  4.35M|    msg->msg = msg->data;
  512|  4.35M|    *rawp = raw;
  513|  4.35M|    return 0;
  514|  4.48M|}
ofpraw_pull_assert:
  524|   917k|{
  525|   917k|    enum ofpraw raw;
  526|   917k|    ovs_assert(!ofpraw_pull(&raw, msg));
  ------------------
  |  |   62|   917k|#define ovs_assert ovs_ignore
  ------------------
  527|   917k|    return raw;
  528|   917k|}
ofpraw_decode_partial:
  543|  16.2k|{
  544|  16.2k|    struct ofphdrs hdrs;
  545|  16.2k|    enum ofperr error;
  546|       |
  547|  16.2k|    error = ofphdrs_decode(&hdrs, oh, length);
  548|  16.2k|    if (!error) {
  ------------------
  |  Branch (548:9): [True: 15.1k, False: 1.10k]
  ------------------
  549|  15.1k|        error = ofpraw_from_ofphdrs(raw, &hdrs);
  550|  15.1k|    }
  551|       |
  552|  16.2k|    if (error) {
  ------------------
  |  Branch (552:9): [True: 7.69k, False: 8.58k]
  ------------------
  553|  7.69k|        *raw = 0;
  554|  7.69k|    }
  555|  16.2k|    return error;
  556|  16.2k|}
ofpraw_get_name:
  782|  2.08M|{
  783|  2.08M|    return raw_info_get(raw)->name;
  784|  2.08M|}
ofptype_decode:
  828|  6.12k|{
  829|  6.12k|    enum ofperr error;
  830|  6.12k|    enum ofpraw raw;
  831|       |
  832|  6.12k|    error = ofpraw_decode(&raw, oh);
  833|  6.12k|    *typep = error ? 0 : ofptype_from_ofpraw(raw);
  ------------------
  |  Branch (833:14): [True: 737, False: 5.39k]
  ------------------
  834|  6.12k|    return error;
  835|  6.12k|}
ofptype_from_ofpraw:
  867|  2.07M|{
  868|  2.07M|    return raw_info_get(raw)->type;
  869|  2.07M|}
ofpmsg_body:
  891|  13.0k|{
  892|  13.0k|    struct ofphdrs hdrs;
  893|       |
  894|       |    ofphdrs_decode_assert(&hdrs, oh, ntohs(oh->length));
  895|  13.0k|    return (const uint8_t *) oh + ofphdrs_len(&hdrs);
  896|  13.0k|}
ofpmsg_is_stat_request:
  901|   146k|{
  902|   146k|    return ofp_is_stat_request(oh->version, oh->type);
  903|   146k|}
ofpmsg_is_stat:
  915|  2.07M|{
  916|  2.07M|    return ofp_is_stat(oh->version, oh->type);
  917|  2.07M|}
ofpmp_flags:
 1049|   173k|{
 1050|       |    return ntohs(*ofpmp_flags__(oh));
 1051|   173k|}
ofp-msgs.c:ofphdrs_decode:
  215|  5.28M|{
  216|  5.28M|    memset(hdrs, 0, sizeof *hdrs);
  217|  5.28M|    if (length < sizeof *oh) {
  ------------------
  |  Branch (217:9): [True: 0, False: 5.28M]
  ------------------
  218|      0|        return OFPERR_OFPBRC_BAD_LEN;
  219|      0|    }
  220|       |
  221|       |    /* Get base message version and type (OFPT_*). */
  222|  5.28M|    hdrs->version = oh->version;
  223|  5.28M|    hdrs->type = oh->type;
  224|       |
  225|  5.28M|    if (hdrs->type == OFPT_VENDOR) {
  ------------------
  |  |   32|  5.28M|#define OFPT_VENDOR 4
  ------------------
  |  Branch (225:9): [True: 228k, False: 5.05M]
  ------------------
  226|       |        /* Get vendor. */
  227|   228k|        const struct ofp_vendor_header *ovh;
  228|       |
  229|   228k|        if (length < sizeof *ovh) {
  ------------------
  |  Branch (229:13): [True: 31.4k, False: 197k]
  ------------------
  230|  31.4k|            return OFPERR_OFPBRC_BAD_LEN;
  231|  31.4k|        }
  232|       |
  233|   197k|        ovh = (const struct ofp_vendor_header *) oh;
  234|   197k|        hdrs->vendor = ntohl(ovh->vendor);
  235|   197k|        if (hdrs->vendor == NX_VENDOR_ID || hdrs->vendor == ONF_VENDOR_ID) {
  ------------------
  |  |  110|   394k|#define NX_VENDOR_ID    0x00002320 /* Nicira. */
  ------------------
                      if (hdrs->vendor == NX_VENDOR_ID || hdrs->vendor == ONF_VENDOR_ID) {
  ------------------
  |  |  111|  12.8k|#define ONF_VENDOR_ID   0x4f4e4600 /* Open Networking Foundation. */
  ------------------
  |  Branch (235:13): [True: 184k, False: 12.8k]
  |  Branch (235:45): [True: 103, False: 12.7k]
  ------------------
  236|   184k|            hdrs->subtype = ntohl(ovh->subtype);
  237|   184k|        } else {
  238|  12.7k|            log_bad_vendor(hdrs->vendor);
  239|  12.7k|            return OFPERR_OFPBRC_BAD_VENDOR;
  240|  12.7k|        }
  241|  5.05M|    } else if (hdrs->version == OFP10_VERSION
  ------------------
  |  Branch (241:16): [True: 841k, False: 4.21M]
  ------------------
  242|   841k|               && (hdrs->type == OFPT10_STATS_REQUEST ||
  ------------------
  |  |   33|  1.68M|#define OFPT10_STATS_REQUEST 16
  ------------------
  |  Branch (242:20): [True: 27.4k, False: 814k]
  ------------------
  243|   814k|                   hdrs->type == OFPT10_STATS_REPLY)) {
  ------------------
  |  |   34|   814k|#define OFPT10_STATS_REPLY 17
  ------------------
  |  Branch (243:20): [True: 118k, False: 695k]
  ------------------
  244|   146k|        const struct ofp10_stats_msg *osm;
  245|       |
  246|       |        /* Get statistic type (OFPST_*). */
  247|   146k|        if (length < sizeof *osm) {
  ------------------
  |  Branch (247:13): [True: 3.03k, False: 142k]
  ------------------
  248|  3.03k|            return OFPERR_OFPBRC_BAD_LEN;
  249|  3.03k|        }
  250|   142k|        osm = (const struct ofp10_stats_msg *) oh;
  251|   142k|        hdrs->stat = ntohs(osm->type);
  252|       |
  253|   142k|        if (hdrs->stat == OFPST_VENDOR) {
  ------------------
  |  |   37|   142k|#define OFPST_VENDOR 0xffff
  ------------------
  |  Branch (253:13): [True: 77.8k, False: 65.1k]
  ------------------
  254|       |            /* Get vendor. */
  255|  77.8k|            const struct ofp10_vendor_stats_msg *ovsm;
  256|       |
  257|  77.8k|            if (length < sizeof *ovsm) {
  ------------------
  |  Branch (257:17): [True: 68, False: 77.7k]
  ------------------
  258|     68|                return OFPERR_OFPBRC_BAD_LEN;
  259|     68|            }
  260|       |
  261|  77.7k|            ovsm = (const struct ofp10_vendor_stats_msg *) oh;
  262|  77.7k|            hdrs->vendor = ntohl(ovsm->vendor);
  263|  77.7k|            if (hdrs->vendor == NX_VENDOR_ID) {
  ------------------
  |  |  110|  77.7k|#define NX_VENDOR_ID    0x00002320 /* Nicira. */
  ------------------
  |  Branch (263:17): [True: 75.9k, False: 1.77k]
  ------------------
  264|       |                /* Get Nicira statistic type (NXST_*). */
  265|  75.9k|                const struct nicira10_stats_msg *nsm;
  266|       |
  267|  75.9k|                if (length < sizeof *nsm) {
  ------------------
  |  Branch (267:21): [True: 69, False: 75.9k]
  ------------------
  268|     69|                    return OFPERR_OFPBRC_BAD_LEN;
  269|     69|                }
  270|  75.9k|                nsm = (const struct nicira10_stats_msg *) oh;
  271|  75.9k|                hdrs->subtype = ntohl(nsm->subtype);
  272|  75.9k|            } else {
  273|  1.77k|                log_bad_vendor(hdrs->vendor);
  274|  1.77k|                return OFPERR_OFPBRC_BAD_VENDOR;
  275|  1.77k|            }
  276|  77.7k|        }
  277|  4.91M|    } else if (hdrs->version != OFP10_VERSION
  ------------------
  |  Branch (277:16): [True: 4.21M, False: 695k]
  ------------------
  278|  4.21M|               && (hdrs->type == OFPT11_STATS_REQUEST ||
  ------------------
  |  |   35|  8.43M|#define OFPT11_STATS_REQUEST 18
  ------------------
  |  Branch (278:20): [True: 62.1k, False: 4.15M]
  ------------------
  279|  4.15M|                   hdrs->type == OFPT11_STATS_REPLY)) {
  ------------------
  |  |   36|  4.15M|#define OFPT11_STATS_REPLY 19
  ------------------
  |  Branch (279:20): [True: 386k, False: 3.76M]
  ------------------
  280|   448k|        const struct ofp11_stats_msg *osm;
  281|       |
  282|       |        /* Get statistic type (OFPST_*). */
  283|   448k|        if (length < sizeof *osm) {
  ------------------
  |  Branch (283:13): [True: 18.9k, False: 429k]
  ------------------
  284|  18.9k|            return OFPERR_OFPBRC_BAD_LEN;
  285|  18.9k|        }
  286|   429k|        osm = (const struct ofp11_stats_msg *) oh;
  287|   429k|        hdrs->stat = ntohs(osm->type);
  288|       |
  289|   429k|        if (hdrs->stat == OFPST_VENDOR) {
  ------------------
  |  |   37|   429k|#define OFPST_VENDOR 0xffff
  ------------------
  |  Branch (289:13): [True: 4.66k, False: 424k]
  ------------------
  290|       |            /* Get vendor. */
  291|  4.66k|            const struct ofp11_vendor_stats_msg *ovsm;
  292|       |
  293|  4.66k|            if (length < sizeof *ovsm) {
  ------------------
  |  Branch (293:17): [True: 4.01k, False: 654]
  ------------------
  294|  4.01k|                return OFPERR_OFPBRC_BAD_LEN;
  295|  4.01k|            }
  296|       |
  297|    654|            ovsm = (const struct ofp11_vendor_stats_msg *) oh;
  298|    654|            hdrs->vendor = ntohl(ovsm->vendor);
  299|    654|            if (hdrs->vendor == NX_VENDOR_ID ||
  ------------------
  |  |  110|  1.30k|#define NX_VENDOR_ID    0x00002320 /* Nicira. */
  ------------------
  |  Branch (299:17): [True: 436, False: 218]
  ------------------
  300|    502|                hdrs->vendor == ONF_VENDOR_ID) {
  ------------------
  |  |  111|    218|#define ONF_VENDOR_ID   0x4f4e4600 /* Open Networking Foundation. */
  ------------------
  |  Branch (300:17): [True: 66, False: 152]
  ------------------
  301|    502|                hdrs->subtype = ntohl(ovsm->subtype);
  302|    502|            } else {
  303|    152|                log_bad_vendor(hdrs->vendor);
  304|    152|                return OFPERR_OFPBRC_BAD_VENDOR;
  305|    152|            }
  306|    654|        }
  307|   429k|    }
  308|       |
  309|  5.21M|    return 0;
  310|  5.28M|}
ofp-msgs.c:log_bad_vendor:
  206|  14.7k|{
  207|  14.7k|    static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 1);
  ------------------
  |  |  110|  14.7k|        {                                                                 \
  |  |  111|  14.7k|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|  58.8k|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [True: 0, Folded]
  |  |  |  |  |  Branch (37:48): [Folded, False: 14.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  14.7k|            0,                              /* first_dropped */           \
  |  |  113|  14.7k|            0,                              /* last_dropped */            \
  |  |  114|  14.7k|            0,                              /* n_dropped */               \
  |  |  115|  14.7k|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  14.7k|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  14.7k|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  14.7k|        }
  ------------------
  208|       |
  209|  14.7k|    VLOG_WARN_RL(&rl, "OpenFlow message has unknown vendor %#"PRIx32, vendor);
  ------------------
  |  |  224|  14.7k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  14.7k|    do {                                                                \
  |  |  |  |  288|  14.7k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  14.7k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 14.7k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  14.7k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 14.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  210|  14.7k|}
ofp-msgs.c:ofpraw_check_length:
  434|  4.48M|{
  435|  4.48M|    static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
  ------------------
  |  |  110|  4.48M|        {                                                                 \
  |  |  111|  4.48M|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|  17.9M|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [True: 0, Folded]
  |  |  |  |  |  Branch (37:48): [Folded, False: 4.48M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  4.48M|            0,                              /* first_dropped */           \
  |  |  113|  4.48M|            0,                              /* last_dropped */            \
  |  |  114|  4.48M|            0,                              /* n_dropped */               \
  |  |  115|  4.48M|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  4.48M|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  4.48M|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  4.48M|        }
  ------------------
  436|       |
  437|  4.48M|    unsigned int min_len = instance->hdrs_len + info->min_body;
  438|  4.48M|    switch (info->extra_multiple) {
  439|   146k|    case 0:
  ------------------
  |  Branch (439:5): [True: 146k, False: 4.34M]
  ------------------
  440|   146k|        if (len != min_len) {
  ------------------
  |  Branch (440:13): [True: 54.9k, False: 91.6k]
  ------------------
  441|  54.9k|            VLOG_WARN_RL(&rl, "received %s with incorrect length %u (expected "
  ------------------
  |  |  224|  54.9k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  54.9k|    do {                                                                \
  |  |  |  |  288|  54.9k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  54.9k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 54.9k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  54.9k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 54.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  442|  54.9k|                         "length %u)", info->name, len, min_len);
  443|  54.9k|            return OFPERR_OFPBRC_BAD_LEN;
  444|  54.9k|        }
  445|  91.6k|        break;
  446|       |
  447|  3.11M|    case 1:
  ------------------
  |  Branch (447:5): [True: 3.11M, False: 1.37M]
  ------------------
  448|  3.11M|        if (len < min_len) {
  ------------------
  |  Branch (448:13): [True: 55.0k, False: 3.06M]
  ------------------
  449|  55.0k|            VLOG_WARN_RL(&rl, "received %s with incorrect length %u (expected "
  ------------------
  |  |  224|  55.0k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  55.0k|    do {                                                                \
  |  |  |  |  288|  55.0k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  55.0k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 55.0k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  55.0k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 55.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  450|  55.0k|                         "length at least %u bytes)",
  451|  55.0k|                         info->name, len, min_len);
  452|  55.0k|            return OFPERR_OFPBRC_BAD_LEN;
  453|  55.0k|        }
  454|  3.06M|        break;
  455|       |
  456|  3.06M|    default:
  ------------------
  |  Branch (456:5): [True: 1.22M, False: 3.26M]
  ------------------
  457|  1.22M|        if (len < min_len || (len - min_len) % info->extra_multiple) {
  ------------------
  |  Branch (457:13): [True: 16.6k, False: 1.20M]
  |  Branch (457:30): [True: 7.24k, False: 1.20M]
  ------------------
  458|  23.8k|            VLOG_WARN_RL(&rl, "received %s with incorrect length %u (must be "
  ------------------
  |  |  224|  23.8k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  23.8k|    do {                                                                \
  |  |  |  |  288|  23.8k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  23.8k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 23.8k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  23.8k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 23.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  459|  23.8k|                         "exactly %u bytes or longer by an integer multiple "
  460|  23.8k|                         "of %u bytes)",
  461|  23.8k|                         info->name, len, min_len, info->extra_multiple);
  462|  23.8k|            return OFPERR_OFPBRC_BAD_LEN;
  463|  23.8k|        }
  464|  1.20M|        break;
  465|  4.48M|    }
  466|       |
  467|  4.35M|    return 0;
  468|  4.48M|}
ofp-msgs.c:ofphdrs_decode_assert:
  315|  13.0k|{
  316|  13.0k|    ovs_assert(!ofphdrs_decode(hdrs, oh, length));
  ------------------
  |  |   62|  13.0k|#define ovs_assert ovs_ignore
  ------------------
  317|  13.0k|}
ofp-msgs.c:ofp_is_stat_request:
  321|  2.91M|{
  322|  2.91M|    switch (version) {
  ------------------
  |  Branch (322:13): [True: 2.20M, False: 707k]
  ------------------
  323|   449k|    case OFP10_VERSION:
  ------------------
  |  Branch (323:5): [True: 449k, False: 2.46M]
  ------------------
  324|   449k|        return type == OFPT10_STATS_REQUEST;
  ------------------
  |  |   33|   449k|#define OFPT10_STATS_REQUEST 16
  ------------------
  325|   172k|    case OFP11_VERSION:
  ------------------
  |  Branch (325:5): [True: 172k, False: 2.74M]
  ------------------
  326|   602k|    case OFP12_VERSION:
  ------------------
  |  Branch (326:5): [True: 429k, False: 2.48M]
  ------------------
  327|   828k|    case OFP13_VERSION:
  ------------------
  |  Branch (327:5): [True: 225k, False: 2.69M]
  ------------------
  328|  1.22M|    case OFP14_VERSION:
  ------------------
  |  Branch (328:5): [True: 398k, False: 2.51M]
  ------------------
  329|  1.76M|    case OFP15_VERSION:
  ------------------
  |  Branch (329:5): [True: 533k, False: 2.38M]
  ------------------
  330|  1.76M|        return type == OFPT11_STATS_REQUEST;
  ------------------
  |  |   35|  1.76M|#define OFPT11_STATS_REQUEST 18
  ------------------
  331|  2.91M|    }
  332|       |
  333|   707k|    return false;
  334|  2.91M|}
ofp-msgs.c:ofp_is_stat_reply:
  338|  2.73M|{
  339|  2.73M|    switch (version) {
  ------------------
  |  Branch (339:13): [True: 2.02M, False: 707k]
  ------------------
  340|   407k|    case OFP10_VERSION:
  ------------------
  |  Branch (340:5): [True: 407k, False: 2.32M]
  ------------------
  341|   407k|        return type == OFPT10_STATS_REPLY;
  ------------------
  |  |   34|   407k|#define OFPT10_STATS_REPLY 17
  ------------------
  342|   162k|    case OFP11_VERSION:
  ------------------
  |  Branch (342:5): [True: 162k, False: 2.57M]
  ------------------
  343|   584k|    case OFP12_VERSION:
  ------------------
  |  Branch (343:5): [True: 422k, False: 2.31M]
  ------------------
  344|   807k|    case OFP13_VERSION:
  ------------------
  |  Branch (344:5): [True: 223k, False: 2.50M]
  ------------------
  345|  1.17M|    case OFP14_VERSION:
  ------------------
  |  Branch (345:5): [True: 362k, False: 2.37M]
  ------------------
  346|  1.61M|    case OFP15_VERSION:
  ------------------
  |  Branch (346:5): [True: 447k, False: 2.28M]
  ------------------
  347|  1.61M|        return type == OFPT11_STATS_REPLY;
  ------------------
  |  |   36|  1.61M|#define OFPT11_STATS_REPLY 19
  ------------------
  348|  2.73M|    }
  349|       |
  350|   707k|    return false;
  351|  2.73M|}
ofp-msgs.c:ofp_is_stat:
  355|  2.77M|{
  356|  2.77M|    return (ofp_is_stat_request(version, type) ||
  ------------------
  |  Branch (356:13): [True: 37.3k, False: 2.73M]
  ------------------
  357|  2.73M|            ofp_is_stat_reply(version, type));
  ------------------
  |  Branch (357:13): [True: 154k, False: 2.57M]
  ------------------
  358|  2.77M|}
ofp-msgs.c:ofpmp_flags__:
 1028|   173k|{
 1029|   173k|    switch ((enum ofp_version)oh->version) {
 1030|  35.7k|    case OFP10_VERSION:
  ------------------
  |  Branch (1030:5): [True: 35.7k, False: 137k]
  ------------------
 1031|  35.7k|        return &((struct ofp10_stats_msg *) oh)->flags;
 1032|  6.94k|    case OFP11_VERSION:
  ------------------
  |  Branch (1032:5): [True: 6.94k, False: 166k]
  ------------------
 1033|  11.8k|    case OFP12_VERSION:
  ------------------
  |  Branch (1033:5): [True: 4.95k, False: 168k]
  ------------------
 1034|  16.2k|    case OFP13_VERSION:
  ------------------
  |  Branch (1034:5): [True: 4.38k, False: 168k]
  ------------------
 1035|  42.1k|    case OFP14_VERSION:
  ------------------
  |  Branch (1035:5): [True: 25.8k, False: 147k]
  ------------------
 1036|   137k|    case OFP15_VERSION:
  ------------------
  |  Branch (1036:5): [True: 95.1k, False: 77.8k]
  ------------------
 1037|   137k|        return &((struct ofp11_stats_msg *) oh)->flags;
 1038|      0|    default:
  ------------------
  |  Branch (1038:5): [True: 0, False: 173k]
  ------------------
 1039|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1040|   173k|    }
 1041|   173k|}
ofp-msgs.c:raw_info_get:
 1307|  8.65M|{
 1308|  8.65M|    ofpmsgs_init();
 1309|       |
 1310|  8.65M|    ovs_assert(raw < ARRAY_SIZE(raw_infos));
  ------------------
  |  |   62|  8.65M|#define ovs_assert ovs_ignore
  ------------------
                  ovs_assert(raw < ARRAY_SIZE(raw_infos));
  ------------------
  |  |  297|  8.65M|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   46|  8.65M|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|  8.65M|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   47|  8.65M|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  8.65M|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|  8.65M|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1311|  8.65M|    return &raw_infos[raw];
 1312|  8.65M|}
ofp-msgs.c:ofpmsgs_init:
 1363|  13.8M|{
 1364|  13.8M|    static struct ovsthread_once once = OVSTHREAD_ONCE_INITIALIZER;
  ------------------
  |  |  134|  13.8M|    {                                           \
  |  |  135|  13.8M|        false,                                  \
  |  |  136|  13.8M|        OVS_MUTEX_INITIALIZER,                  \
  |  |  ------------------
  |  |  |  |   45|  13.8M|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  13.8M|                                "<unlocked>" }
  |  |  ------------------
  |  |  137|  13.8M|    }
  ------------------
 1365|  13.8M|    const struct raw_info *info;
 1366|       |
 1367|  13.8M|    if (!ovsthread_once_start(&once)) {
  ------------------
  |  Branch (1367:9): [True: 13.8M, False: 1]
  ------------------
 1368|  13.8M|        return;
 1369|  13.8M|    }
 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|  5.20M|{
  194|  5.20M|    BUILD_ASSERT_DECL(sizeof *hdrs % 4 == 0);
  ------------------
  |  |  270|  5.20M|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  ------------------
  195|  5.20M|    return hash_bytes32((const uint32_t *) hdrs, sizeof *hdrs, 0);
  196|  5.20M|}
ofp-msgs.c:raw_instance_get:
 1316|  4.48M|{
 1317|  4.48M|    ovs_assert(version >= info->min_version && version <= info->max_version);
  ------------------
  |  |   62|  4.48M|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (1317:16): [True: 4.48M, False: 0]
  |  Branch (1317:48): [True: 4.48M, False: 0]
  ------------------
 1318|  4.48M|    return &info->instances[version - info->min_version];
 1319|  4.48M|}
ofp-msgs.c:ofpraw_from_ofphdrs:
 1323|  5.20M|{
 1324|  5.20M|    static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 1);
  ------------------
  |  |  110|  5.20M|        {                                                                 \
  |  |  111|  5.20M|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|  20.8M|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [True: 0, Folded]
  |  |  |  |  |  Branch (37:48): [Folded, False: 5.20M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  5.20M|            0,                              /* first_dropped */           \
  |  |  113|  5.20M|            0,                              /* last_dropped */            \
  |  |  114|  5.20M|            0,                              /* n_dropped */               \
  |  |  115|  5.20M|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  5.20M|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  5.20M|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  5.20M|        }
  ------------------
 1325|       |
 1326|  5.20M|    struct raw_instance *raw_hdrs;
 1327|  5.20M|    uint32_t hash;
 1328|       |
 1329|  5.20M|    ofpmsgs_init();
 1330|       |
 1331|  5.20M|    hash = ofphdrs_hash(hdrs);
 1332|  5.20M|    HMAP_FOR_EACH_WITH_HASH (raw_hdrs, hmap_node, hash, &raw_instance_map) {
  ------------------
  |  |  138|  5.20M|    for (INIT_MULTIVAR(NODE, MEMBER, hmap_first_with_hash(HMAP, HASH),        \
  |  |  ------------------
  |  |  |  |  171|  5.20M|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|  5.20M|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  139|  5.20M|                       struct hmap_node);                                     \
  |  |  140|  5.20M|         CONDITION_MULTIVAR(NODE, MEMBER, ITER_VAR(NODE) != NULL);            \
  |  |  ------------------
  |  |  |  |  185|  5.20M|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 4.49M, False: 703k]
  |  |  |  |  |  Branch (185:6): [True: 4.49M, False: 703k]
  |  |  |  |  ------------------
  |  |  |  |  186|  5.20M|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  4.49M|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|  4.49M|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|  4.49M|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  5.20M|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |  141|  5.20M|         UPDATE_MULTIVAR(NODE, hmap_next_with_hash(ITER_VAR(NODE))))
  |  |  ------------------
  |  |  |  |  193|    330|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|    330|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1333|  4.49M|        if (ofphdrs_equal(hdrs, &raw_hdrs->hdrs)) {
  ------------------
  |  Branch (1333:13): [True: 4.49M, False: 330]
  ------------------
 1334|  4.49M|            *raw = raw_hdrs->raw;
 1335|  4.49M|            return 0;
 1336|  4.49M|        }
 1337|  4.49M|    }
 1338|       |
 1339|   703k|    if (!VLOG_DROP_WARN(&rl)) {
  ------------------
  |  |  234|   703k|#define VLOG_DROP_WARN(RL) vlog_should_drop(&this_module, VLL_WARN, RL)
  ------------------
  |  Branch (1339:9): [True: 0, False: 703k]
  ------------------
 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|   703k|    return (hdrs->vendor ? OFPERR_OFPBRC_BAD_SUBTYPE
  ------------------
  |  Branch (1356:13): [True: 7.17k, False: 696k]
  ------------------
 1357|   703k|            : ofphdrs_is_stat(hdrs) ? OFPERR_OFPBRC_BAD_STAT
  ------------------
  |  Branch (1357:15): [True: 19.0k, False: 677k]
  ------------------
 1358|   696k|            : OFPERR_OFPBRC_BAD_TYPE);
 1359|  5.20M|}
ofp-msgs.c:ofphdrs_equal:
  200|  4.49M|{
  201|  4.49M|    return !memcmp(a, b, sizeof *a);
  202|  4.49M|}
ofp-msgs.c:ofphdrs_is_stat:
  362|   696k|{
  363|   696k|    return ofp_is_stat(hdrs->version, hdrs->type);
  364|   696k|}

ofputil_packet_in_format_to_string:
   41|    359|{
   42|    359|    switch (format) {
   43|    340|    case OFPUTIL_PACKET_IN_STD:
  ------------------
  |  Branch (43:5): [True: 340, False: 19]
  ------------------
   44|    340|        return "standard";
   45|     12|    case OFPUTIL_PACKET_IN_NXT:
  ------------------
  |  Branch (45:5): [True: 12, False: 347]
  ------------------
   46|     12|        return "nxt_packet_in";
   47|      7|    case OFPUTIL_PACKET_IN_NXT2:
  ------------------
  |  Branch (47:5): [True: 7, False: 352]
  ------------------
   48|      7|        return "nxt_packet_in2";
   49|      0|    default:
  ------------------
  |  Branch (49:5): [True: 0, False: 359]
  ------------------
   50|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
   51|    359|    }
   52|    359|}
ofputil_decode_set_packet_in_format:
   81|    543|{
   82|    543|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
   83|    543|    ovs_assert(ofpraw_pull_assert(&b) == OFPRAW_NXT_SET_PACKET_IN_FORMAT);
  ------------------
  |  |   62|    543|#define ovs_assert ovs_ignore
  ------------------
   84|    543|    ovs_be32 *spifp = ofpbuf_pull(&b, sizeof *spifp);
   85|    543|    uint32_t spif = ntohl(*spifp);
   86|       |
   87|    543|    switch (spif) {
   88|    340|    case OFPUTIL_PACKET_IN_STD:
  ------------------
  |  Branch (88:5): [True: 340, False: 203]
  ------------------
   89|    352|    case OFPUTIL_PACKET_IN_NXT:
  ------------------
  |  Branch (89:5): [True: 12, False: 531]
  ------------------
   90|    359|    case OFPUTIL_PACKET_IN_NXT2:
  ------------------
  |  Branch (90:5): [True: 7, False: 536]
  ------------------
   91|    359|        *format = spif;
   92|    359|        return 0;
   93|       |
   94|    184|    default:
  ------------------
  |  Branch (94:5): [True: 184, False: 359]
  ------------------
   95|    184|        VLOG_WARN_RL(&rl, "NXT_SET_PACKET_IN_FORMAT message specified invalid "
  ------------------
  |  |  224|    184|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    184|    do {                                                                \
  |  |  |  |  288|    184|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    184|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 184]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    184|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 184]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   96|    184|                     "packet-in format %"PRIu32, spif);
   97|    184|        return OFPERR_OFPBRC_EPERM;
   98|    543|    }
   99|    543|}
ofputil_decode_packet_in:
  233|   166k|{
  234|   166k|    uint32_t buffer_id;
  235|   166k|    size_t total_len;
  236|       |
  237|   166k|    memset(pin, 0, sizeof *pin);
  238|   166k|    pin->cookie = OVS_BE64_MAX;
  ------------------
  |  |   44|   166k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  239|   166k|    if (continuation) {
  ------------------
  |  Branch (239:9): [True: 166k, False: 0]
  ------------------
  240|   166k|        ofpbuf_use_const(continuation, NULL, 0);
  241|   166k|    }
  242|       |
  243|   166k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  244|   166k|    enum ofpraw raw = ofpraw_pull_assert(&b);
  245|   166k|    if (raw == OFPRAW_OFPT13_PACKET_IN || raw == OFPRAW_OFPT12_PACKET_IN) {
  ------------------
  |  Branch (245:9): [True: 1.26k, False: 165k]
  |  Branch (245:43): [True: 89.2k, False: 76.0k]
  ------------------
  246|  90.4k|        const struct ofp12_packet_in *opi = ofpbuf_pull(&b, sizeof *opi);
  247|  90.4k|        const ovs_be64 *cookie = (raw == OFPRAW_OFPT13_PACKET_IN
  ------------------
  |  Branch (247:35): [True: 1.26k, False: 89.2k]
  ------------------
  248|  90.4k|                                  ? ofpbuf_pull(&b, sizeof *cookie)
  249|  90.4k|                                  : NULL);
  250|  90.4k|        enum ofperr error = oxm_pull_match_loose(&b, false, tun_table,
  251|  90.4k|                                                 &pin->flow_metadata);
  252|  90.4k|        pin->flow_metadata.flow.tunnel.metadata.tab = tun_table;
  253|  90.4k|        if (error) {
  ------------------
  |  Branch (253:13): [True: 45.5k, False: 44.9k]
  ------------------
  254|  45.5k|            return error;
  255|  45.5k|        }
  256|       |
  257|  44.9k|        if (!ofpbuf_try_pull(&b, 2)) {
  ------------------
  |  Branch (257:13): [True: 4.66k, False: 40.2k]
  ------------------
  258|  4.66k|            return OFPERR_OFPBRC_BAD_LEN;
  259|  4.66k|        }
  260|       |
  261|  40.2k|        pin->reason = opi->reason;
  262|  40.2k|        pin->table_id = opi->table_id;
  263|  40.2k|        buffer_id = ntohl(opi->buffer_id);
  264|  40.2k|        total_len = ntohs(opi->total_len);
  265|  40.2k|        if (cookie) {
  ------------------
  |  Branch (265:13): [True: 685, False: 39.5k]
  ------------------
  266|    685|            pin->cookie = *cookie;
  267|    685|        }
  268|       |
  269|  40.2k|        pin->packet = b.data;
  270|  40.2k|        pin->packet_len = b.size;
  271|  76.0k|    } else if (raw == OFPRAW_OFPT10_PACKET_IN) {
  ------------------
  |  Branch (271:16): [True: 36.0k, False: 39.9k]
  ------------------
  272|  36.0k|        const struct ofp10_packet_in *opi;
  273|       |
  274|  36.0k|        opi = ofpbuf_pull(&b, offsetof(struct ofp10_packet_in, data));
  275|       |
  276|  36.0k|        pin->packet = CONST_CAST(uint8_t *, opi->data);
  ------------------
  |  |   85|  36.0k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  36.0k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  36.0k|     (TYPE) (POINTER))
  ------------------
  277|  36.0k|        pin->packet_len = b.size;
  278|       |
  279|  36.0k|        match_init_catchall(&pin->flow_metadata);
  280|  36.0k|        match_set_in_port(&pin->flow_metadata,
  281|  36.0k|                          u16_to_ofp(ntohs(opi->in_port)));
  282|  36.0k|        pin->reason = opi->reason;
  283|  36.0k|        buffer_id = ntohl(opi->buffer_id);
  284|  36.0k|        total_len = ntohs(opi->total_len);
  285|  39.9k|    } else if (raw == OFPRAW_OFPT11_PACKET_IN) {
  ------------------
  |  Branch (285:16): [True: 808, False: 39.1k]
  ------------------
  286|    808|        const struct ofp11_packet_in *opi;
  287|    808|        ofp_port_t in_port;
  288|    808|        enum ofperr error;
  289|       |
  290|    808|        opi = ofpbuf_pull(&b, sizeof *opi);
  291|       |
  292|    808|        pin->packet = b.data;
  293|    808|        pin->packet_len = b.size;
  294|       |
  295|    808|        buffer_id = ntohl(opi->buffer_id);
  296|    808|        error = ofputil_port_from_ofp11(opi->in_port, &in_port);
  297|    808|        if (error) {
  ------------------
  |  Branch (297:13): [True: 501, False: 307]
  ------------------
  298|    501|            return error;
  299|    501|        }
  300|    307|        match_init_catchall(&pin->flow_metadata);
  301|    307|        match_set_in_port(&pin->flow_metadata, in_port);
  302|    307|        total_len = ntohs(opi->total_len);
  303|    307|        pin->reason = opi->reason;
  304|    307|        pin->table_id = opi->table_id;
  305|  39.1k|    } else if (raw == OFPRAW_NXT_PACKET_IN) {
  ------------------
  |  Branch (305:16): [True: 6.87k, False: 32.2k]
  ------------------
  306|  6.87k|        const struct nx_packet_in *npi;
  307|  6.87k|        int error;
  308|       |
  309|  6.87k|        npi = ofpbuf_pull(&b, sizeof *npi);
  310|  6.87k|        error = nx_pull_match_loose(&b, ntohs(npi->match_len),
  311|  6.87k|                                    &pin->flow_metadata, NULL, NULL, false,
  312|  6.87k|                                    NULL);
  313|  6.87k|        if (error) {
  ------------------
  |  Branch (313:13): [True: 1.54k, False: 5.32k]
  ------------------
  314|  1.54k|            return error;
  315|  1.54k|        }
  316|       |
  317|  5.32k|        if (!ofpbuf_try_pull(&b, 2)) {
  ------------------
  |  Branch (317:13): [True: 135, False: 5.19k]
  ------------------
  318|    135|            return OFPERR_OFPBRC_BAD_LEN;
  319|    135|        }
  320|       |
  321|  5.19k|        pin->reason = npi->reason;
  322|  5.19k|        pin->table_id = npi->table_id;
  323|  5.19k|        pin->cookie = npi->cookie;
  324|       |
  325|  5.19k|        buffer_id = ntohl(npi->buffer_id);
  326|  5.19k|        total_len = ntohs(npi->total_len);
  327|       |
  328|  5.19k|        pin->packet = b.data;
  329|  5.19k|        pin->packet_len = b.size;
  330|  32.2k|    } else if (raw == OFPRAW_NXT_PACKET_IN2 || raw == OFPRAW_NXT_RESUME) {
  ------------------
  |  Branch (330:16): [True: 26.3k, False: 5.91k]
  |  Branch (330:48): [True: 5.91k, False: 0]
  ------------------
  331|  32.2k|        enum ofperr error = decode_nx_packet_in2(oh, loose, tun_table,
  332|  32.2k|                                                 vl_mff_map, pin, &total_len,
  333|  32.2k|                                                 &buffer_id, continuation);
  334|  32.2k|        if (error) {
  ------------------
  |  Branch (334:13): [True: 8.13k, False: 24.1k]
  ------------------
  335|  8.13k|            return error;
  336|  8.13k|        }
  337|  32.2k|    } else {
  338|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  339|      0|    }
  340|       |
  341|   105k|    if (total_lenp) {
  ------------------
  |  Branch (341:9): [True: 105k, False: 0]
  ------------------
  342|   105k|        *total_lenp = total_len;
  343|   105k|    }
  344|   105k|    if (buffer_idp) {
  ------------------
  |  Branch (344:9): [True: 105k, False: 0]
  ------------------
  345|   105k|        *buffer_idp = buffer_id;
  346|   105k|    }
  347|       |
  348|   105k|    return 0;
  349|   166k|}
ofputil_packet_in_reason_to_string:
  710|   120k|{
  711|   120k|    switch (reason) {
  712|  43.3k|    case OFPR_NO_MATCH:
  ------------------
  |  Branch (712:5): [True: 43.3k, False: 77.1k]
  ------------------
  713|  43.3k|        return "no_match";
  714|  4.87k|    case OFPR_ACTION:
  ------------------
  |  Branch (714:5): [True: 4.87k, False: 115k]
  ------------------
  715|  4.87k|        return "action";
  716|  3.44k|    case OFPR_INVALID_TTL:
  ------------------
  |  Branch (716:5): [True: 3.44k, False: 117k]
  ------------------
  717|  3.44k|        return "invalid_ttl";
  718|  3.62k|    case OFPR_ACTION_SET:
  ------------------
  |  Branch (718:5): [True: 3.62k, False: 116k]
  ------------------
  719|  3.62k|        return "action_set";
  720|  8.00k|    case OFPR_GROUP:
  ------------------
  |  Branch (720:5): [True: 8.00k, False: 112k]
  ------------------
  721|  8.00k|        return "group";
  722|  1.96k|    case OFPR_PACKET_OUT:
  ------------------
  |  Branch (722:5): [True: 1.96k, False: 118k]
  ------------------
  723|  1.96k|        return "packet_out";
  724|  3.92k|    case OFPR_EXPLICIT_MISS:
  ------------------
  |  Branch (724:5): [True: 3.92k, False: 116k]
  ------------------
  725|  5.24k|    case OFPR_IMPLICIT_MISS:
  ------------------
  |  Branch (725:5): [True: 1.32k, False: 119k]
  ------------------
  726|  5.24k|        return "";
  727|       |
  728|    252|    case OFPR_N_REASONS:
  ------------------
  |  Branch (728:5): [True: 252, False: 120k]
  ------------------
  729|  50.0k|    default:
  ------------------
  |  Branch (729:5): [True: 49.7k, False: 70.7k]
  ------------------
  730|  50.0k|        snprintf(reasonbuf, bufsize, "%d", (int) reason);
  731|  50.0k|        return reasonbuf;
  732|   120k|    }
  733|   120k|}
ofputil_decode_packet_in_private:
  818|   166k|{
  819|   166k|    memset(pin, 0, sizeof *pin);
  820|       |
  821|   166k|    struct ofpbuf continuation;
  822|   166k|    enum ofperr error;
  823|   166k|    error = ofputil_decode_packet_in(oh, loose, tun_table, vl_mff_map,
  824|   166k|                                     &pin->base, total_len, buffer_id,
  825|   166k|                                     &continuation);
  826|   166k|    if (error) {
  ------------------
  |  Branch (826:9): [True: 60.5k, False: 105k]
  ------------------
  827|  60.5k|        return error;
  828|  60.5k|    }
  829|       |
  830|   105k|    struct ofpbuf actions, action_set;
  831|   105k|    ofpbuf_init(&actions, 0);
  832|   105k|    ofpbuf_init(&action_set, 0);
  833|       |
  834|   105k|    uint8_t table_id = 0;
  835|   105k|    ovs_be64 cookie = 0;
  836|       |
  837|   105k|    struct ofpbuf stack;
  838|   105k|    ofpbuf_init(&stack, 0);
  839|       |
  840|   143k|    while (continuation.size > 0) {
  ------------------
  |  Branch (840:12): [True: 44.3k, False: 98.7k]
  ------------------
  841|  44.3k|        struct ofpbuf payload;
  842|  44.3k|        uint64_t type;
  843|       |
  844|  44.3k|        error = ofpprop_pull(&continuation, &payload, &type);
  845|  44.3k|        if (error) {
  ------------------
  |  Branch (845:13): [True: 3.09k, False: 41.2k]
  ------------------
  846|  3.09k|            break;
  847|  3.09k|        }
  848|       |
  849|  41.2k|        switch (type) {
  850|  3.84k|        case NXCPT_BRIDGE:
  ------------------
  |  Branch (850:9): [True: 3.84k, False: 37.4k]
  ------------------
  851|  3.84k|            error = ofpprop_parse_uuid(&payload, &pin->bridge);
  852|  3.84k|            break;
  853|       |
  854|  3.81k|        case NXCPT_STACK:
  ------------------
  |  Branch (854:9): [True: 3.81k, False: 37.4k]
  ------------------
  855|  3.81k|            error = parse_stack_prop(&payload, &stack);
  856|  3.81k|            break;
  857|       |
  858|  1.09k|        case NXCPT_MIRRORS:
  ------------------
  |  Branch (858:9): [True: 1.09k, False: 40.1k]
  ------------------
  859|  1.09k|            error = ofpprop_parse_u32(&payload, &pin->mirrors);
  860|  1.09k|            break;
  861|       |
  862|  1.08k|        case NXCPT_CONNTRACKED:
  ------------------
  |  Branch (862:9): [True: 1.08k, False: 40.1k]
  ------------------
  863|  1.08k|            pin->conntracked = true;
  864|  1.08k|            break;
  865|       |
  866|    289|        case NXCPT_TABLE_ID:
  ------------------
  |  Branch (866:9): [True: 289, False: 40.9k]
  ------------------
  867|    289|            error = ofpprop_parse_u8(&payload, &table_id);
  868|    289|            break;
  869|       |
  870|    338|        case NXCPT_COOKIE:
  ------------------
  |  Branch (870:9): [True: 338, False: 40.9k]
  ------------------
  871|    338|            error = ofpprop_parse_be64(&payload, &cookie);
  872|    338|            break;
  873|       |
  874|  14.6k|        case NXCPT_ACTIONS: {
  ------------------
  |  Branch (874:9): [True: 14.6k, False: 26.5k]
  ------------------
  875|  14.6k|            struct ofpact_unroll_xlate *unroll
  876|  14.6k|                = ofpact_put_UNROLL_XLATE(&actions);
  877|  14.6k|            unroll->rule_table_id = table_id;
  878|  14.6k|            unroll->rule_cookie = cookie;
  879|  14.6k|            error = parse_actions_property(&payload, oh->version, &actions);
  880|  14.6k|            break;
  881|      0|        }
  882|       |
  883|  12.0k|        case NXCPT_ACTION_SET:
  ------------------
  |  Branch (883:9): [True: 12.0k, False: 29.1k]
  ------------------
  884|  12.0k|            error = parse_actions_property(&payload, oh->version, &action_set);
  885|  12.0k|            break;
  886|       |
  887|    955|        case NXCPT_ODP_PORT: {
  ------------------
  |  Branch (887:9): [True: 955, False: 40.2k]
  ------------------
  888|    955|            uint32_t value;
  889|    955|            error = ofpprop_parse_u32(&payload, &value);
  890|    955|            if (!error) {
  ------------------
  |  Branch (890:17): [True: 336, False: 619]
  ------------------
  891|    336|                pin->odp_port = u32_to_odp(value);
  892|    336|            }
  893|    955|            break;
  894|      0|         }
  895|       |
  896|  3.11k|        default:
  ------------------
  |  Branch (896:9): [True: 3.11k, False: 38.1k]
  ------------------
  897|  3.11k|            error = OFPPROP_UNKNOWN(loose, "continuation", type);
  ------------------
  |  |  144|  3.11k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  898|  3.11k|            break;
  899|  41.2k|        }
  900|  41.2k|        if (error) {
  ------------------
  |  Branch (900:13): [True: 4.14k, False: 37.1k]
  ------------------
  901|  4.14k|            break;
  902|  4.14k|        }
  903|  41.2k|    }
  904|       |
  905|   105k|    pin->actions_len = actions.size;
  906|   105k|    pin->actions = ofpbuf_steal_data(&actions);
  907|   105k|    pin->action_set_len = action_set.size;
  908|   105k|    pin->action_set = ofpbuf_steal_data(&action_set);
  909|   105k|    pin->stack_size = stack.size;
  910|   105k|    pin->stack = ofpbuf_steal_data(&stack);
  911|       |
  912|   105k|    if (error) {
  ------------------
  |  Branch (912:9): [True: 7.23k, False: 98.7k]
  ------------------
  913|  7.23k|        ofputil_packet_in_private_destroy(pin);
  914|  7.23k|    }
  915|       |
  916|   105k|    return error;
  917|   105k|}
ofputil_packet_in_private_format:
  926|  98.7k|{
  927|  98.7k|    char reasonbuf[OFPUTIL_PACKET_IN_REASON_BUFSIZE];
  928|  98.7k|    const struct ofputil_packet_in *public = &pin->base;
  929|       |
  930|  98.7k|    if (public->table_id
  ------------------
  |  Branch (930:9): [True: 27.0k, False: 71.7k]
  ------------------
  931|  71.7k|        || ofputil_table_map_get_name(table_map, public->table_id)) {
  ------------------
  |  Branch (931:12): [True: 0, False: 71.7k]
  ------------------
  932|  27.0k|        ds_put_format(s, " table_id=");
  933|  27.0k|        ofputil_format_table(public->table_id, table_map, s);
  934|  27.0k|    }
  935|       |
  936|  98.7k|    if (public->cookie != OVS_BE64_MAX) {
  ------------------
  |  |   44|  98.7k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  |  Branch (936:9): [True: 5.87k, False: 92.8k]
  ------------------
  937|  5.87k|        ds_put_format(s, " cookie=0x%"PRIx64, ntohll(public->cookie));
  938|  5.87k|    }
  939|       |
  940|  98.7k|    ds_put_format(s, " total_len=%"PRIuSIZE" ", total_len);
  941|       |
  942|  98.7k|    match_format(&public->flow_metadata, port_map, s, OFP_DEFAULT_PRIORITY);
  ------------------
  |  |  138|  98.7k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
  943|       |
  944|  98.7k|    ds_put_format(s, " (via %s)",
  945|  98.7k|                  ofputil_packet_in_reason_to_string(public->reason,
  946|  98.7k|                                                     reasonbuf,
  947|  98.7k|                                                     sizeof reasonbuf));
  948|       |
  949|  98.7k|    ds_put_format(s, " data_len=%"PRIuSIZE, public->packet_len);
  ------------------
  |  |  120|  98.7k|#define PRIuSIZE "zu"
  ------------------
  950|  98.7k|    if (buffer_id == UINT32_MAX) {
  ------------------
  |  Branch (950:9): [True: 18.7k, False: 79.9k]
  ------------------
  951|  18.7k|        ds_put_format(s, " (unbuffered)");
  952|  18.7k|        if (total_len != public->packet_len) {
  ------------------
  |  Branch (952:13): [True: 11.4k, False: 7.29k]
  ------------------
  953|  11.4k|            ds_put_format(s, " (***total_len != data_len***)");
  954|  11.4k|        }
  955|  79.9k|    } else {
  956|  79.9k|        ds_put_format(s, " buffer=0x%08"PRIx32, buffer_id);
  957|  79.9k|        if (total_len < public->packet_len) {
  ------------------
  |  Branch (957:13): [True: 2.31k, False: 77.6k]
  ------------------
  958|  2.31k|            ds_put_format(s, " (***total_len < data_len***)");
  959|  2.31k|        }
  960|  79.9k|    }
  961|  98.7k|    ds_put_char(s, '\n');
  962|       |
  963|  98.7k|    if (public->userdata_len) {
  ------------------
  |  Branch (963:9): [True: 1.37k, False: 97.3k]
  ------------------
  964|  1.37k|        ds_put_cstr(s, " userdata=");
  965|  1.37k|        ds_put_hex_with_delimiter(s, pin->base.userdata,
  966|  1.37k|                                  pin->base.userdata_len, ".");
  967|  1.37k|        ds_put_char(s, '\n');
  968|  1.37k|    }
  969|       |
  970|  98.7k|    if (!uuid_is_zero(&pin->bridge)) {
  ------------------
  |  Branch (970:9): [True: 3.30k, False: 95.4k]
  ------------------
  971|  3.30k|        ds_put_format(s, " continuation.bridge="UUID_FMT"\n",
  972|  3.30k|                      UUID_ARGS(&pin->bridge));
  ------------------
  |  |   39|  3.30k|    ((unsigned int) ((UUID)->parts[0])),            \
  |  |   40|  3.30k|    ((unsigned int) ((UUID)->parts[1] >> 16)),      \
  |  |   41|  3.30k|    ((unsigned int) ((UUID)->parts[1] & 0xffff)),   \
  |  |   42|  3.30k|    ((unsigned int) ((UUID)->parts[2] >> 16)),      \
  |  |   43|  3.30k|    ((unsigned int) ((UUID)->parts[2] & 0xffff)),   \
  |  |   44|  3.30k|    ((unsigned int) ((UUID)->parts[3]))
  ------------------
  973|  3.30k|    }
  974|       |
  975|  98.7k|    if (pin->stack_size) {
  ------------------
  |  Branch (975:9): [True: 1.72k, False: 97.0k]
  ------------------
  976|  1.72k|        ds_put_cstr(s, " continuation.stack=(top)");
  977|       |
  978|  1.72k|        struct ofpbuf pin_stack;
  979|  1.72k|        ofpbuf_use_const(&pin_stack, pin->stack, pin->stack_size);
  980|       |
  981|  4.42k|        while (pin_stack.size) {
  ------------------
  |  Branch (981:16): [True: 2.69k, False: 1.72k]
  ------------------
  982|  2.69k|            uint8_t len;
  983|  2.69k|            uint8_t *val = nx_stack_pop(&pin_stack, &len);
  984|  2.69k|            union mf_subvalue value;
  985|       |
  986|  2.69k|            ds_put_char(s, ' ');
  987|  2.69k|            memset(&value, 0, sizeof value - len);
  988|  2.69k|            memcpy(&value.u8[sizeof value - len], val, len);
  989|  2.69k|            mf_subvalue_format(&value, s);
  990|  2.69k|        }
  991|  1.72k|        ds_put_cstr(s, " (bottom)\n");
  992|  1.72k|    }
  993|       |
  994|  98.7k|    if (pin->mirrors) {
  ------------------
  |  Branch (994:9): [True: 417, False: 98.3k]
  ------------------
  995|    417|        ds_put_format(s, " continuation.mirrors=0x%"PRIx32"\n",
  996|    417|                      pin->mirrors);
  997|    417|    }
  998|       |
  999|  98.7k|    if (pin->conntracked) {
  ------------------
  |  Branch (999:9): [True: 375, False: 98.3k]
  ------------------
 1000|    375|        ds_put_cstr(s, " continuation.conntracked=true\n");
 1001|    375|    }
 1002|       |
 1003|  98.7k|    struct ofpact_format_params fp = {
 1004|  98.7k|        .port_map = port_map,
 1005|  98.7k|        .table_map = table_map,
 1006|  98.7k|        .s = s,
 1007|  98.7k|    };
 1008|       |
 1009|  98.7k|    if (pin->actions_len) {
  ------------------
  |  Branch (1009:9): [True: 10.4k, False: 88.3k]
  ------------------
 1010|  10.4k|        ds_put_cstr(s, " continuation.actions=");
 1011|  10.4k|        ofpacts_format(pin->actions, pin->actions_len, &fp);
 1012|  10.4k|        ds_put_char(s, '\n');
 1013|  10.4k|    }
 1014|       |
 1015|  98.7k|    if (pin->action_set_len) {
  ------------------
  |  Branch (1015:9): [True: 9.34k, False: 89.4k]
  ------------------
 1016|  9.34k|        ds_put_cstr(s, " continuation.action_set=");
 1017|  9.34k|        ofpacts_format(pin->action_set, pin->action_set_len, &fp);
 1018|  9.34k|        ds_put_char(s, '\n');
 1019|  9.34k|    }
 1020|       |
 1021|  98.7k|    if (pin->odp_port) {
  ------------------
  |  Branch (1021:9): [True: 333, False: 98.4k]
  ------------------
 1022|    333|        ds_put_format(s, " continuation.odp_port=%"PRIu32, pin->odp_port);
 1023|    333|        ds_put_char(s, '\n');
 1024|    333|    }
 1025|       |
 1026|  98.7k|    if (verbosity > 0) {
  ------------------
  |  Branch (1026:9): [True: 98.7k, False: 0]
  ------------------
 1027|  98.7k|        char *packet = ofp_packet_to_string(
 1028|  98.7k|            public->packet, public->packet_len,
 1029|  98.7k|            public->flow_metadata.flow.packet_type);
 1030|  98.7k|        ds_put_cstr(s, packet);
 1031|  98.7k|        free(packet);
 1032|  98.7k|    }
 1033|  98.7k|    if (verbosity > 2) {
  ------------------
  |  Branch (1033:9): [True: 0, False: 98.7k]
  ------------------
 1034|       |        ds_put_hex_dump(s, public->packet, public->packet_len, 0, false);
 1035|      0|    }
 1036|  98.7k|}
ofputil_packet_in_private_destroy:
 1046|   105k|{
 1047|   105k|    if (pin) {
  ------------------
  |  Branch (1047:9): [True: 105k, False: 0]
  ------------------
 1048|   105k|        free(pin->stack);
 1049|   105k|        free(pin->actions);
 1050|   105k|        free(pin->action_set);
 1051|   105k|    }
 1052|   105k|}
ofputil_decode_packet_out:
 1070|   259k|{
 1071|   259k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
 1072|   259k|    enum ofpraw raw = ofpraw_pull_assert(&b);
 1073|       |
 1074|   259k|    ofpbuf_clear(ofpacts);
 1075|   259k|    match_init_catchall(&po->flow_metadata);
 1076|   259k|    if (raw == OFPRAW_OFPT15_PACKET_OUT) {
  ------------------
  |  Branch (1076:9): [True: 105k, False: 154k]
  ------------------
 1077|   105k|        enum ofperr error;
 1078|   105k|        const struct ofp15_packet_out *opo = ofpbuf_pull(&b, sizeof *opo);
 1079|       |
 1080|   105k|        po->buffer_id = ntohl(opo->buffer_id);
 1081|   105k|        error = oxm_pull_match_loose(&b, true, tun_table, &po->flow_metadata);
 1082|   105k|        if (error) {
  ------------------
  |  Branch (1082:13): [True: 72.4k, False: 32.5k]
  ------------------
 1083|  72.4k|            return error;
 1084|  72.4k|        }
 1085|       |
 1086|  32.5k|        if (!po->flow_metadata.wc.masks.in_port.ofp_port) {
  ------------------
  |  Branch (1086:13): [True: 29.7k, False: 2.72k]
  ------------------
 1087|  29.7k|            return OFPERR_OFPBRC_BAD_PORT;
 1088|  29.7k|        }
 1089|       |
 1090|  2.72k|        error = ofpacts_pull_openflow_actions(&b, ntohs(opo->actions_len),
 1091|  2.72k|                                              oh->version, NULL, NULL,
 1092|  2.72k|                                              ofpacts);
 1093|  2.72k|        if (error) {
  ------------------
  |  Branch (1093:13): [True: 883, False: 1.83k]
  ------------------
 1094|    883|            return error;
 1095|    883|        }
 1096|   154k|    } else if (raw == OFPRAW_OFPT11_PACKET_OUT) {
  ------------------
  |  Branch (1096:16): [True: 85.6k, False: 68.6k]
  ------------------
 1097|  85.6k|        enum ofperr error;
 1098|  85.6k|        ofp_port_t in_port;
 1099|  85.6k|        const struct ofp11_packet_out *opo = ofpbuf_pull(&b, sizeof *opo);
 1100|       |
 1101|  85.6k|        po->buffer_id = ntohl(opo->buffer_id);
 1102|  85.6k|        error = ofputil_port_from_ofp11(opo->in_port, &in_port);
 1103|  85.6k|        if (error) {
  ------------------
  |  Branch (1103:13): [True: 8.33k, False: 77.3k]
  ------------------
 1104|  8.33k|            return error;
 1105|  8.33k|        }
 1106|  77.3k|        match_set_packet_type(&po->flow_metadata, htonl(PT_ETH));
 1107|  77.3k|        match_set_in_port(&po->flow_metadata, in_port);
 1108|       |
 1109|  77.3k|        error = ofpacts_pull_openflow_actions(&b, ntohs(opo->actions_len),
 1110|  77.3k|                                              oh->version, NULL, NULL,
 1111|  77.3k|                                              ofpacts);
 1112|  77.3k|        if (error) {
  ------------------
  |  Branch (1112:13): [True: 56.5k, False: 20.7k]
  ------------------
 1113|  56.5k|            return error;
 1114|  56.5k|        }
 1115|  77.3k|    } else if (raw == OFPRAW_OFPT10_PACKET_OUT) {
  ------------------
  |  Branch (1115:16): [True: 68.6k, False: 0]
  ------------------
 1116|  68.6k|        enum ofperr error;
 1117|  68.6k|        const struct ofp10_packet_out *opo = ofpbuf_pull(&b, sizeof *opo);
 1118|       |
 1119|  68.6k|        po->buffer_id = ntohl(opo->buffer_id);
 1120|  68.6k|        match_set_packet_type(&po->flow_metadata, htonl(PT_ETH));
 1121|  68.6k|        match_set_in_port(&po->flow_metadata, u16_to_ofp(ntohs(opo->in_port)));
 1122|       |
 1123|  68.6k|        error = ofpacts_pull_openflow_actions(&b, ntohs(opo->actions_len),
 1124|  68.6k|                                              oh->version, NULL, NULL,
 1125|  68.6k|                                              ofpacts);
 1126|  68.6k|        if (error) {
  ------------------
  |  Branch (1126:13): [True: 56.9k, False: 11.6k]
  ------------------
 1127|  56.9k|            return error;
 1128|  56.9k|        }
 1129|  68.6k|    } else {
 1130|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1131|      0|    }
 1132|       |
 1133|  34.3k|    ofp_port_t in_port = po->flow_metadata.flow.in_port.ofp_port;
 1134|  34.3k|    if (ofp_to_u16(in_port) >= ofp_to_u16(OFPP_MAX)
  ------------------
  |  |   33|  34.3k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|  34.3k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1134:9): [True: 1.61k, False: 32.6k]
  ------------------
 1135|  34.3k|        && in_port != OFPP_LOCAL
  ------------------
  |  |   46|  1.61k|#define OFPP_LOCAL      OFP_PORT_C(0xfffe) /* Local openflow "port". */
  |  |  ------------------
  |  |  |  |  157|  35.9k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1135:12): [True: 1.53k, False: 77]
  ------------------
 1136|  34.3k|        && in_port != OFPP_NONE
  ------------------
  |  |   47|  1.53k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|  35.8k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1136:12): [True: 1.19k, False: 340]
  ------------------
 1137|  1.19k|        && in_port != OFPP_CONTROLLER) {
  ------------------
  |  |   45|  1.19k|#define OFPP_CONTROLLER OFP_PORT_C(0xfffd) /* Send to controller. */
  |  |  ------------------
  |  |  |  |  157|  1.19k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1137:12): [True: 271, False: 928]
  ------------------
 1138|    271|        VLOG_WARN_RL(&rl, "packet-out has bad input port %#"PRIx32,
  ------------------
  |  |  224|    271|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    271|    do {                                                                \
  |  |  |  |  288|    271|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    271|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 271]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    271|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 271]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1139|    271|                     po->flow_metadata.flow.in_port.ofp_port);
 1140|    271|        return OFPERR_OFPBRC_BAD_PORT;
 1141|    271|    }
 1142|       |
 1143|  34.0k|    po->ofpacts = ofpacts->data;
 1144|  34.0k|    po->ofpacts_len = ofpacts->size;
 1145|       |
 1146|  34.0k|    if (po->buffer_id == UINT32_MAX) {
  ------------------
  |  Branch (1146:9): [True: 1.61k, False: 32.4k]
  ------------------
 1147|  1.61k|        po->packet = b.data;
 1148|  1.61k|        po->packet_len = b.size;
 1149|  32.4k|    } else {
 1150|  32.4k|        po->packet = NULL;
 1151|  32.4k|        po->packet_len = 0;
 1152|  32.4k|    }
 1153|       |
 1154|  34.0k|    return 0;
 1155|  34.3k|}
ofputil_packet_out_format:
 1243|  34.0k|{
 1244|  34.0k|    ds_put_char(s, ' ');
 1245|  34.0k|    match_format(&po->flow_metadata, port_map, s, OFP_DEFAULT_PRIORITY);
  ------------------
  |  |  138|  34.0k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
 1246|       |
 1247|  34.0k|    ds_put_cstr(s, " actions=");
 1248|  34.0k|    struct ofpact_format_params fp = {
 1249|  34.0k|        .port_map = port_map,
 1250|  34.0k|        .table_map = table_map,
 1251|  34.0k|        .s = s,
 1252|  34.0k|    };
 1253|  34.0k|    ofpacts_format(po->ofpacts, po->ofpacts_len, &fp);
 1254|       |
 1255|  34.0k|    if (po->buffer_id == UINT32_MAX) {
  ------------------
  |  Branch (1255:9): [True: 1.61k, False: 32.4k]
  ------------------
 1256|  1.61k|        ds_put_format(s, " data_len=%"PRIuSIZE, po->packet_len);
  ------------------
  |  |  120|  1.61k|#define PRIuSIZE "zu"
  ------------------
 1257|  1.61k|        if (verbosity > 0 && po->packet_len > 0) {
  ------------------
  |  Branch (1257:13): [True: 1.61k, False: 0]
  |  Branch (1257:30): [True: 1.47k, False: 140]
  ------------------
 1258|  1.47k|            ovs_be32 po_packet_type = po->flow_metadata.flow.packet_type;
 1259|  1.47k|            char *packet = ofp_packet_to_string(po->packet, po->packet_len,
 1260|  1.47k|                                                po_packet_type);
 1261|  1.47k|            ds_put_char(s, '\n');
 1262|  1.47k|            ds_put_cstr(s, packet);
 1263|  1.47k|            free(packet);
 1264|  1.47k|        }
 1265|  1.61k|        if (verbosity > 2) {
  ------------------
  |  Branch (1265:13): [True: 0, False: 1.61k]
  ------------------
 1266|      0|            ds_put_hex_dump(s, po->packet, po->packet_len, 0, false);
 1267|      0|        }
 1268|  32.4k|    } else {
 1269|       |        ds_put_format(s, " buffer=0x%08"PRIx32, po->buffer_id);
 1270|  32.4k|    }
 1271|  34.0k|}
ofp-packet.c:decode_nx_packet_in2:
  110|  32.2k|{
  111|  32.2k|    *total_len = 0;
  112|  32.2k|    *buffer_id = UINT32_MAX;
  113|       |
  114|  32.2k|    struct ofpbuf properties;
  115|  32.2k|    ofpbuf_use_const(&properties, oh, ntohs(oh->length));
  116|  32.2k|    ofpraw_pull_assert(&properties);
  117|       |
  118|   115k|    while (properties.size > 0) {
  ------------------
  |  Branch (118:12): [True: 88.3k, False: 27.3k]
  ------------------
  119|  88.3k|        struct ofpbuf payload;
  120|  88.3k|        uint64_t type;
  121|       |
  122|  88.3k|        enum ofperr error = ofpprop_pull(&properties, &payload, &type);
  123|  88.3k|        if (error) {
  ------------------
  |  Branch (123:13): [True: 3.51k, False: 84.8k]
  ------------------
  124|  3.51k|            return error;
  125|  3.51k|        }
  126|       |
  127|  84.8k|        switch (type) {
  128|  26.3k|        case NXPINT_PACKET:
  ------------------
  |  Branch (128:9): [True: 26.3k, False: 58.4k]
  ------------------
  129|  26.3k|            pin->packet = payload.msg;
  130|  26.3k|            pin->packet_len = ofpbuf_msgsize(&payload);
  131|  26.3k|            break;
  132|       |
  133|  15.6k|        case NXPINT_FULL_LEN: {
  ------------------
  |  Branch (133:9): [True: 15.6k, False: 69.1k]
  ------------------
  134|  15.6k|            uint32_t u32;
  135|  15.6k|            error = ofpprop_parse_u32(&payload, &u32);
  136|  15.6k|            if (!error) {
  ------------------
  |  Branch (136:17): [True: 15.6k, False: 36]
  ------------------
  137|  15.6k|                *total_len = u32;
  138|  15.6k|            }
  139|  15.6k|            break;
  140|      0|        }
  141|       |
  142|  1.14k|        case NXPINT_BUFFER_ID:
  ------------------
  |  Branch (142:9): [True: 1.14k, False: 83.7k]
  ------------------
  143|  1.14k|            error = ofpprop_parse_u32(&payload, buffer_id);
  144|  1.14k|            break;
  145|       |
  146|     76|        case NXPINT_TABLE_ID:
  ------------------
  |  Branch (146:9): [True: 76, False: 84.7k]
  ------------------
  147|     76|            error = ofpprop_parse_u8(&payload, &pin->table_id);
  148|     76|            break;
  149|       |
  150|    360|        case NXPINT_COOKIE:
  ------------------
  |  Branch (150:9): [True: 360, False: 84.4k]
  ------------------
  151|    360|            error = ofpprop_parse_be64(&payload, &pin->cookie);
  152|    360|            break;
  153|       |
  154|    288|        case NXPINT_REASON: {
  ------------------
  |  Branch (154:9): [True: 288, False: 84.5k]
  ------------------
  155|    288|            uint8_t reason;
  156|    288|            error = ofpprop_parse_u8(&payload, &reason);
  157|    288|            if (!error) {
  ------------------
  |  Branch (157:17): [True: 254, False: 34]
  ------------------
  158|    254|                pin->reason = reason;
  159|    254|            }
  160|    288|            break;
  161|      0|        }
  162|       |
  163|  8.13k|        case NXPINT_METADATA:
  ------------------
  |  Branch (163:9): [True: 8.13k, False: 76.7k]
  ------------------
  164|  8.13k|            error = oxm_decode_match(payload.msg, ofpbuf_msgsize(&payload),
  165|  8.13k|                                     loose, tun_table, vl_mff_map,
  166|  8.13k|                                     &pin->flow_metadata);
  167|  8.13k|            pin->flow_metadata.flow.tunnel.metadata.tab = tun_table;
  168|  8.13k|            break;
  169|       |
  170|  2.21k|        case NXPINT_USERDATA:
  ------------------
  |  Branch (170:9): [True: 2.21k, False: 82.6k]
  ------------------
  171|  2.21k|            pin->userdata = payload.msg;
  172|  2.21k|            pin->userdata_len = ofpbuf_msgsize(&payload);
  173|  2.21k|            break;
  174|       |
  175|  24.1k|        case NXPINT_CONTINUATION:
  ------------------
  |  Branch (175:9): [True: 24.1k, False: 60.6k]
  ------------------
  176|  24.1k|            if (continuation) {
  ------------------
  |  Branch (176:17): [True: 24.1k, False: 0]
  ------------------
  177|  24.1k|                error = ofpprop_parse_nested(&payload, continuation);
  178|  24.1k|            }
  179|  24.1k|            break;
  180|       |
  181|  6.38k|        default:
  ------------------
  |  Branch (181:9): [True: 6.38k, False: 78.4k]
  ------------------
  182|  6.38k|            error = OFPPROP_UNKNOWN(loose, "NX_PACKET_IN2", type);
  ------------------
  |  |  144|  6.38k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  183|  6.38k|            break;
  184|  84.8k|        }
  185|  84.8k|        if (error) {
  ------------------
  |  Branch (185:13): [True: 1.43k, False: 83.4k]
  ------------------
  186|  1.43k|            return error;
  187|  1.43k|        }
  188|  84.8k|    }
  189|       |
  190|  27.3k|    if (!pin->packet_len) {
  ------------------
  |  Branch (190:9): [True: 2.98k, False: 24.3k]
  ------------------
  191|  2.98k|        VLOG_WARN_RL(&rl, "NXT_PACKET_IN2 lacks packet");
  ------------------
  |  |  224|  2.98k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  2.98k|    do {                                                                \
  |  |  |  |  288|  2.98k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  2.98k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 2.98k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  2.98k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 2.98k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  192|  2.98k|        return OFPERR_OFPBRC_BAD_LEN;
  193|  24.3k|    } else if (!*total_len) {
  ------------------
  |  Branch (193:16): [True: 9.50k, False: 14.8k]
  ------------------
  194|  9.50k|        *total_len = pin->packet_len;
  195|  14.8k|    } else if (*total_len < pin->packet_len) {
  ------------------
  |  Branch (195:16): [True: 194, False: 14.6k]
  ------------------
  196|    194|        VLOG_WARN_RL(&rl, "NXT_PACKET_IN2 claimed full_len < len");
  ------------------
  |  |  224|    194|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    194|    do {                                                                \
  |  |  |  |  288|    194|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    194|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 194]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    194|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 194]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  197|    194|        return OFPERR_OFPBRC_BAD_LEN;
  198|    194|    }
  199|       |
  200|  24.1k|    return 0;
  201|  27.3k|}
ofp-packet.c:parse_stack_prop:
  776|  3.81k|{
  777|  3.81k|    unsigned int len = ofpbuf_msgsize(property);
  778|  3.81k|    if (len > sizeof(union mf_subvalue)) {
  ------------------
  |  Branch (778:9): [True: 67, False: 3.75k]
  ------------------
  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.75k|    nx_stack_push_bottom(stack, property->msg, len);
  784|  3.75k|    return 0;
  785|  3.81k|}
ofp-packet.c:parse_actions_property:
  790|  26.7k|{
  791|  26.7k|    if (!ofpbuf_try_pull(property, ROUND_UP(ofpbuf_headersize(property), 8))) {
  ------------------
  |  |  303|  26.7k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|  26.7k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (791:9): [True: 186, False: 26.5k]
  ------------------
  792|    186|        VLOG_WARN_RL(&rl, "actions property has bad length %"PRIu32,
  ------------------
  |  |  224|    186|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    186|    do {                                                                \
  |  |  |  |  288|    186|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    186|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 186]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    186|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 186]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  793|    186|                     property->size);
  794|    186|        return OFPERR_OFPBPC_BAD_LEN;
  795|    186|    }
  796|       |
  797|  26.5k|    return ofpacts_pull_openflow_actions(property, property->size,
  798|  26.5k|                                         version, NULL, NULL, ofpacts);
  799|  26.7k|}

ofputil_port_map_get_name:
   53|   224k|{
   54|   224k|    struct namemap_node *node
   55|   224k|        = (map
  ------------------
  |  Branch (55:12): [True: 0, False: 224k]
  ------------------
   56|   224k|           ? namemap_find_by_number(&map->map, ofp_to_u16(ofp_port))
   57|   224k|           : NULL);
   58|   224k|    return node && !node->duplicate ? node->name : NULL;
  ------------------
  |  Branch (58:12): [True: 0, False: 224k]
  |  Branch (58:20): [True: 0, False: 0]
  ------------------
   59|   224k|}
ofputil_port_from_ofp11:
   84|   241k|{
   85|   241k|    uint32_t ofp11_port_h = ntohl(ofp11_port);
   86|       |
   87|   241k|    if (ofp11_port_h < ofp_to_u16(OFPP_MAX)) {
  ------------------
  |  |   33|   241k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|   241k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (87:9): [True: 157k, False: 84.0k]
  ------------------
   88|   157k|        *ofp10_port = u16_to_ofp(ofp11_port_h);
   89|   157k|        return 0;
   90|   157k|    } else if (ofp11_port_h >= ofp11_to_u32(OFPP11_MAX)) {
  ------------------
  |  |   71|  84.0k|#define OFPP11_MAX    OFP11_PORT_C(0xffffff00)
  |  |  ------------------
  |  |  |  |  159|  84.0k|#define OFP11_PORT_C(X) ((OVS_FORCE ofp11_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (90:16): [True: 51.3k, False: 32.6k]
  ------------------
   91|  51.3k|        *ofp10_port = u16_to_ofp(ofp11_port_h - OFPP11_OFFSET);
  ------------------
  |  |   72|  51.3k|#define OFPP11_OFFSET 0xffff0000    /* OFPP11_MAX - OFPP_MAX */
  ------------------
   92|  51.3k|        return 0;
   93|  51.3k|    } else {
   94|  32.6k|        *ofp10_port = OFPP_NONE;
  ------------------
  |  |   47|  32.6k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|  32.6k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
   95|       |
   96|  32.6k|        static struct vlog_rate_limit rll = VLOG_RATE_LIMIT_INIT(1, 5);
  ------------------
  |  |  110|  32.6k|        {                                                                 \
  |  |  111|  32.6k|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|   130k|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [True: 0, Folded]
  |  |  |  |  |  Branch (37:48): [Folded, False: 32.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  32.6k|            0,                              /* first_dropped */           \
  |  |  113|  32.6k|            0,                              /* last_dropped */            \
  |  |  114|  32.6k|            0,                              /* n_dropped */               \
  |  |  115|  32.6k|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  32.6k|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  32.6k|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  32.6k|        }
  ------------------
   97|  32.6k|        VLOG_WARN_RL(&rll, "port %"PRIu32" is outside the supported "
  ------------------
  |  |  224|  32.6k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  32.6k|    do {                                                                \
  |  |  |  |  288|  32.6k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  32.6k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 32.6k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  32.6k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 32.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   98|  32.6k|                     "range 0 through %d or 0x%"PRIx32" through 0x%"PRIx32,
   99|  32.6k|                     ofp11_port_h, ofp_to_u16(OFPP_MAX) - 1,
  100|  32.6k|                     ofp11_to_u32(OFPP11_MAX), UINT32_MAX);
  101|       |
  102|  32.6k|        return OFPERR_OFPBAC_BAD_OUT_PORT;
  103|  32.6k|    }
  104|   241k|}
ofputil_port_to_ofp11:
  112|  27.8k|{
  113|       |    return htonl(ofp_to_u16(ofp10_port) < ofp_to_u16(OFPP_MAX)
  ------------------
  |  Branch (113:12): [True: 3.22k, False: 24.6k]
  ------------------
  114|  27.8k|                 ? ofp_to_u16(ofp10_port)
  115|  27.8k|                 : ofp_to_u16(ofp10_port) + OFPP11_OFFSET);
  116|  27.8k|}
ofputil_port_get_reserved_name:
  229|   261k|{
  230|   261k|    switch (port) {
  231|      0|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  232|      0|        OFPUTIL_NAMED_PORTS
  ------------------
  |  |  119|  2.15k|        OFPUTIL_NAMED_PORT(IN_PORT)             \
  |  |  ------------------
  |  |  |  |  231|  2.15k|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  2.15k|#define OFPP_IN_PORT    OFP_PORT_C(0xfff8) /* Where the packet came in. */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  2.15k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 2.15k, False: 259k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  120|  3.18k|        OFPUTIL_NAMED_PORT(TABLE)               \
  |  |  ------------------
  |  |  |  |  231|  3.18k|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  |   40|  3.18k|#define OFPP_TABLE      OFP_PORT_C(0xfff9) /* Perform actions in flow table. */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  3.18k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 3.18k, False: 258k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|  3.18k|        OFPUTIL_NAMED_PORT(NORMAL)              \
  |  |  ------------------
  |  |  |  |  231|  2.60k|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|  2.60k|#define OFPP_NORMAL     OFP_PORT_C(0xfffa) /* Process with normal L2/L3. */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  2.60k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 2.60k, False: 259k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  122|  2.60k|        OFPUTIL_NAMED_PORT(FLOOD)               \
  |  |  ------------------
  |  |  |  |  231|  1.06k|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  1.06k|#define OFPP_FLOOD      OFP_PORT_C(0xfffb) /* All ports except input port and
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  1.06k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 1.06k, False: 260k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  123|  1.06k|        OFPUTIL_NAMED_PORT(ALL)                 \
  |  |  ------------------
  |  |  |  |  231|    586|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|    586|#define OFPP_ALL        OFP_PORT_C(0xfffc) /* All ports except input port. */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|    586|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 586, False: 261k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  124|  5.14k|        OFPUTIL_NAMED_PORT(CONTROLLER)          \
  |  |  ------------------
  |  |  |  |  231|  5.14k|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  |   45|  5.14k|#define OFPP_CONTROLLER OFP_PORT_C(0xfffd) /* Send to controller. */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  5.14k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 5.14k, False: 256k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  125|  5.14k|        OFPUTIL_NAMED_PORT(LOCAL)               \
  |  |  ------------------
  |  |  |  |  231|    721|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  |   46|    721|#define OFPP_LOCAL      OFP_PORT_C(0xfffe) /* Local openflow "port". */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|    721|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 721, False: 260k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  126|  21.4k|        OFPUTIL_NAMED_PORT(ANY)                 \
  |  |  ------------------
  |  |  |  |  231|  21.4k|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  |   80|  21.4k|#define OFPP_ANY OFPP_NONE
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|  21.4k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  157|  21.4k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 21.4k, False: 240k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  127|  21.4k|        OFPUTIL_NAMED_PORT(UNSET)
  |  |  ------------------
  |  |  |  |  231|    204|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  |   38|    204|#define OFPP_UNSET      OFP_PORT_C(0xfff7) /* For OXM_OF_ACTSET_OUTPUT only. */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|    204|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 204, False: 261k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  233|      0|#undef OFPUTIL_NAMED_PORT
  234|       |
  235|   224k|    default:
  ------------------
  |  Branch (235:5): [True: 224k, False: 37.1k]
  ------------------
  236|       |        return NULL;
  237|   261k|    }
  238|   261k|}
ofputil_format_port:
  246|   261k|{
  247|   261k|    const char *reserved_name = ofputil_port_get_reserved_name(port);
  248|   261k|    if (reserved_name) {
  ------------------
  |  Branch (248:9): [True: 37.1k, False: 224k]
  ------------------
  249|  37.1k|        ds_put_cstr(s, reserved_name);
  250|  37.1k|        return;
  251|  37.1k|    }
  252|       |
  253|   224k|    const char *port_name = ofputil_port_map_get_name(port_map, port);
  254|   224k|    if (port_name) {
  ------------------
  |  Branch (254:9): [True: 0, False: 224k]
  ------------------
  255|      0|        namemap_put_name(port_name, s);
  256|      0|        return;
  257|      0|    }
  258|       |
  259|   224k|    ds_put_format(s, "%"PRIu32, port);
  260|   224k|}
ofputil_port_config_format:
  311|  26.8k|{
  312|  26.8k|    ofp_print_bit_names(s, config, ofputil_port_config_to_name, ' ');
  313|  26.8k|    ds_put_char(s, '\n');
  314|  26.8k|}
ofputil_port_state_format:
  341|  22.1k|{
  342|  22.1k|    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|  22.1k|    stp_state = state & OFPUTIL_PS_STP_MASK;
  352|  22.1k|    if (stp_state) {
  ------------------
  |  Branch (352:9): [True: 10.7k, False: 11.4k]
  ------------------
  353|  10.7k|        ds_put_cstr(s, (stp_state == OFPUTIL_PS_STP_LEARN ? "STP_LEARN"
  ------------------
  |  Branch (353:25): [True: 3.06k, False: 7.66k]
  ------------------
  354|  10.7k|                        : stp_state == OFPUTIL_PS_STP_FORWARD ? "STP_FORWARD"
  ------------------
  |  Branch (354:27): [True: 1.83k, False: 5.82k]
  ------------------
  355|  7.66k|                        : "STP_BLOCK"));
  356|  10.7k|        state &= ~OFPUTIL_PS_STP_MASK;
  357|  10.7k|        if (state) {
  ------------------
  |  Branch (357:13): [True: 6.05k, False: 4.67k]
  ------------------
  358|  6.05k|            ofp_print_bit_names(s, state, ofputil_port_state_to_name, ' ');
  359|  6.05k|        }
  360|  11.4k|    } else {
  361|  11.4k|        ofp_print_bit_names(s, state, ofputil_port_state_to_name, ' ');
  362|  11.4k|    }
  363|  22.1k|    ds_put_char(s, '\n');
  364|  22.1k|}
ofputil_decode_port_desc_stats_request:
  662|    595|{
  663|    595|    struct ofpbuf b = ofpbuf_const_initializer(request,
  664|    595|                                               ntohs(request->length));
  665|    595|    enum ofpraw raw = ofpraw_pull_assert(&b);
  666|    595|    if (raw == OFPRAW_OFPST10_PORT_DESC_REQUEST) {
  ------------------
  |  Branch (666:9): [True: 267, False: 328]
  ------------------
  667|    267|        *port = OFPP_ANY;
  ------------------
  |  |   80|    267|#define OFPP_ANY OFPP_NONE
  |  |  ------------------
  |  |  |  |   47|    267|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|    267|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  668|    267|        return 0;
  669|    328|    } else if (raw == OFPRAW_OFPST15_PORT_DESC_REQUEST) {
  ------------------
  |  Branch (669:16): [True: 328, False: 0]
  ------------------
  670|    328|        ovs_be32 *ofp11_port;
  671|       |
  672|    328|        ofp11_port = ofpbuf_pull(&b, sizeof *ofp11_port);
  673|    328|        return ofputil_port_from_ofp11(*ofp11_port, port);
  674|    328|    } else {
  675|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  676|      0|    }
  677|    595|}
ofputil_pull_phy_port:
  728|  29.0k|{
  729|  29.0k|    memset(pp, 0, sizeof *pp);
  730|       |
  731|  29.0k|    switch (ofp_version) {
  732|  21.8k|    case OFP10_VERSION: {
  ------------------
  |  Branch (732:5): [True: 21.8k, False: 7.16k]
  ------------------
  733|  21.8k|        const struct ofp10_phy_port *opp = ofpbuf_try_pull(b, sizeof *opp);
  734|  21.8k|        return opp ? ofputil_decode_ofp10_phy_port(pp, opp) : EOF;
  ------------------
  |  Branch (734:16): [True: 20.7k, False: 1.13k]
  ------------------
  735|      0|    }
  736|    496|    case OFP11_VERSION:
  ------------------
  |  Branch (736:5): [True: 496, False: 28.5k]
  ------------------
  737|  1.54k|    case OFP12_VERSION:
  ------------------
  |  Branch (737:5): [True: 1.04k, False: 27.9k]
  ------------------
  738|  2.44k|    case OFP13_VERSION: {
  ------------------
  |  Branch (738:5): [True: 907, False: 28.0k]
  ------------------
  739|  2.44k|        const struct ofp11_port *op = ofpbuf_try_pull(b, sizeof *op);
  740|  2.44k|        return op ? ofputil_decode_ofp11_port(pp, op) : EOF;
  ------------------
  |  Branch (740:16): [True: 1.37k, False: 1.07k]
  ------------------
  741|  1.54k|    }
  742|  1.73k|    case OFP14_VERSION:
  ------------------
  |  Branch (742:5): [True: 1.73k, False: 27.2k]
  ------------------
  743|  4.71k|    case OFP15_VERSION:
  ------------------
  |  Branch (743:5): [True: 2.98k, False: 26.0k]
  ------------------
  744|  4.71k|        return b->size ? ofputil_pull_ofp14_port(pp, b) : EOF;
  ------------------
  |  Branch (744:16): [True: 2.73k, False: 1.98k]
  ------------------
  745|      0|    default:
  ------------------
  |  Branch (745:5): [True: 0, False: 29.0k]
  ------------------
  746|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  747|  29.0k|    }
  748|  29.0k|}
ofputil_phy_port_format:
  752|  22.1k|{
  753|  22.1k|    char name[sizeof port->name];
  754|  22.1k|    int j;
  755|       |
  756|  22.1k|    memcpy(name, port->name, sizeof name);
  757|  41.7k|    for (j = 0; j < sizeof name - 1; j++) {
  ------------------
  |  Branch (757:17): [True: 41.0k, False: 705]
  ------------------
  758|  41.0k|        if (!isprint((unsigned char) name[j])) {
  ------------------
  |  Branch (758:13): [True: 21.4k, False: 19.6k]
  ------------------
  759|  21.4k|            break;
  760|  21.4k|        }
  761|  41.0k|    }
  762|  22.1k|    name[j] = '\0';
  763|       |
  764|  22.1k|    ds_put_char(s, ' ');
  765|  22.1k|    ofputil_format_port(port->port_no, NULL, s);
  766|  22.1k|    ds_put_format(s, "(%s): addr:"ETH_ADDR_FMT"\n",
  767|  22.1k|                  name, ETH_ADDR_ARGS(port->hw_addr));
  ------------------
  |  |  371|  22.1k|#define ETH_ADDR_ARGS(EA) ETH_ADDR_BYTES_ARGS((EA).ea)
  |  |  ------------------
  |  |  |  |  373|  22.1k|         (EAB)[0], (EAB)[1], (EAB)[2], (EAB)[3], (EAB)[4], (EAB)[5]
  |  |  ------------------
  ------------------
  768|       |
  769|  22.1k|    ds_put_cstr(s, "     config:     ");
  770|  22.1k|    ofputil_port_config_format(s, port->config);
  771|       |
  772|  22.1k|    ds_put_cstr(s, "     state:      ");
  773|  22.1k|    ofputil_port_state_format(s, port->state);
  774|       |
  775|  22.1k|    if (port->curr) {
  ------------------
  |  Branch (775:9): [True: 17.5k, False: 4.56k]
  ------------------
  776|  17.5k|        ds_put_format(s, "     current:    ");
  777|  17.5k|        netdev_features_format(s, port->curr);
  778|  17.5k|    }
  779|  22.1k|    if (port->advertised) {
  ------------------
  |  Branch (779:9): [True: 17.4k, False: 4.64k]
  ------------------
  780|  17.4k|        ds_put_format(s, "     advertised: ");
  781|  17.4k|        netdev_features_format(s, port->advertised);
  782|  17.4k|    }
  783|  22.1k|    if (port->supported) {
  ------------------
  |  Branch (783:9): [True: 17.6k, False: 4.47k]
  ------------------
  784|  17.6k|        ds_put_format(s, "     supported:  ");
  785|  17.6k|        netdev_features_format(s, port->supported);
  786|  17.6k|    }
  787|  22.1k|    if (port->peer) {
  ------------------
  |  Branch (787:9): [True: 17.7k, False: 4.35k]
  ------------------
  788|  17.7k|        ds_put_format(s, "     peer:       ");
  789|  17.7k|        netdev_features_format(s, port->peer);
  790|  17.7k|    }
  791|  22.1k|    ds_put_format(s, "     speed: %"PRIu32" Mbps now, "
  792|  22.1k|                  "%"PRIu32" Mbps max\n",
  793|  22.1k|                  port->curr_speed / UINT32_C(1000),
  794|       |                  port->max_speed / UINT32_C(1000));
  795|  22.1k|}
ofputil_phy_ports_format:
  814|  5.29k|{
  815|  5.29k|    struct ofputil_phy_port *ports;
  816|  5.29k|    size_t allocated_ports, n_ports;
  817|  5.29k|    int retval;
  818|  5.29k|    size_t i;
  819|       |
  820|  5.29k|    ports = NULL;
  821|  5.29k|    allocated_ports = 0;
  822|  26.2k|    for (n_ports = 0; ; n_ports++) {
  823|  26.2k|        if (n_ports >= allocated_ports) {
  ------------------
  |  Branch (823:13): [True: 7.14k, False: 19.0k]
  ------------------
  824|  7.14k|            ports = x2nrealloc(ports, &allocated_ports, sizeof *ports);
  825|  7.14k|        }
  826|       |
  827|  26.2k|        retval = ofputil_pull_phy_port(ofp_version, b, &ports[n_ports]);
  828|  26.2k|        if (retval) {
  ------------------
  |  Branch (828:13): [True: 5.29k, False: 20.9k]
  ------------------
  829|  5.29k|            break;
  830|  5.29k|        }
  831|  26.2k|    }
  832|       |
  833|  5.29k|    qsort(ports, n_ports, sizeof *ports, compare_ports);
  834|  26.2k|    for (i = 0; i < n_ports; i++) {
  ------------------
  |  Branch (834:17): [True: 20.9k, False: 5.29k]
  ------------------
  835|  20.9k|        ofputil_phy_port_format(string, &ports[i]);
  836|  20.9k|    }
  837|  5.29k|    free(ports);
  838|       |
  839|  5.29k|    return retval != EOF ? retval : 0;
  ------------------
  |  Branch (839:12): [True: 1.10k, False: 4.19k]
  ------------------
  840|  5.29k|}
ofputil_decode_port_status:
  849|  2.87k|{
  850|  2.87k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  851|  2.87k|    ofpraw_pull_assert(&b);
  852|       |
  853|  2.87k|    const struct ofp_port_status *ops = ofpbuf_pull(&b, sizeof *ops);
  854|  2.87k|    if (ops->reason != OFPPR_ADD &&
  ------------------
  |  Branch (854:9): [True: 2.01k, False: 867]
  ------------------
  855|  2.01k|        ops->reason != OFPPR_DELETE &&
  ------------------
  |  Branch (855:9): [True: 1.27k, False: 739]
  ------------------
  856|  1.27k|        ops->reason != OFPPR_MODIFY) {
  ------------------
  |  Branch (856:9): [True: 73, False: 1.19k]
  ------------------
  857|     73|        return OFPERR_NXBRC_BAD_REASON;
  858|     73|    }
  859|  2.80k|    ps->reason = ops->reason;
  860|       |
  861|  2.80k|    int retval = ofputil_pull_phy_port(oh->version, &b, &ps->desc);
  862|  2.80k|    ovs_assert(retval != EOF);
  ------------------
  |  |   62|  2.80k|#define ovs_assert ovs_ignore
  ------------------
  863|  2.80k|    return retval;
  864|  2.87k|}
ofputil_port_status_format:
  910|  1.22k|{
  911|  1.22k|    if (ps->reason == OFPPR_ADD) {
  ------------------
  |  Branch (911:9): [True: 503, False: 723]
  ------------------
  912|    503|        ds_put_format(s, " ADD:");
  913|    723|    } else if (ps->reason == OFPPR_DELETE) {
  ------------------
  |  Branch (913:16): [True: 701, False: 22]
  ------------------
  914|    701|        ds_put_format(s, " DEL:");
  915|    701|    } else if (ps->reason == OFPPR_MODIFY) {
  ------------------
  |  Branch (915:16): [True: 22, False: 0]
  ------------------
  916|     22|        ds_put_format(s, " MOD:");
  917|     22|    }
  918|       |
  919|  1.22k|    ofputil_phy_port_format(s, &ps->desc);
  920|  1.22k|}
ofputil_decode_port_mod:
 1022|  4.42k|{
 1023|  4.42k|    memset(pm, 0, sizeof *pm);
 1024|       |
 1025|  4.42k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
 1026|  4.42k|    enum ofpraw raw = ofpraw_pull_assert(&b);
 1027|       |
 1028|  4.42k|    enum ofperr error;
 1029|  4.42k|    if (raw == OFPRAW_OFPT10_PORT_MOD) {
  ------------------
  |  Branch (1029:9): [True: 1.04k, False: 3.37k]
  ------------------
 1030|  1.04k|        error = ofputil_decode_ofp10_port_mod(b.data, pm);
 1031|  3.37k|    } else if (raw == OFPRAW_OFPT11_PORT_MOD) {
  ------------------
  |  Branch (1031:16): [True: 410, False: 2.96k]
  ------------------
 1032|    410|        error = ofputil_decode_ofp11_port_mod(b.data, pm);
 1033|  2.96k|    } else if (raw == OFPRAW_OFPT14_PORT_MOD) {
  ------------------
  |  Branch (1033:16): [True: 2.96k, False: 0]
  ------------------
 1034|  2.96k|        error = ofputil_decode_ofp14_port_mod(&b, loose, pm);
 1035|  2.96k|    } else {
 1036|      0|        error = OFPERR_OFPBRC_BAD_TYPE;
 1037|      0|    }
 1038|       |
 1039|  4.42k|    pm->config &= pm->mask;
 1040|  4.42k|    return error;
 1041|  4.42k|}
ofputil_port_mod_format:
 1108|  2.38k|{
 1109|  2.38k|    ds_put_cstr(s, " port: ");
 1110|  2.38k|    ofputil_format_port(pm->port_no, port_map, s);
 1111|  2.38k|    ds_put_format(s, ": addr:"ETH_ADDR_FMT"\n",
 1112|  2.38k|                  ETH_ADDR_ARGS(pm->hw_addr));
  ------------------
  |  |  371|  2.38k|#define ETH_ADDR_ARGS(EA) ETH_ADDR_BYTES_ARGS((EA).ea)
  |  |  ------------------
  |  |  |  |  373|  2.38k|         (EAB)[0], (EAB)[1], (EAB)[2], (EAB)[3], (EAB)[4], (EAB)[5]
  |  |  ------------------
  ------------------
 1113|       |
 1114|  2.38k|    ds_put_cstr(s, "     config: ");
 1115|  2.38k|    ofputil_port_config_format(s, pm->config);
 1116|       |
 1117|  2.38k|    ds_put_cstr(s, "     mask:   ");
 1118|  2.38k|    ofputil_port_config_format(s, pm->mask);
 1119|       |
 1120|  2.38k|    ds_put_cstr(s, "     advertise: ");
 1121|  2.38k|    if (pm->advertise) {
  ------------------
  |  Branch (1121:9): [True: 1.40k, False: 974]
  ------------------
 1122|  1.40k|        netdev_features_format(s, pm->advertise);
 1123|  1.40k|    } else {
 1124|    974|        ds_put_cstr(s, "UNCHANGED\n");
 1125|    974|    }
 1126|  2.38k|}
ofputil_count_port_stats:
 1606|  13.2k|{
 1607|  13.2k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
 1608|  13.2k|    ofpraw_pull_assert(&b);
 1609|       |
 1610|  24.5k|    for (size_t n = 0; ; n++) {
 1611|  24.5k|        struct ofputil_port_stats ps;
 1612|  24.5k|        if (ofputil_decode_port_stats(&ps, &b)) {
  ------------------
  |  Branch (1612:13): [True: 13.2k, False: 11.3k]
  ------------------
 1613|  13.2k|            return n;
 1614|  13.2k|        }
 1615|  11.3k|        netdev_free_custom_stats_counters(&ps.custom_stats);
 1616|  11.3k|    }
 1617|  13.2k|}
ofputil_decode_port_stats:
 1634|  49.1k|{
 1635|  49.1k|    enum ofperr error;
 1636|  49.1k|    enum ofpraw raw;
 1637|       |
 1638|  49.1k|    memset(&(ps->stats), 0xFF, sizeof (ps->stats));
 1639|  49.1k|    memset(&(ps->custom_stats), 0, sizeof (ps->custom_stats));
 1640|       |
 1641|  49.1k|    error = (msg->header ? ofpraw_decode(&raw, msg->header)
  ------------------
  |  Branch (1641:14): [True: 35.8k, False: 13.2k]
  ------------------
 1642|  49.1k|             : ofpraw_pull(&raw, msg));
 1643|  49.1k|    if (error) {
  ------------------
  |  Branch (1643:9): [True: 0, False: 49.1k]
  ------------------
 1644|      0|        return error;
 1645|      0|    }
 1646|       |
 1647|  49.1k|    if (!msg->size) {
  ------------------
  |  Branch (1647:9): [True: 13.7k, False: 35.3k]
  ------------------
 1648|  13.7k|        return EOF;
 1649|  35.3k|    } else if (raw == OFPRAW_OFPST14_PORT_REPLY) {
  ------------------
  |  Branch (1649:16): [True: 23.7k, False: 11.6k]
  ------------------
 1650|  23.7k|        return ofputil_pull_ofp14_port_stats(ps, msg);
 1651|  23.7k|    } else if (raw == OFPRAW_OFPST13_PORT_REPLY) {
  ------------------
  |  Branch (1651:16): [True: 962, False: 10.6k]
  ------------------
 1652|    962|        const struct ofp13_port_stats *ps13;
 1653|    962|        ps13 = ofpbuf_try_pull(msg, sizeof *ps13);
 1654|    962|        if (!ps13) {
  ------------------
  |  Branch (1654:13): [True: 0, False: 962]
  ------------------
 1655|      0|            goto bad_len;
 1656|      0|        }
 1657|    962|        return ofputil_port_stats_from_ofp13(ps, ps13);
 1658|  10.6k|    } else if (raw == OFPRAW_OFPST11_PORT_REPLY) {
  ------------------
  |  Branch (1658:16): [True: 1.06k, False: 9.59k]
  ------------------
 1659|  1.06k|        const struct ofp11_port_stats *ps11;
 1660|       |
 1661|  1.06k|        ps11 = ofpbuf_try_pull(msg, sizeof *ps11);
 1662|  1.06k|        if (!ps11) {
  ------------------
  |  Branch (1662:13): [True: 0, False: 1.06k]
  ------------------
 1663|      0|            goto bad_len;
 1664|      0|        }
 1665|  1.06k|        return ofputil_port_stats_from_ofp11(ps, ps11);
 1666|  9.59k|    } else if (raw == OFPRAW_OFPST10_PORT_REPLY) {
  ------------------
  |  Branch (1666:16): [True: 9.59k, False: 0]
  ------------------
 1667|  9.59k|        const struct ofp10_port_stats *ps10;
 1668|       |
 1669|  9.59k|        ps10 = ofpbuf_try_pull(msg, sizeof *ps10);
 1670|  9.59k|        if (!ps10) {
  ------------------
  |  Branch (1670:13): [True: 0, False: 9.59k]
  ------------------
 1671|      0|            goto bad_len;
 1672|      0|        }
 1673|  9.59k|        return ofputil_port_stats_from_ofp10(ps, ps10);
 1674|  9.59k|    } 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|  49.1k|}
ofputil_format_port_stats:
 1712|  11.3k|{
 1713|  11.3k|    ds_put_cstr(string, "  port ");
 1714|  11.3k|    if (ofp_to_u16(ps->port_no) < 10) {
  ------------------
  |  Branch (1714:9): [True: 1.32k, False: 9.99k]
  ------------------
 1715|  1.32k|        ds_put_char(string, ' ');
 1716|  1.32k|    }
 1717|  11.3k|    ofputil_format_port(ps->port_no, port_map, string);
 1718|       |
 1719|  11.3k|    ds_put_cstr(string, ": rx ");
 1720|  11.3k|    print_port_stat(string, "pkts=", ps->stats.rx_packets, 1);
 1721|  11.3k|    print_port_stat(string, "bytes=", ps->stats.rx_bytes, 1);
 1722|  11.3k|    print_port_stat(string, "drop=", ps->stats.rx_dropped, 1);
 1723|  11.3k|    print_port_stat(string, "errs=", ps->stats.rx_errors, 1);
 1724|  11.3k|    print_port_stat(string, "frame=", ps->stats.rx_frame_errors, 1);
 1725|  11.3k|    print_port_stat(string, "over=", ps->stats.rx_over_errors, 1);
 1726|  11.3k|    print_port_stat(string, "crc=", ps->stats.rx_crc_errors, 0);
 1727|       |
 1728|  11.3k|    ds_put_cstr(string, "           tx ");
 1729|  11.3k|    print_port_stat(string, "pkts=", ps->stats.tx_packets, 1);
 1730|  11.3k|    print_port_stat(string, "bytes=", ps->stats.tx_bytes, 1);
 1731|  11.3k|    print_port_stat(string, "drop=", ps->stats.tx_dropped, 1);
 1732|  11.3k|    print_port_stat(string, "errs=", ps->stats.tx_errors, 1);
 1733|  11.3k|    print_port_stat(string, "coll=", ps->stats.collisions, 0);
 1734|       |
 1735|  11.3k|    if (ps->duration_sec != UINT32_MAX) {
  ------------------
  |  Branch (1735:9): [True: 5.81k, False: 5.49k]
  ------------------
 1736|  5.81k|        ds_put_cstr(string, "           duration=");
 1737|  5.81k|        ofp_print_duration(string, ps->duration_sec, ps->duration_nsec);
 1738|  5.81k|        ds_put_char(string, '\n');
 1739|  5.81k|    }
 1740|  11.3k|    struct ds string_ext_stats = DS_EMPTY_INITIALIZER;
  ------------------
  |  |   46|  11.3k|#define DS_EMPTY_INITIALIZER { NULL, 0, 0 }
  ------------------
 1741|       |
 1742|  11.3k|    ds_init(&string_ext_stats);
 1743|       |
 1744|  11.3k|    print_port_stat_cond(&string_ext_stats, "1_to_64_packets=",
 1745|  11.3k|                         ps->stats.rx_1_to_64_packets);
 1746|  11.3k|    print_port_stat_cond(&string_ext_stats, "65_to_127_packets=",
 1747|  11.3k|                         ps->stats.rx_65_to_127_packets);
 1748|  11.3k|    print_port_stat_cond(&string_ext_stats, "128_to_255_packets=",
 1749|  11.3k|                         ps->stats.rx_128_to_255_packets);
 1750|  11.3k|    print_port_stat_cond(&string_ext_stats, "256_to_511_packets=",
 1751|  11.3k|                         ps->stats.rx_256_to_511_packets);
 1752|  11.3k|    print_port_stat_cond(&string_ext_stats, "512_to_1023_packets=",
 1753|  11.3k|                         ps->stats.rx_512_to_1023_packets);
 1754|  11.3k|    print_port_stat_cond(&string_ext_stats, "1024_to_1522_packets=",
 1755|  11.3k|                         ps->stats.rx_1024_to_1522_packets);
 1756|  11.3k|    print_port_stat_cond(&string_ext_stats, "1523_to_max_packets=",
 1757|  11.3k|                         ps->stats.rx_1523_to_max_packets);
 1758|  11.3k|    print_port_stat_cond(&string_ext_stats, "broadcast_packets=",
 1759|  11.3k|                         ps->stats.rx_broadcast_packets);
 1760|  11.3k|    print_port_stat_cond(&string_ext_stats, "undersized_errors=",
 1761|  11.3k|                         ps->stats.rx_undersized_errors);
 1762|  11.3k|    print_port_stat_cond(&string_ext_stats, "oversize_errors=",
 1763|  11.3k|                         ps->stats.rx_oversize_errors);
 1764|  11.3k|    print_port_stat_cond(&string_ext_stats, "rx_fragmented_errors=",
 1765|  11.3k|                         ps->stats.rx_fragmented_errors);
 1766|  11.3k|    print_port_stat_cond(&string_ext_stats, "rx_jabber_errors=",
 1767|  11.3k|                         ps->stats.rx_jabber_errors);
 1768|       |
 1769|  11.3k|    if (string_ext_stats.length != 0) {
  ------------------
  |  Branch (1769:9): [True: 0, False: 11.3k]
  ------------------
 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|  11.3k|    ds_init(&string_ext_stats);
 1779|       |
 1780|  11.3k|    print_port_stat_cond(&string_ext_stats, "1_to_64_packets=",
 1781|  11.3k|                         ps->stats.tx_1_to_64_packets);
 1782|  11.3k|    print_port_stat_cond(&string_ext_stats, "65_to_127_packets=",
 1783|  11.3k|                         ps->stats.tx_65_to_127_packets);
 1784|  11.3k|    print_port_stat_cond(&string_ext_stats, "128_to_255_packets=",
 1785|  11.3k|                         ps->stats.tx_128_to_255_packets);
 1786|  11.3k|    print_port_stat_cond(&string_ext_stats, "256_to_511_packets=",
 1787|  11.3k|                         ps->stats.tx_256_to_511_packets);
 1788|  11.3k|    print_port_stat_cond(&string_ext_stats, "512_to_1023_packets=",
 1789|  11.3k|                         ps->stats.tx_512_to_1023_packets);
 1790|  11.3k|    print_port_stat_cond(&string_ext_stats, "1024_to_1522_packets=",
 1791|  11.3k|                         ps->stats.tx_1024_to_1522_packets);
 1792|  11.3k|    print_port_stat_cond(&string_ext_stats, "1523_to_max_packets=",
 1793|  11.3k|                         ps->stats.tx_1523_to_max_packets);
 1794|  11.3k|    print_port_stat_cond(&string_ext_stats, "multicast_packets=",
 1795|  11.3k|                         ps->stats.tx_multicast_packets);
 1796|  11.3k|    print_port_stat_cond(&string_ext_stats, "broadcast_packets=",
 1797|  11.3k|                         ps->stats.tx_broadcast_packets);
 1798|       |
 1799|  11.3k|    if (string_ext_stats.length != 0) {
  ------------------
  |  Branch (1799:9): [True: 0, False: 11.3k]
  ------------------
 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|  11.3k|    if (ps->custom_stats.size) {
  ------------------
  |  Branch (1808:9): [True: 1.45k, False: 9.86k]
  ------------------
 1809|  1.45k|        ds_put_cstr(string, "           CUSTOM Statistics");
 1810|  15.6k|        for (int i = 0; i < ps->custom_stats.size; i++) {
  ------------------
  |  Branch (1810:25): [True: 14.2k, False: 1.45k]
  ------------------
 1811|       |            /* 3 counters in the row */
 1812|  14.2k|            if (ps->custom_stats.counters[i].name[0]) {
  ------------------
  |  Branch (1812:17): [True: 6.51k, False: 7.69k]
  ------------------
 1813|  6.51k|                if (i % 3 == 0) {
  ------------------
  |  Branch (1813:21): [True: 2.21k, False: 4.30k]
  ------------------
 1814|  2.21k|                    ds_put_cstr(string, "\n");
 1815|  2.21k|                    ds_put_cstr(string, "                      ");
 1816|  4.30k|                } else {
 1817|  4.30k|                    ds_put_char(string, ' ');
 1818|  4.30k|                }
 1819|  6.51k|                ds_put_format(string, "%s=%"PRIu64",",
 1820|  6.51k|                              ps->custom_stats.counters[i].name,
 1821|  6.51k|                              ps->custom_stats.counters[i].value);
 1822|  6.51k|            }
 1823|  14.2k|        }
 1824|  1.45k|        ds_put_cstr(string, "\n");
 1825|  1.45k|    }
 1826|  11.3k|}
ofputil_decode_port_stats_request:
 1835|  2.21k|{
 1836|  2.21k|    switch ((enum ofp_version)request->version) {
 1837|    351|    case OFP15_VERSION:
  ------------------
  |  Branch (1837:5): [True: 351, False: 1.86k]
  ------------------
 1838|    745|    case OFP14_VERSION:
  ------------------
  |  Branch (1838:5): [True: 394, False: 1.81k]
  ------------------
 1839|    962|    case OFP13_VERSION:
  ------------------
  |  Branch (1839:5): [True: 217, False: 1.99k]
  ------------------
 1840|  1.30k|    case OFP12_VERSION:
  ------------------
  |  Branch (1840:5): [True: 341, False: 1.87k]
  ------------------
 1841|  2.01k|    case OFP11_VERSION: {
  ------------------
  |  Branch (1841:5): [True: 716, False: 1.49k]
  ------------------
 1842|  2.01k|        const struct ofp11_port_stats_request *psr11 = ofpmsg_body(request);
 1843|  2.01k|        return ofputil_port_from_ofp11(psr11->port_no, ofp10_port);
 1844|  1.30k|    }
 1845|       |
 1846|    194|    case OFP10_VERSION: {
  ------------------
  |  Branch (1846:5): [True: 194, False: 2.01k]
  ------------------
 1847|    194|        const struct ofp10_port_stats_request *psr10 = ofpmsg_body(request);
 1848|    194|        *ofp10_port = u16_to_ofp(ntohs(psr10->port_no));
 1849|    194|        return 0;
 1850|  1.30k|    }
 1851|       |
 1852|      0|    default:
  ------------------
  |  Branch (1852:5): [True: 0, False: 2.21k]
  ------------------
 1853|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1854|  2.21k|    }
 1855|  2.21k|}
ofp-port.c:ofputil_port_config_to_name:
  293|  70.5k|{
  294|  70.5k|    enum ofputil_port_config pc = bit;
  295|       |
  296|  70.5k|    switch (pc) {
  ------------------
  |  Branch (296:13): [True: 70.5k, False: 0]
  ------------------
  297|  11.7k|    case OFPUTIL_PC_PORT_DOWN:    return "PORT_DOWN";
  ------------------
  |  Branch (297:5): [True: 11.7k, False: 58.8k]
  ------------------
  298|  8.87k|    case OFPUTIL_PC_NO_STP:       return "NO_STP";
  ------------------
  |  Branch (298:5): [True: 8.87k, False: 61.7k]
  ------------------
  299|  10.8k|    case OFPUTIL_PC_NO_RECV:      return "NO_RECV";
  ------------------
  |  Branch (299:5): [True: 10.8k, False: 59.7k]
  ------------------
  300|  9.70k|    case OFPUTIL_PC_NO_RECV_STP:  return "NO_RECV_STP";
  ------------------
  |  Branch (300:5): [True: 9.70k, False: 60.8k]
  ------------------
  301|  8.65k|    case OFPUTIL_PC_NO_FLOOD:     return "NO_FLOOD";
  ------------------
  |  Branch (301:5): [True: 8.65k, False: 61.9k]
  ------------------
  302|  10.2k|    case OFPUTIL_PC_NO_FWD:       return "NO_FWD";
  ------------------
  |  Branch (302:5): [True: 10.2k, False: 60.3k]
  ------------------
  303|  10.5k|    case OFPUTIL_PC_NO_PACKET_IN: return "NO_PACKET_IN";
  ------------------
  |  Branch (303:5): [True: 10.5k, False: 60.0k]
  ------------------
  304|  70.5k|    }
  305|       |
  306|      0|    return NULL;
  307|  70.5k|}
ofp-port.c:ofputil_port_state_to_name:
  320|  10.4k|{
  321|  10.4k|    enum ofputil_port_state ps = bit;
  322|       |
  323|  10.4k|    switch (ps) {
  ------------------
  |  Branch (323:13): [True: 10.4k, False: 0]
  ------------------
  324|  8.77k|    case OFPUTIL_PS_LINK_DOWN: return "LINK_DOWN";
  ------------------
  |  Branch (324:5): [True: 8.77k, False: 1.65k]
  ------------------
  325|    732|    case OFPUTIL_PS_BLOCKED:   return "BLOCKED";
  ------------------
  |  Branch (325:5): [True: 732, False: 9.69k]
  ------------------
  326|    920|    case OFPUTIL_PS_LIVE:      return "LIVE";
  ------------------
  |  Branch (326:5): [True: 920, False: 9.50k]
  ------------------
  327|       |
  328|      0|    case OFPUTIL_PS_STP_LISTEN:
  ------------------
  |  Branch (328:5): [True: 0, False: 10.4k]
  ------------------
  329|      0|    case OFPUTIL_PS_STP_LEARN:
  ------------------
  |  Branch (329:5): [True: 0, False: 10.4k]
  ------------------
  330|      0|    case OFPUTIL_PS_STP_FORWARD:
  ------------------
  |  Branch (330:5): [True: 0, False: 10.4k]
  ------------------
  331|      0|    case OFPUTIL_PS_STP_BLOCK:
  ------------------
  |  Branch (331:5): [True: 0, False: 10.4k]
  ------------------
  332|       |        /* Handled elsewhere. */
  333|      0|        return NULL;
  334|  10.4k|    }
  335|       |
  336|      0|    return NULL;
  337|  10.4k|}
ofp-port.c:ofputil_decode_ofp10_phy_port:
  429|  20.7k|{
  430|  20.7k|    pp->port_no = u16_to_ofp(ntohs(opp->port_no));
  431|  20.7k|    pp->hw_addr = opp->hw_addr;
  432|  20.7k|    ovs_strlcpy_arrays(pp->name, opp->name);
  ------------------
  |  |  209|  20.7k|    ovs_strlcpy(DST, SRC, MIN(ARRAY_SIZE(DST), ARRAY_SIZE(SRC)))
  |  |  ------------------
  |  |  |  |   91|  20.7k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:20): [Folded, False: 20.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  433|       |
  434|  20.7k|    pp->config = ntohl(opp->config) & OFPPC10_ALL;
  ------------------
  |  |   65|  20.7k|#define OFPPC10_ALL (OFPPC_PORT_DOWN | OFPPC10_NO_STP | OFPPC_NO_RECV | \
  |  |   66|  20.7k|                     OFPPC10_NO_RECV_STP | OFPPC10_NO_FLOOD | OFPPC_NO_FWD | \
  |  |   67|  20.7k|                     OFPPC_NO_PACKET_IN)
  ------------------
  435|  20.7k|    pp->state = ntohl(opp->state) & OFPPS10_ALL;
  ------------------
  |  |   84|  20.7k|#define OFPPS10_ALL (OFPPS_LINK_DOWN | OFPPS10_STP_MASK)
  ------------------
  436|       |
  437|  20.7k|    pp->curr = netdev_port_features_from_ofp10(opp->curr);
  438|  20.7k|    pp->advertised = netdev_port_features_from_ofp10(opp->advertised);
  439|  20.7k|    pp->supported = netdev_port_features_from_ofp10(opp->supported);
  440|  20.7k|    pp->peer = netdev_port_features_from_ofp10(opp->peer);
  441|       |
  442|  20.7k|    pp->curr_speed = netdev_features_to_bps(pp->curr, 0) / 1000;
  443|  20.7k|    pp->max_speed = netdev_features_to_bps(pp->supported, 0) / 1000;
  444|       |
  445|  20.7k|    return 0;
  446|  20.7k|}
ofp-port.c:netdev_port_features_from_ofp10:
  386|  83.8k|{
  387|       |    uint32_t ofp10 = ntohl(ofp10_);
  388|  83.8k|    return (ofp10 & 0x7f) | ((ofp10 & 0xf80) << 4);
  389|  83.8k|}
ofp-port.c:ofputil_decode_ofp11_port:
  451|  1.37k|{
  452|  1.37k|    enum ofperr error;
  453|       |
  454|  1.37k|    error = ofputil_port_from_ofp11(op->port_no, &pp->port_no);
  455|  1.37k|    if (error) {
  ------------------
  |  Branch (455:9): [True: 308, False: 1.06k]
  ------------------
  456|    308|        return error;
  457|    308|    }
  458|  1.06k|    pp->hw_addr = op->hw_addr;
  459|  1.06k|    ovs_strlcpy_arrays(pp->name, op->name);
  ------------------
  |  |  209|  1.06k|    ovs_strlcpy(DST, SRC, MIN(ARRAY_SIZE(DST), ARRAY_SIZE(SRC)))
  |  |  ------------------
  |  |  |  |   91|  1.06k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:20): [Folded, False: 1.06k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  460|       |
  461|  1.06k|    pp->config = ntohl(op->config) & OFPPC11_ALL;
  ------------------
  |  |   84|  1.06k|    (OFPPC_PORT_DOWN | OFPPC_NO_RECV | OFPPC_NO_FWD | OFPPC_NO_PACKET_IN)
  ------------------
  462|  1.06k|    pp->state = ntohl(op->state) & OFPPS11_ALL;
  ------------------
  |  |   92|  1.06k|#define OFPPS11_ALL (OFPPS_LINK_DOWN | OFPPS11_BLOCKED | OFPPS11_LIVE)
  ------------------
  463|       |
  464|  1.06k|    pp->curr = netdev_port_features_from_ofp11(op->curr);
  465|  1.06k|    pp->advertised = netdev_port_features_from_ofp11(op->advertised);
  466|  1.06k|    pp->supported = netdev_port_features_from_ofp11(op->supported);
  467|  1.06k|    pp->peer = netdev_port_features_from_ofp11(op->peer);
  468|       |
  469|  1.06k|    pp->curr_speed = ntohl(op->curr_speed);
  470|  1.06k|    pp->max_speed = ntohl(op->max_speed);
  471|       |
  472|  1.06k|    return 0;
  473|  1.37k|}
ofp-port.c:netdev_port_features_from_ofp11:
  416|  4.69k|{
  417|       |    return ntohl(ofp11) & 0xffff;
  418|  4.69k|}
ofp-port.c:ofputil_pull_ofp14_port:
  531|  2.73k|{
  532|  2.73k|    const struct ofp14_port *op = ofpbuf_try_pull(msg, sizeof *op);
  533|  2.73k|    if (!op) {
  ------------------
  |  Branch (533:9): [True: 75, False: 2.65k]
  ------------------
  534|     75|        return OFPERR_OFPBRC_BAD_LEN;
  535|     75|    }
  536|       |
  537|  2.65k|    size_t len = ntohs(op->length);
  538|  2.65k|    if (len < sizeof *op || len - sizeof *op > msg->size) {
  ------------------
  |  Branch (538:9): [True: 248, False: 2.41k]
  |  Branch (538:29): [True: 1.23k, False: 1.17k]
  ------------------
  539|  1.48k|        return OFPERR_OFPBRC_BAD_LEN;
  540|  1.48k|    }
  541|  1.17k|    len -= sizeof *op;
  542|       |
  543|  1.17k|    enum ofperr error = ofputil_port_from_ofp11(op->port_no, &pp->port_no);
  544|  1.17k|    if (error) {
  ------------------
  |  Branch (544:9): [True: 113, False: 1.06k]
  ------------------
  545|    113|        return error;
  546|    113|    }
  547|  1.06k|    pp->hw_addr = op->hw_addr;
  548|  1.06k|    ovs_strlcpy_arrays(pp->name, op->name);
  ------------------
  |  |  209|  1.06k|    ovs_strlcpy(DST, SRC, MIN(ARRAY_SIZE(DST), ARRAY_SIZE(SRC)))
  |  |  ------------------
  |  |  |  |   91|  1.06k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:20): [Folded, False: 1.06k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  549|       |
  550|  1.06k|    pp->config = ntohl(op->config) & OFPPC11_ALL;
  ------------------
  |  |   84|  1.06k|    (OFPPC_PORT_DOWN | OFPPC_NO_RECV | OFPPC_NO_FWD | OFPPC_NO_PACKET_IN)
  ------------------
  551|  1.06k|    pp->state = ntohl(op->state) & OFPPS11_ALL;
  ------------------
  |  |   92|  1.06k|#define OFPPS11_ALL (OFPPS_LINK_DOWN | OFPPS11_BLOCKED | OFPPS11_LIVE)
  ------------------
  552|       |
  553|  1.06k|    return ofputil_pull_ofp14_port_properties(ofpbuf_pull(msg, len), len, pp);
  554|  1.17k|}
ofp-port.c:ofputil_pull_ofp14_port_properties:
  499|  1.06k|{
  500|  1.06k|    struct ofpbuf properties = ofpbuf_const_initializer(props, len);
  501|  2.38k|    while (properties.size > 0) {
  ------------------
  |  Branch (501:12): [True: 2.01k, False: 363]
  ------------------
  502|  2.01k|        struct ofpbuf payload;
  503|  2.01k|        enum ofperr error;
  504|  2.01k|        uint64_t type;
  505|       |
  506|  2.01k|        error = ofpprop_pull(&properties, &payload, &type);
  507|  2.01k|        if (error) {
  ------------------
  |  Branch (507:13): [True: 176, False: 1.84k]
  ------------------
  508|    176|            return error;
  509|    176|        }
  510|       |
  511|  1.84k|        switch (type) {
  512|    533|        case OFPPDPT14_ETHERNET:
  ------------------
  |  Branch (512:9): [True: 533, False: 1.30k]
  ------------------
  513|    533|            error = parse_ofp14_port_ethernet_property(&payload, pp);
  514|    533|            break;
  515|       |
  516|  1.30k|        default:
  ------------------
  |  Branch (516:9): [True: 1.30k, False: 533]
  ------------------
  517|  1.30k|            error = OFPPROP_UNKNOWN(true, "port", type);
  ------------------
  |  |  144|  1.30k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  518|  1.30k|            break;
  519|  1.84k|        }
  520|       |
  521|  1.84k|        if (error) {
  ------------------
  |  Branch (521:13): [True: 523, False: 1.31k]
  ------------------
  522|    523|            return error;
  523|    523|        }
  524|  1.84k|    }
  525|       |
  526|    363|    return 0;
  527|  1.06k|}
ofp-port.c:parse_ofp14_port_ethernet_property:
  478|    533|{
  479|    533|    struct ofp14_port_desc_prop_ethernet *eth = payload->data;
  480|       |
  481|    533|    if (payload->size != sizeof *eth) {
  ------------------
  |  Branch (481:9): [True: 523, False: 10]
  ------------------
  482|    523|        return OFPERR_OFPBPC_BAD_LEN;
  483|    523|    }
  484|       |
  485|     10|    pp->curr = netdev_port_features_from_ofp11(eth->curr);
  486|     10|    pp->advertised = netdev_port_features_from_ofp11(eth->advertised);
  487|     10|    pp->supported = netdev_port_features_from_ofp11(eth->supported);
  488|     10|    pp->peer = netdev_port_features_from_ofp11(eth->peer);
  489|       |
  490|     10|    pp->curr_speed = ntohl(eth->curr_speed);
  491|     10|    pp->max_speed = ntohl(eth->max_speed);
  492|       |
  493|     10|    return 0;
  494|    533|}
ofp-port.c:compare_ports:
  800|   131k|{
  801|   131k|    const struct ofputil_phy_port *a = a_;
  802|   131k|    const struct ofputil_phy_port *b = b_;
  803|   131k|    uint16_t ap = ofp_to_u16(a->port_no);
  804|   131k|    uint16_t bp = ofp_to_u16(b->port_no);
  805|       |
  806|   131k|    return ap < bp ? -1 : ap > bp;
  ------------------
  |  Branch (806:12): [True: 26.8k, False: 104k]
  ------------------
  807|   131k|}
ofp-port.c:ofputil_decode_ofp10_port_mod:
  941|  1.04k|{
  942|  1.04k|    pm->port_no = u16_to_ofp(ntohs(opm->port_no));
  943|  1.04k|    pm->hw_addr = opm->hw_addr;
  944|  1.04k|    pm->config = ntohl(opm->config) & OFPPC10_ALL;
  ------------------
  |  |   65|  1.04k|#define OFPPC10_ALL (OFPPC_PORT_DOWN | OFPPC10_NO_STP | OFPPC_NO_RECV | \
  |  |   66|  1.04k|                     OFPPC10_NO_RECV_STP | OFPPC10_NO_FLOOD | OFPPC_NO_FWD | \
  |  |   67|  1.04k|                     OFPPC_NO_PACKET_IN)
  ------------------
  945|  1.04k|    pm->mask = ntohl(opm->mask) & OFPPC10_ALL;
  ------------------
  |  |   65|  1.04k|#define OFPPC10_ALL (OFPPC_PORT_DOWN | OFPPC10_NO_STP | OFPPC_NO_RECV | \
  |  |   66|  1.04k|                     OFPPC10_NO_RECV_STP | OFPPC10_NO_FLOOD | OFPPC_NO_FWD | \
  |  |   67|  1.04k|                     OFPPC_NO_PACKET_IN)
  ------------------
  946|  1.04k|    pm->advertise = netdev_port_features_from_ofp10(opm->advertise);
  947|  1.04k|    return 0;
  948|  1.04k|}
ofp-port.c:ofputil_decode_ofp11_port_mod:
  953|    410|{
  954|    410|    enum ofperr error;
  955|       |
  956|    410|    error = ofputil_port_from_ofp11(opm->port_no, &pm->port_no);
  957|    410|    if (error) {
  ------------------
  |  Branch (957:9): [True: 116, False: 294]
  ------------------
  958|    116|        return error;
  959|    116|    }
  960|       |
  961|    294|    pm->hw_addr = opm->hw_addr;
  962|    294|    pm->config = ntohl(opm->config) & OFPPC11_ALL;
  ------------------
  |  |   84|    294|    (OFPPC_PORT_DOWN | OFPPC_NO_RECV | OFPPC_NO_FWD | OFPPC_NO_PACKET_IN)
  ------------------
  963|    294|    pm->mask = ntohl(opm->mask) & OFPPC11_ALL;
  ------------------
  |  |   84|    294|    (OFPPC_PORT_DOWN | OFPPC_NO_RECV | OFPPC_NO_FWD | OFPPC_NO_PACKET_IN)
  ------------------
  964|    294|    pm->advertise = netdev_port_features_from_ofp11(opm->advertise);
  965|       |
  966|    294|    return 0;
  967|    410|}
ofp-port.c:ofputil_decode_ofp14_port_mod:
 1003|  2.96k|{
 1004|  2.96k|    const struct ofp14_port_mod *opm = ofpbuf_pull(b, sizeof *opm);
 1005|  2.96k|    enum ofperr error = ofputil_port_from_ofp11(opm->port_no, &pm->port_no);
 1006|  2.96k|    if (error) {
  ------------------
  |  Branch (1006:9): [True: 925, False: 2.04k]
  ------------------
 1007|    925|        return error;
 1008|    925|    }
 1009|       |
 1010|  2.04k|    pm->hw_addr = opm->hw_addr;
 1011|  2.04k|    pm->config = ntohl(opm->config) & OFPPC11_ALL;
  ------------------
  |  |   84|  2.04k|    (OFPPC_PORT_DOWN | OFPPC_NO_RECV | OFPPC_NO_FWD | OFPPC_NO_PACKET_IN)
  ------------------
 1012|  2.04k|    pm->mask = ntohl(opm->mask) & OFPPC11_ALL;
  ------------------
  |  |   84|  2.04k|    (OFPPC_PORT_DOWN | OFPPC_NO_RECV | OFPPC_NO_FWD | OFPPC_NO_PACKET_IN)
  ------------------
 1013|       |
 1014|  2.04k|    return ofputil_decode_ofp14_port_mod_properties(b, loose, pm);
 1015|  2.96k|}
ofp-port.c:ofputil_decode_ofp14_port_mod_properties:
  972|  2.04k|{
  973|  2.96k|    while (b->size > 0) {
  ------------------
  |  Branch (973:12): [True: 1.92k, False: 1.03k]
  ------------------
  974|  1.92k|        struct ofpbuf property;
  975|  1.92k|        enum ofperr error;
  976|  1.92k|        uint64_t type;
  977|       |
  978|  1.92k|        error = ofpprop_pull(b, &property, &type);
  979|  1.92k|        if (error) {
  ------------------
  |  Branch (979:13): [True: 939, False: 987]
  ------------------
  980|    939|            return error;
  981|    939|        }
  982|       |
  983|    987|        switch (type) {
  984|    176|        case OFPPMPT14_ETHERNET:
  ------------------
  |  Branch (984:9): [True: 176, False: 811]
  ------------------
  985|    176|            error = parse_port_mod_ethernet_property(&property, pm);
  986|    176|            break;
  987|       |
  988|    811|        default:
  ------------------
  |  Branch (988:9): [True: 811, False: 176]
  ------------------
  989|    811|            error = OFPPROP_UNKNOWN(loose, "port_mod", type);
  ------------------
  |  |  144|    811|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  990|    811|            break;
  991|    987|        }
  992|       |
  993|    987|        if (error) {
  ------------------
  |  Branch (993:13): [True: 66, False: 921]
  ------------------
  994|     66|            return error;
  995|     66|        }
  996|    987|    }
  997|  1.03k|    return 0;
  998|  2.04k|}
ofp-port.c:parse_port_mod_ethernet_property:
  927|    176|{
  928|    176|    ovs_be32 advertise;
  929|    176|    enum ofperr error;
  930|       |
  931|    176|    error = ofpprop_parse_be32(property, &advertise);
  932|    176|    if (!error) {
  ------------------
  |  Branch (932:9): [True: 110, False: 66]
  ------------------
  933|    110|        pm->advertise = netdev_port_features_from_ofp11(advertise);
  934|    110|    }
  935|    176|    return error;
  936|    176|}
ofp-port.c:ofputil_pull_ofp14_port_stats:
 1538|  23.7k|{
 1539|  23.7k|    const struct ofp14_port_stats *ps14 = ofpbuf_try_pull(msg, sizeof *ps14);
 1540|  23.7k|    if (!ps14) {
  ------------------
  |  Branch (1540:9): [True: 1.10k, False: 22.6k]
  ------------------
 1541|  1.10k|        return OFPERR_OFPBRC_BAD_LEN;
 1542|  1.10k|    }
 1543|       |
 1544|  22.6k|    size_t len = ntohs(ps14->length);
 1545|  22.6k|    if (len < sizeof *ps14 || len - sizeof *ps14 > msg->size) {
  ------------------
  |  Branch (1545:9): [True: 874, False: 21.7k]
  |  Branch (1545:31): [True: 984, False: 20.7k]
  ------------------
 1546|  1.85k|        return OFPERR_OFPBRC_BAD_LEN;
 1547|  1.85k|    }
 1548|  20.7k|    len -= sizeof *ps14;
 1549|       |
 1550|  20.7k|    enum ofperr error = ofputil_port_from_ofp11(ps14->port_no, &ops->port_no);
 1551|  20.7k|    if (error) {
  ------------------
  |  Branch (1551:9): [True: 668, False: 20.0k]
  ------------------
 1552|    668|        return error;
 1553|    668|    }
 1554|       |
 1555|  20.0k|    ops->duration_sec = ntohl(ps14->duration_sec);
 1556|  20.0k|    ops->duration_nsec = ntohl(ps14->duration_nsec);
 1557|  20.0k|    ops->stats.rx_packets = ntohll(ps14->rx_packets);
 1558|  20.0k|    ops->stats.tx_packets = ntohll(ps14->tx_packets);
 1559|  20.0k|    ops->stats.rx_bytes = ntohll(ps14->rx_bytes);
 1560|  20.0k|    ops->stats.tx_bytes = ntohll(ps14->tx_bytes);
 1561|  20.0k|    ops->stats.rx_dropped = ntohll(ps14->rx_dropped);
 1562|  20.0k|    ops->stats.tx_dropped = ntohll(ps14->tx_dropped);
 1563|  20.0k|    ops->stats.rx_errors = ntohll(ps14->rx_errors);
 1564|  20.0k|    ops->stats.tx_errors = ntohll(ps14->tx_errors);
 1565|       |
 1566|       |
 1567|  20.0k|    struct ofpbuf properties = ofpbuf_const_initializer(ofpbuf_pull(msg, len),
 1568|  20.0k|                                                        len);
 1569|  25.9k|    while (properties.size > 0) {
  ------------------
  |  Branch (1569:12): [True: 14.7k, False: 11.2k]
  ------------------
 1570|  14.7k|        struct ofpbuf payload;
 1571|  14.7k|        uint64_t type = 0;
 1572|       |
 1573|  14.7k|        error = ofpprop_pull(&properties, &payload, &type);
 1574|  14.7k|        if (error) {
  ------------------
  |  Branch (1574:13): [True: 2.41k, False: 12.3k]
  ------------------
 1575|  2.41k|            netdev_free_custom_stats_counters(&ops->custom_stats);
 1576|  2.41k|            return error;
 1577|  2.41k|        }
 1578|  12.3k|        switch (type) {
 1579|    146|        case OFPPSPT14_ETHERNET:
  ------------------
  |  Branch (1579:9): [True: 146, False: 12.1k]
  ------------------
 1580|    146|            error = parse_ofp14_port_stats_ethernet_property(&payload, ops);
 1581|    146|            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: 12.3k]
  ------------------
 1583|     20|            error = parse_intel_port_stats_rfc2819_property(&payload, ops);
 1584|     20|            break;
 1585|  9.35k|        case OFPPROP_EXP(INTEL_VENDOR_ID, INTEL_PORT_STATS_CUSTOM):
  ------------------
  |  |   67|  9.35k|    (((uint64_t) (EXP_ID) << 32) | (EXP_TYPE))
  ------------------
  |  Branch (1585:9): [True: 9.35k, False: 2.97k]
  ------------------
 1586|  9.35k|            error = parse_intel_port_custom_property(&payload, ops);
 1587|  9.35k|            break;
 1588|  2.81k|        default:
  ------------------
  |  Branch (1588:9): [True: 2.81k, False: 9.52k]
  ------------------
 1589|  2.81k|            error = OFPPROP_UNKNOWN(true, "port stats", type);
  ------------------
  |  |  144|  2.81k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
 1590|  2.81k|            break;
 1591|  12.3k|        }
 1592|       |
 1593|  12.3k|        if (error) {
  ------------------
  |  Branch (1593:13): [True: 6.43k, False: 5.89k]
  ------------------
 1594|  6.43k|            netdev_free_custom_stats_counters(&ops->custom_stats);
 1595|  6.43k|            return error;
 1596|  6.43k|        }
 1597|  12.3k|    }
 1598|       |
 1599|  11.2k|    return 0;
 1600|  20.0k|}
ofp-port.c:parse_ofp14_port_stats_ethernet_property:
 1434|    146|{
 1435|    146|    const struct ofp14_port_stats_prop_ethernet *eth = payload->data;
 1436|       |
 1437|    146|    if (payload->size != sizeof *eth) {
  ------------------
  |  Branch (1437:9): [True: 130, False: 16]
  ------------------
 1438|    130|        return OFPERR_OFPBPC_BAD_LEN;
 1439|    130|    }
 1440|       |
 1441|     16|    ops->stats.rx_frame_errors = ntohll(eth->rx_frame_err);
 1442|     16|    ops->stats.rx_over_errors = ntohll(eth->rx_over_err);
 1443|     16|    ops->stats.rx_crc_errors = ntohll(eth->rx_crc_err);
 1444|     16|    ops->stats.collisions = ntohll(eth->collisions);
 1445|       |
 1446|     16|    return 0;
 1447|    146|}
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|  9.35k|{
 1496|  9.35k|    const struct intel_port_custom_stats *custom_stats
 1497|  9.35k|        = ofpbuf_try_pull(payload, sizeof *custom_stats);
 1498|  9.35k|    if (!custom_stats) {
  ------------------
  |  Branch (1498:9): [True: 6, False: 9.34k]
  ------------------
 1499|      6|        return OFPERR_OFPBPC_BAD_LEN;
 1500|      6|    }
 1501|       |
 1502|  9.34k|    ops->custom_stats.size = ntohs(custom_stats->stats_array_size);
 1503|       |
 1504|  9.34k|    netdev_free_custom_stats_counters(&ops->custom_stats);
 1505|  9.34k|    ops->custom_stats.counters = xcalloc(ops->custom_stats.size,
 1506|  9.34k|                                         sizeof *ops->custom_stats.counters);
 1507|       |
 1508|  65.2k|    for (int i = 0; i < ops->custom_stats.size; i++) {
  ------------------
  |  Branch (1508:21): [True: 62.1k, False: 3.06k]
  ------------------
 1509|  62.1k|        struct netdev_custom_counter *c = &ops->custom_stats.counters[i];
 1510|       |
 1511|       |        /* Counter name. */
 1512|  62.1k|        uint8_t *name_len = ofpbuf_try_pull(payload, sizeof *name_len);
 1513|  62.1k|        char *name = name_len ? ofpbuf_try_pull(payload, *name_len) : NULL;
  ------------------
  |  Branch (1513:22): [True: 62.1k, False: 48]
  ------------------
 1514|  62.1k|        if (!name_len || !name) {
  ------------------
  |  Branch (1514:13): [True: 48, False: 62.1k]
  |  Branch (1514:26): [True: 2.58k, False: 59.5k]
  ------------------
 1515|  2.63k|            netdev_free_custom_stats_counters(&ops->custom_stats);
 1516|  2.63k|            return OFPERR_OFPBPC_BAD_LEN;
 1517|  2.63k|        }
 1518|       |
 1519|  59.5k|        size_t len = MIN(*name_len, sizeof c->name - 1);
  ------------------
  |  |   91|  59.5k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (91:20): [True: 56.7k, False: 2.79k]
  |  |  ------------------
  ------------------
 1520|  59.5k|        memcpy(c->name, name, len);
 1521|  59.5k|        c->name[len] = '\0';
 1522|       |
 1523|       |        /* Counter value. */
 1524|  59.5k|        ovs_be64 *value = ofpbuf_try_pull(payload, sizeof *value);
 1525|  59.5k|        if (!value) {
  ------------------
  |  Branch (1525:13): [True: 3.64k, False: 55.9k]
  ------------------
 1526|  3.64k|            netdev_free_custom_stats_counters(&ops->custom_stats);
 1527|  3.64k|            return OFPERR_OFPBPC_BAD_LEN;
 1528|  3.64k|        }
 1529|  55.9k|        c->value = ntohll(get_unaligned_be64(value));
 1530|  55.9k|    }
 1531|       |
 1532|  3.06k|    return 0;
 1533|  9.34k|}
ofp-port.c:ofputil_port_stats_from_ofp13:
 1422|    962|{
 1423|    962|    enum ofperr error = ofputil_port_stats_from_ofp11(ops, &ps13->ps);
 1424|    962|    if (!error) {
  ------------------
  |  Branch (1424:9): [True: 820, False: 142]
  ------------------
 1425|    820|        ops->duration_sec = ntohl(ps13->duration_sec);
 1426|       |        ops->duration_nsec = ntohl(ps13->duration_nsec);
 1427|    820|    }
 1428|    962|    return error;
 1429|    962|}
ofp-port.c:ofputil_port_stats_from_ofp11:
 1394|  2.03k|{
 1395|  2.03k|    enum ofperr error;
 1396|       |
 1397|  2.03k|    error = ofputil_port_from_ofp11(ps11->port_no, &ops->port_no);
 1398|  2.03k|    if (error) {
  ------------------
  |  Branch (1398:9): [True: 238, False: 1.79k]
  ------------------
 1399|    238|        return error;
 1400|    238|    }
 1401|       |
 1402|  1.79k|    ops->stats.rx_packets = ntohll(ps11->rx_packets);
 1403|  1.79k|    ops->stats.tx_packets = ntohll(ps11->tx_packets);
 1404|  1.79k|    ops->stats.rx_bytes = ntohll(ps11->rx_bytes);
 1405|  1.79k|    ops->stats.tx_bytes = ntohll(ps11->tx_bytes);
 1406|  1.79k|    ops->stats.rx_dropped = ntohll(ps11->rx_dropped);
 1407|  1.79k|    ops->stats.tx_dropped = ntohll(ps11->tx_dropped);
 1408|  1.79k|    ops->stats.rx_errors = ntohll(ps11->rx_errors);
 1409|  1.79k|    ops->stats.tx_errors = ntohll(ps11->tx_errors);
 1410|  1.79k|    ops->stats.rx_frame_errors = ntohll(ps11->rx_frame_err);
 1411|  1.79k|    ops->stats.rx_over_errors = ntohll(ps11->rx_over_err);
 1412|  1.79k|    ops->stats.rx_crc_errors = ntohll(ps11->rx_crc_err);
 1413|  1.79k|    ops->stats.collisions = ntohll(ps11->collisions);
 1414|  1.79k|    ops->duration_sec = ops->duration_nsec = UINT32_MAX;
 1415|       |
 1416|  1.79k|    return 0;
 1417|  2.03k|}
ofp-port.c:ofputil_port_stats_from_ofp10:
 1370|  9.59k|{
 1371|       |
 1372|  9.59k|    ops->port_no = u16_to_ofp(ntohs(ps10->port_no));
 1373|  9.59k|    ops->stats.rx_packets = ntohll(get_32aligned_be64(&ps10->rx_packets));
 1374|  9.59k|    ops->stats.tx_packets = ntohll(get_32aligned_be64(&ps10->tx_packets));
 1375|  9.59k|    ops->stats.rx_bytes = ntohll(get_32aligned_be64(&ps10->rx_bytes));
 1376|  9.59k|    ops->stats.tx_bytes = ntohll(get_32aligned_be64(&ps10->tx_bytes));
 1377|  9.59k|    ops->stats.rx_dropped = ntohll(get_32aligned_be64(&ps10->rx_dropped));
 1378|  9.59k|    ops->stats.tx_dropped = ntohll(get_32aligned_be64(&ps10->tx_dropped));
 1379|  9.59k|    ops->stats.rx_errors = ntohll(get_32aligned_be64(&ps10->rx_errors));
 1380|  9.59k|    ops->stats.tx_errors = ntohll(get_32aligned_be64(&ps10->tx_errors));
 1381|  9.59k|    ops->stats.rx_frame_errors =
 1382|  9.59k|        ntohll(get_32aligned_be64(&ps10->rx_frame_err));
 1383|  9.59k|    ops->stats.rx_over_errors = ntohll(get_32aligned_be64(&ps10->rx_over_err));
 1384|  9.59k|    ops->stats.rx_crc_errors = ntohll(get_32aligned_be64(&ps10->rx_crc_err));
 1385|  9.59k|    ops->stats.collisions = ntohll(get_32aligned_be64(&ps10->collisions));
 1386|  9.59k|    ops->duration_sec = ops->duration_nsec = UINT32_MAX;
 1387|       |
 1388|  9.59k|    return 0;
 1389|  9.59k|}
ofp-port.c:print_port_stat:
 1686|   135k|{
 1687|   135k|    ds_put_cstr(string, leader);
 1688|   135k|    if (stat != UINT64_MAX) {
  ------------------
  |  Branch (1688:9): [True: 82.7k, False: 53.0k]
  ------------------
 1689|  82.7k|        ds_put_format(string, "%"PRIu64, stat);
 1690|  82.7k|    } else {
 1691|  53.0k|        ds_put_char(string, '?');
 1692|  53.0k|    }
 1693|   135k|    if (more) {
  ------------------
  |  Branch (1693:9): [True: 113k, False: 22.6k]
  ------------------
 1694|   113k|        ds_put_cstr(string, ", ");
 1695|   113k|    } else {
 1696|  22.6k|        ds_put_cstr(string, "\n");
 1697|  22.6k|    }
 1698|   135k|}
ofp-port.c:print_port_stat_cond:
 1702|   237k|{
 1703|   237k|    if (stat != UINT64_MAX) {
  ------------------
  |  Branch (1703:9): [True: 0, False: 237k]
  ------------------
 1704|      0|        ds_put_format(string, "%s%"PRIu64", ", leader, stat);
 1705|      0|    }
 1706|   237k|}

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

ofpprop_pull__:
   75|   298k|{
   76|   298k|    struct ofp_prop_header *oph;
   77|   298k|    unsigned int padded_len;
   78|   298k|    unsigned int len;
   79|       |
   80|   298k|    if (msg->size < sizeof *oph) {
  ------------------
  |  Branch (80:9): [True: 170, False: 298k]
  ------------------
   81|    170|        return OFPERR_OFPBPC_BAD_LEN;
   82|    170|    }
   83|       |
   84|   298k|    oph = msg->data;
   85|   298k|    len = ntohs(oph->len);
   86|   298k|    padded_len = ROUND_UP(len, alignment);
  ------------------
  |  |  303|   298k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|   298k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
   87|   298k|    if (len < sizeof *oph || padded_len > msg->size) {
  ------------------
  |  Branch (87:9): [True: 8.31k, False: 289k]
  |  Branch (87:30): [True: 23.3k, False: 266k]
  ------------------
   88|  31.7k|        return OFPERR_OFPBPC_BAD_LEN;
   89|  31.7k|    }
   90|       |
   91|   266k|    uint16_t type = ntohs(oph->type);
   92|   266k|    if (type < min_exp) {
  ------------------
  |  Branch (92:9): [True: 245k, False: 21.0k]
  ------------------
   93|   245k|        *typep = type;
   94|   245k|    } else {
   95|  21.0k|        struct ofp_prop_experimenter *ope = msg->data;
   96|  21.0k|        if (len < sizeof *ope) {
  ------------------
  |  Branch (96:13): [True: 423, False: 20.6k]
  ------------------
   97|    423|            return OFPERR_OFPBPC_BAD_LEN;
   98|    423|        }
   99|       |
  100|  20.6k|        if (!ope->experimenter) {
  ------------------
  |  Branch (100:13): [True: 121, False: 20.4k]
  ------------------
  101|       |            /* Reject experimenter 0 because it yields ambiguity with standard
  102|       |             * property types. */
  103|    121|            return OFPERR_OFPBPC_BAD_EXPERIMENTER;
  104|    121|        }
  105|       |
  106|  20.4k|        *typep = OFPPROP_EXP(ntohl(ope->experimenter), ntohl(ope->exp_type));
  ------------------
  |  |   67|  20.4k|    (((uint64_t) (EXP_ID) << 32) | (EXP_TYPE))
  ------------------
  107|  20.4k|    }
  108|       |
  109|   265k|    if (property) {
  ------------------
  |  Branch (109:9): [True: 258k, False: 6.79k]
  ------------------
  110|   258k|        ofpbuf_use_const(property, msg->data, len);
  111|   258k|        property->header = property->data;
  112|   258k|        property->msg = ((uint8_t *) property->data
  113|   258k|                         + (type < min_exp
  ------------------
  |  Branch (113:29): [True: 238k, False: 20.4k]
  ------------------
  114|   258k|                            ? sizeof(struct ofp_prop_header)
  115|   258k|                            : sizeof(struct ofp_prop_experimenter)));
  116|   258k|    }
  117|   265k|    ofpbuf_pull(msg, padded_len);
  118|   265k|    return 0;
  119|   266k|}
ofpprop_pull:
  136|   266k|{
  137|   266k|    return ofpprop_pull__(msg, property, 8, 0xffff, typep);
  138|   266k|}
ofpprop_parse_be16:
  145|  4.29k|{
  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|  4.29k|    ovs_be16 *p = property->msg;
  150|  4.29k|    if (ofpbuf_msgsize(property) < sizeof *p) {
  ------------------
  |  Branch (150:9): [True: 553, False: 3.74k]
  ------------------
  151|    553|        return OFPERR_OFPBPC_BAD_LEN;
  152|    553|    }
  153|  3.74k|    *value = *p;
  154|  3.74k|    return 0;
  155|  4.29k|}
ofpprop_parse_be32:
  162|  12.6k|{
  163|  12.6k|    ovs_be32 *p = property->msg;
  164|  12.6k|    if (ofpbuf_msgsize(property) != sizeof *p) {
  ------------------
  |  Branch (164:9): [True: 237, False: 12.3k]
  ------------------
  165|    237|        return OFPERR_OFPBPC_BAD_LEN;
  166|    237|    }
  167|  12.3k|    *value = *p;
  168|  12.3k|    return 0;
  169|  12.6k|}
ofpprop_parse_be64:
  176|    698|{
  177|    698|    ovs_be64 *p;
  178|    698|    size_t be64_offset = ROUND_UP(ofpbuf_headersize(property), 8);
  ------------------
  |  |  303|    698|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|    698|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  179|    698|    if (property->size != be64_offset + sizeof *p) {
  ------------------
  |  Branch (179:9): [True: 398, False: 300]
  ------------------
  180|    398|        return OFPERR_OFPBPC_BAD_LEN;
  181|    398|    }
  182|       |
  183|    300|    p = ALIGNED_CAST(ovs_be64 *, (char *) property->data + be64_offset);
  ------------------
  |  |  434|    300|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  184|    300|    *value = *p;
  185|    300|    return 0;
  186|    698|}
ofpprop_parse_be128:
  193|  1.40k|{
  194|  1.40k|    ovs_32aligned_be128 *p = property->msg;
  195|       |
  196|  1.40k|    if (ofpbuf_msgsize(property) != sizeof *p) {
  ------------------
  |  Branch (196:9): [True: 37, False: 1.36k]
  ------------------
  197|     37|        return OFPERR_OFPBPC_BAD_LEN;
  198|     37|    }
  199|  1.36k|    *value = get_32aligned_be128(p);
  200|  1.36k|    return 0;
  201|  1.40k|}
ofpprop_parse_u8:
  208|  2.13k|{
  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|  2.13k|    uint8_t *p = property->msg;
  214|  2.13k|    if (ofpbuf_msgsize(property) < sizeof *p) {
  ------------------
  |  Branch (214:9): [True: 296, False: 1.84k]
  ------------------
  215|    296|        return OFPERR_OFPBPC_BAD_LEN;
  216|    296|    }
  217|  1.84k|    *value = *p;
  218|  1.84k|    return 0;
  219|  2.13k|}
ofpprop_parse_u16:
  226|  7.39k|{
  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|  7.39k|    ovs_be16 *p = property->msg;
  231|  7.39k|    if (ofpbuf_msgsize(property) < sizeof *p) {
  ------------------
  |  Branch (231:9): [True: 131, False: 7.26k]
  ------------------
  232|    131|        return OFPERR_OFPBPC_BAD_LEN;
  233|    131|    }
  234|  7.26k|    *value = ntohs(*p);
  235|  7.26k|    return 0;
  236|  7.39k|}
ofpprop_parse_u32:
  243|  22.8k|{
  244|  22.8k|    ovs_be32 *p = property->msg;
  245|  22.8k|    if (ofpbuf_msgsize(property) != sizeof *p) {
  ------------------
  |  Branch (245:9): [True: 672, False: 22.1k]
  ------------------
  246|    672|        return OFPERR_OFPBPC_BAD_LEN;
  247|    672|    }
  248|  22.1k|    *value = ntohl(*p);
  249|  22.1k|    return 0;
  250|  22.8k|}
ofpprop_parse_u128:
  274|  1.40k|{
  275|  1.40k|    enum ofperr error = ofpprop_parse_be128(property, (ovs_be128 *) value);
  276|       |
  277|  1.40k|    if (!error) {
  ------------------
  |  Branch (277:9): [True: 1.36k, False: 37]
  ------------------
  278|  1.36k|        *value = ntoh128(*(ovs_be128 *) value);
  279|  1.36k|    }
  280|       |
  281|  1.40k|    return error;
  282|  1.40k|}
ofpprop_parse_uuid:
  289|  3.84k|{
  290|  3.84k|    struct uuid *p = property->msg;
  291|  3.84k|    if (ofpbuf_msgsize(property) != sizeof *p) {
  ------------------
  |  Branch (291:9): [True: 532, False: 3.30k]
  ------------------
  292|    532|        return OFPERR_OFPBPC_BAD_LEN;
  293|    532|    }
  294|  3.30k|    *uuid = *p;
  295|  3.30k|    return 0;
  296|  3.84k|}
ofpprop_parse_nested:
  308|  33.9k|{
  309|  33.9k|    size_t nested_offset = ROUND_UP(ofpbuf_headersize(property), 8);
  ------------------
  |  |  303|  33.9k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|  33.9k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  310|  33.9k|    if (property->size < nested_offset) {
  ------------------
  |  Branch (310:9): [True: 636, False: 33.3k]
  ------------------
  311|    636|        return OFPERR_OFPBPC_BAD_LEN;
  312|    636|    }
  313|       |
  314|  33.3k|    ofpbuf_use_const(nested, property->data, property->size);
  315|  33.3k|    ofpbuf_pull(nested, nested_offset);
  316|  33.3k|    return 0;
  317|  33.9k|}
ofpprop_unknown:
  528|  40.0k|{
  529|  40.0k|    bool is_experimenter = ofpprop_is_experimenter(type);
  530|       |
  531|  40.0k|    static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 5);
  ------------------
  |  |  110|  40.0k|        {                                                                 \
  |  |  111|  40.0k|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|   160k|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [True: 0, Folded]
  |  |  |  |  |  Branch (37:48): [Folded, False: 40.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  40.0k|            0,                              /* first_dropped */           \
  |  |  113|  40.0k|            0,                              /* last_dropped */            \
  |  |  114|  40.0k|            0,                              /* n_dropped */               \
  |  |  115|  40.0k|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  40.0k|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  40.0k|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  40.0k|        }
  ------------------
  532|  40.0k|    enum vlog_level level = loose ? VLL_DBG : VLL_WARN;
  ------------------
  |  Branch (532:29): [True: 34.5k, False: 5.48k]
  ------------------
  533|  40.0k|    if (!is_experimenter) {
  ------------------
  |  Branch (533:9): [True: 36.9k, False: 3.04k]
  ------------------
  534|  36.9k|        vlog_rate_limit(module, level, &rl, "unknown %s property type %"PRId64,
  535|  36.9k|                        msg, type);
  536|  36.9k|    } else {
  537|  3.04k|        vlog_rate_limit(module, level, &rl,
  538|  3.04k|                        "unknown %s property type for exp_id 0x%"PRIx32", "
  539|  3.04k|                        "exp_type %"PRId32, msg,
  540|  3.04k|                        ofpprop_type_to_exp_id(type),
  541|  3.04k|                        ofpprop_type_to_exp_type(type));
  542|  3.04k|    }
  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|  40.0k|    return (loose ? 0
  ------------------
  |  Branch (548:13): [True: 34.5k, False: 5.48k]
  ------------------
  549|  40.0k|            : is_experimenter ? OFPERR_OFPBPC_BAD_EXP_TYPE
  ------------------
  |  Branch (549:15): [True: 802, False: 4.68k]
  ------------------
  550|  5.48k|            : OFPERR_OFPBPC_BAD_TYPE);
  551|  40.0k|}
ofp-prop.c:ofpprop_type_to_exp_id:
   45|  3.04k|{
   46|  3.04k|    return type >> 32;
   47|  3.04k|}
ofp-prop.c:ofpprop_type_to_exp_type:
   51|  3.04k|{
   52|       |    return type & UINT32_MAX;
   53|  3.04k|}

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

ofputil_decode_queue_get_config_request:
   90|  1.73k|{
   91|  1.73k|    const struct ofp10_queue_get_config_request *qgcr10;
   92|  1.73k|    const struct ofp11_queue_get_config_request *qgcr11;
   93|  1.73k|    const struct ofp14_queue_desc_request *qdr14;
   94|  1.73k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
   95|  1.73k|    enum ofpraw raw = ofpraw_pull_assert(&b);
   96|       |
   97|  1.73k|    switch ((int) raw) {
   98|    488|    case OFPRAW_OFPT10_QUEUE_GET_CONFIG_REQUEST:
  ------------------
  |  Branch (98:5): [True: 488, False: 1.24k]
  ------------------
   99|    488|        qgcr10 = b.data;
  100|    488|        *port = u16_to_ofp(ntohs(qgcr10->port));
  101|    488|        *queue = OFPQ_ALL;
  ------------------
  |  |  416|    488|#define OFPQ_ALL      0xffffffff
  ------------------
  102|    488|        break;
  103|       |
  104|    659|    case OFPRAW_OFPT11_QUEUE_GET_CONFIG_REQUEST:
  ------------------
  |  Branch (104:5): [True: 659, False: 1.07k]
  ------------------
  105|    659|        qgcr11 = b.data;
  106|    659|        *queue = OFPQ_ALL;
  ------------------
  |  |  416|    659|#define OFPQ_ALL      0xffffffff
  ------------------
  107|    659|        enum ofperr error = ofputil_port_from_ofp11(qgcr11->port, port);
  108|    659|        if (error || *port == OFPP_ANY) {
  ------------------
  |  |   80|    502|#define OFPP_ANY OFPP_NONE
  |  |  ------------------
  |  |  |  |   47|    502|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|    502|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (108:13): [True: 157, False: 502]
  |  Branch (108:22): [True: 195, False: 307]
  ------------------
  109|    352|            return error;
  110|    352|        }
  111|    307|        break;
  112|       |
  113|    583|    case OFPRAW_OFPST14_QUEUE_DESC_REQUEST:
  ------------------
  |  Branch (113:5): [True: 583, False: 1.14k]
  ------------------
  114|    583|        qdr14 = b.data;
  115|    583|        *queue = ntohl(qdr14->queue);
  116|    583|        return ofputil_port_from_ofp11(qdr14->port, port);
  117|       |
  118|      0|    default:
  ------------------
  |  Branch (118:5): [True: 0, False: 1.73k]
  ------------------
  119|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  120|  1.73k|    }
  121|       |
  122|    795|    return (ofp_to_u16(*port) < ofp_to_u16(OFPP_MAX)
  ------------------
  |  |   33|    795|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|    795|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (122:13): [True: 404, False: 391]
  ------------------
  123|    795|            ? 0
  124|    795|            : OFPERR_OFPQOFC_BAD_PORT);
  125|  1.73k|}
ofputil_queue_get_config_request_format:
  131|  1.73k|{
  132|  1.73k|    enum ofperr error;
  133|  1.73k|    ofp_port_t port;
  134|  1.73k|    uint32_t queue;
  135|       |
  136|  1.73k|    error = ofputil_decode_queue_get_config_request(oh, &port, &queue);
  137|  1.73k|    if (error) {
  ------------------
  |  Branch (137:9): [True: 687, False: 1.04k]
  ------------------
  138|    687|        return error;
  139|    687|    }
  140|       |
  141|  1.04k|    ds_put_cstr(string, " port=");
  142|  1.04k|    ofputil_format_port(port, port_map, string);
  143|       |
  144|  1.04k|    if (queue != OFPQ_ALL) {
  ------------------
  |  |  416|  1.04k|#define OFPQ_ALL      0xffffffff
  ------------------
  |  Branch (144:9): [True: 444, False: 599]
  ------------------
  145|    444|        ds_put_cstr(string, " queue=");
  146|    444|        ofp_print_queue_name(string, queue);
  147|    444|    }
  148|       |
  149|  1.04k|    return 0;
  150|  1.73k|}
ofputil_pull_queue_get_config_reply:
  430|  37.8k|{
  431|  37.8k|    enum ofpraw raw;
  432|  37.8k|    if (!msg->header) {
  ------------------
  |  Branch (432:9): [True: 18.0k, False: 19.8k]
  ------------------
  433|       |        /* Pull OpenFlow header. */
  434|  18.0k|        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|  18.0k|        if (raw == OFPRAW_OFPT10_QUEUE_GET_CONFIG_REPLY) {
  ------------------
  |  Branch (438:13): [True: 3.04k, False: 14.9k]
  ------------------
  439|  3.04k|            ofpbuf_pull(msg, sizeof(struct ofp10_queue_get_config_reply));
  440|  14.9k|        } else if (raw == OFPRAW_OFPT11_QUEUE_GET_CONFIG_REPLY) {
  ------------------
  |  Branch (440:20): [True: 5.34k, False: 9.64k]
  ------------------
  441|  5.34k|            ofpbuf_pull(msg, sizeof(struct ofp11_queue_get_config_reply));
  442|  9.64k|        } else {
  443|  9.64k|            ovs_assert(raw == OFPRAW_OFPST14_QUEUE_DESC_REPLY);
  ------------------
  |  |   62|  9.64k|#define ovs_assert ovs_ignore
  ------------------
  444|  9.64k|        }
  445|  19.8k|    } else {
  446|  19.8k|        raw = ofpraw_decode_assert(msg->header);
  447|  19.8k|    }
  448|       |
  449|  37.8k|    queue->min_rate = UINT16_MAX;
  450|  37.8k|    queue->max_rate = UINT16_MAX;
  451|       |
  452|  37.8k|    if (!msg->size) {
  ------------------
  |  Branch (452:9): [True: 2.49k, False: 35.4k]
  ------------------
  453|  2.49k|        return EOF;
  454|  35.4k|    } else if (raw == OFPRAW_OFPST14_QUEUE_DESC_REPLY) {
  ------------------
  |  Branch (454:16): [True: 12.9k, False: 22.4k]
  ------------------
  455|  12.9k|        return ofputil_pull_queue_get_config_reply14(msg, queue);
  456|  22.4k|    } else {
  457|  22.4k|        return ofputil_pull_queue_get_config_reply10(msg, queue);
  458|  22.4k|    }
  459|  37.8k|}
ofputil_queue_get_config_reply_format:
  493|  18.0k|{
  494|  18.0k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  495|       |
  496|  18.0k|    struct ofputil_queue_config *queues = NULL;
  497|  18.0k|    size_t allocated_queues = 0;
  498|  18.0k|    size_t n = 0;
  499|       |
  500|  18.0k|    int retval = 0;
  501|  37.8k|    for (;;) {
  502|  37.8k|        if (n >= allocated_queues) {
  ------------------
  |  Branch (502:13): [True: 34.0k, False: 3.89k]
  ------------------
  503|  34.0k|            queues = x2nrealloc(queues, &allocated_queues, sizeof *queues);
  504|  34.0k|        }
  505|  37.8k|        retval = ofputil_pull_queue_get_config_reply(&b, &queues[n]);
  506|  37.8k|        if (retval) {
  ------------------
  |  Branch (506:13): [True: 18.0k, False: 19.8k]
  ------------------
  507|  18.0k|            break;
  508|  18.0k|        }
  509|  19.8k|        n++;
  510|  19.8k|    }
  511|       |
  512|  18.0k|    qsort(queues, n, sizeof *queues, compare_queues);
  513|       |
  514|  18.0k|    ds_put_char(string, ' ');
  515|       |
  516|  18.0k|    ofp_port_t port = 0;
  517|  37.8k|    for (const struct ofputil_queue_config *q = queues; q < &queues[n]; q++) {
  ------------------
  |  Branch (517:57): [True: 19.8k, False: 18.0k]
  ------------------
  518|  19.8k|        if (q->port != port) {
  ------------------
  |  Branch (518:13): [True: 7.83k, False: 12.0k]
  ------------------
  519|  7.83k|            port = q->port;
  520|       |
  521|  7.83k|            ds_put_cstr(string, "port=");
  522|  7.83k|            ofputil_format_port(port, port_map, string);
  523|  7.83k|            ds_put_char(string, '\n');
  524|  7.83k|        }
  525|       |
  526|  19.8k|        ds_put_format(string, "queue %"PRIu32":", q->queue);
  527|  19.8k|        print_queue_rate(string, "min_rate", q->min_rate);
  528|  19.8k|        print_queue_rate(string, "max_rate", q->max_rate);
  529|  19.8k|        ds_put_char(string, '\n');
  530|  19.8k|    }
  531|       |
  532|  18.0k|    ds_chomp(string, ' ');
  533|  18.0k|    free(queues);
  534|       |
  535|  18.0k|    return retval != EOF ? retval : 0;
  ------------------
  |  Branch (535:12): [True: 15.5k, False: 2.49k]
  ------------------
  536|  18.0k|}
ofputil_decode_queue_stats_request:
  543|  2.81k|{
  544|  2.81k|    switch ((enum ofp_version)request->version) {
  545|     68|    case OFP15_VERSION:
  ------------------
  |  Branch (545:5): [True: 68, False: 2.74k]
  ------------------
  546|    737|    case OFP14_VERSION:
  ------------------
  |  Branch (546:5): [True: 669, False: 2.14k]
  ------------------
  547|  1.05k|    case OFP13_VERSION:
  ------------------
  |  Branch (547:5): [True: 315, False: 2.49k]
  ------------------
  548|  1.11k|    case OFP12_VERSION:
  ------------------
  |  Branch (548:5): [True: 66, False: 2.74k]
  ------------------
  549|  1.45k|    case OFP11_VERSION: {
  ------------------
  |  Branch (549:5): [True: 332, False: 2.47k]
  ------------------
  550|  1.45k|        const struct ofp11_queue_stats_request *qsr11 = ofpmsg_body(request);
  551|  1.45k|        oqsr->queue_id = ntohl(qsr11->queue_id);
  552|  1.45k|        return ofputil_port_from_ofp11(qsr11->port_no, &oqsr->port_no);
  553|  1.11k|    }
  554|       |
  555|  1.36k|    case OFP10_VERSION: {
  ------------------
  |  Branch (555:5): [True: 1.36k, False: 1.45k]
  ------------------
  556|  1.36k|        const struct ofp10_queue_stats_request *qsr10 = ofpmsg_body(request);
  557|  1.36k|        oqsr->queue_id = ntohl(qsr10->queue_id);
  558|  1.36k|        oqsr->port_no = u16_to_ofp(ntohs(qsr10->port_no));
  559|       |        /* OF 1.0 uses OFPP_ALL for OFPP_ANY */
  560|  1.36k|        if (oqsr->port_no == OFPP_ALL) {
  ------------------
  |  |   44|  1.36k|#define OFPP_ALL        OFP_PORT_C(0xfffc) /* All ports except input port. */
  |  |  ------------------
  |  |  |  |  157|  1.36k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (560:13): [True: 455, False: 906]
  ------------------
  561|    455|            oqsr->port_no = OFPP_ANY;
  ------------------
  |  |   80|    455|#define OFPP_ANY OFPP_NONE
  |  |  ------------------
  |  |  |  |   47|    455|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|    455|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  562|    455|        }
  563|  1.36k|        return 0;
  564|  1.11k|    }
  565|       |
  566|      0|    default:
  ------------------
  |  Branch (566:5): [True: 0, False: 2.81k]
  ------------------
  567|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  568|  2.81k|    }
  569|  2.81k|}
ofputil_queue_stats_request_format:
  615|  2.81k|{
  616|  2.81k|    struct ofputil_queue_stats_request oqsr;
  617|  2.81k|    enum ofperr error;
  618|       |
  619|  2.81k|    error = ofputil_decode_queue_stats_request(oh, &oqsr);
  620|  2.81k|    if (error) {
  ------------------
  |  Branch (620:9): [True: 533, False: 2.27k]
  ------------------
  621|    533|        return error;
  622|    533|    }
  623|       |
  624|  2.27k|    ds_put_cstr(string, " port=");
  625|  2.27k|    ofputil_format_port(oqsr.port_no, port_map, string);
  626|       |
  627|  2.27k|    ds_put_cstr(string, " queue=");
  628|  2.27k|    ofp_print_queue_name(string, oqsr.queue_id);
  629|       |
  630|  2.27k|    return 0;
  631|  2.81k|}
ofputil_count_queue_stats:
  637|  9.40k|{
  638|  9.40k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  639|  9.40k|    ofpraw_pull_assert(&b);
  640|       |
  641|  21.2k|    for (size_t n = 0; ; n++) {
  642|  21.2k|        struct ofputil_queue_stats qs;
  643|  21.2k|        if (ofputil_decode_queue_stats(&qs, &b)) {
  ------------------
  |  Branch (643:13): [True: 9.40k, False: 11.8k]
  ------------------
  644|  9.40k|            return n;
  645|  9.40k|        }
  646|  21.2k|    }
  647|  9.40k|}
ofputil_decode_queue_stats:
  731|  42.4k|{
  732|  42.4k|    enum ofperr error;
  733|  42.4k|    enum ofpraw raw;
  734|       |
  735|  42.4k|    error = (msg->header ? ofpraw_decode(&raw, msg->header)
  ------------------
  |  Branch (735:14): [True: 33.0k, False: 9.40k]
  ------------------
  736|  42.4k|             : ofpraw_pull(&raw, msg));
  737|  42.4k|    if (error) {
  ------------------
  |  Branch (737:9): [True: 0, False: 42.4k]
  ------------------
  738|      0|        return error;
  739|      0|    }
  740|       |
  741|  42.4k|    if (!msg->size) {
  ------------------
  |  Branch (741:9): [True: 5.86k, False: 36.6k]
  ------------------
  742|  5.86k|        return EOF;
  743|  36.6k|    } else if (raw == OFPRAW_OFPST14_QUEUE_REPLY) {
  ------------------
  |  Branch (743:16): [True: 14.6k, False: 21.9k]
  ------------------
  744|  14.6k|        return ofputil_pull_ofp14_queue_stats(qs, msg);
  745|  21.9k|    } else if (raw == OFPRAW_OFPST13_QUEUE_REPLY) {
  ------------------
  |  Branch (745:16): [True: 2.40k, False: 19.5k]
  ------------------
  746|  2.40k|        const struct ofp13_queue_stats *qs13;
  747|       |
  748|  2.40k|        qs13 = ofpbuf_try_pull(msg, sizeof *qs13);
  749|  2.40k|        if (!qs13) {
  ------------------
  |  Branch (749:13): [True: 0, False: 2.40k]
  ------------------
  750|      0|            goto bad_len;
  751|      0|        }
  752|  2.40k|        return ofputil_queue_stats_from_ofp13(qs, qs13);
  753|  19.5k|    } else if (raw == OFPRAW_OFPST11_QUEUE_REPLY) {
  ------------------
  |  Branch (753:16): [True: 2.95k, False: 16.6k]
  ------------------
  754|  2.95k|        const struct ofp11_queue_stats *qs11;
  755|       |
  756|  2.95k|        qs11 = ofpbuf_try_pull(msg, sizeof *qs11);
  757|  2.95k|        if (!qs11) {
  ------------------
  |  Branch (757:13): [True: 0, False: 2.95k]
  ------------------
  758|      0|            goto bad_len;
  759|      0|        }
  760|  2.95k|        return ofputil_queue_stats_from_ofp11(qs, qs11);
  761|  16.6k|    } else if (raw == OFPRAW_OFPST10_QUEUE_REPLY) {
  ------------------
  |  Branch (761:16): [True: 16.6k, False: 0]
  ------------------
  762|  16.6k|        const struct ofp10_queue_stats *qs10;
  763|       |
  764|  16.6k|        qs10 = ofpbuf_try_pull(msg, sizeof *qs10);
  765|  16.6k|        if (!qs10) {
  ------------------
  |  Branch (765:13): [True: 0, False: 16.6k]
  ------------------
  766|      0|            goto bad_len;
  767|      0|        }
  768|  16.6k|        return ofputil_queue_stats_from_ofp10(qs, qs10);
  769|  16.6k|    } 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|  42.4k|}
ofputil_queue_stats_reply_format:
  885|  9.40k|{
  886|  9.40k|    ds_put_format(string, " %"PRIuSIZE" queues\n",
  887|  9.40k|                  ofputil_count_queue_stats(oh));
  888|  9.40k|    if (verbosity < 1) {
  ------------------
  |  Branch (888:9): [True: 0, False: 9.40k]
  ------------------
  889|      0|        return 0;
  890|      0|    }
  891|       |
  892|  9.40k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  893|  21.2k|    for (;;) {
  894|  21.2k|        struct ofputil_queue_stats qs;
  895|  21.2k|        int retval;
  896|       |
  897|  21.2k|        retval = ofputil_decode_queue_stats(&qs, &b);
  898|  21.2k|        if (retval) {
  ------------------
  |  Branch (898:13): [True: 9.40k, False: 11.8k]
  ------------------
  899|  9.40k|            return retval != EOF ? retval : 0;
  ------------------
  |  Branch (899:20): [True: 6.46k, False: 2.93k]
  ------------------
  900|  9.40k|        }
  901|       |
  902|  11.8k|        ds_put_cstr(string, "  port ");
  903|  11.8k|        ofputil_format_port(qs.port_no, port_map, string);
  904|  11.8k|        ds_put_cstr(string, " queue ");
  905|  11.8k|        ofp_print_queue_name(string, qs.queue_id);
  906|  11.8k|        ds_put_cstr(string, ": ");
  907|       |
  908|  11.8k|        print_queue_stat(string, "bytes=", qs.tx_bytes, 1);
  909|  11.8k|        print_queue_stat(string, "pkts=", qs.tx_packets, 1);
  910|  11.8k|        print_queue_stat(string, "errors=", qs.tx_errors, 1);
  911|       |
  912|  11.8k|        ds_put_cstr(string, "duration=");
  913|  11.8k|        if (qs.duration_sec != UINT32_MAX) {
  ------------------
  |  Branch (913:13): [True: 2.29k, False: 9.55k]
  ------------------
  914|  2.29k|            ofp_print_duration(string, qs.duration_sec, qs.duration_nsec);
  915|  9.55k|        } else {
  916|  9.55k|            ds_put_char(string, '?');
  917|  9.55k|        }
  918|  11.8k|        ds_put_char(string, '\n');
  919|  11.8k|    }
  920|  9.40k|}
ofp-queue.c:ofp_print_queue_name:
   35|  14.5k|{
   36|  14.5k|    if (queue_id == OFPQ_ALL) {
  ------------------
  |  |  416|  14.5k|#define OFPQ_ALL      0xffffffff
  ------------------
  |  Branch (36:9): [True: 3.00k, False: 11.5k]
  ------------------
   37|  3.00k|        ds_put_cstr(string, "ALL");
   38|  11.5k|    } else {
   39|       |        ds_put_format(string, "%"PRIu32, queue_id);
   40|  11.5k|    }
   41|  14.5k|}
ofp-queue.c:ofputil_pull_queue_get_config_reply14:
  369|  12.9k|{
  370|  12.9k|    struct ofp14_queue_desc *oqd14 = ofpbuf_try_pull(msg, sizeof *oqd14);
  371|  12.9k|    if (!oqd14) {
  ------------------
  |  Branch (371:9): [True: 556, False: 12.3k]
  ------------------
  372|    556|        return OFPERR_OFPBRC_BAD_LEN;
  373|    556|    }
  374|  12.3k|    enum ofperr error = ofputil_port_from_ofp11(oqd14->port_no, &queue->port);
  375|  12.3k|    if (error) {
  ------------------
  |  Branch (375:9): [True: 3.94k, False: 8.42k]
  ------------------
  376|  3.94k|        return error;
  377|  3.94k|    }
  378|  8.42k|    queue->queue = ntohl(oqd14->queue_id);
  379|       |
  380|       |    /* Length check. */
  381|  8.42k|    unsigned int len = ntohs(oqd14->len);
  382|  8.42k|    if (len < sizeof *oqd14 || len > msg->size + sizeof *oqd14 || len % 8) {
  ------------------
  |  Branch (382:9): [True: 205, False: 8.22k]
  |  Branch (382:32): [True: 716, False: 7.50k]
  |  Branch (382:67): [True: 2.02k, False: 5.48k]
  ------------------
  383|  2.94k|        return OFPERR_OFPBRC_BAD_LEN;
  384|  2.94k|    }
  385|  5.48k|    len -= sizeof *oqd14;
  386|       |
  387|  5.48k|    struct ofpbuf properties = ofpbuf_const_initializer(ofpbuf_pull(msg, len),
  388|  5.48k|                                                        len);
  389|  18.8k|    while (properties.size > 0) {
  ------------------
  |  Branch (389:12): [True: 15.1k, False: 3.77k]
  ------------------
  390|  15.1k|        struct ofpbuf payload;
  391|  15.1k|        uint64_t type;
  392|       |
  393|  15.1k|        error = ofpprop_pull(&properties, &payload, &type);
  394|  15.1k|        if (error) {
  ------------------
  |  Branch (394:13): [True: 1.66k, False: 13.4k]
  ------------------
  395|  1.66k|            return error;
  396|  1.66k|        }
  397|       |
  398|  13.4k|        switch (type) {
  399|  4.52k|        case OFPQDPT14_MIN_RATE:
  ------------------
  |  Branch (399:9): [True: 4.52k, False: 8.93k]
  ------------------
  400|  4.52k|            error = ofpprop_parse_u16(&payload, &queue->min_rate);
  401|  4.52k|            break;
  402|       |
  403|    961|        case OFPQDPT14_MAX_RATE:
  ------------------
  |  Branch (403:9): [True: 961, False: 12.4k]
  ------------------
  404|    961|            error = ofpprop_parse_u16(&payload, &queue->max_rate);
  405|    961|            break;
  406|       |
  407|  7.96k|        default:
  ------------------
  |  Branch (407:9): [True: 7.96k, False: 5.48k]
  ------------------
  408|  7.96k|            error = OFPPROP_UNKNOWN(true, "queue desc", type);
  ------------------
  |  |  144|  7.96k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  409|  7.96k|            break;
  410|  13.4k|        }
  411|       |
  412|  13.4k|        if (error) {
  ------------------
  |  Branch (412:13): [True: 46, False: 13.4k]
  ------------------
  413|     46|            return error;
  414|     46|        }
  415|  13.4k|    }
  416|       |
  417|  3.77k|    return 0;
  418|  5.48k|}
ofp-queue.c:ofputil_pull_queue_get_config_reply10:
  283|  22.4k|{
  284|  22.4k|    const struct ofp_header *oh = msg->header;
  285|  22.4k|    unsigned int opq_len;       /* Length of protocol-specific queue header. */
  286|  22.4k|    unsigned int len;           /* Total length of queue + properties. */
  287|       |
  288|       |    /* Obtain the port number from the message header. */
  289|  22.4k|    if (oh->version == OFP10_VERSION) {
  ------------------
  |  Branch (289:9): [True: 5.10k, False: 17.3k]
  ------------------
  290|  5.10k|        const struct ofp10_queue_get_config_reply *oqgcr10 = msg->msg;
  291|  5.10k|        queue->port = u16_to_ofp(ntohs(oqgcr10->port));
  292|  17.3k|    } else {
  293|  17.3k|        const struct ofp11_queue_get_config_reply *oqgcr11 = msg->msg;
  294|  17.3k|        enum ofperr error = ofputil_port_from_ofp11(oqgcr11->port,
  295|  17.3k|                                                    &queue->port);
  296|  17.3k|        if (error) {
  ------------------
  |  Branch (296:13): [True: 475, False: 16.8k]
  ------------------
  297|    475|            return error;
  298|    475|        }
  299|  17.3k|    }
  300|       |
  301|       |    /* Pull off the queue header and get the queue number and length. */
  302|  21.9k|    if (oh->version < OFP12_VERSION) {
  ------------------
  |  Branch (302:9): [True: 21.0k, False: 978]
  ------------------
  303|  21.0k|        const struct ofp10_packet_queue *opq10;
  304|  21.0k|        opq10 = ofpbuf_try_pull(msg, sizeof *opq10);
  305|  21.0k|        if (!opq10) {
  ------------------
  |  Branch (305:13): [True: 0, False: 21.0k]
  ------------------
  306|      0|            return OFPERR_OFPBRC_BAD_LEN;
  307|      0|        }
  308|  21.0k|        queue->queue = ntohl(opq10->queue_id);
  309|  21.0k|        len = ntohs(opq10->len);
  310|  21.0k|        opq_len = sizeof *opq10;
  311|  21.0k|    } else {
  312|    978|        const struct ofp12_packet_queue *opq12;
  313|    978|        opq12 = ofpbuf_try_pull(msg, sizeof *opq12);
  314|    978|        if (!opq12) {
  ------------------
  |  Branch (314:13): [True: 436, False: 542]
  ------------------
  315|    436|            return OFPERR_OFPBRC_BAD_LEN;
  316|    436|        }
  317|    542|        queue->queue = ntohl(opq12->queue_id);
  318|    542|        len = ntohs(opq12->len);
  319|    542|        opq_len = sizeof *opq12;
  320|    542|    }
  321|       |
  322|       |    /* Length check. */
  323|  21.5k|    if (len < opq_len || len > msg->size + opq_len || len % 8) {
  ------------------
  |  Branch (323:9): [True: 564, False: 20.9k]
  |  Branch (323:26): [True: 853, False: 20.1k]
  |  Branch (323:55): [True: 640, False: 19.5k]
  ------------------
  324|  2.05k|        return OFPERR_OFPBRC_BAD_LEN;
  325|  2.05k|    }
  326|  19.5k|    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|  25.7k|    while (len > 0) {
  ------------------
  |  Branch (330:12): [True: 9.61k, False: 16.0k]
  ------------------
  331|  9.61k|        const struct ofp10_queue_prop_header *hdr;
  332|  9.61k|        unsigned int property;
  333|  9.61k|        unsigned int prop_len;
  334|  9.61k|        enum ofperr error = 0;
  335|       |
  336|  9.61k|        hdr = ofpbuf_at_assert(msg, 0, sizeof *hdr);
  337|  9.61k|        prop_len = ntohs(hdr->len);
  338|  9.61k|        if (prop_len < sizeof *hdr || prop_len > len || prop_len % 8) {
  ------------------
  |  Branch (338:13): [True: 156, False: 9.45k]
  |  Branch (338:39): [True: 1.12k, False: 8.33k]
  |  Branch (338:57): [True: 1.62k, False: 6.71k]
  ------------------
  339|  2.89k|            return OFPERR_OFPBRC_BAD_LEN;
  340|  2.89k|        }
  341|       |
  342|  6.71k|        property = ntohs(hdr->property);
  343|  6.71k|        switch (property) {
  344|     98|        case OFPQT10_MIN_RATE:
  ------------------
  |  Branch (344:9): [True: 98, False: 6.61k]
  ------------------
  345|     98|            error = parse_ofp10_queue_rate(hdr, &queue->min_rate);
  346|     98|            break;
  347|       |
  348|  1.79k|        case OFPQT11_MAX_RATE:
  ------------------
  |  Branch (348:9): [True: 1.79k, False: 4.92k]
  ------------------
  349|  1.79k|            error = parse_ofp10_queue_rate(hdr, &queue->max_rate);
  350|  1.79k|            break;
  351|       |
  352|  4.82k|        default:
  ------------------
  |  Branch (352:9): [True: 4.82k, False: 1.89k]
  ------------------
  353|  4.82k|            VLOG_INFO_RL(&rl, "unknown queue property %u", property);
  ------------------
  |  |  225|  4.82k|#define VLOG_INFO_RL(RL, ...) VLOG_RL(RL, VLL_INFO, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  4.82k|    do {                                                                \
  |  |  |  |  288|  4.82k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  4.82k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 4.82k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  4.82k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 4.82k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  354|  4.82k|            break;
  355|  6.71k|        }
  356|  6.71k|        if (error) {
  ------------------
  |  Branch (356:13): [True: 517, False: 6.19k]
  ------------------
  357|    517|            return error;
  358|    517|        }
  359|       |
  360|  6.19k|        ofpbuf_pull(msg, prop_len);
  361|  6.19k|        len -= prop_len;
  362|  6.19k|    }
  363|  16.0k|    return 0;
  364|  19.5k|}
ofp-queue.c:parse_ofp10_queue_rate:
  268|  1.89k|{
  269|  1.89k|    const struct ofp10_queue_prop_rate *oqpr;
  270|       |
  271|  1.89k|    if (hdr->len == htons(sizeof *oqpr)) {
  ------------------
  |  Branch (271:9): [True: 1.37k, False: 517]
  ------------------
  272|  1.37k|        oqpr = (const struct ofp10_queue_prop_rate *) hdr;
  273|  1.37k|        *rate = ntohs(oqpr->rate);
  274|  1.37k|        return 0;
  275|  1.37k|    } else {
  276|    517|        return OFPERR_OFPBRC_BAD_LEN;
  277|    517|    }
  278|  1.89k|}
ofp-queue.c:compare_queues:
  474|  15.4k|{
  475|  15.4k|    const struct ofputil_queue_config *a = a_;
  476|  15.4k|    const struct ofputil_queue_config *b = b_;
  477|       |
  478|  15.4k|    uint16_t ap = ofp_to_u16(a->port);
  479|  15.4k|    uint16_t bp = ofp_to_u16(b->port);
  480|  15.4k|    if (ap != bp) {
  ------------------
  |  Branch (480:9): [True: 273, False: 15.1k]
  ------------------
  481|    273|        return ap < bp ? -1 : 1;
  ------------------
  |  Branch (481:16): [True: 115, False: 158]
  ------------------
  482|    273|    }
  483|       |
  484|  15.1k|    uint32_t aq = a->queue;
  485|  15.1k|    uint32_t bq = b->queue;
  486|  15.1k|    return aq < bq ? -1 : aq > bq;
  ------------------
  |  Branch (486:12): [True: 4.22k, False: 10.9k]
  ------------------
  487|  15.4k|}
ofp-queue.c:print_queue_rate:
  463|  39.7k|{
  464|  39.7k|    if (rate <= 1000) {
  ------------------
  |  Branch (464:9): [True: 4.31k, False: 35.4k]
  ------------------
  465|  4.31k|        ds_put_format(string, " %s:%u.%u%%", name, rate / 10, rate % 10);
  466|  35.4k|    } else if (rate < UINT16_MAX) {
  ------------------
  |  Branch (466:16): [True: 270, False: 35.1k]
  ------------------
  467|    270|        ds_put_format(string, " %s:(disabled)", name);
  468|    270|    }
  469|  39.7k|}
ofp-queue.c:ofputil_pull_ofp14_queue_stats:
  699|  14.6k|{
  700|  14.6k|    const struct ofp14_queue_stats *qs14;
  701|  14.6k|    size_t len;
  702|       |
  703|  14.6k|    qs14 = ofpbuf_try_pull(msg, sizeof *qs14);
  704|  14.6k|    if (!qs14) {
  ------------------
  |  Branch (704:9): [True: 284, False: 14.3k]
  ------------------
  705|    284|        return OFPERR_OFPBRC_BAD_LEN;
  706|    284|    }
  707|       |
  708|  14.3k|    len = ntohs(qs14->length);
  709|  14.3k|    if (len < sizeof *qs14 || len - sizeof *qs14 > msg->size) {
  ------------------
  |  Branch (709:9): [True: 956, False: 13.4k]
  |  Branch (709:31): [True: 2.08k, False: 11.3k]
  ------------------
  710|  3.04k|        return OFPERR_OFPBRC_BAD_LEN;
  711|  3.04k|    }
  712|  11.3k|    ofpbuf_pull(msg, len - sizeof *qs14);
  713|       |
  714|       |    /* No properties yet defined, so ignore them for now. */
  715|       |
  716|  11.3k|    return ofputil_queue_stats_from_ofp13(oqs, &qs14->qs);
  717|  14.3k|}
ofp-queue.c:ofputil_queue_stats_from_ofp13:
  686|  13.7k|{
  687|  13.7k|    enum ofperr error = ofputil_queue_stats_from_ofp11(oqs, &qs13->qs);
  688|  13.7k|    if (!error) {
  ------------------
  |  Branch (688:9): [True: 4.69k, False: 9.03k]
  ------------------
  689|  4.69k|        oqs->duration_sec = ntohl(qs13->duration_sec);
  690|  4.69k|        oqs->duration_nsec = ntohl(qs13->duration_nsec);
  691|  4.69k|    }
  692|       |
  693|  13.7k|    return error;
  694|  13.7k|}
ofp-queue.c:ofputil_queue_stats_from_ofp11:
  666|  16.6k|{
  667|  16.6k|    enum ofperr error;
  668|       |
  669|  16.6k|    error = ofputil_port_from_ofp11(qs11->port_no, &oqs->port_no);
  670|  16.6k|    if (error) {
  ------------------
  |  Branch (670:9): [True: 9.61k, False: 7.06k]
  ------------------
  671|  9.61k|        return error;
  672|  9.61k|    }
  673|       |
  674|  7.06k|    oqs->queue_id = ntohl(qs11->queue_id);
  675|  7.06k|    oqs->tx_bytes = ntohll(qs11->tx_bytes);
  676|  7.06k|    oqs->tx_packets = ntohll(qs11->tx_packets);
  677|  7.06k|    oqs->tx_errors = ntohll(qs11->tx_errors);
  678|  7.06k|    oqs->duration_sec = oqs->duration_nsec = UINT32_MAX;
  679|       |
  680|  7.06k|    return 0;
  681|  16.6k|}
ofp-queue.c:ofputil_queue_stats_from_ofp10:
  652|  16.6k|{
  653|  16.6k|    oqs->port_no = u16_to_ofp(ntohs(qs10->port_no));
  654|  16.6k|    oqs->queue_id = ntohl(qs10->queue_id);
  655|  16.6k|    oqs->tx_bytes = ntohll(get_32aligned_be64(&qs10->tx_bytes));
  656|  16.6k|    oqs->tx_packets = ntohll(get_32aligned_be64(&qs10->tx_packets));
  657|  16.6k|    oqs->tx_errors = ntohll(get_32aligned_be64(&qs10->tx_errors));
  658|  16.6k|    oqs->duration_sec = oqs->duration_nsec = UINT32_MAX;
  659|       |
  660|  16.6k|    return 0;
  661|  16.6k|}
ofp-queue.c:print_queue_stat:
  866|  35.5k|{
  867|  35.5k|    ds_put_cstr(string, leader);
  868|  35.5k|    if (stat != UINT64_MAX) {
  ------------------
  |  Branch (868:9): [True: 28.2k, False: 7.26k]
  ------------------
  869|  28.2k|        ds_put_format(string, "%"PRIu64, stat);
  870|  28.2k|    } else {
  871|  7.26k|        ds_put_char(string, '?');
  872|  7.26k|    }
  873|  35.5k|    if (more) {
  ------------------
  |  Branch (873:9): [True: 35.5k, False: 0]
  ------------------
  874|  35.5k|        ds_put_cstr(string, ", ");
  875|  35.5k|    } else {
  876|      0|        ds_put_cstr(string, "\n");
  877|      0|    }
  878|  35.5k|}

ofputil_pull_switch_features:
   71|  3.71k|{
   72|  3.71k|    const struct ofp_header *oh = b->data;
   73|  3.71k|    enum ofpraw raw = ofpraw_pull_assert(b);
   74|  3.71k|    const struct ofp_switch_features *osf = ofpbuf_pull(b, sizeof *osf);
   75|  3.71k|    features->datapath_id = ntohll(osf->datapath_id);
   76|  3.71k|    features->n_buffers = ntohl(osf->n_buffers);
   77|  3.71k|    features->n_tables = osf->n_tables;
   78|  3.71k|    features->auxiliary_id = 0;
   79|       |
   80|  3.71k|    features->capabilities = ntohl(osf->capabilities) &
   81|  3.71k|        ofputil_capabilities_mask(oh->version);
   82|       |
   83|  3.71k|    if (raw == OFPRAW_OFPT10_FEATURES_REPLY) {
  ------------------
  |  Branch (83:9): [True: 936, False: 2.77k]
  ------------------
   84|    936|        if (osf->capabilities & htonl(OFPC10_STP)) {
  ------------------
  |  Branch (84:13): [True: 318, False: 618]
  ------------------
   85|    318|            features->capabilities |= OFPUTIL_C_STP;
   86|    318|        }
   87|    936|        features->ofpacts = ofpact_bitmap_from_openflow(osf->actions,
   88|    936|                                                        OFP10_VERSION);
   89|  2.77k|    } else if (raw == OFPRAW_OFPT11_FEATURES_REPLY
  ------------------
  |  Branch (89:16): [True: 555, False: 2.22k]
  ------------------
   90|  2.77k|               || raw == OFPRAW_OFPT13_FEATURES_REPLY) {
  ------------------
  |  Branch (90:19): [True: 2.22k, False: 0]
  ------------------
   91|  2.77k|        if (osf->capabilities & htonl(OFPC11_GROUP_STATS)) {
  ------------------
  |  Branch (91:13): [True: 1.30k, False: 1.47k]
  ------------------
   92|  1.30k|            features->capabilities |= OFPUTIL_C_GROUP_STATS;
   93|  1.30k|        }
   94|  2.77k|        features->ofpacts = 0;
   95|  2.77k|        if (raw == OFPRAW_OFPT13_FEATURES_REPLY) {
  ------------------
  |  Branch (95:13): [True: 2.22k, False: 555]
  ------------------
   96|  2.22k|            features->auxiliary_id = osf->auxiliary_id;
   97|  2.22k|        }
   98|  2.77k|    } else {
   99|      0|        return OFPERR_OFPBRC_BAD_VERSION;
  100|      0|    }
  101|       |
  102|  3.71k|    return 0;
  103|  3.71k|}
ofputil_switch_features_format:
  255|  3.71k|{
  256|  3.71k|    ds_put_format(s, " dpid:%016"PRIx64"\n", features->datapath_id);
  257|       |
  258|  3.71k|    ds_put_format(s, "n_tables:%"PRIu8", n_buffers:%"PRIu32,
  259|  3.71k|                  features->n_tables, features->n_buffers);
  260|  3.71k|    if (features->auxiliary_id) {
  ------------------
  |  Branch (260:9): [True: 955, False: 2.76k]
  ------------------
  261|    955|        ds_put_format(s, ", auxiliary_id:%"PRIu8, features->auxiliary_id);
  262|    955|    }
  263|  3.71k|    ds_put_char(s, '\n');
  264|       |
  265|  3.71k|    ds_put_cstr(s, "capabilities: ");
  266|  3.71k|    ofp_print_bit_names(s, features->capabilities,
  267|  3.71k|                        ofputil_capabilities_to_name, ' ');
  268|  3.71k|    ds_put_char(s, '\n');
  269|       |
  270|  3.71k|    if (features->ofpacts) {
  ------------------
  |  Branch (270:9): [True: 886, False: 2.82k]
  ------------------
  271|    886|        ds_put_cstr(s, "actions: ");
  272|    886|        ofpact_bitmap_format(features->ofpacts, s);
  273|    886|        ds_put_char(s, '\n');
  274|    886|    }
  275|  3.71k|}
ofputil_frag_handling_to_string:
  279|  5.82k|{
  280|  5.82k|    switch (frag) {
  ------------------
  |  Branch (280:13): [True: 5.82k, False: 0]
  ------------------
  281|  1.88k|    case OFPUTIL_FRAG_NORMAL:   return "normal";
  ------------------
  |  Branch (281:5): [True: 1.88k, False: 3.94k]
  ------------------
  282|    292|    case OFPUTIL_FRAG_DROP:     return "drop";
  ------------------
  |  Branch (282:5): [True: 292, False: 5.53k]
  ------------------
  283|  3.48k|    case OFPUTIL_FRAG_REASM:    return "reassemble";
  ------------------
  |  Branch (283:5): [True: 3.48k, False: 2.34k]
  ------------------
  284|    167|    case OFPUTIL_FRAG_NX_MATCH: return "nx-match";
  ------------------
  |  Branch (284:5): [True: 167, False: 5.66k]
  ------------------
  285|  5.82k|    }
  286|       |
  287|      0|    OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  288|  5.82k|}
ofputil_decode_get_config_reply:
  339|  4.96k|{
  340|  4.96k|    ofputil_decode_switch_config(oh, config);
  341|  4.96k|}
ofputil_decode_set_config:
  346|  2.60k|{
  347|  2.60k|    return (ofputil_decode_switch_config(oh, config)
  ------------------
  |  Branch (347:13): [True: 864, False: 1.74k]
  ------------------
  348|  2.60k|            ? 0
  349|  2.60k|            : OFPERR_OFPSCFC_BAD_FLAGS);
  350|  2.60k|}
ofputil_switch_config_format:
  386|  5.82k|{
  387|  5.82k|    ds_put_format(s, " frags=%s",
  388|  5.82k|                  ofputil_frag_handling_to_string(config->frag));
  389|       |
  390|  5.82k|    if (config->invalid_ttl_to_controller > 0) {
  ------------------
  |  Branch (390:9): [True: 813, False: 5.01k]
  ------------------
  391|    813|        ds_put_format(s, " invalid_ttl_to_controller");
  392|    813|    }
  393|       |
  394|  5.82k|    ds_put_format(s, " miss_send_len=%"PRIu16"\n", config->miss_send_len);
  395|  5.82k|}
ofp-switch.c:ofputil_capabilities_mask:
   44|  3.71k|{
   45|       |    /* Handle capabilities whose bit is unique for all OpenFlow versions */
   46|  3.71k|    switch (ofp_version) {
   47|    936|    case OFP10_VERSION:
  ------------------
  |  Branch (47:5): [True: 936, False: 2.77k]
  ------------------
   48|  1.01k|    case OFP11_VERSION:
  ------------------
  |  Branch (48:5): [True: 81, False: 3.63k]
  ------------------
   49|  1.01k|        return OFPC_COMMON | OFPC_ARP_MATCH_IP;
  ------------------
  |  |   30|  1.01k|#define OFPC_COMMON (OFPC_FLOW_STATS | OFPC_TABLE_STATS | OFPC_PORT_STATS | \
  |  |   31|  1.01k|                     OFPC_IP_REASM | OFPC_QUEUE_STATS)
  ------------------
   50|    474|    case OFP12_VERSION:
  ------------------
  |  Branch (50:5): [True: 474, False: 3.24k]
  ------------------
   51|  1.02k|    case OFP13_VERSION:
  ------------------
  |  Branch (51:5): [True: 550, False: 3.16k]
  ------------------
   52|  1.02k|        return OFPC_COMMON | OFPC12_PORT_BLOCKED;
  ------------------
  |  |   30|  1.02k|#define OFPC_COMMON (OFPC_FLOW_STATS | OFPC_TABLE_STATS | OFPC_PORT_STATS | \
  |  |   31|  1.02k|                     OFPC_IP_REASM | OFPC_QUEUE_STATS)
  ------------------
   53|     83|    case OFP14_VERSION:
  ------------------
  |  Branch (53:5): [True: 83, False: 3.63k]
  ------------------
   54|  1.67k|    case OFP15_VERSION:
  ------------------
  |  Branch (54:5): [True: 1.59k, False: 2.12k]
  ------------------
   55|  1.67k|        return OFPC_COMMON | OFPC12_PORT_BLOCKED | OFPC14_BUNDLES
  ------------------
  |  |   30|  1.67k|#define OFPC_COMMON (OFPC_FLOW_STATS | OFPC_TABLE_STATS | OFPC_PORT_STATS | \
  |  |   31|  1.67k|                     OFPC_IP_REASM | OFPC_QUEUE_STATS)
  ------------------
   56|  1.67k|            | OFPC14_FLOW_MONITORING;
   57|      0|    default:
  ------------------
  |  Branch (57:5): [True: 0, False: 3.71k]
  ------------------
   58|       |        /* Caller needs to check osf->header.version itself */
   59|      0|        return 0;
   60|  3.71k|    }
   61|  3.71k|}
ofp-switch.c:ofputil_capabilities_to_name:
  232|  9.38k|{
  233|  9.38k|    enum ofputil_capabilities capabilities = bit;
  234|       |
  235|  9.38k|    switch (capabilities) {
  ------------------
  |  Branch (235:13): [True: 9.38k, False: 0]
  ------------------
  236|  1.28k|    case OFPUTIL_C_FLOW_STATS:   return "FLOW_STATS";
  ------------------
  |  Branch (236:5): [True: 1.28k, False: 8.09k]
  ------------------
  237|  1.30k|    case OFPUTIL_C_TABLE_STATS:  return "TABLE_STATS";
  ------------------
  |  Branch (237:5): [True: 1.30k, False: 8.08k]
  ------------------
  238|  1.54k|    case OFPUTIL_C_PORT_STATS:   return "PORT_STATS";
  ------------------
  |  Branch (238:5): [True: 1.54k, False: 7.84k]
  ------------------
  239|  1.29k|    case OFPUTIL_C_IP_REASM:     return "IP_REASM";
  ------------------
  |  Branch (239:5): [True: 1.29k, False: 8.08k]
  ------------------
  240|    730|    case OFPUTIL_C_QUEUE_STATS:  return "QUEUE_STATS";
  ------------------
  |  Branch (240:5): [True: 730, False: 8.65k]
  ------------------
  241|    258|    case OFPUTIL_C_ARP_MATCH_IP: return "ARP_MATCH_IP";
  ------------------
  |  Branch (241:5): [True: 258, False: 9.12k]
  ------------------
  242|    318|    case OFPUTIL_C_STP:          return "STP";
  ------------------
  |  Branch (242:5): [True: 318, False: 9.06k]
  ------------------
  243|  1.30k|    case OFPUTIL_C_GROUP_STATS:  return "GROUP_STATS";
  ------------------
  |  Branch (243:5): [True: 1.30k, False: 8.08k]
  ------------------
  244|    448|    case OFPUTIL_C_PORT_BLOCKED: return "PORT_BLOCKED";
  ------------------
  |  Branch (244:5): [True: 448, False: 8.93k]
  ------------------
  245|    765|    case OFPUTIL_C_BUNDLES:      return "BUNDLES";
  ------------------
  |  Branch (245:5): [True: 765, False: 8.61k]
  ------------------
  246|    140|    case OFPUTIL_C_FLOW_MONITORING: return "FLOW_MONITORING";
  ------------------
  |  Branch (246:5): [True: 140, False: 9.24k]
  ------------------
  247|  9.38k|    }
  248|       |
  249|      0|    return NULL;
  250|  9.38k|}
ofp-switch.c:ofputil_decode_switch_config:
  316|  7.57k|{
  317|  7.57k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  318|  7.57k|    ofpraw_pull_assert(&b);
  319|       |
  320|  7.57k|    const struct ofp_switch_config *osc = ofpbuf_pull(&b, sizeof *osc);
  321|  7.57k|    config->frag = ntohs(osc->flags) & OFPC_FRAG_MASK;
  322|  7.57k|    config->miss_send_len = ntohs(osc->miss_send_len);
  323|       |
  324|  7.57k|    ovs_be16 valid_mask = htons(OFPC_FRAG_MASK);
  325|  7.57k|    if (oh->version < OFP13_VERSION) {
  ------------------
  |  Branch (325:9): [True: 2.05k, False: 5.51k]
  ------------------
  326|  2.05k|        const ovs_be16 ttl_bit = htons(OFPC_INVALID_TTL_TO_CONTROLLER);
  327|  2.05k|        valid_mask |= ttl_bit;
  328|  2.05k|        config->invalid_ttl_to_controller = (osc->flags & ttl_bit) != 0;
  329|  5.51k|    } else {
  330|  5.51k|        config->invalid_ttl_to_controller = -1;
  331|  5.51k|    }
  332|       |
  333|  7.57k|    return !(osc->flags & ~valid_mask);
  334|  7.57k|}

ofputil_table_miss_to_string:
   46|  25.3k|{
   47|  25.3k|    switch (miss) {
   48|      0|    case OFPUTIL_TABLE_MISS_DEFAULT: return "default";
  ------------------
  |  Branch (48:5): [True: 0, False: 25.3k]
  ------------------
   49|  19.3k|    case OFPUTIL_TABLE_MISS_CONTROLLER: return "controller";
  ------------------
  |  Branch (49:5): [True: 19.3k, False: 6.03k]
  ------------------
   50|  2.84k|    case OFPUTIL_TABLE_MISS_CONTINUE: return "continue";
  ------------------
  |  Branch (50:5): [True: 2.84k, False: 22.5k]
  ------------------
   51|  3.18k|    case OFPUTIL_TABLE_MISS_DROP: return "drop";
  ------------------
  |  Branch (51:5): [True: 3.18k, False: 22.1k]
  ------------------
   52|      0|    default: return "***error***";
  ------------------
  |  Branch (52:5): [True: 0, False: 25.3k]
  ------------------
   53|  25.3k|    }
   54|  25.3k|}
ofputil_table_eviction_to_string:
   58|  5.65k|{
   59|  5.65k|    switch (eviction) {
   60|      0|    case OFPUTIL_TABLE_EVICTION_DEFAULT: return "default";
  ------------------
  |  Branch (60:5): [True: 0, False: 5.65k]
  ------------------
   61|  1.65k|    case OFPUTIL_TABLE_EVICTION_ON: return "on";
  ------------------
  |  Branch (61:5): [True: 1.65k, False: 3.99k]
  ------------------
   62|  3.74k|    case OFPUTIL_TABLE_EVICTION_OFF: return "off";
  ------------------
  |  Branch (62:5): [True: 3.74k, False: 1.90k]
  ------------------
   63|    248|    default: return "***error***";
  ------------------
  |  Branch (63:5): [True: 248, False: 5.40k]
  ------------------
   64|  5.65k|    }
   65|  5.65k|}
ofputil_table_vacancy_to_string:
   69|  5.65k|{
   70|  5.65k|    switch (vacancy) {
   71|      0|    case OFPUTIL_TABLE_VACANCY_DEFAULT: return "default";
  ------------------
  |  Branch (71:5): [True: 0, False: 5.65k]
  ------------------
   72|  2.58k|    case OFPUTIL_TABLE_VACANCY_ON: return "on";
  ------------------
  |  Branch (72:5): [True: 2.58k, False: 3.06k]
  ------------------
   73|  3.06k|    case OFPUTIL_TABLE_VACANCY_OFF: return "off";
  ------------------
  |  Branch (73:5): [True: 3.06k, False: 2.58k]
  ------------------
   74|      0|    default: return "***error***";
  ------------------
  |  Branch (74:5): [True: 0, False: 5.65k]
  ------------------
   75|  5.65k|    }
   76|  5.65k|}
ofputil_table_map_get_name:
  123|   235k|{
  124|   235k|    struct namemap_node *node
  125|   235k|        = map ? namemap_find_by_number(&map->map, table_id) : NULL;
  ------------------
  |  Branch (125:11): [True: 0, False: 235k]
  ------------------
  126|   235k|    return node && !node->duplicate ? node->name : NULL;
  ------------------
  |  Branch (126:12): [True: 0, False: 235k]
  |  Branch (126:20): [True: 0, False: 0]
  ------------------
  127|   235k|}
ofputil_format_table:
  201|   133k|{
  202|   133k|    const char *table_name = ofputil_table_map_get_name(table_map, table);
  203|   133k|    if (table_name) {
  ------------------
  |  Branch (203:9): [True: 0, False: 133k]
  ------------------
  204|      0|        namemap_put_name(table_name, s);
  205|   133k|    } else {
  206|       |        ds_put_format(s, "%"PRIu8, table);
  207|   133k|    }
  208|   133k|}
ofputil_decode_table_features:
  375|  33.1k|{
  376|  33.1k|    bool loose = raw_properties != NULL;
  377|       |
  378|  33.1k|    memset(tf, 0, sizeof *tf);
  379|       |
  380|  33.1k|    if (!msg->header) {
  ------------------
  |  Branch (380:9): [True: 23.8k, False: 9.26k]
  ------------------
  381|  23.8k|        ofpraw_pull_assert(msg);
  382|  23.8k|    }
  383|       |
  384|  33.1k|    if (!msg->size) {
  ------------------
  |  Branch (384:9): [True: 714, False: 32.4k]
  ------------------
  385|    714|        return EOF;
  386|    714|    }
  387|       |
  388|  32.4k|    const struct ofp_header *oh = msg->header;
  389|  32.4k|    struct ofp13_table_features *otf = msg->data;
  390|  32.4k|    if (msg->size < sizeof *otf) {
  ------------------
  |  Branch (390:9): [True: 4.09k, False: 28.3k]
  ------------------
  391|  4.09k|        return OFPERR_OFPBPC_BAD_LEN;
  392|  4.09k|    }
  393|       |
  394|  28.3k|    unsigned int len = ntohs(otf->length);
  395|  28.3k|    if (len < sizeof *otf || len % 8 || len > msg->size) {
  ------------------
  |  Branch (395:9): [True: 748, False: 27.5k]
  |  Branch (395:30): [True: 573, False: 27.0k]
  |  Branch (395:41): [True: 1.19k, False: 25.8k]
  ------------------
  396|  2.52k|        return OFPERR_OFPBPC_BAD_LEN;
  397|  2.52k|    }
  398|       |
  399|  25.8k|    if (oh->version >= OFP15_VERSION) {
  ------------------
  |  Branch (399:9): [True: 23.9k, False: 1.84k]
  ------------------
  400|  23.9k|        if (!ofp15_table_features_command_is_valid(otf->command)) {
  ------------------
  |  Branch (400:13): [True: 353, False: 23.6k]
  ------------------
  401|    353|            return OFPERR_OFPTFFC_BAD_COMMAND;
  402|    353|        }
  403|  23.6k|        tf->command = otf->command;
  404|  23.6k|    } else {
  405|  1.84k|        tf->command = OFPTFC15_REPLACE;
  406|  1.84k|    }
  407|       |
  408|  25.4k|    tf->table_id = otf->table_id;
  409|  25.4k|    if (tf->table_id == OFPTT_ALL) {
  ------------------
  |  Branch (409:9): [True: 66, False: 25.4k]
  ------------------
  410|     66|        return OFPERR_OFPTFFC_BAD_TABLE;
  411|     66|    }
  412|       |
  413|  25.4k|    ovs_strlcpy_arrays(tf->name, otf->name);
  ------------------
  |  |  209|  25.4k|    ovs_strlcpy(DST, SRC, MIN(ARRAY_SIZE(DST), ARRAY_SIZE(SRC)))
  |  |  ------------------
  |  |  |  |   91|  25.4k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:20): [Folded, False: 25.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  414|  25.4k|    tf->metadata_match = otf->metadata_match;
  415|  25.4k|    tf->metadata_write = otf->metadata_write;
  416|  25.4k|    tf->miss_config = OFPUTIL_TABLE_MISS_DEFAULT;
  417|  25.4k|    if (oh->version >= OFP14_VERSION) {
  ------------------
  |  Branch (417:9): [True: 25.2k, False: 198]
  ------------------
  418|  25.2k|        uint32_t caps = ntohl(otf->capabilities);
  419|  25.2k|        tf->supports_eviction = (caps & OFPTC14_EVICTION) != 0;
  420|  25.2k|        tf->supports_vacancy_events = (caps & OFPTC14_VACANCY_EVENTS) != 0;
  421|  25.2k|    } else {
  422|    198|        tf->supports_eviction = -1;
  423|    198|        tf->supports_vacancy_events = -1;
  424|    198|    }
  425|  25.4k|    tf->max_entries = ntohl(otf->max_entries);
  426|       |
  427|  25.4k|    struct ofpbuf properties = ofpbuf_const_initializer(ofpbuf_pull(msg, len),
  428|  25.4k|                                                        len);
  429|  25.4k|    ofpbuf_pull(&properties, sizeof *otf);
  430|  25.4k|    tf->any_properties = properties.size > 0;
  431|  25.4k|    if (raw_properties) {
  ------------------
  |  Branch (431:9): [True: 25.4k, False: 0]
  ------------------
  432|  25.4k|        *raw_properties = properties;
  433|  25.4k|    }
  434|  25.4k|    uint32_t seen = 0;
  435|  50.0k|    while (properties.size > 0) {
  ------------------
  |  Branch (435:12): [True: 37.1k, False: 12.8k]
  ------------------
  436|  37.1k|        struct ofpbuf payload;
  437|  37.1k|        enum ofperr error;
  438|  37.1k|        uint64_t type;
  439|       |
  440|  37.1k|        error = pull_table_feature_property(&properties, &payload, &type);
  441|  37.1k|        if (error) {
  ------------------
  |  Branch (441:13): [True: 4.08k, False: 33.1k]
  ------------------
  442|  4.08k|            return error;
  443|  4.08k|        }
  444|       |
  445|  33.1k|        if (type < 32) {
  ------------------
  |  Branch (445:13): [True: 24.5k, False: 8.55k]
  ------------------
  446|  24.5k|            uint32_t bit = 1u << type;
  447|  24.5k|            if (seen & bit) {
  ------------------
  |  Branch (447:17): [True: 909, False: 23.6k]
  ------------------
  448|    909|                return OFPERR_OFPTFFC_BAD_FEATURES;
  449|    909|            }
  450|  23.6k|            seen |= bit;
  451|  23.6k|        }
  452|       |
  453|  32.1k|        switch ((enum ofp13_table_feature_prop_type) type) {
  454|  2.32k|        case OFPTFPT13_INSTRUCTIONS:
  ------------------
  |  Branch (454:9): [True: 2.32k, False: 29.8k]
  ------------------
  455|  2.32k|            error = parse_instruction_ids(&payload, loose,
  456|  2.32k|                                          &tf->nonmiss.instructions);
  457|  2.32k|            break;
  458|  4.76k|        case OFPTFPT13_INSTRUCTIONS_MISS:
  ------------------
  |  Branch (458:9): [True: 4.76k, False: 27.4k]
  ------------------
  459|  4.76k|            error = parse_instruction_ids(&payload, loose,
  460|  4.76k|                                          &tf->miss.instructions);
  461|  4.76k|            break;
  462|       |
  463|  5.90k|        case OFPTFPT13_NEXT_TABLES:
  ------------------
  |  Branch (463:9): [True: 5.90k, False: 26.2k]
  ------------------
  464|  5.90k|            error = parse_table_features_next_table(&payload,
  465|  5.90k|                                                    tf->nonmiss.next);
  466|  5.90k|            break;
  467|  1.16k|        case OFPTFPT13_NEXT_TABLES_MISS:
  ------------------
  |  Branch (467:9): [True: 1.16k, False: 31.0k]
  ------------------
  468|  1.16k|            error = parse_table_features_next_table(&payload, tf->miss.next);
  469|  1.16k|            break;
  470|       |
  471|     58|        case OFPTFPT13_WRITE_ACTIONS:
  ------------------
  |  Branch (471:9): [True: 58, False: 32.1k]
  ------------------
  472|     58|            error = parse_action_bitmap(&payload, oh->version,
  473|     58|                                        &tf->nonmiss.write.ofpacts);
  474|     58|            break;
  475|     41|        case OFPTFPT13_WRITE_ACTIONS_MISS:
  ------------------
  |  Branch (475:9): [True: 41, False: 32.1k]
  ------------------
  476|     41|            error = parse_action_bitmap(&payload, oh->version,
  477|     41|                                        &tf->miss.write.ofpacts);
  478|     41|            break;
  479|       |
  480|  1.92k|        case OFPTFPT13_APPLY_ACTIONS:
  ------------------
  |  Branch (480:9): [True: 1.92k, False: 30.2k]
  ------------------
  481|  1.92k|            error = parse_action_bitmap(&payload, oh->version,
  482|  1.92k|                                        &tf->nonmiss.apply.ofpacts);
  483|  1.92k|            break;
  484|  1.09k|        case OFPTFPT13_APPLY_ACTIONS_MISS:
  ------------------
  |  Branch (484:9): [True: 1.09k, False: 31.1k]
  ------------------
  485|  1.09k|            error = parse_action_bitmap(&payload, oh->version,
  486|  1.09k|                                        &tf->miss.apply.ofpacts);
  487|  1.09k|            break;
  488|       |
  489|    938|        case OFPTFPT13_MATCH:
  ------------------
  |  Branch (489:9): [True: 938, False: 31.2k]
  ------------------
  490|    938|            error = parse_oxms(&payload, loose, &tf->match, &tf->mask);
  491|    938|            break;
  492|    906|        case OFPTFPT13_WILDCARDS:
  ------------------
  |  Branch (492:9): [True: 906, False: 31.2k]
  ------------------
  493|    906|            error = parse_oxms(&payload, loose, &tf->wildcard, NULL);
  494|    906|            break;
  495|       |
  496|    980|        case OFPTFPT13_WRITE_SETFIELD:
  ------------------
  |  Branch (496:9): [True: 980, False: 31.2k]
  ------------------
  497|    980|            error = parse_oxms(&payload, loose,
  498|    980|                               &tf->nonmiss.write.set_fields, NULL);
  499|    980|            break;
  500|  1.32k|        case OFPTFPT13_WRITE_SETFIELD_MISS:
  ------------------
  |  Branch (500:9): [True: 1.32k, False: 30.8k]
  ------------------
  501|  1.32k|            error = parse_oxms(&payload, loose,
  502|  1.32k|                               &tf->miss.write.set_fields, NULL);
  503|  1.32k|            break;
  504|    700|        case OFPTFPT13_APPLY_SETFIELD:
  ------------------
  |  Branch (504:9): [True: 700, False: 31.4k]
  ------------------
  505|    700|            error = parse_oxms(&payload, loose,
  506|    700|                               &tf->nonmiss.apply.set_fields, NULL);
  507|    700|            break;
  508|  1.50k|        case OFPTFPT13_APPLY_SETFIELD_MISS:
  ------------------
  |  Branch (508:9): [True: 1.50k, False: 30.6k]
  ------------------
  509|  1.50k|            error = parse_oxms(&payload, loose,
  510|  1.50k|                               &tf->miss.apply.set_fields, NULL);
  511|  1.50k|            break;
  512|       |
  513|      0|        case OFPTFPT13_EXPERIMENTER:
  ------------------
  |  Branch (513:9): [True: 0, False: 32.1k]
  ------------------
  514|      0|        case OFPTFPT13_EXPERIMENTER_MISS:
  ------------------
  |  Branch (514:9): [True: 0, False: 32.1k]
  ------------------
  515|  8.56k|        default:
  ------------------
  |  Branch (515:9): [True: 8.56k, False: 23.6k]
  ------------------
  516|  8.56k|            error = OFPPROP_UNKNOWN(loose, "table features", type);
  ------------------
  |  |  144|  8.56k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  517|  8.56k|            break;
  518|  32.1k|        }
  519|  32.1k|        if (error) {
  ------------------
  |  Branch (519:13): [True: 7.52k, False: 24.6k]
  ------------------
  520|  7.52k|            return error;
  521|  7.52k|        }
  522|  32.1k|    }
  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|  12.8k|    unsigned int missing = (seen & OFPTFPT13_REQUIRED) ^ OFPTFPT13_REQUIRED;
  ------------------
  |  |  276|  12.8k|#define OFPTFPT13_REQUIRED ((1u << OFPTFPT13_INSTRUCTIONS) |    \
  |  |  277|  12.8k|                            (1u << OFPTFPT13_NEXT_TABLES) |     \
  |  |  278|  12.8k|                            (1u << OFPTFPT13_WRITE_ACTIONS) |   \
  |  |  279|  12.8k|                            (1u << OFPTFPT13_APPLY_ACTIONS) |   \
  |  |  280|  12.8k|                            (1u << OFPTFPT13_MATCH) |           \
  |  |  281|  12.8k|                            (1u << OFPTFPT13_WILDCARDS) |       \
  |  |  282|  12.8k|                            (1u << OFPTFPT13_WRITE_SETFIELD) |  \
  |  |  283|  12.8k|                            (1u << OFPTFPT13_APPLY_SETFIELD))
  ------------------
                  unsigned int missing = (seen & OFPTFPT13_REQUIRED) ^ OFPTFPT13_REQUIRED;
  ------------------
  |  |  276|  12.8k|#define OFPTFPT13_REQUIRED ((1u << OFPTFPT13_INSTRUCTIONS) |    \
  |  |  277|  12.8k|                            (1u << OFPTFPT13_NEXT_TABLES) |     \
  |  |  278|  12.8k|                            (1u << OFPTFPT13_WRITE_ACTIONS) |   \
  |  |  279|  12.8k|                            (1u << OFPTFPT13_APPLY_ACTIONS) |   \
  |  |  280|  12.8k|                            (1u << OFPTFPT13_MATCH) |           \
  |  |  281|  12.8k|                            (1u << OFPTFPT13_WILDCARDS) |       \
  |  |  282|  12.8k|                            (1u << OFPTFPT13_WRITE_SETFIELD) |  \
  |  |  283|  12.8k|                            (1u << OFPTFPT13_APPLY_SETFIELD))
  ------------------
  527|  12.8k|    if (missing && (tf->any_properties || oh->version < OFP15_VERSION)) {
  ------------------
  |  Branch (527:9): [True: 12.8k, False: 0]
  |  Branch (527:21): [True: 3.28k, False: 9.60k]
  |  Branch (527:43): [True: 335, False: 9.26k]
  ------------------
  528|  3.61k|        VLOG_WARN_RL(&rl,
  ------------------
  |  |  224|  3.61k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  3.61k|    do {                                                                \
  |  |  |  |  288|  3.61k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  3.61k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 3.61k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  3.61k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 3.61k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  529|  3.61k|                     "table features message missing %u required "
  530|  3.61k|                     "properties, including property %d",
  531|  3.61k|                     count_1bits(missing), rightmost_1bit_idx(missing));
  532|  3.61k|        return OFPERR_OFPTFFC_BAD_FEATURES;
  533|  3.61k|    }
  534|       |
  535|       |    /* Copy nonmiss to miss when appropriate. */
  536|  9.26k|    if (tf->any_properties) {
  ------------------
  |  Branch (536:9): [True: 0, False: 9.26k]
  ------------------
  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|  9.26k|    bitmap_or(tf->match.bm, tf->mask.bm, MFF_N_IDS);
  568|  9.26k|    bitmap_or(tf->wildcard.bm, tf->mask.bm, MFF_N_IDS);
  569|  9.26k|    bitmap_and(tf->wildcard.bm, tf->match.bm, MFF_N_IDS);
  570|       |
  571|  9.26k|    return 0;
  572|  12.8k|}
ofputil_decode_table_desc:
  729|  7.23k|{
  730|  7.23k|    memset(td, 0, sizeof *td);
  731|       |
  732|  7.23k|    if (!msg->header) {
  ------------------
  |  Branch (732:9): [True: 3.03k, False: 4.19k]
  ------------------
  733|  3.03k|        ofpraw_pull_assert(msg);
  734|  3.03k|    }
  735|       |
  736|  7.23k|    if (!msg->size) {
  ------------------
  |  Branch (736:9): [True: 1.00k, False: 6.23k]
  ------------------
  737|  1.00k|        return EOF;
  738|  1.00k|    }
  739|       |
  740|  6.23k|    struct ofp14_table_desc *otd = ofpbuf_try_pull(msg, sizeof *otd);
  741|  6.23k|    if (!otd) {
  ------------------
  |  Branch (741:9): [True: 0, False: 6.23k]
  ------------------
  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|  6.23k|    td->table_id = otd->table_id;
  748|  6.23k|    size_t length = ntohs(otd->length);
  749|  6.23k|    if (length < sizeof *otd || length - sizeof *otd > msg->size) {
  ------------------
  |  Branch (749:9): [True: 828, False: 5.40k]
  |  Branch (749:33): [True: 963, False: 4.44k]
  ------------------
  750|  1.79k|        VLOG_WARN_RL(&rl, "OFP14_TABLE_DESC reply claims invalid "
  ------------------
  |  |  224|  1.79k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.79k|    do {                                                                \
  |  |  |  |  288|  1.79k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.79k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.79k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.79k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.79k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  751|  1.79k|                     "length %"PRIuSIZE, length);
  752|  1.79k|        return OFPERR_OFPBRC_BAD_LEN;
  753|  1.79k|    }
  754|  4.44k|    length -= sizeof *otd;
  755|       |
  756|  4.44k|    td->eviction = ofputil_decode_table_eviction(otd->config, version);
  757|  4.44k|    td->vacancy = ofputil_decode_table_vacancy(otd->config, version);
  758|  4.44k|    td->eviction_flags = UINT32_MAX;
  759|       |
  760|  4.44k|    struct ofpbuf properties = ofpbuf_const_initializer(
  761|  4.44k|        ofpbuf_pull(msg, length), length);
  762|  5.33k|    while (properties.size > 0) {
  ------------------
  |  Branch (762:12): [True: 1.82k, False: 3.51k]
  ------------------
  763|  1.82k|        struct ofpbuf payload;
  764|  1.82k|        enum ofperr error;
  765|  1.82k|        uint64_t type;
  766|       |
  767|  1.82k|        error = ofpprop_pull(&properties, &payload, &type);
  768|  1.82k|        if (error) {
  ------------------
  |  Branch (768:13): [True: 367, False: 1.46k]
  ------------------
  769|    367|            return error;
  770|    367|        }
  771|       |
  772|  1.46k|        switch (type) {
  773|    585|        case OFPTMPT14_EVICTION:
  ------------------
  |  Branch (773:9): [True: 585, False: 875]
  ------------------
  774|    585|            error = ofpprop_parse_u32(&payload, &td->eviction_flags);
  775|    585|            break;
  776|       |
  777|    618|        case OFPTMPT14_VACANCY:
  ------------------
  |  Branch (777:9): [True: 618, False: 842]
  ------------------
  778|    618|            error = parse_table_desc_vacancy_property(&payload, td);
  779|    618|            break;
  780|       |
  781|    257|        default:
  ------------------
  |  Branch (781:9): [True: 257, False: 1.20k]
  ------------------
  782|    257|            error = OFPPROP_UNKNOWN(true, "table_desc", type);
  ------------------
  |  |  144|    257|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  783|    257|            break;
  784|  1.46k|        }
  785|       |
  786|  1.46k|        if (error) {
  ------------------
  |  Branch (786:13): [True: 563, False: 897]
  ------------------
  787|    563|            return error;
  788|    563|        }
  789|  1.46k|    }
  790|       |
  791|  3.51k|    return 0;
  792|  4.44k|}
ofputil_table_desc_format:
  875|  3.51k|{
  876|  3.51k|    ds_put_format(s, "\n  table ");
  877|  3.51k|    ofputil_format_table(td->table_id, table_map, s);
  878|  3.51k|    ds_put_cstr(s, ":\n");
  879|  3.51k|    ds_put_format(s, "   eviction=%s eviction_flags=",
  880|  3.51k|                  ofputil_table_eviction_to_string(td->eviction));
  881|  3.51k|    ofputil_put_eviction_flags(s, td->eviction_flags);
  882|  3.51k|    ds_put_char(s, '\n');
  883|  3.51k|    ds_put_format(s, "   vacancy=%s",
  884|  3.51k|                  ofputil_table_vacancy_to_string(td->vacancy));
  885|  3.51k|    if (td->vacancy == OFPUTIL_TABLE_VACANCY_ON) {
  ------------------
  |  Branch (885:9): [True: 1.62k, False: 1.88k]
  ------------------
  886|  1.62k|        ds_put_format(s, " vacancy_down=%"PRIu8"%%",
  887|  1.62k|                      td->table_vacancy.vacancy_down);
  888|  1.62k|        ds_put_format(s, " vacancy_up=%"PRIu8"%%",
  889|  1.62k|                      td->table_vacancy.vacancy_up);
  890|  1.62k|        ds_put_format(s, " vacancy=%"PRIu8"%%",
  891|  1.62k|                      td->table_vacancy.vacancy);
  892|  1.62k|    }
  893|  3.51k|    ds_put_char(s, '\n');
  894|  3.51k|}
ofputil_decode_table_mod:
 1055|  11.0k|{
 1056|  11.0k|    memset(pm, 0, sizeof *pm);
 1057|  11.0k|    pm->miss = OFPUTIL_TABLE_MISS_DEFAULT;
 1058|  11.0k|    pm->eviction = OFPUTIL_TABLE_EVICTION_DEFAULT;
 1059|  11.0k|    pm->eviction_flags = UINT32_MAX;
 1060|  11.0k|    pm->vacancy = OFPUTIL_TABLE_VACANCY_DEFAULT;
 1061|       |
 1062|  11.0k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
 1063|  11.0k|    enum ofpraw raw = ofpraw_pull_assert(&b);
 1064|  11.0k|    if (raw == OFPRAW_OFPT11_TABLE_MOD) {
  ------------------
  |  Branch (1064:9): [True: 3.43k, False: 7.56k]
  ------------------
 1065|  3.43k|        const struct ofp11_table_mod *otm = b.data;
 1066|       |
 1067|  3.43k|        pm->table_id = otm->table_id;
 1068|  3.43k|        pm->miss = ofputil_decode_table_miss(otm->config, oh->version);
 1069|  7.56k|    } else if (raw == OFPRAW_OFPT14_TABLE_MOD) {
  ------------------
  |  Branch (1069:16): [True: 7.56k, False: 0]
  ------------------
 1070|  7.56k|        const struct ofp14_table_mod *otm = ofpbuf_pull(&b, sizeof *otm);
 1071|       |
 1072|  7.56k|        pm->table_id = otm->table_id;
 1073|  7.56k|        pm->miss = ofputil_decode_table_miss(otm->config, oh->version);
 1074|  7.56k|        pm->eviction = ofputil_decode_table_eviction(otm->config, oh->version);
 1075|  7.56k|        pm->vacancy = ofputil_decode_table_vacancy(otm->config, oh->version);
 1076|  7.85k|        while (b.size > 0) {
  ------------------
  |  Branch (1076:16): [True: 5.71k, False: 2.13k]
  ------------------
 1077|  5.71k|            struct ofpbuf property;
 1078|  5.71k|            enum ofperr error;
 1079|  5.71k|            uint64_t type;
 1080|       |
 1081|  5.71k|            error = ofpprop_pull(&b, &property, &type);
 1082|  5.71k|            if (error) {
  ------------------
  |  Branch (1082:17): [True: 586, False: 5.13k]
  ------------------
 1083|    586|                return error;
 1084|    586|            }
 1085|       |
 1086|  5.13k|            switch (type) {
 1087|    274|            case OFPTMPT14_EVICTION:
  ------------------
  |  Branch (1087:13): [True: 274, False: 4.85k]
  ------------------
 1088|    274|                error = ofpprop_parse_u32(&property, &pm->eviction);
 1089|    274|                break;
 1090|       |
 1091|  3.53k|            case OFPTMPT14_VACANCY:
  ------------------
  |  Branch (1091:13): [True: 3.53k, False: 1.60k]
  ------------------
 1092|  3.53k|                error = parse_table_mod_vacancy_property(&property, pm);
 1093|  3.53k|                break;
 1094|       |
 1095|  1.32k|            default:
  ------------------
  |  Branch (1095:13): [True: 1.32k, False: 3.80k]
  ------------------
 1096|  1.32k|                error = OFPERR_OFPBRC_BAD_TYPE;
 1097|  1.32k|                break;
 1098|  5.13k|            }
 1099|       |
 1100|  5.13k|            if (error) {
  ------------------
  |  Branch (1100:17): [True: 4.83k, False: 294]
  ------------------
 1101|  4.83k|                return error;
 1102|  4.83k|            }
 1103|  5.13k|        }
 1104|  7.56k|    } else {
 1105|      0|        return OFPERR_OFPBRC_BAD_TYPE;
 1106|      0|    }
 1107|       |
 1108|  5.57k|    return 0;
 1109|  11.0k|}
ofputil_table_mod_format:
 1171|  5.57k|{
 1172|  5.57k|    if (tm->table_id == 0xff) {
  ------------------
  |  Branch (1172:9): [True: 1.44k, False: 4.13k]
  ------------------
 1173|  1.44k|        ds_put_cstr(s, " table_id: ALL_TABLES");
 1174|  4.13k|    } else {
 1175|  4.13k|        ds_put_format(s, " table_id=");
 1176|  4.13k|        ofputil_format_table(tm->table_id, table_map, s);
 1177|  4.13k|    }
 1178|       |
 1179|  5.57k|    if (tm->miss != OFPUTIL_TABLE_MISS_DEFAULT) {
  ------------------
  |  Branch (1179:9): [True: 3.24k, False: 2.33k]
  ------------------
 1180|  3.24k|        ds_put_format(s, ", flow_miss_config=%s",
 1181|  3.24k|                      ofputil_table_miss_to_string(tm->miss));
 1182|  3.24k|    }
 1183|  5.57k|    if (tm->eviction != OFPUTIL_TABLE_EVICTION_DEFAULT) {
  ------------------
  |  Branch (1183:9): [True: 2.13k, False: 3.43k]
  ------------------
 1184|  2.13k|        ds_put_format(s, ", eviction=%s",
 1185|  2.13k|                      ofputil_table_eviction_to_string(tm->eviction));
 1186|  2.13k|    }
 1187|  5.57k|    if (tm->eviction_flags != UINT32_MAX) {
  ------------------
  |  Branch (1187:9): [True: 0, False: 5.57k]
  ------------------
 1188|      0|        ds_put_cstr(s, "eviction_flags=");
 1189|      0|        ofputil_put_eviction_flags(s, tm->eviction_flags);
 1190|      0|    }
 1191|  5.57k|    if (tm->vacancy != OFPUTIL_TABLE_VACANCY_DEFAULT) {
  ------------------
  |  Branch (1191:9): [True: 2.13k, False: 3.43k]
  ------------------
 1192|  2.13k|        ds_put_format(s, ", vacancy=%s",
 1193|  2.13k|                      ofputil_table_vacancy_to_string(tm->vacancy));
 1194|  2.13k|        if (tm->vacancy == OFPUTIL_TABLE_VACANCY_ON) {
  ------------------
  |  Branch (1194:13): [True: 964, False: 1.17k]
  ------------------
 1195|    964|            ds_put_format(s, " vacancy:%"PRIu8""
 1196|    964|                          ",%"PRIu8"", tm->table_vacancy.vacancy_down,
 1197|    964|                          tm->table_vacancy.vacancy_up);
 1198|    964|        }
 1199|  2.13k|    }
 1200|  5.57k|}
ofputil_table_features_format:
 1707|  49.3k|{
 1708|  49.3k|    if (!prev_features && features->command != OFPTFC15_REPLACE) {
  ------------------
  |  Branch (1708:9): [True: 9.14k, False: 40.2k]
  |  Branch (1708:27): [True: 367, False: 8.77k]
  ------------------
 1709|    367|        ds_put_format(s, "\n  command: %s",
 1710|    367|                      ofp15_table_features_command_to_string(
 1711|    367|                          features->command));
 1712|    367|    }
 1713|       |
 1714|  49.3k|    int table = features->table_id;
 1715|  49.3k|    int prev_table = prev_features ? prev_features->table_id : 0;
  ------------------
  |  Branch (1715:22): [True: 40.2k, False: 9.14k]
  ------------------
 1716|       |
 1717|  49.3k|    bool same_stats = !stats || (prev_stats
  ------------------
  |  Branch (1717:23): [True: 9.26k, False: 40.0k]
  |  Branch (1717:34): [True: 33.3k, False: 6.75k]
  ------------------
 1718|  33.3k|                                 && table_stats_equal(stats, prev_stats));
  ------------------
  |  Branch (1718:37): [True: 5.24k, False: 28.0k]
  ------------------
 1719|  49.3k|    bool same_features = prev_features && table_features_equal(features,
  ------------------
  |  Branch (1719:26): [True: 40.2k, False: 9.14k]
  |  Branch (1719:43): [True: 11.8k, False: 28.3k]
  ------------------
 1720|  40.2k|                                                               prev_features);
 1721|  49.3k|    if (same_stats && same_features && !features->name[0]) {
  ------------------
  |  Branch (1721:9): [True: 14.5k, False: 34.8k]
  |  Branch (1721:23): [True: 4.89k, False: 9.61k]
  |  Branch (1721:40): [True: 2.50k, False: 2.39k]
  ------------------
 1722|  2.50k|        if (*first_ditto < 0) {
  ------------------
  |  Branch (1722:13): [True: 1.09k, False: 1.40k]
  ------------------
 1723|  1.09k|            *first_ditto = table;
 1724|  1.09k|        }
 1725|  2.50k|        *last_ditto = table;
 1726|  2.50k|        return;
 1727|  2.50k|    }
 1728|  46.8k|    ofputil_table_features_format_finish(s, *first_ditto, *last_ditto);
 1729|  46.8k|    *first_ditto = -1;
 1730|       |
 1731|  46.8k|    ds_put_format(s, "\n  table %d", table);
 1732|  46.8k|    if (features->name[0]) {
  ------------------
  |  Branch (1732:9): [True: 29.8k, False: 16.9k]
  ------------------
 1733|  29.8k|        ds_put_format(s, " (\"%s\")", features->name);
 1734|  29.8k|    }
 1735|  46.8k|    ds_put_char(s, ':');
 1736|       |
 1737|  46.8k|    if (same_stats && same_features) {
  ------------------
  |  Branch (1737:9): [True: 12.0k, False: 34.8k]
  |  Branch (1737:23): [True: 2.39k, False: 9.61k]
  ------------------
 1738|  2.39k|        ds_put_cstr(s, " ditto");
 1739|  2.39k|        return;
 1740|  2.39k|    }
 1741|  44.4k|    ds_put_char(s, '\n');
 1742|  44.4k|    if (stats) {
  ------------------
  |  Branch (1742:9): [True: 37.0k, False: 7.46k]
  ------------------
 1743|  37.0k|        ds_put_format(s, "    active=%"PRIu32", ", stats->active_count);
 1744|  37.0k|        ds_put_format(s, "lookup=%"PRIu64", ", stats->lookup_count);
 1745|  37.0k|        ds_put_format(s, "matched=%"PRIu64"\n", stats->matched_count);
 1746|  37.0k|    }
 1747|  44.4k|    if (same_features) {
  ------------------
  |  Branch (1747:9): [True: 6.94k, False: 37.5k]
  ------------------
 1748|  6.94k|        if (!table_features_empty(features)) {
  ------------------
  |  Branch (1748:13): [True: 2.11k, False: 4.83k]
  ------------------
 1749|  2.11k|            ds_put_cstr(s, "    (same features)\n");
 1750|  2.11k|        }
 1751|  6.94k|        return;
 1752|  6.94k|    }
 1753|  37.5k|    if (features->metadata_match || features->metadata_write) {
  ------------------
  |  Branch (1753:9): [True: 20.8k, False: 16.6k]
  |  Branch (1753:37): [True: 1.46k, False: 15.2k]
  ------------------
 1754|  22.2k|        ds_put_format(s, "    metadata: match=%#"PRIx64" write=%#"PRIx64"\n",
 1755|  22.2k|                      ntohll(features->metadata_match),
 1756|  22.2k|                      ntohll(features->metadata_write));
 1757|  22.2k|    }
 1758|       |
 1759|  37.5k|    if (features->miss_config != OFPUTIL_TABLE_MISS_DEFAULT) {
  ------------------
  |  Branch (1759:9): [True: 22.1k, False: 15.3k]
  ------------------
 1760|  22.1k|        ds_put_format(s, "    config=%s\n",
 1761|  22.1k|                      ofputil_table_miss_to_string(features->miss_config));
 1762|  22.1k|    }
 1763|       |
 1764|  37.5k|    if (features->supports_eviction >= 0) {
  ------------------
  |  Branch (1764:9): [True: 7.46k, False: 30.0k]
  ------------------
 1765|  7.46k|        ds_put_format(s, "    eviction: %ssupported\n",
 1766|  7.46k|                      features->supports_eviction ? "" : "not ");
  ------------------
  |  Branch (1766:23): [True: 1.42k, False: 6.04k]
  ------------------
 1767|       |
 1768|  7.46k|    }
 1769|  37.5k|    if (features->supports_vacancy_events >= 0) {
  ------------------
  |  Branch (1769:9): [True: 7.46k, False: 30.0k]
  ------------------
 1770|  7.46k|        ds_put_format(s, "    vacancy events: %ssupported\n",
 1771|  7.46k|                      features->supports_vacancy_events ? "" : "not ");
  ------------------
  |  Branch (1771:23): [True: 6.39k, False: 1.06k]
  ------------------
 1772|       |
 1773|  7.46k|    }
 1774|       |
 1775|  37.5k|    if (features->max_entries) {
  ------------------
  |  Branch (1775:9): [True: 32.6k, False: 4.85k]
  ------------------
 1776|  32.6k|        ds_put_format(s, "    max_entries=%"PRIu32"\n", features->max_entries);
 1777|  32.6k|    }
 1778|       |
 1779|  37.5k|    const struct ofputil_table_instruction_features *prev_nonmiss
 1780|  37.5k|        = prev_features ? &prev_features->nonmiss : NULL;
  ------------------
  |  Branch (1780:11): [True: 28.3k, False: 9.14k]
  ------------------
 1781|  37.5k|    const struct ofputil_table_instruction_features *prev_miss
 1782|  37.5k|        = prev_features ? &prev_features->miss : NULL;
  ------------------
  |  Branch (1782:11): [True: 28.3k, False: 9.14k]
  ------------------
 1783|  37.5k|    if (prev_features
  ------------------
  |  Branch (1783:9): [True: 28.3k, False: 9.14k]
  ------------------
 1784|  28.3k|        && table_instruction_features_equal(&features->nonmiss, table,
  ------------------
  |  Branch (1784:12): [True: 12.0k, False: 16.3k]
  ------------------
 1785|  28.3k|                                            prev_nonmiss, prev_table)
 1786|  12.0k|        && table_instruction_features_equal(&features->miss, table,
  ------------------
  |  Branch (1786:12): [True: 12.0k, False: 0]
  ------------------
 1787|  12.0k|                                            prev_miss, prev_table)) {
 1788|  12.0k|        if (!table_instruction_features_empty(&features->nonmiss)) {
  ------------------
  |  Branch (1788:13): [True: 1.47k, False: 10.5k]
  ------------------
 1789|  1.47k|            ds_put_cstr(s, "    (same instructions)\n");
 1790|  1.47k|        }
 1791|  25.4k|    } else if (!table_instruction_features_equal(&features->nonmiss, table,
  ------------------
  |  Branch (1791:16): [True: 0, False: 25.4k]
  ------------------
 1792|  25.4k|                                                 &features->miss, table)) {
 1793|      0|        ds_put_cstr(s, "    instructions (other than table miss):\n");
 1794|      0|        print_table_instruction_features(s, &features->nonmiss, prev_nonmiss);
 1795|      0|        ds_put_cstr(s, "    instructions (table miss):\n");
 1796|      0|        print_table_instruction_features(s, &features->miss, prev_miss);
 1797|  25.4k|    } else if (!table_instruction_features_empty(&features->nonmiss)) {
  ------------------
  |  Branch (1797:16): [True: 20.3k, False: 5.15k]
  ------------------
 1798|  20.3k|        ds_put_cstr(s, "    instructions (table miss and others):\n");
 1799|  20.3k|        print_table_instruction_features(s, &features->nonmiss, prev_nonmiss);
 1800|  20.3k|    }
 1801|       |
 1802|  37.5k|    if (!bitmap_is_all_zeros(features->match.bm, MFF_N_IDS)) {
  ------------------
  |  Branch (1802:9): [True: 28.3k, False: 9.14k]
  ------------------
 1803|  28.3k|        if (prev_features
  ------------------
  |  Branch (1803:13): [True: 22.5k, False: 5.86k]
  ------------------
 1804|  22.5k|            && bitmap_equal(features->match.bm, prev_features->match.bm,
  ------------------
  |  Branch (1804:16): [True: 3.53k, False: 18.9k]
  ------------------
 1805|  22.5k|                            MFF_N_IDS)) {
 1806|  3.53k|            ds_put_cstr(s, "    (same matching)\n");
 1807|  24.8k|        } else {
 1808|  24.8k|            ds_put_cstr(s, "    matching:\n");
 1809|       |
 1810|  24.8k|            print_matches(s, features, true, true, "arbitrary mask");
 1811|  24.8k|            print_matches(s, features, false, true, "exact match or wildcard");
 1812|  24.8k|            print_matches(s, features, false, false, "must exact match");
 1813|  24.8k|        }
 1814|  28.3k|    }
 1815|  37.5k|}
ofputil_table_features_format_finish:
 1820|  78.0k|{
 1821|  78.0k|    if (first_ditto < 0) {
  ------------------
  |  Branch (1821:9): [True: 76.9k, False: 1.09k]
  ------------------
 1822|  76.9k|        return;
 1823|  76.9k|    }
 1824|       |
 1825|  1.09k|    ds_put_char(s, '\n');
 1826|  1.09k|    if (first_ditto == last_ditto) {
  ------------------
  |  Branch (1826:9): [True: 984, False: 113]
  ------------------
 1827|    984|        ds_put_format(s, "  table %d: ditto\n", first_ditto);
 1828|    984|    } else {
 1829|    113|        ds_put_format(s, "  tables %d...%d: ditto\n", first_ditto, last_ditto);
 1830|    113|    }
 1831|  1.09k|}
ofputil_decode_table_stats_reply:
 2256|  47.3k|{
 2257|  47.3k|    const struct ofp_header *oh;
 2258|       |
 2259|  47.3k|    if (!msg->header) {
  ------------------
  |  Branch (2259:9): [True: 0, False: 47.3k]
  ------------------
 2260|      0|        ofpraw_pull_assert(msg);
 2261|      0|    }
 2262|  47.3k|    oh = msg->header;
 2263|       |
 2264|  47.3k|    if (!msg->size) {
  ------------------
  |  Branch (2264:9): [True: 7.30k, False: 40.0k]
  ------------------
 2265|  7.30k|        return EOF;
 2266|  7.30k|    }
 2267|       |
 2268|  40.0k|    memset(stats, 0, sizeof *stats);
 2269|  40.0k|    memset(features, 0, sizeof *features);
 2270|  40.0k|    features->supports_eviction = -1;
 2271|  40.0k|    features->supports_vacancy_events = -1;
 2272|       |
 2273|  40.0k|    switch ((enum ofp_version) oh->version) {
 2274|  9.52k|    case OFP10_VERSION:
  ------------------
  |  Branch (2274:5): [True: 9.52k, False: 30.5k]
  ------------------
 2275|  9.52k|        return ofputil_decode_ofp10_table_stats(msg, stats, features);
 2276|       |
 2277|  7.60k|    case OFP11_VERSION:
  ------------------
  |  Branch (2277:5): [True: 7.60k, False: 32.4k]
  ------------------
 2278|  7.60k|        return ofputil_decode_ofp11_table_stats(msg, stats, features);
 2279|       |
 2280|  15.6k|    case OFP12_VERSION:
  ------------------
  |  Branch (2280:5): [True: 15.6k, False: 24.4k]
  ------------------
 2281|  15.6k|        return ofputil_decode_ofp12_table_stats(msg, stats, features);
 2282|       |
 2283|    567|    case OFP13_VERSION:
  ------------------
  |  Branch (2283:5): [True: 567, False: 39.5k]
  ------------------
 2284|  1.14k|    case OFP14_VERSION:
  ------------------
  |  Branch (2284:5): [True: 582, False: 39.5k]
  ------------------
 2285|  7.30k|    case OFP15_VERSION:
  ------------------
  |  Branch (2285:5): [True: 6.15k, False: 33.9k]
  ------------------
 2286|  7.30k|        return ofputil_decode_ofp13_table_stats(msg, stats, features);
 2287|       |
 2288|      0|    default:
  ------------------
  |  Branch (2288:5): [True: 0, False: 40.0k]
  ------------------
 2289|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 2290|  40.0k|    }
 2291|  40.0k|}
ofp_table_reason_to_string:
 2299|    874|{
 2300|    874|    switch (reason) {
 2301|    457|    case OFPTR_VACANCY_DOWN:
  ------------------
  |  Branch (2301:5): [True: 457, False: 417]
  ------------------
 2302|    457|        return "vacancy_down";
 2303|       |
 2304|    417|    case OFPTR_VACANCY_UP:
  ------------------
  |  Branch (2304:5): [True: 417, False: 457]
  ------------------
 2305|    417|        return "vacancy_up";
 2306|       |
 2307|      0|    default:
  ------------------
  |  Branch (2307:5): [True: 0, False: 874]
  ------------------
 2308|      0|        snprintf(reasonbuf, bufsize, "%d", (int) reason);
 2309|      0|        return reasonbuf;
 2310|    874|    }
 2311|    874|}
ofputil_decode_table_status:
 2373|  3.10k|{
 2374|  3.10k|    const struct ofp14_table_status *ots;
 2375|  3.10k|    struct ofpbuf b;
 2376|  3.10k|    enum ofperr error;
 2377|  3.10k|    enum ofpraw raw;
 2378|       |
 2379|  3.10k|    ofpbuf_use_const(&b, oh, ntohs(oh->length));
 2380|  3.10k|    raw = ofpraw_pull_assert(&b);
 2381|  3.10k|    ots = ofpbuf_pull(&b, sizeof *ots);
 2382|       |
 2383|  3.10k|    if (raw == OFPRAW_OFPT14_TABLE_STATUS) {
  ------------------
  |  Branch (2383:9): [True: 3.10k, False: 0]
  ------------------
 2384|  3.10k|        if (ots->reason != OFPTR_VACANCY_DOWN
  ------------------
  |  Branch (2384:13): [True: 2.91k, False: 192]
  ------------------
 2385|  2.91k|            && ots->reason != OFPTR_VACANCY_UP) {
  ------------------
  |  Branch (2385:16): [True: 1.78k, False: 1.12k]
  ------------------
 2386|  1.78k|            return OFPERR_OFPBPC_BAD_VALUE;
 2387|  1.78k|        }
 2388|  1.32k|        ts->reason = ots->reason;
 2389|       |
 2390|  1.32k|        error = ofputil_decode_table_desc(&b, &ts->desc, oh->version);
 2391|  1.32k|        return error;
 2392|  3.10k|    } else {
 2393|      0|        return OFPERR_OFPBRC_BAD_VERSION;
 2394|      0|    }
 2395|  3.10k|}
ofputil_format_table_status:
 2401|    634|{
 2402|    634|    if (ts->reason == OFPTR_VACANCY_DOWN) {
  ------------------
  |  Branch (2402:9): [True: 67, False: 567]
  ------------------
 2403|     67|        ds_put_format(string, " reason=VACANCY_DOWN");
 2404|    567|    } else if (ts->reason == OFPTR_VACANCY_UP) {
  ------------------
  |  Branch (2404:16): [True: 567, False: 0]
  ------------------
 2405|    567|        ds_put_format(string, " reason=VACANCY_UP");
 2406|    567|    }
 2407|       |
 2408|    634|    ds_put_format(string, "\ntable_desc:-");
 2409|    634|    ofputil_table_desc_format(string, &ts->desc, table_map);
 2410|    634|}
ofp-table.c:ofp15_table_features_command_is_valid:
   80|  23.9k|{
   81|  23.9k|    switch (cmd) {
   82|  20.9k|    case OFPTFC15_REPLACE:
  ------------------
  |  Branch (82:5): [True: 20.9k, False: 3.01k]
  ------------------
   83|  21.1k|    case OFPTFC15_MODIFY:
  ------------------
  |  Branch (83:5): [True: 198, False: 23.7k]
  ------------------
   84|  23.4k|    case OFPTFC15_ENABLE:
  ------------------
  |  Branch (84:5): [True: 2.30k, False: 21.6k]
  ------------------
   85|  23.6k|    case OFPTFC15_DISABLE:
  ------------------
  |  Branch (85:5): [True: 158, False: 23.8k]
  ------------------
   86|  23.6k|        return true;
   87|       |
   88|    353|    default:
  ------------------
  |  Branch (88:5): [True: 353, False: 23.6k]
  ------------------
   89|       |        return false;
   90|  23.9k|    }
   91|  23.9k|}
ofp-table.c:pull_table_feature_property:
  235|  37.1k|{
  236|  37.1k|    enum ofperr error;
  237|       |
  238|  37.1k|    error = ofpprop_pull(msg, payload, typep);
  239|  37.1k|    if (payload && !error) {
  ------------------
  |  Branch (239:9): [True: 37.1k, False: 0]
  |  Branch (239:20): [True: 33.1k, False: 4.08k]
  ------------------
  240|  33.1k|        ofpbuf_pull(payload, (char *)payload->msg - (char *)payload->header);
  241|  33.1k|    }
  242|  37.1k|    return error;
  243|  37.1k|}
ofp-table.c:parse_instruction_ids:
  270|  7.09k|{
  271|  7.09k|    *insts = 0;
  272|  11.6k|    while (payload->size > 0) {
  ------------------
  |  Branch (272:12): [True: 7.28k, False: 4.39k]
  ------------------
  273|  7.28k|        enum ovs_instruction_type inst;
  274|  7.28k|        enum ofperr error;
  275|  7.28k|        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|  7.28k|        error = ofpprop_pull__(payload, NULL, 1, 0x10000, &ofpit);
  287|  7.28k|        if (error) {
  ------------------
  |  Branch (287:13): [True: 2.70k, False: 4.58k]
  ------------------
  288|  2.70k|            return error;
  289|  2.70k|        }
  290|       |
  291|  4.58k|        error = ovs_instruction_type_from_inst_type(&inst, ofpit);
  292|  4.58k|        if (!error) {
  ------------------
  |  Branch (292:13): [True: 645, False: 3.94k]
  ------------------
  293|    645|            *insts |= 1u << inst;
  294|  3.94k|        } else if (!loose) {
  ------------------
  |  Branch (294:20): [True: 0, False: 3.94k]
  ------------------
  295|      0|            return error;
  296|      0|        }
  297|  4.58k|    }
  298|  4.39k|    return 0;
  299|  7.09k|}
ofp-table.c:parse_table_features_next_table:
  304|  7.06k|{
  305|  7.06k|    size_t i;
  306|       |
  307|  7.06k|    memset(next_tables, 0, bitmap_n_bytes(255));
  308|  50.5k|    for (i = 0; i < payload->size; i++) {
  ------------------
  |  Branch (308:17): [True: 45.5k, False: 5.01k]
  ------------------
  309|  45.5k|        uint8_t id = ((const uint8_t *) payload->data)[i];
  310|  45.5k|        if (id >= 255) {
  ------------------
  |  Branch (310:13): [True: 2.05k, False: 43.5k]
  ------------------
  311|  2.05k|            return OFPERR_OFPBPC_BAD_VALUE;
  312|  2.05k|        }
  313|  43.5k|        bitmap_set1(next_tables, id);
  314|  43.5k|    }
  315|  5.01k|    return 0;
  316|  7.06k|}
ofp-table.c:parse_action_bitmap:
  248|  3.11k|{
  249|  3.11k|    uint32_t types = 0;
  250|       |
  251|  5.32k|    while (payload->size > 0) {
  ------------------
  |  Branch (251:12): [True: 3.37k, False: 1.94k]
  ------------------
  252|  3.37k|        enum ofperr error;
  253|  3.37k|        uint64_t type;
  254|       |
  255|  3.37k|        error = ofpprop_pull__(payload, NULL, 1, 0x10000, &type);
  256|  3.37k|        if (error) {
  ------------------
  |  Branch (256:13): [True: 1.16k, False: 2.20k]
  ------------------
  257|  1.16k|            return error;
  258|  1.16k|        }
  259|  2.20k|        if (type < CHAR_BIT * sizeof types) {
  ------------------
  |  Branch (259:13): [True: 1.91k, False: 290]
  ------------------
  260|  1.91k|            types |= 1u << type;
  261|  1.91k|        }
  262|  2.20k|    }
  263|       |
  264|  1.94k|    *ofpacts = ofpact_bitmap_from_openflow(htonl(types), ofp_version);
  265|  1.94k|    return 0;
  266|  3.11k|}
ofp-table.c:parse_oxms:
  321|  6.35k|{
  322|  6.35k|    struct mf_bitmap exact = MF_BITMAP_INITIALIZER;
  ------------------
  |  | 2053|  6.35k|#define MF_BITMAP_INITIALIZER { { [0] = 0 } }
  ------------------
  323|  6.35k|    struct mf_bitmap masked = MF_BITMAP_INITIALIZER;
  ------------------
  |  | 2053|  6.35k|#define MF_BITMAP_INITIALIZER { { [0] = 0 } }
  ------------------
  324|       |
  325|  71.9k|    while (payload->size > 0) {
  ------------------
  |  Branch (325:12): [True: 65.8k, False: 6.09k]
  ------------------
  326|  65.8k|        const struct mf_field *field;
  327|  65.8k|        enum ofperr error;
  328|  65.8k|        bool hasmask;
  329|       |
  330|  65.8k|        error = nx_pull_header(payload, NULL, &field, &hasmask);
  331|  65.8k|        if (!error) {
  ------------------
  |  Branch (331:13): [True: 2.37k, False: 63.4k]
  ------------------
  332|  2.37k|            bitmap_set1(hasmask ? masked.bm : exact.bm, field->id);
  ------------------
  |  Branch (332:25): [True: 1.86k, False: 511]
  ------------------
  333|  63.4k|        } else if (error != OFPERR_OFPBMC_BAD_FIELD || !loose) {
  ------------------
  |  Branch (333:20): [True: 255, False: 63.1k]
  |  Branch (333:56): [True: 0, False: 63.1k]
  ------------------
  334|    255|            return error;
  335|    255|        }
  336|  65.8k|    }
  337|  6.09k|    if (exactp) {
  ------------------
  |  Branch (337:9): [True: 6.09k, False: 0]
  ------------------
  338|  6.09k|        *exactp = exact;
  339|  6.09k|    } 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|  6.09k|    if (maskedp) {
  ------------------
  |  Branch (342:9): [True: 930, False: 5.16k]
  ------------------
  343|    930|        *maskedp = masked;
  344|  5.16k|    } else if (!bitmap_is_all_zeros(masked.bm, MFF_N_IDS)) {
  ------------------
  |  Branch (344:16): [True: 1.34k, False: 3.82k]
  ------------------
  345|  1.34k|        return OFPERR_OFPBMC_BAD_MASK;
  346|  1.34k|    }
  347|  4.75k|    return 0;
  348|  6.09k|}
ofp-table.c:parse_table_desc_vacancy_property:
  708|    618|{
  709|    618|    struct ofp14_table_mod_prop_vacancy *otv = property->data;
  710|       |
  711|    618|    if (property->size != sizeof *otv) {
  ------------------
  |  Branch (711:9): [True: 563, False: 55]
  ------------------
  712|    563|        return OFPERR_OFPBPC_BAD_LEN;
  713|    563|    }
  714|       |
  715|     55|    td->table_vacancy.vacancy_down = otv->vacancy_down;
  716|     55|    td->table_vacancy.vacancy_up = otv->vacancy_up;
  717|     55|    td->table_vacancy.vacancy = otv->vacancy;
  718|     55|    return 0;
  719|    618|}
ofp-table.c:ofputil_put_eviction_flags:
  863|  3.51k|{
  864|  3.51k|    if (eviction_flags != UINT32_MAX) {
  ------------------
  |  Branch (864:9): [True: 569, False: 2.94k]
  ------------------
  865|    569|        ofp_print_bit_names(string, eviction_flags,
  866|    569|                            ofputil_eviction_flag_to_string, '|');
  867|  2.94k|    } else {
  868|  2.94k|        ds_put_cstr(string, "(default)");
  869|  2.94k|    }
  870|  3.51k|}
ofp-table.c:ofputil_eviction_flag_to_string:
  847|  15.7k|{
  848|  15.7k|    enum ofp14_table_mod_prop_eviction_flag eviction_flag = bit;
  849|       |
  850|  15.7k|    switch (eviction_flag) {
  ------------------
  |  Branch (850:13): [True: 1.57k, False: 14.1k]
  ------------------
  851|    521|    case OFPTMPEF14_OTHER:      return "OTHER";
  ------------------
  |  Branch (851:5): [True: 521, False: 15.2k]
  ------------------
  852|    555|    case OFPTMPEF14_IMPORTANCE: return "IMPORTANCE";
  ------------------
  |  Branch (852:5): [True: 555, False: 15.1k]
  ------------------
  853|    503|    case OFPTMPEF14_LIFETIME:   return "LIFETIME";
  ------------------
  |  Branch (853:5): [True: 503, False: 15.2k]
  ------------------
  854|  15.7k|    }
  855|       |
  856|  14.1k|    return NULL;
  857|  15.7k|}
ofp-table.c:ofputil_decode_table_vacancy:
  941|  12.0k|{
  942|  12.0k|    return (version < OFP14_VERSION ? OFPUTIL_TABLE_VACANCY_DEFAULT
  ------------------
  |  Branch (942:13): [True: 0, False: 12.0k]
  ------------------
  943|  12.0k|            : config & htonl(OFPTC14_VACANCY_EVENTS) ? OFPUTIL_TABLE_VACANCY_ON
  ------------------
  |  Branch (943:15): [True: 7.34k, False: 4.65k]
  ------------------
  944|  12.0k|            : OFPUTIL_TABLE_VACANCY_OFF);
  945|  12.0k|}
ofp-table.c:ofputil_decode_table_eviction:
  956|  12.0k|{
  957|  12.0k|    return (version < OFP14_VERSION ? OFPUTIL_TABLE_EVICTION_DEFAULT
  ------------------
  |  Branch (957:13): [True: 0, False: 12.0k]
  ------------------
  958|  12.0k|            : config & htonl(OFPTC14_EVICTION) ? OFPUTIL_TABLE_EVICTION_ON
  ------------------
  |  Branch (958:15): [True: 5.73k, False: 6.26k]
  ------------------
  959|  12.0k|            : OFPUTIL_TABLE_EVICTION_OFF);
  960|  12.0k|}
ofp-table.c:ofputil_decode_table_miss:
 1027|  34.2k|{
 1028|  34.2k|    uint32_t config = ntohl(config_);
 1029|       |
 1030|  34.2k|    if (version == OFP11_VERSION || version == OFP12_VERSION) {
  ------------------
  |  Branch (1030:9): [True: 10.1k, False: 24.1k]
  |  Branch (1030:37): [True: 16.3k, False: 7.75k]
  ------------------
 1031|  26.5k|        switch (config & OFPTC11_TABLE_MISS_MASK) {
 1032|  16.0k|        case OFPTC11_TABLE_MISS_CONTROLLER:
  ------------------
  |  Branch (1032:9): [True: 16.0k, False: 10.4k]
  ------------------
 1033|  16.0k|            return OFPUTIL_TABLE_MISS_CONTROLLER;
 1034|       |
 1035|  3.00k|        case OFPTC11_TABLE_MISS_CONTINUE:
  ------------------
  |  Branch (1035:9): [True: 3.00k, False: 23.4k]
  ------------------
 1036|  3.00k|            return OFPUTIL_TABLE_MISS_CONTINUE;
 1037|       |
 1038|  3.33k|        case OFPTC11_TABLE_MISS_DROP:
  ------------------
  |  Branch (1038:9): [True: 3.33k, False: 23.1k]
  ------------------
 1039|  3.33k|            return OFPUTIL_TABLE_MISS_DROP;
 1040|       |
 1041|  4.07k|        default:
  ------------------
  |  Branch (1041:9): [True: 4.07k, False: 22.4k]
  ------------------
 1042|  4.07k|            VLOG_WARN_RL(&rl, "bad table miss config %d", config);
  ------------------
  |  |  224|  4.07k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  4.07k|    do {                                                                \
  |  |  |  |  288|  4.07k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  4.07k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 4.07k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  4.07k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 4.07k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1043|  4.07k|            return OFPUTIL_TABLE_MISS_CONTROLLER;
 1044|  26.5k|        }
 1045|  26.5k|    } else {
 1046|  7.75k|        return OFPUTIL_TABLE_MISS_DEFAULT;
 1047|  7.75k|    }
 1048|  34.2k|}
ofp-table.c:parse_table_mod_vacancy_property:
  904|  3.53k|{
  905|  3.53k|    struct ofp14_table_mod_prop_vacancy *otv = property->data;
  906|       |
  907|  3.53k|    if (property->size != sizeof *otv) {
  ------------------
  |  Branch (907:9): [True: 200, False: 3.33k]
  ------------------
  908|    200|        return OFPERR_OFPBPC_BAD_LEN;
  909|    200|    }
  910|  3.33k|    tm->table_vacancy.vacancy_down = otv->vacancy_down;
  911|  3.33k|    tm->table_vacancy.vacancy_up = otv->vacancy_up;
  912|  3.33k|    if (tm->table_vacancy.vacancy_down > tm->table_vacancy.vacancy_up) {
  ------------------
  |  Branch (912:9): [True: 332, False: 2.99k]
  ------------------
  913|    332|        OFPPROP_LOG(&rl, false,
  ------------------
  |  |  139|    332|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    332|    do {                                                                \
  |  |  |  |  288|    664|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 332]
  |  |  |  |  ------------------
  |  |  |  |  289|    332|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 332]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    332|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 332]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  914|    332|                    "Value of vacancy_down is greater than vacancy_up");
  915|    332|        return OFPERR_OFPBPC_BAD_VALUE;
  916|    332|    }
  917|  2.99k|    if (tm->table_vacancy.vacancy_down > 100 ||
  ------------------
  |  Branch (917:9): [True: 1.53k, False: 1.46k]
  ------------------
  918|  2.80k|        tm->table_vacancy.vacancy_up > 100) {
  ------------------
  |  Branch (918:9): [True: 1.26k, False: 195]
  ------------------
  919|  2.80k|        OFPPROP_LOG(&rl, false, "Vacancy threshold percentage "
  ------------------
  |  |  139|  2.80k|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  2.80k|    do {                                                                \
  |  |  |  |  288|  5.60k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 2.80k]
  |  |  |  |  ------------------
  |  |  |  |  289|  2.80k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 2.80k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  2.80k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 2.80k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  920|  2.80k|                    "should not be greater than 100");
  921|  2.80k|        return OFPERR_OFPBPC_BAD_VALUE;
  922|  2.80k|    }
  923|    195|    tm->table_vacancy.vacancy = otv->vacancy;
  924|    195|    if (tm->table_vacancy.vacancy) {
  ------------------
  |  Branch (924:9): [True: 160, False: 35]
  ------------------
  925|    160|        OFPPROP_LOG(&rl, false,
  ------------------
  |  |  139|    160|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    160|    do {                                                                \
  |  |  |  |  288|    320|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 160]
  |  |  |  |  ------------------
  |  |  |  |  289|    160|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 160]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    160|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 160]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  926|    160|                    "Vacancy value should be zero for table-mod messages");
  927|    160|        return OFPERR_OFPBPC_BAD_VALUE;
  928|    160|    }
  929|     35|    return 0;
  930|    195|}
ofp-table.c:ofp15_table_features_command_to_string:
   95|    367|{
   96|    367|    switch (cmd) {
   97|      0|    case OFPTFC15_REPLACE: return "replace";
  ------------------
  |  Branch (97:5): [True: 0, False: 367]
  ------------------
   98|     81|    case OFPTFC15_MODIFY: return "modify";
  ------------------
  |  Branch (98:5): [True: 81, False: 286]
  ------------------
   99|    138|    case OFPTFC15_ENABLE: return "enable";
  ------------------
  |  Branch (99:5): [True: 138, False: 229]
  ------------------
  100|    148|    case OFPTFC15_DISABLE: return "disable";
  ------------------
  |  Branch (100:5): [True: 148, False: 219]
  ------------------
  101|      0|    default: return "***bad command***";
  ------------------
  |  Branch (101:5): [True: 0, False: 367]
  ------------------
  102|    367|    }
  103|    367|}
ofp-table.c:table_stats_equal:
 1693|  33.3k|{
 1694|  33.3k|    return (a->active_count == b->active_count
  ------------------
  |  Branch (1694:13): [True: 10.5k, False: 22.8k]
  ------------------
 1695|  10.5k|            && a->lookup_count == b->lookup_count
  ------------------
  |  Branch (1695:16): [True: 6.85k, False: 3.65k]
  ------------------
 1696|  6.85k|            && a->matched_count == b->matched_count);
  ------------------
  |  Branch (1696:16): [True: 5.24k, False: 1.60k]
  ------------------
 1697|  33.3k|}
ofp-table.c:table_features_equal:
 1662|  40.2k|{
 1663|  40.2k|    return (a->metadata_match == b->metadata_match
  ------------------
  |  Branch (1663:13): [True: 29.4k, False: 10.7k]
  ------------------
 1664|  29.4k|            && a->metadata_write == b->metadata_write
  ------------------
  |  Branch (1664:16): [True: 25.4k, False: 4.06k]
  ------------------
 1665|  25.4k|            && a->miss_config == b->miss_config
  ------------------
  |  Branch (1665:16): [True: 23.4k, False: 1.93k]
  ------------------
 1666|  23.4k|            && a->supports_eviction == b->supports_eviction
  ------------------
  |  Branch (1666:16): [True: 22.9k, False: 506]
  ------------------
 1667|  22.9k|            && a->supports_vacancy_events == b->supports_vacancy_events
  ------------------
  |  Branch (1667:16): [True: 22.6k, False: 358]
  ------------------
 1668|  22.6k|            && a->max_entries == b->max_entries
  ------------------
  |  Branch (1668:16): [True: 14.2k, False: 8.36k]
  ------------------
 1669|  14.2k|            && table_instruction_features_equal(&a->nonmiss, a->table_id,
  ------------------
  |  Branch (1669:16): [True: 12.4k, False: 1.81k]
  ------------------
 1670|  14.2k|                                                &b->nonmiss, b->table_id)
 1671|  12.4k|            && table_instruction_features_equal(&a->miss, a->table_id,
  ------------------
  |  Branch (1671:16): [True: 12.4k, False: 0]
  ------------------
 1672|  12.4k|                                                &b->miss, b->table_id)
 1673|  12.4k|            && bitmap_equal(a->match.bm, b->match.bm, MFF_N_IDS));
  ------------------
  |  Branch (1673:16): [True: 11.8k, False: 600]
  ------------------
 1674|  40.2k|}
ofp-table.c:table_features_empty:
 1678|  6.94k|{
 1679|  6.94k|    return (!tf->metadata_match
  ------------------
  |  Branch (1679:13): [True: 6.56k, False: 374]
  ------------------
 1680|  6.56k|            && !tf->metadata_write
  ------------------
  |  Branch (1680:16): [True: 6.49k, False: 70]
  ------------------
 1681|  6.49k|            && tf->miss_config == OFPUTIL_TABLE_MISS_DEFAULT
  ------------------
  |  Branch (1681:16): [True: 6.19k, False: 302]
  ------------------
 1682|  6.19k|            && tf->supports_eviction < 0
  ------------------
  |  Branch (1682:16): [True: 6.19k, False: 0]
  ------------------
 1683|  6.19k|            && tf->supports_vacancy_events < 0
  ------------------
  |  Branch (1683:16): [True: 6.19k, False: 0]
  ------------------
 1684|  6.19k|            && !tf->max_entries
  ------------------
  |  Branch (1684:16): [True: 5.08k, False: 1.11k]
  ------------------
 1685|  5.08k|            && table_instruction_features_empty(&tf->nonmiss)
  ------------------
  |  Branch (1685:16): [True: 5.08k, False: 0]
  ------------------
 1686|  5.08k|            && table_instruction_features_empty(&tf->miss)
  ------------------
  |  Branch (1686:16): [True: 5.08k, False: 0]
  ------------------
 1687|  5.08k|            && bitmap_is_all_zeros(tf->match.bm, MFF_N_IDS));
  ------------------
  |  Branch (1687:16): [True: 4.83k, False: 251]
  ------------------
 1688|  6.94k|}
ofp-table.c:table_instruction_features_equal:
 1641|  92.5k|{
 1642|  92.5k|    return (table_instruction_features_next_equal(a->next, a_table_id,
  ------------------
  |  Branch (1642:13): [True: 92.5k, False: 0]
  ------------------
 1643|  92.5k|                                                  b->next, b_table_id)
 1644|  92.5k|            && a->instructions == b->instructions
  ------------------
  |  Branch (1644:16): [True: 82.2k, False: 10.2k]
  ------------------
 1645|  82.2k|            && table_action_features_equal(&a->write, &b->write)
  ------------------
  |  Branch (1645:16): [True: 76.2k, False: 6.08k]
  ------------------
 1646|  76.2k|            && table_action_features_equal(&a->apply, &b->apply));
  ------------------
  |  Branch (1646:16): [True: 74.4k, False: 1.77k]
  ------------------
 1647|  92.5k|}
ofp-table.c:table_instruction_features_next_equal:
 1615|  93.4k|{
 1616|  93.4k|    if (b_table_id == a_table_id + 1
  ------------------
  |  Branch (1616:9): [True: 1.74k, False: 91.7k]
  ------------------
 1617|  1.74k|        && bitmap_is_set(a, b_table_id)
  ------------------
  |  Branch (1617:12): [True: 0, False: 1.74k]
  ------------------
 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|  93.4k|    } else if (a_table_id == b_table_id + 1) {
  ------------------
  |  Branch (1629:16): [True: 898, False: 92.5k]
  ------------------
 1630|    898|        return table_instruction_features_next_equal(b, b_table_id,
 1631|    898|                                                     a, a_table_id);
 1632|  92.5k|    } else {
 1633|  92.5k|        return bitmap_equal(a, b, 255);
 1634|  92.5k|    }
 1635|  93.4k|}
ofp-table.c:table_action_features_equal:
 1511|   197k|{
 1512|   197k|    return (a->ofpacts == b->ofpacts
  ------------------
  |  Branch (1512:13): [True: 169k, False: 27.2k]
  ------------------
 1513|   169k|            && bitmap_equal(a->set_fields.bm, b->set_fields.bm, MFF_N_IDS));
  ------------------
  |  Branch (1513:16): [True: 160k, False: 8.88k]
  ------------------
 1514|   197k|}
ofp-table.c:table_instruction_features_empty:
 1652|  47.6k|{
 1653|  47.6k|    return (bitmap_is_all_zeros(tif->next, 255)
  ------------------
  |  Branch (1653:13): [True: 47.6k, False: 0]
  ------------------
 1654|  47.6k|            && !tif->instructions
  ------------------
  |  Branch (1654:16): [True: 34.0k, False: 13.5k]
  ------------------
 1655|  34.0k|            && table_action_features_empty(&tif->write)
  ------------------
  |  Branch (1655:16): [True: 27.7k, False: 6.37k]
  ------------------
 1656|  27.7k|            && table_action_features_empty(&tif->apply));
  ------------------
  |  Branch (1656:16): [True: 25.8k, False: 1.84k]
  ------------------
 1657|  47.6k|}
ofp-table.c:table_action_features_empty:
 1518|  61.8k|{
 1519|  61.8k|    return !taf->ofpacts && bitmap_is_all_zeros(taf->set_fields.bm, MFF_N_IDS);
  ------------------
  |  Branch (1519:12): [True: 55.1k, False: 6.72k]
  |  Branch (1519:29): [True: 53.6k, False: 1.49k]
  ------------------
 1520|  61.8k|}
ofp-table.c:print_table_instruction_features:
 1527|  20.3k|{
 1528|  20.3k|    int start, end;
 1529|       |
 1530|  20.3k|    if (!bitmap_is_all_zeros(tif->next, 255)) {
  ------------------
  |  Branch (1530:9): [True: 0, False: 20.3k]
  ------------------
 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|  20.3k|    if (tif->instructions) {
  ------------------
  |  Branch (1548:9): [True: 13.0k, False: 7.28k]
  ------------------
 1549|  13.0k|        if (prev_tif && tif->instructions == prev_tif->instructions) {
  ------------------
  |  Branch (1549:13): [True: 10.5k, False: 2.48k]
  |  Branch (1549:25): [True: 2.86k, False: 7.68k]
  ------------------
 1550|  2.86k|            ds_put_cstr(s, "      (same instructions)\n");
 1551|  10.1k|        } else {
 1552|  10.1k|            ds_put_cstr(s, "      instructions: ");
 1553|  10.1k|            int i;
 1554|       |
 1555|   335k|            for (i = 0; i < 32; i++) {
  ------------------
  |  Branch (1555:25): [True: 325k, False: 10.1k]
  ------------------
 1556|   325k|                if (tif->instructions & (1u << i)) {
  ------------------
  |  Branch (1556:21): [True: 29.4k, False: 296k]
  ------------------
 1557|  29.4k|                    const char *name = ovs_instruction_name_from_type(i);
 1558|  29.4k|                    if (name) {
  ------------------
  |  Branch (1558:25): [True: 29.4k, False: 0]
  ------------------
 1559|  29.4k|                        ds_put_cstr(s, name);
 1560|  29.4k|                    } else {
 1561|      0|                        ds_put_format(s, "%d", i);
 1562|      0|                    }
 1563|  29.4k|                    ds_put_char(s, ' ');
 1564|  29.4k|                }
 1565|   325k|            }
 1566|  10.1k|            ds_chomp(s, ' ');
 1567|  10.1k|            ds_put_char(s, '\n');
 1568|  10.1k|        }
 1569|  13.0k|    }
 1570|       |
 1571|  20.3k|    if (prev_tif
  ------------------
  |  Branch (1571:9): [True: 16.1k, False: 4.21k]
  ------------------
 1572|  16.1k|        && table_action_features_equal(&tif->write, &prev_tif->write)
  ------------------
  |  Branch (1572:12): [True: 2.70k, False: 13.4k]
  ------------------
 1573|  2.70k|        && table_action_features_equal(&tif->apply, &prev_tif->apply)
  ------------------
  |  Branch (1573:12): [True: 705, False: 2.00k]
  ------------------
 1574|    705|        && !bitmap_is_all_zeros(tif->write.set_fields.bm, MFF_N_IDS)) {
  ------------------
  |  Branch (1574:12): [True: 500, False: 205]
  ------------------
 1575|    500|        ds_put_cstr(s, "      (same actions)\n");
 1576|  19.8k|    } else if (!table_action_features_equal(&tif->write, &tif->apply)) {
  ------------------
  |  Branch (1576:16): [True: 12.9k, False: 6.92k]
  ------------------
 1577|  12.9k|        ds_put_cstr(s, "      Write-Actions features:\n");
 1578|  12.9k|        print_table_action_features(s, &tif->write);
 1579|  12.9k|        ds_put_cstr(s, "      Apply-Actions features:\n");
 1580|  12.9k|        print_table_action_features(s, &tif->apply);
 1581|  12.9k|    } else if (tif->write.ofpacts
  ------------------
  |  Branch (1581:16): [True: 6.50k, False: 416]
  ------------------
 1582|  6.58k|               || !bitmap_is_all_zeros(tif->write.set_fields.bm, MFF_N_IDS)) {
  ------------------
  |  Branch (1582:19): [True: 84, False: 332]
  ------------------
 1583|  6.58k|        ds_put_cstr(s, "      Write-Actions and Apply-Actions features:\n");
 1584|  6.58k|        print_table_action_features(s, &tif->write);
 1585|  6.58k|    }
 1586|  20.3k|}
ofp-table.c:print_table_action_features:
 1494|  32.4k|{
 1495|  32.4k|    if (taf->ofpacts) {
  ------------------
  |  Branch (1495:9): [True: 25.3k, False: 7.07k]
  ------------------
 1496|  25.3k|        ds_put_cstr(s, "        actions: ");
 1497|  25.3k|        ofpact_bitmap_format(taf->ofpacts, s);
 1498|  25.3k|        ds_put_char(s, '\n');
 1499|  25.3k|    }
 1500|       |
 1501|  32.4k|    if (!bitmap_is_all_zeros(taf->set_fields.bm, MFF_N_IDS)) {
  ------------------
  |  Branch (1501:9): [True: 21.8k, False: 10.5k]
  ------------------
 1502|  21.8k|        ds_put_cstr(s, "        supported on Set-Field:");
 1503|  21.8k|        print_mf_bitmap(s, &taf->set_fields);
 1504|  21.8k|        ds_put_char(s, '\n');
 1505|  21.8k|    }
 1506|  32.4k|}
ofp-table.c:print_mf_bitmap:
 1476|  56.5k|{
 1477|  56.5k|    const char *ids[MFF_N_IDS];
 1478|  56.5k|    size_t n = 0;
 1479|       |
 1480|  56.5k|    int i;
 1481|   458k|    BITMAP_FOR_EACH_1 (i, MFF_N_IDS, mfb->bm) {
  ------------------
  |  |  281|  56.5k|    BITMAP_FOR_EACH_1_RANGE(IDX, 0, SIZE, BITMAP)
  |  |  ------------------
  |  |  |  |  278|   515k|    for ((IDX) = bitmap_scan(BITMAP, true, BEGIN, END); (IDX) < (END);   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (278:57): [True: 458k, False: 56.5k]
  |  |  |  |  ------------------
  |  |  |  |  279|   458k|         (IDX) = bitmap_scan(BITMAP, true, (IDX) + 1, END))
  |  |  ------------------
  ------------------
 1482|   458k|        ids[n++] = mf_from_id(i)->name;
 1483|   458k|    }
 1484|       |
 1485|  56.5k|    if (n > 0) {
  ------------------
  |  Branch (1485:9): [True: 56.5k, False: 0]
  ------------------
 1486|  56.5k|        ds_put_char(s, ' ');
 1487|  56.5k|        print_names(s, ids, n, 0);
 1488|  56.5k|    }
 1489|  56.5k|}
ofp-table.c:print_names:
 1439|   175k|{
 1440|   175k|    int group = 0;
 1441|   753k|    while (n > 0) {
  ------------------
  |  Branch (1441:12): [True: 577k, False: 175k]
  ------------------
 1442|   577k|        if (group++) {
  ------------------
  |  Branch (1442:13): [True: 402k, False: 175k]
  ------------------
 1443|   402k|            ds_put_char(s, prefix_len ? ',' : ' ');
  ------------------
  |  Branch (1443:28): [True: 149k, False: 252k]
  ------------------
 1444|   402k|        }
 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|   577k|        size_t extra_prefix_len;
 1453|   577k|        size_t prefix_run = count_common_prefix_run(ids, n, prefix_len,
 1454|   577k|                                                    &extra_prefix_len);
 1455|   577k|        size_t suffix_run = count_sequential_suffix_run(ids, n);
 1456|   577k|        size_t run = MAX(prefix_run, suffix_run);
  ------------------
  |  |   95|   577k|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (95:20): [True: 119k, False: 458k]
  |  |  ------------------
  ------------------
 1457|   577k|        if (suffix_run >= prefix_run) {
  ------------------
  |  Branch (1457:13): [True: 458k, False: 119k]
  ------------------
 1458|   458k|            ds_put_format(s, "%s", ids[0] + prefix_len);
 1459|   458k|            if (run > 1) {
  ------------------
  |  Branch (1459:17): [True: 0, False: 458k]
  ------------------
 1460|      0|                ds_put_format(s, "...%s", ids[run - 1] + prefix_len);
 1461|      0|            }
 1462|   458k|        } else {
 1463|   119k|            ds_put_format(s, "%.*s{", (int) extra_prefix_len,
 1464|   119k|                          ids[0] + prefix_len);
 1465|   119k|            print_names(s, ids, run, prefix_len + extra_prefix_len);
 1466|   119k|            ds_put_char(s, '}');
 1467|   119k|        }
 1468|       |
 1469|   577k|        ids += run;
 1470|   577k|        n -= run;
 1471|   577k|    }
 1472|   175k|}
ofp-table.c:count_common_prefix_run:
 1400|   577k|{
 1401|   577k|    *extra_prefix_lenp = 0;
 1402|   577k|    if (n < 2) {
  ------------------
  |  Branch (1402:9): [True: 155k, False: 422k]
  ------------------
 1403|   155k|        return n;
 1404|   155k|    }
 1405|       |
 1406|   422k|    size_t extra_prefix_len = count_common_prefix(ids[0] + prefix_len,
 1407|   422k|                                                  ids[1] + prefix_len);
 1408|   422k|    if (!extra_prefix_len) {
  ------------------
  |  Branch (1408:9): [True: 302k, False: 119k]
  ------------------
 1409|   302k|        return 1;
 1410|   302k|    }
 1411|       |
 1412|   119k|    size_t i = 2;
 1413|   149k|    while (i < n) {
  ------------------
  |  Branch (1413:12): [True: 129k, False: 19.9k]
  ------------------
 1414|   129k|        size_t next = count_common_prefix(ids[0] + prefix_len,
 1415|   129k|                                          ids[i] + prefix_len);
 1416|   129k|        if (!next) {
  ------------------
  |  Branch (1416:13): [True: 99.3k, False: 30.5k]
  ------------------
 1417|  99.3k|            break;
 1418|  99.3k|        } else if (next < extra_prefix_len) {
  ------------------
  |  Branch (1418:20): [True: 0, False: 30.5k]
  ------------------
 1419|      0|            extra_prefix_len = next;
 1420|      0|        }
 1421|  30.5k|        i++;
 1422|  30.5k|    }
 1423|   119k|    *extra_prefix_lenp = extra_prefix_len;
 1424|   119k|    return i;
 1425|   422k|}
ofp-table.c:count_common_prefix:
 1378|   551k|{
 1379|   551k|    size_t retval = 0;
 1380|  1.24M|    for (size_t i = 0; ; i++) {
 1381|  1.24M|        if (a[i] != b[i] || !a[i]) {
  ------------------
  |  Branch (1381:13): [True: 551k, False: 690k]
  |  Branch (1381:29): [True: 0, False: 690k]
  ------------------
 1382|   551k|            return retval;
 1383|   690k|        } else if (a[i] == '_') {
  ------------------
  |  Branch (1383:20): [True: 149k, False: 540k]
  ------------------
 1384|   149k|            retval = i + 1;
 1385|   149k|        }
 1386|  1.24M|    }
 1387|   551k|}
ofp-table.c:count_sequential_suffix_run:
 1365|   577k|{
 1366|   577k|    for (size_t i = 1; ; i++) {
 1367|   577k|        if (i >= n || !are_names_sequential(ids[i - 1], ids[i])) {
  ------------------
  |  Branch (1367:13): [True: 155k, False: 422k]
  |  Branch (1367:23): [True: 422k, False: 0]
  ------------------
 1368|       |            /* "x0...x1" is worse than "x0 x1", so suppress it. */
 1369|   577k|            return i == 2 ? 1 : i;
  ------------------
  |  Branch (1369:20): [True: 0, False: 577k]
  ------------------
 1370|   577k|        }
 1371|   577k|    }
 1372|   577k|}
ofp-table.c:are_names_sequential:
 1345|   422k|{
 1346|       |    /* Skip common prefix. */
 1347|  1.59M|    for (; *a == *b; a++, b++) {
  ------------------
  |  Branch (1347:12): [True: 1.17M, False: 422k]
  ------------------
 1348|  1.17M|        if (!*a) {
  ------------------
  |  Branch (1348:13): [True: 0, False: 1.17M]
  ------------------
 1349|       |            /* 'a' and 'b' are the same.  Weird, but not sequential. */
 1350|      0|            return false;
 1351|      0|        }
 1352|  1.17M|    }
 1353|       |
 1354|   422k|    return (is_all_digits(a)
  ------------------
  |  Branch (1354:13): [True: 0, False: 422k]
  ------------------
 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|   422k|}
ofp-table.c:is_all_digits:
 1337|   422k|{
 1338|   422k|    return s[0] && s[strspn(s, "0123456789")] == '\0';
  ------------------
  |  Branch (1338:12): [True: 422k, False: 0]
  |  Branch (1338:20): [True: 0, False: 422k]
  ------------------
 1339|   422k|}
ofp-table.c:print_matches:
 1591|  74.5k|{
 1592|  74.5k|    const struct mf_bitmap m = mask ? f->mask : mf_bitmap_not(f->mask);
  ------------------
  |  Branch (1592:32): [True: 24.8k, False: 49.6k]
  ------------------
 1593|  74.5k|    const struct mf_bitmap w = wc ? f->wildcard : mf_bitmap_not(f->wildcard);
  ------------------
  |  Branch (1593:32): [True: 49.6k, False: 24.8k]
  ------------------
 1594|  74.5k|    const struct mf_bitmap bm = mf_bitmap_and(f->match, mf_bitmap_and(m, w));
 1595|       |
 1596|  74.5k|    if (!bitmap_is_all_zeros(bm.bm, MFF_N_IDS)) {
  ------------------
  |  Branch (1596:9): [True: 34.7k, False: 39.7k]
  ------------------
 1597|  34.7k|        ds_put_format(s, "      %s:", title);
 1598|  34.7k|        print_mf_bitmap(s, &bm);
 1599|  34.7k|        ds_put_char(s, '\n');
 1600|  34.7k|    }
 1601|  74.5k|}
ofp-table.c:ofputil_decode_ofp10_table_stats:
 2128|  9.52k|{
 2129|  9.52k|    struct ofp10_table_stats *ots;
 2130|       |
 2131|  9.52k|    ots = ofpbuf_try_pull(msg, sizeof *ots);
 2132|  9.52k|    if (!ots) {
  ------------------
  |  Branch (2132:9): [True: 0, False: 9.52k]
  ------------------
 2133|      0|        return OFPERR_OFPBRC_BAD_LEN;
 2134|      0|    }
 2135|       |
 2136|  9.52k|    features->table_id = ots->table_id;
 2137|  9.52k|    ovs_strlcpy_arrays(features->name, ots->name);
  ------------------
  |  |  209|  9.52k|    ovs_strlcpy(DST, SRC, MIN(ARRAY_SIZE(DST), ARRAY_SIZE(SRC)))
  |  |  ------------------
  |  |  |  |   91|  9.52k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:20): [Folded, False: 9.52k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2138|  9.52k|    features->max_entries = ntohl(ots->max_entries);
 2139|  9.52k|    features->match = features->wildcard = mf_bitmap_from_of10(ots->wildcards);
 2140|       |
 2141|  9.52k|    stats->table_id = ots->table_id;
 2142|  9.52k|    stats->active_count = ntohl(ots->active_count);
 2143|  9.52k|    stats->lookup_count = ntohll(get_32aligned_be64(&ots->lookup_count));
 2144|  9.52k|    stats->matched_count = ntohll(get_32aligned_be64(&ots->matched_count));
 2145|       |
 2146|  9.52k|    return 0;
 2147|  9.52k|}
ofp-table.c:mf_bitmap_from_of10:
 1927|  9.52k|{
 1928|  9.52k|    struct mf_bitmap fields = MF_BITMAP_INITIALIZER;
  ------------------
  |  | 2053|  9.52k|#define MF_BITMAP_INITIALIZER { { [0] = 0 } }
  ------------------
 1929|  9.52k|    const struct ofp10_wc_map *p;
 1930|  9.52k|    uint32_t wc10 = ntohl(wc10_);
 1931|       |
 1932|   123k|    for (p = ofp10_wc_map; p < &ofp10_wc_map[ARRAY_SIZE(ofp10_wc_map)]; p++) {
  ------------------
  |  |  297|   123k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   46|   123k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|   123k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   47|   123k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   123k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|   123k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1932:28): [True: 114k, False: 9.52k]
  ------------------
 1933|   114k|        if (wc10 & p->wc10) {
  ------------------
  |  Branch (1933:13): [True: 46.7k, False: 67.5k]
  ------------------
 1934|  46.7k|            bitmap_set1(fields.bm, p->mf);
 1935|  46.7k|        }
 1936|   114k|    }
 1937|  9.52k|    return fields;
 1938|  9.52k|}
ofp-table.c:ofputil_decode_ofp11_table_stats:
 2153|  7.60k|{
 2154|  7.60k|    struct ofp11_table_stats *ots;
 2155|       |
 2156|  7.60k|    ots = ofpbuf_try_pull(msg, sizeof *ots);
 2157|  7.60k|    if (!ots) {
  ------------------
  |  Branch (2157:9): [True: 0, False: 7.60k]
  ------------------
 2158|      0|        return OFPERR_OFPBRC_BAD_LEN;
 2159|      0|    }
 2160|       |
 2161|  7.60k|    features->table_id = ots->table_id;
 2162|  7.60k|    ovs_strlcpy_arrays(features->name, ots->name);
  ------------------
  |  |  209|  7.60k|    ovs_strlcpy(DST, SRC, MIN(ARRAY_SIZE(DST), ARRAY_SIZE(SRC)))
  |  |  ------------------
  |  |  |  |   91|  7.60k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:20): [Folded, False: 7.60k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2163|  7.60k|    features->max_entries = ntohl(ots->max_entries);
 2164|  7.60k|    features->nonmiss.instructions = ovsinst_bitmap_from_openflow(
 2165|  7.60k|        ots->instructions, OFP11_VERSION);
 2166|  7.60k|    features->nonmiss.write.ofpacts = ofpact_bitmap_from_openflow(
 2167|  7.60k|        ots->write_actions, OFP11_VERSION);
 2168|  7.60k|    features->nonmiss.apply.ofpacts = ofpact_bitmap_from_openflow(
 2169|  7.60k|        ots->write_actions, OFP11_VERSION);
 2170|  7.60k|    features->miss = features->nonmiss;
 2171|  7.60k|    features->miss_config = ofputil_decode_table_miss(ots->config,
 2172|  7.60k|                                                      OFP11_VERSION);
 2173|  7.60k|    features->match = mf_bitmap_from_of11(ots->match);
 2174|  7.60k|    features->wildcard = mf_bitmap_from_of11(ots->wildcards);
 2175|  7.60k|    bitmap_or(features->match.bm, features->wildcard.bm, MFF_N_IDS);
 2176|       |
 2177|  7.60k|    stats->table_id = ots->table_id;
 2178|  7.60k|    stats->active_count = ntohl(ots->active_count);
 2179|  7.60k|    stats->lookup_count = ntohll(ots->lookup_count);
 2180|  7.60k|    stats->matched_count = ntohll(ots->matched_count);
 2181|       |
 2182|  7.60k|    return 0;
 2183|  7.60k|}
ofp-table.c:mf_bitmap_from_of11:
 1998|  15.2k|{
 1999|  15.2k|    struct mf_bitmap fields = MF_BITMAP_INITIALIZER;
  ------------------
  |  | 2053|  15.2k|#define MF_BITMAP_INITIALIZER { { [0] = 0 } }
  ------------------
 2000|  15.2k|    const struct ofp11_wc_map *p;
 2001|  15.2k|    uint32_t wc11 = ntohl(wc11_);
 2002|       |
 2003|   243k|    for (p = ofp11_wc_map; p < &ofp11_wc_map[ARRAY_SIZE(ofp11_wc_map)]; p++) {
  ------------------
  |  |  297|   243k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   46|   243k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|   243k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   47|   243k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   243k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|   243k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2003:28): [True: 228k, False: 15.2k]
  ------------------
 2004|   228k|        if (wc11 & p->wc11) {
  ------------------
  |  Branch (2004:13): [True: 90.7k, False: 137k]
  ------------------
 2005|  90.7k|            bitmap_set1(fields.bm, p->mf);
 2006|  90.7k|        }
 2007|   228k|    }
 2008|  15.2k|    return fields;
 2009|  15.2k|}
ofp-table.c:ofputil_decode_ofp12_table_stats:
 2189|  15.6k|{
 2190|  15.6k|    struct ofp12_table_stats *ots;
 2191|       |
 2192|  15.6k|    ots = ofpbuf_try_pull(msg, sizeof *ots);
 2193|  15.6k|    if (!ots) {
  ------------------
  |  Branch (2193:9): [True: 0, False: 15.6k]
  ------------------
 2194|      0|        return OFPERR_OFPBRC_BAD_LEN;
 2195|      0|    }
 2196|       |
 2197|  15.6k|    features->table_id = ots->table_id;
 2198|  15.6k|    ovs_strlcpy_arrays(features->name, ots->name);
  ------------------
  |  |  209|  15.6k|    ovs_strlcpy(DST, SRC, MIN(ARRAY_SIZE(DST), ARRAY_SIZE(SRC)))
  |  |  ------------------
  |  |  |  |   91|  15.6k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:20): [Folded, False: 15.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2199|  15.6k|    features->metadata_match = ots->metadata_match;
 2200|  15.6k|    features->metadata_write = ots->metadata_write;
 2201|  15.6k|    features->miss_config = ofputil_decode_table_miss(ots->config,
 2202|  15.6k|                                                      OFP12_VERSION);
 2203|  15.6k|    features->max_entries = ntohl(ots->max_entries);
 2204|       |
 2205|  15.6k|    features->nonmiss.instructions = ovsinst_bitmap_from_openflow(
 2206|  15.6k|        ots->instructions, OFP12_VERSION);
 2207|  15.6k|    features->nonmiss.write.ofpacts = ofpact_bitmap_from_openflow(
 2208|  15.6k|        ots->write_actions, OFP12_VERSION);
 2209|  15.6k|    features->nonmiss.apply.ofpacts = ofpact_bitmap_from_openflow(
 2210|  15.6k|        ots->apply_actions, OFP12_VERSION);
 2211|  15.6k|    features->nonmiss.write.set_fields = oxm_bitmap_to_mf_bitmap(
 2212|  15.6k|        ots->write_setfields, OFP12_VERSION);
 2213|  15.6k|    features->nonmiss.apply.set_fields = oxm_bitmap_to_mf_bitmap(
 2214|  15.6k|        ots->apply_setfields, OFP12_VERSION);
 2215|  15.6k|    features->miss = features->nonmiss;
 2216|       |
 2217|  15.6k|    features->match = oxm_bitmap_to_mf_bitmap(ots->match, OFP12_VERSION);
 2218|  15.6k|    features->wildcard = oxm_bitmap_to_mf_bitmap(ots->wildcards,
 2219|  15.6k|                                                 OFP12_VERSION);
 2220|  15.6k|    bitmap_or(features->match.bm, features->wildcard.bm, MFF_N_IDS);
 2221|       |
 2222|  15.6k|    stats->table_id = ots->table_id;
 2223|  15.6k|    stats->active_count = ntohl(ots->active_count);
 2224|  15.6k|    stats->lookup_count = ntohll(ots->lookup_count);
 2225|  15.6k|    stats->matched_count = ntohll(ots->matched_count);
 2226|       |
 2227|  15.6k|    return 0;
 2228|  15.6k|}
ofp-table.c:ofputil_decode_ofp13_table_stats:
 2234|  7.30k|{
 2235|  7.30k|    struct ofp13_table_stats *ots;
 2236|       |
 2237|  7.30k|    ots = ofpbuf_try_pull(msg, sizeof *ots);
 2238|  7.30k|    if (!ots) {
  ------------------
  |  Branch (2238:9): [True: 0, False: 7.30k]
  ------------------
 2239|      0|        return OFPERR_OFPBRC_BAD_LEN;
 2240|      0|    }
 2241|       |
 2242|  7.30k|    features->table_id = ots->table_id;
 2243|       |
 2244|  7.30k|    stats->table_id = ots->table_id;
 2245|  7.30k|    stats->active_count = ntohl(ots->active_count);
 2246|  7.30k|    stats->lookup_count = ntohll(ots->lookup_count);
 2247|  7.30k|    stats->matched_count = ntohll(ots->matched_count);
 2248|       |
 2249|  7.30k|    return 0;
 2250|  7.30k|}

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

ofpbuf_use_const:
  114|   538k|{
  115|   538k|    ofpbuf_use__(b, CONST_CAST(void *, data), size, size, OFPBUF_STACK);
  ------------------
  |  |   85|   538k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   538k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   538k|     (TYPE) (POINTER))
  ------------------
  116|   538k|}
ofpbuf_use_data:
  132|   137k|{
  133|   137k|    ofpbuf_use__(b, CONST_CAST(void *, data), size, size, OFPBUF_STUB);
  ------------------
  |  |   85|   137k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   137k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   137k|     (TYPE) (POINTER))
  ------------------
  134|   137k|}
ofpbuf_init:
  140|  1.67M|{
  141|  1.67M|    ofpbuf_use(b, size ? xmalloc(size) : NULL, size);
  ------------------
  |  Branch (141:19): [True: 713k, False: 958k]
  ------------------
  142|  1.67M|}
ofpbuf_uninit:
  147|  1.54M|{
  148|  1.54M|    if (b) {
  ------------------
  |  Branch (148:9): [True: 1.54M, False: 0]
  ------------------
  149|  1.54M|        if (b->source == OFPBUF_MALLOC) {
  ------------------
  |  Branch (149:13): [True: 1.33M, False: 206k]
  ------------------
  150|  1.33M|            free(b->base);
  151|  1.33M|        }
  152|  1.54M|    }
  153|  1.54M|}
ofpbuf_prealloc_tailroom:
  306|   785k|{
  307|   785k|    if (size > ofpbuf_tailroom(b)) {
  ------------------
  |  Branch (307:9): [True: 135k, False: 650k]
  ------------------
  308|   135k|        ofpbuf_resize__(b, ofpbuf_headroom(b), MAX(size, 64));
  ------------------
  |  |   95|   135k|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (95:20): [True: 20.9k, False: 114k]
  |  |  ------------------
  ------------------
  309|   135k|    }
  310|   785k|}
ofpbuf_prealloc_headroom:
  317|   151k|{
  318|   151k|    if (size > ofpbuf_headroom(b)) {
  ------------------
  |  Branch (318:9): [True: 125k, False: 26.4k]
  ------------------
  319|   125k|        ofpbuf_resize__(b, MAX(size, 64), ofpbuf_tailroom(b));
  ------------------
  |  |   95|   125k|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (95:20): [True: 1.10k, False: 124k]
  |  |  ------------------
  ------------------
  320|   125k|    }
  321|   151k|}
ofpbuf_trim:
  336|   698k|{
  337|   698k|    if (b->source == OFPBUF_MALLOC
  ------------------
  |  Branch (337:9): [True: 698k, False: 0]
  ------------------
  338|   698k|        && (ofpbuf_headroom(b) || ofpbuf_tailroom(b))) {
  ------------------
  |  Branch (338:13): [True: 121k, False: 577k]
  |  Branch (338:35): [True: 1.15k, False: 575k]
  ------------------
  339|   122k|        ofpbuf_resize__(b, 0, 0);
  340|   122k|    }
  341|   698k|}
ofpbuf_padto:
  368|   111k|{
  369|   111k|    if (b->size < length) {
  ------------------
  |  Branch (369:9): [True: 24.3k, False: 86.9k]
  ------------------
  370|  24.3k|        ofpbuf_put_zeros(b, length - b->size);
  371|  24.3k|    }
  372|   111k|}
ofpbuf_put_uninit:
  401|   785k|{
  402|   785k|    void *p;
  403|   785k|    ofpbuf_prealloc_tailroom(b, size);
  404|   785k|    p = ofpbuf_tail(b);
  405|   785k|    b->size += size;
  406|   785k|    return p;
  407|   785k|}
ofpbuf_put_zeros:
  414|   159k|{
  415|   159k|    void *dst = ofpbuf_put_uninit(b, size);
  416|   159k|    nullable_memset(dst, 0, size);
  417|   159k|    return dst;
  418|   159k|}
ofpbuf_put:
  425|   229k|{
  426|   229k|    if (!size) {
  ------------------
  |  Branch (426:9): [True: 33.8k, False: 195k]
  ------------------
  427|  33.8k|        return ofpbuf_tail(b);
  428|  33.8k|    }
  429|       |
  430|   195k|    void *dst = ofpbuf_put_uninit(b, size);
  431|   195k|    memcpy(dst, p, size);
  432|   195k|    return dst;
  433|   229k|}
ofpbuf_push_uninit:
  481|   740k|{
  482|   740k|    if (!size) {
  ------------------
  |  Branch (482:9): [True: 589k, False: 151k]
  ------------------
  483|   589k|        return b->data;
  484|   589k|    }
  485|       |
  486|   151k|    ofpbuf_prealloc_headroom(b, size);
  487|   151k|    b->data = (char*)b->data - size;
  488|   151k|    b->size += size;
  489|   151k|    return b->data;
  490|   740k|}
ofpbuf_push:
  508|   705k|{
  509|   705k|    void *dst = ofpbuf_push_uninit(b, size);
  510|   705k|    memcpy(dst, p, size);
  511|   705k|    return dst;
  512|   705k|}
ofpbuf_steal_data:
  537|   334k|{
  538|   334k|    void *p;
  539|       |
  540|   334k|    if (b->source == OFPBUF_MALLOC && b->data == b->base) {
  ------------------
  |  Branch (540:9): [True: 334k, False: 0]
  |  Branch (540:39): [True: 331k, False: 2.71k]
  ------------------
  541|   331k|        p = b->data;
  542|   331k|    } else {
  543|  2.71k|        p = xmemdup(b->data, b->size);
  544|  2.71k|        if (b->source == OFPBUF_MALLOC) {
  ------------------
  |  Branch (544:13): [True: 2.71k, False: 0]
  ------------------
  545|  2.71k|            free(b->base);
  546|  2.71k|        }
  547|  2.71k|    }
  548|   334k|    b->base = NULL;
  549|   334k|    b->data = NULL;
  550|   334k|    b->header = NULL;
  551|       |    b->msg = NULL;
  552|   334k|    return p;
  553|   334k|}
ofpbuf.c:ofpbuf_use__:
   37|  2.34M|{
   38|  2.34M|    b->base = base;
   39|  2.34M|    b->data = base;
   40|  2.34M|    b->size = size;
   41|       |
   42|  2.34M|    ofpbuf_init__(b, allocated, source);
   43|  2.34M|}
ofpbuf.c:ofpbuf_init__:
   26|  2.34M|{
   27|  2.34M|    b->allocated = allocated;
   28|  2.34M|    b->source = source;
   29|  2.34M|    b->header = NULL;
   30|       |    b->msg = NULL;
   31|  2.34M|    ovs_list_poison(&b->list_node);
   32|  2.34M|}
ofpbuf.c:ofpbuf_use:
   51|  1.67M|{
   52|  1.67M|    ofpbuf_use__(b, base, allocated, 0, OFPBUF_MALLOC);
   53|  1.67M|}
ofpbuf.c:ofpbuf_resize__:
  252|   383k|{
  253|   383k|    void *new_base, *new_data;
  254|   383k|    size_t new_allocated;
  255|       |
  256|   383k|    new_allocated = new_headroom + b->size + new_tailroom;
  257|       |
  258|   383k|    switch (b->source) {
  259|   383k|    case OFPBUF_MALLOC:
  ------------------
  |  Branch (259:5): [True: 383k, False: 0]
  ------------------
  260|   383k|        if (new_headroom == ofpbuf_headroom(b)) {
  ------------------
  |  Branch (260:13): [True: 136k, False: 246k]
  ------------------
  261|   136k|            new_base = xrealloc(b->base, new_allocated);
  262|   246k|        } else {
  263|   246k|            new_base = xmalloc(new_allocated);
  264|   246k|            ofpbuf_copy__(b, new_base, new_headroom, new_tailroom);
  265|   246k|            free(b->base);
  266|   246k|        }
  267|   383k|        break;
  268|       |
  269|      0|    case OFPBUF_STACK:
  ------------------
  |  Branch (269:5): [True: 0, False: 383k]
  ------------------
  270|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  271|       |
  272|      0|    case OFPBUF_STUB:
  ------------------
  |  Branch (272:5): [True: 0, False: 383k]
  ------------------
  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: 383k]
  ------------------
  279|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  280|   383k|    }
  281|       |
  282|   383k|    b->allocated = new_allocated;
  283|   383k|    b->base = new_base;
  284|       |
  285|   383k|    new_data = (char *) new_base + new_headroom;
  286|   383k|    if (b->data != new_data) {
  ------------------
  |  Branch (286:9): [True: 379k, False: 3.85k]
  ------------------
  287|   379k|        if (b->header) {
  ------------------
  |  Branch (287:13): [True: 100k, False: 279k]
  ------------------
  288|   100k|            ptrdiff_t header_offset = (char *) b->header - (char *) b->data;
  289|       |
  290|   100k|            b->header = (char *) new_data + header_offset;
  291|   100k|        }
  292|   379k|        if (b->msg) {
  ------------------
  |  Branch (292:13): [True: 0, False: 379k]
  ------------------
  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|   379k|        b->data = new_data;
  298|   379k|    }
  299|   383k|}
ofpbuf.c:ofpbuf_copy__:
  236|   246k|{
  237|   246k|    const uint8_t *old_base = b->base;
  238|   246k|    size_t old_headroom = ofpbuf_headroom(b);
  239|   246k|    size_t old_tailroom = ofpbuf_tailroom(b);
  240|   246k|    size_t copy_headroom = MIN(old_headroom, new_headroom);
  ------------------
  |  |   91|   246k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (91:20): [True: 125k, False: 121k]
  |  |  ------------------
  ------------------
  241|   246k|    size_t copy_tailroom = MIN(old_tailroom, new_tailroom);
  ------------------
  |  |   91|   246k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (91:20): [True: 0, False: 246k]
  |  |  ------------------
  ------------------
  242|       |
  243|   246k|    memcpy(&new_base[new_headroom - copy_headroom],
  244|   246k|           &old_base[old_headroom - copy_headroom],
  245|   246k|           copy_headroom + b->size + copy_tailroom);
  246|   246k|}

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|  15.4M|    {                                                                   \
  247|  15.4M|        return NAME##_get_unsafe();                                     \
  248|  15.4M|    }
util.c:counter_util_xalloc_get_unsafe:
  239|  15.4M|    {                                                                   \
  240|  15.4M|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|  15.4M|        return &var;                                                    \
  242|  15.4M|    }                                                                   \
flow.c:counter_flow_extract_get:
  246|   100k|    {                                                                   \
  247|   100k|        return NAME##_get_unsafe();                                     \
  248|   100k|    }
flow.c:counter_flow_extract_get_unsafe:
  239|   100k|    {                                                                   \
  240|   100k|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|   100k|        return &var;                                                    \
  242|   100k|    }                                                                   \
flow.c:counter_miniflow_extract_ipv4_pkt_len_error_get:
  246|    467|    {                                                                   \
  247|    467|        return NAME##_get_unsafe();                                     \
  248|    467|    }
flow.c:counter_miniflow_extract_ipv4_pkt_len_error_get_unsafe:
  239|    467|    {                                                                   \
  240|    467|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|    467|        return &var;                                                    \
  242|    467|    }                                                                   \
flow.c:counter_miniflow_extract_ipv4_pkt_too_short_get:
  246|     71|    {                                                                   \
  247|     71|        return NAME##_get_unsafe();                                     \
  248|     71|    }
flow.c:counter_miniflow_extract_ipv4_pkt_too_short_get_unsafe:
  239|     71|    {                                                                   \
  240|     71|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|     71|        return &var;                                                    \
  242|     71|    }                                                                   \
flow.c:counter_miniflow_extract_ipv6_pkt_len_error_get:
  246|    726|    {                                                                   \
  247|    726|        return NAME##_get_unsafe();                                     \
  248|    726|    }
flow.c:counter_miniflow_extract_ipv6_pkt_len_error_get_unsafe:
  239|    726|    {                                                                   \
  240|    726|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|    726|        return &var;                                                    \
  242|    726|    }                                                                   \
flow.c:counter_miniflow_extract_ipv6_pkt_too_short_get:
  246|    690|    {                                                                   \
  247|    690|        return NAME##_get_unsafe();                                     \
  248|    690|    }
flow.c:counter_miniflow_extract_ipv6_pkt_too_short_get_unsafe:
  239|    690|    {                                                                   \
  240|    690|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|    690|        return &var;                                                    \
  242|    690|    }                                                                   \
flow.c:counter_miniflow_malloc_get:
  246|  58.0k|    {                                                                   \
  247|  58.0k|        return NAME##_get_unsafe();                                     \
  248|  58.0k|    }
flow.c:counter_miniflow_malloc_get_unsafe:
  239|  58.0k|    {                                                                   \
  240|  58.0k|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|  58.0k|        return &var;                                                    \
  242|  58.0k|    }                                                                   \
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|  13.7k|{
  259|  13.7k|    memset(stats, 0xff, sizeof *stats);
  260|       |
  261|  13.7k|    struct ofp_oxs_stat *oxs = b->data;
  262|  13.7k|    if (b->size < sizeof *oxs) {
  ------------------
  |  Branch (262:9): [True: 2.83k, False: 10.9k]
  ------------------
  263|  2.83k|        return OFPERR_OFPBMC_BAD_LEN;
  264|  2.83k|    }
  265|       |
  266|  10.9k|    uint16_t stat_len = ntohs(oxs->length);
  267|  10.9k|    if (stat_len < sizeof *oxs) {
  ------------------
  |  Branch (267:9): [True: 585, False: 10.3k]
  ------------------
  268|    585|        return OFPERR_OFPBMC_BAD_LEN;
  269|    585|    }
  270|       |
  271|  10.3k|    uint8_t *p = ofpbuf_try_pull(b, ROUND_UP(stat_len, 8));
  ------------------
  |  |  303|  10.3k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|  10.3k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  272|  10.3k|    if (!p) {
  ------------------
  |  Branch (272:9): [True: 1.09k, False: 9.23k]
  ------------------
  273|  1.09k|        VLOG_DBG_RL(&rl, "oxs length %u, rounded up to a "
  ------------------
  |  |  226|  1.09k|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.09k|    do {                                                                \
  |  |  |  |  288|  1.09k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.09k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.09k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.09k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.09k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  274|  1.09k|                    "multiple of 8, is longer than space in message (max "
  275|  1.09k|                    "length %" PRIu32 ")", stat_len, b->size);
  276|  1.09k|        return OFPERR_OFPBMC_BAD_LEN;
  277|  1.09k|    }
  278|  9.23k|    *statlen = ROUND_UP(stat_len, 8);
  ------------------
  |  |  303|  9.23k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|  9.23k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  279|  9.23k|    return oxs_pull_raw(p + sizeof *oxs, stat_len - sizeof *oxs, stats,
  280|  9.23k|                        oxs_field_set);
  281|  10.3k|}
ox-stat.c:oxs_pull_raw:
  236|  9.23k|{
  237|  9.23k|    struct ofpbuf b = ofpbuf_const_initializer(p, stat_len);
  238|  12.3k|    while (b.size) {
  ------------------
  |  Branch (238:12): [True: 5.17k, False: 7.20k]
  ------------------
  239|  5.17k|        const uint8_t *pos = b.data;
  240|  5.17k|        enum ofperr error = oxs_pull_entry__(&b, stats, oxs_field_set);
  241|  5.17k|        if (error && error != OFPERR_OFPBMC_BAD_FIELD) {
  ------------------
  |  Branch (241:13): [True: 2.03k, False: 3.14k]
  |  Branch (241:22): [True: 2.03k, False: 0]
  ------------------
  242|  2.03k|            VLOG_DBG_RL(&rl, "error parsing OXS at offset %"PRIdPTR" "
  ------------------
  |  |  226|  2.03k|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  2.03k|    do {                                                                \
  |  |  |  |  288|  2.03k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  2.03k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 2.03k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  2.03k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 2.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  243|  2.03k|                        "within match (%s)",
  244|  2.03k|                        pos - p, ofperr_to_string(error));
  245|  2.03k|            return error;
  246|  2.03k|        }
  247|  5.17k|    }
  248|  7.20k|    return 0;
  249|  9.23k|}
ox-stat.c:oxs_pull_entry__:
  188|  5.17k|{
  189|  5.17k|    uint64_t header;
  190|  5.17k|    enum ofperr error = oxs_pull_header__(b, &header);
  191|  5.17k|    if (error) {
  ------------------
  |  Branch (191:9): [True: 703, False: 4.47k]
  ------------------
  192|    703|        return error;
  193|    703|    }
  194|       |
  195|  4.47k|    unsigned int payload_len = oxs_payload_len(header);
  196|  4.47k|    const void *payload = ofpbuf_try_pull(b, payload_len);
  197|  4.47k|    if (!payload) {
  ------------------
  |  Branch (197:9): [True: 1.33k, False: 3.14k]
  ------------------
  198|  1.33k|        return OFPERR_OFPBMC_BAD_LEN;
  199|  1.33k|    }
  200|       |
  201|  3.14k|    switch (header) {
  202|    126|    case OXS_OF_DURATION: {
  ------------------
  |  |  135|    126|#define OXS_OF_DURATION     OXS_HEADER (0, 0x8002, OFPXST_OFB_DURATION, 8)
  |  |  ------------------
  |  |  |  |  124|    126|    (((uint64_t) (CLASS) << 48) | \
  |  |  |  |  125|    126|     ((uint64_t) (FIELD) << 41) | \
  |  |  |  |  126|    126|     ((uint64_t) (LENGTH) << 32) | \
  |  |  |  |  127|    126|     (EXPERIMENTER))
  |  |  ------------------
  ------------------
  |  Branch (202:5): [True: 126, False: 3.01k]
  ------------------
  203|    126|        uint64_t duration = ntohll(get_unaligned_be64(payload));
  204|    126|        stats->duration_sec = duration >> 32;
  205|    126|        stats->duration_nsec = duration;
  206|    126|    }
  207|    126|        break;
  208|    291|    case OXS_OF_IDLE_TIME:
  ------------------
  |  |  136|    291|#define OXS_OF_IDLE_TIME    OXS_HEADER (0, 0x8002, OFPXST_OFB_IDLE_TIME, 8)
  |  |  ------------------
  |  |  |  |  124|    291|    (((uint64_t) (CLASS) << 48) | \
  |  |  |  |  125|    291|     ((uint64_t) (FIELD) << 41) | \
  |  |  |  |  126|    291|     ((uint64_t) (LENGTH) << 32) | \
  |  |  |  |  127|    291|     (EXPERIMENTER))
  |  |  ------------------
  ------------------
  |  Branch (208:5): [True: 291, False: 2.85k]
  ------------------
  209|    291|        stats->idle_age = ntohll(get_unaligned_be64(payload)) >> 32;
  210|    291|        break;
  211|     11|    case OXS_OF_PACKET_COUNT:
  ------------------
  |  |  138|     11|#define OXS_OF_PACKET_COUNT OXS_HEADER (0, 0x8002, OFPXST_OFB_PACKET_COUNT, 8)
  |  |  ------------------
  |  |  |  |  124|     11|    (((uint64_t) (CLASS) << 48) | \
  |  |  |  |  125|     11|     ((uint64_t) (FIELD) << 41) | \
  |  |  |  |  126|     11|     ((uint64_t) (LENGTH) << 32) | \
  |  |  |  |  127|     11|     (EXPERIMENTER))
  |  |  ------------------
  ------------------
  |  Branch (211:5): [True: 11, False: 3.13k]
  ------------------
  212|     11|        stats->packet_count = ntohll(get_unaligned_be64(payload));
  213|     11|        break;
  214|    194|    case OXS_OF_BYTE_COUNT:
  ------------------
  |  |  139|    194|#define OXS_OF_BYTE_COUNT   OXS_HEADER (0, 0x8002, OFPXST_OFB_BYTE_COUNT, 8)
  |  |  ------------------
  |  |  |  |  124|    194|    (((uint64_t) (CLASS) << 48) | \
  |  |  |  |  125|    194|     ((uint64_t) (FIELD) << 41) | \
  |  |  |  |  126|    194|     ((uint64_t) (LENGTH) << 32) | \
  |  |  |  |  127|    194|     (EXPERIMENTER))
  |  |  ------------------
  ------------------
  |  Branch (214:5): [True: 194, False: 2.95k]
  ------------------
  215|    194|        stats->byte_count = ntohll(get_unaligned_be64(payload));
  216|    194|        break;
  217|     10|    case OXS_OF_FLOW_COUNT:
  ------------------
  |  |  137|     10|#define OXS_OF_FLOW_COUNT   OXS_HEADER (0, 0x8002, OFPXST_OFB_FLOW_COUNT, 4)
  |  |  ------------------
  |  |  |  |  124|     10|    (((uint64_t) (CLASS) << 48) | \
  |  |  |  |  125|     10|     ((uint64_t) (FIELD) << 41) | \
  |  |  |  |  126|     10|     ((uint64_t) (LENGTH) << 32) | \
  |  |  |  |  127|     10|     (EXPERIMENTER))
  |  |  ------------------
  ------------------
  |  Branch (217:5): [True: 10, False: 3.13k]
  ------------------
  218|     10|        stats->flow_count = ntohl(get_unaligned_be32(payload));
  219|     10|        break;
  220|       |
  221|  2.51k|    default:
  ------------------
  |  Branch (221:5): [True: 2.51k, False: 632]
  ------------------
  222|       |        /* Unknown header. */
  223|  2.51k|        return 0;
  224|  3.14k|    }
  225|    632|    if (oxs_field_set
  ------------------
  |  Branch (225:9): [True: 632, False: 0]
  ------------------
  226|    632|        && oxs_class(header) == OFPXSC_OPENFLOW_BASIC
  ------------------
  |  Branch (226:12): [True: 632, False: 0]
  ------------------
  227|    632|        && oxs_field(header) < CHAR_BIT * sizeof *oxs_field_set) {
  ------------------
  |  Branch (227:12): [True: 632, False: 0]
  ------------------
  228|    632|        *oxs_field_set |= 1 << oxs_field(header);
  229|    632|    }
  230|    632|    return error;
  231|  3.14k|}
ox-stat.c:oxs_pull_header__:
  154|  5.17k|{
  155|  5.17k|    if (b->size < 4) {
  ------------------
  |  Branch (155:9): [True: 461, False: 4.71k]
  ------------------
  156|    461|        goto bad_len;
  157|    461|    }
  158|       |
  159|  4.71k|    *header = ((uint64_t) ntohl(get_unaligned_be32(b->data))) << 32;
  160|  4.71k|    if (is_experimenter_oxs(*header)) {
  ------------------
  |  Branch (160:9): [True: 761, False: 3.95k]
  ------------------
  161|    761|        if (b->size < 8) {
  ------------------
  |  Branch (161:13): [True: 71, False: 690]
  ------------------
  162|     71|            goto bad_len;
  163|     71|        }
  164|    690|        *header = ntohll(get_unaligned_be64(b->data));
  165|    690|    }
  166|  4.64k|    if (oxs_length(*header) < oxs_experimenter_len(*header)) {
  ------------------
  |  Branch (166:9): [True: 171, False: 4.47k]
  ------------------
  167|    171|        VLOG_WARN_RL(&rl, "OXS header "OXS_HEADER_FMT" has invalid length %d "
  ------------------
  |  |  224|    171|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    171|    do {                                                                \
  |  |  |  |  288|    171|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    171|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 171]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    171|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 171]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  168|    171|                     "(minimum is %d)",
  169|    171|                     OXS_HEADER_ARGS(*header), oxs_length(*header),
  170|    171|                     oxs_header_len(*header));
  171|    171|        goto error;
  172|    171|    }
  173|  4.47k|    ofpbuf_pull(b, oxs_header_len(*header));
  174|       |
  175|  4.47k|    return 0;
  176|       |
  177|    532|bad_len:
  178|    532|    VLOG_DBG_RL(&rl, "encountered partial (%"PRIu32"-byte) OXS entry",
  ------------------
  |  |  226|    532|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    532|    do {                                                                \
  |  |  |  |  288|    532|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    532|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 532]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    532|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 532]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  179|    532|                b->size);
  180|    703|error:
  181|    703|    *header = 0;
  182|    703|    return OFPERR_OFPBMC_BAD_LEN;
  183|    532|}
ox-stat.c:is_experimenter_oxs:
   83|  18.3k|{
   84|  18.3k|    return oxs_class(header) == OFPXSC_EXPERIMENTER;
   85|  18.3k|}
ox-stat.c:oxs_length:
   79|  9.12k|static int oxs_length(uint64_t header) { return (header >> 32) & 0xff; }
ox-stat.c:oxs_experimenter_len:
  102|  13.5k|{
  103|  13.5k|    return is_experimenter_oxs(header) ? 4 : 0;
  ------------------
  |  Branch (103:12): [True: 1.72k, False: 11.8k]
  ------------------
  104|  13.5k|}
ox-stat.c:oxs_header_len:
  118|  4.47k|{
  119|  4.47k|    return 4 + oxs_experimenter_len(header);
  120|  4.47k|}
ox-stat.c:oxs_payload_len:
  110|  4.47k|{
  111|  4.47k|    return oxs_length(header) - oxs_experimenter_len(header);
  112|  4.47k|}
ox-stat.c:oxs_class:
   77|  18.9k|static int oxs_class(uint64_t header) { return header >> 48; }
ox-stat.c:oxs_field:
   78|  1.26k|static int oxs_field(uint64_t header) { return (header >> 41) & 0x7f; }

set_mpls_lse_ttl:
  337|    891|{
  338|    891|    *lse &= ~htonl(MPLS_TTL_MASK);
  339|       |    *lse |= htonl((ttl << MPLS_TTL_SHIFT) & MPLS_TTL_MASK);
  340|    891|}
set_mpls_lse_tc:
  345|  1.72k|{
  346|  1.72k|    *lse &= ~htonl(MPLS_TC_MASK);
  347|       |    *lse |= htonl((tc << MPLS_TC_SHIFT) & MPLS_TC_MASK);
  348|  1.72k|}
set_mpls_lse_label:
  353|  2.84k|{
  354|  2.84k|    *lse &= ~htonl(MPLS_LABEL_MASK);
  355|       |    *lse |= htonl((ntohl(label) << MPLS_LABEL_SHIFT) & MPLS_LABEL_MASK);
  356|  2.84k|}
set_mpls_lse_bos:
  361|    293|{
  362|    293|    *lse &= ~htonl(MPLS_BOS_MASK);
  363|       |    *lse |= htonl((bos << MPLS_BOS_SHIFT) & MPLS_BOS_MASK);
  364|    293|}
eth_format_masked:
  590|   240k|{
  591|   240k|    ds_put_format(s, ETH_ADDR_FMT, ETH_ADDR_ARGS(eth));
  ------------------
  |  |  370|   240k|    "%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8
  ------------------
                  ds_put_format(s, ETH_ADDR_FMT, ETH_ADDR_ARGS(eth));
  ------------------
  |  |  371|   240k|#define ETH_ADDR_ARGS(EA) ETH_ADDR_BYTES_ARGS((EA).ea)
  |  |  ------------------
  |  |  |  |  373|   240k|         (EAB)[0], (EAB)[1], (EAB)[2], (EAB)[3], (EAB)[4], (EAB)[5]
  |  |  ------------------
  ------------------
  592|   240k|    if (mask && !eth_mask_is_exact(*mask)) {
  ------------------
  |  Branch (592:9): [True: 240k, False: 66]
  |  Branch (592:17): [True: 10.6k, False: 229k]
  ------------------
  593|  10.6k|        ds_put_format(s, "/"ETH_ADDR_FMT, ETH_ADDR_ARGS(*mask));
  ------------------
  |  |  370|  10.6k|    "%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8
  ------------------
                      ds_put_format(s, "/"ETH_ADDR_FMT, ETH_ADDR_ARGS(*mask));
  ------------------
  |  |  371|  10.6k|#define ETH_ADDR_ARGS(EA) ETH_ADDR_BYTES_ARGS((EA).ea)
  |  |  ------------------
  |  |  |  |  373|  10.6k|         (EAB)[0], (EAB)[1], (EAB)[2], (EAB)[3], (EAB)[4], (EAB)[5]
  |  |  ------------------
  ------------------
  594|  10.6k|    }
  595|   240k|}
ip_count_cidr_bits:
  677|  12.5k|{
  678|       |    return 32 - ctz32(ntohl(netmask));
  679|  12.5k|}
ip_format_masked:
  683|  32.7k|{
  684|  32.7k|    ds_put_format(s, IP_FMT, IP_ARGS(ip));
  ------------------
  |  |  628|  32.7k|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
                  ds_put_format(s, IP_FMT, IP_ARGS(ip));
  ------------------
  |  |  630|  32.7k|    ntohl(ip) >> 24,                            \
  |  |  631|  32.7k|    (ntohl(ip) >> 16) & 0xff,                   \
  |  |  632|  32.7k|    (ntohl(ip) >> 8) & 0xff,                    \
  |  |  633|  32.7k|    ntohl(ip) & 0xff
  ------------------
  685|  32.7k|    if (mask != OVS_BE32_MAX) {
  ------------------
  |  |   43|  32.7k|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  |  Branch (685:9): [True: 15.5k, False: 17.2k]
  ------------------
  686|  15.5k|        if (ip_is_cidr(mask)) {
  ------------------
  |  Branch (686:13): [True: 12.5k, False: 3.00k]
  ------------------
  687|  12.5k|            ds_put_format(s, "/%d", ip_count_cidr_bits(mask));
  688|  12.5k|        } else {
  689|  3.00k|            ds_put_format(s, "/"IP_FMT, IP_ARGS(mask));
  ------------------
  |  |  628|  3.00k|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
                          ds_put_format(s, "/"IP_FMT, IP_ARGS(mask));
  ------------------
  |  |  630|  3.00k|    ntohl(ip) >> 24,                            \
  |  |  631|  3.00k|    (ntohl(ip) >> 16) & 0xff,                   \
  |  |  632|  3.00k|    (ntohl(ip) >> 8) & 0xff,                    \
  |  |  633|  3.00k|    ntohl(ip) & 0xff
  ------------------
  690|  3.00k|        }
  691|  15.5k|    }
  692|  32.7k|}
ipv6_format_addr:
  903|  79.1k|{
  904|  79.1k|    char *dst;
  905|       |
  906|  79.1k|    ds_reserve(s, s->length + INET6_ADDRSTRLEN);
  907|       |
  908|  79.1k|    dst = s->string + s->length;
  909|  79.1k|    inet_ntop(AF_INET6, addr, dst, INET6_ADDRSTRLEN);
  910|  79.1k|    s->length += strlen(dst);
  911|  79.1k|}
ipv6_format_mapped:
  930|  24.1k|{
  931|  24.1k|    if (IN6_IS_ADDR_V4MAPPED(addr)) {
  ------------------
  |  Branch (931:9): [True: 877, False: 23.2k]
  ------------------
  932|    877|        ds_put_format(s, IP_FMT, addr->s6_addr[12], addr->s6_addr[13],
  ------------------
  |  |  628|    877|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
  933|    877|                                 addr->s6_addr[14], addr->s6_addr[15]);
  934|  23.2k|    } else {
  935|  23.2k|        ipv6_format_addr(addr, s);
  936|  23.2k|    }
  937|  24.1k|}
ipv6_format_masked:
  942|  54.6k|{
  943|  54.6k|    ipv6_format_addr(addr, s);
  944|  54.6k|    if (mask && !ipv6_mask_is_exact(mask)) {
  ------------------
  |  Branch (944:9): [True: 54.4k, False: 135]
  |  Branch (944:17): [True: 1.91k, False: 52.5k]
  ------------------
  945|  1.91k|        if (ipv6_is_cidr(mask)) {
  ------------------
  |  Branch (945:13): [True: 677, False: 1.24k]
  ------------------
  946|    677|            int cidr_bits = ipv6_count_cidr_bits(mask);
  947|    677|            ds_put_format(s, "/%d", cidr_bits);
  948|  1.24k|        } else {
  949|  1.24k|            ds_put_char(s, '/');
  950|  1.24k|            ipv6_format_addr(mask, s);
  951|  1.24k|        }
  952|  1.91k|    }
  953|  54.6k|}
ipv6_addr_bitand:
  980|  5.34k|{
  981|  5.34k|   struct in6_addr dst;
  982|  21.3k|   IPV6_FOR_EACH (i) {
  ------------------
  |  |  972|  26.7k|#define IPV6_FOR_EACH(VAR) for (int VAR = 0; VAR < 4; VAR++)
  |  |  ------------------
  |  |  |  Branch (972:46): [True: 21.3k, False: 5.34k]
  |  |  ------------------
  ------------------
  983|  21.3k|       dst.s6_addrX[i] = a->s6_addrX[i] & b->s6_addrX[i];
  ------------------
  |  |  971|  21.3k|#define s6_addrX s6_addr32
  ------------------
                     dst.s6_addrX[i] = a->s6_addrX[i] & b->s6_addrX[i];
  ------------------
  |  |  971|  21.3k|#define s6_addrX s6_addr32
  ------------------
                     dst.s6_addrX[i] = a->s6_addrX[i] & b->s6_addrX[i];
  ------------------
  |  |  971|  21.3k|#define s6_addrX s6_addr32
  ------------------
  984|  21.3k|   }
  985|  5.34k|   return dst;
  986|  5.34k|}
ipv6_is_zero:
 1000|  11.6k|{
 1001|  26.2k|   IPV6_FOR_EACH (i) {
  ------------------
  |  |  972|  27.3k|#define IPV6_FOR_EACH(VAR) for (int VAR = 0; VAR < 4; VAR++)
  |  |  ------------------
  |  |  |  Branch (972:46): [True: 26.2k, False: 1.10k]
  |  |  ------------------
  ------------------
 1002|  26.2k|       if (a->s6_addrX[i]) {
  ------------------
  |  |  971|  26.2k|#define s6_addrX s6_addr32
  ------------------
  |  Branch (1002:12): [True: 10.5k, False: 15.7k]
  ------------------
 1003|  10.5k|           return false;
 1004|  10.5k|       }
 1005|  26.2k|   }
 1006|  1.10k|   return true;
 1007|  11.6k|}
ipv6_count_cidr_bits:
 1039|    677|{
 1040|    677|    int i;
 1041|    677|    int count = 0;
 1042|    677|    const uint8_t *netmaskp = &netmask->s6_addr[0];
 1043|       |
 1044|  5.22k|    for (i=0; i<16; i++) {
  ------------------
  |  Branch (1044:15): [True: 5.22k, False: 0]
  ------------------
 1045|  5.22k|        if (netmaskp[i] == 0xff) {
  ------------------
  |  Branch (1045:13): [True: 4.54k, False: 677]
  ------------------
 1046|  4.54k|            count += 8;
 1047|  4.54k|        } else {
 1048|    677|            uint8_t nm;
 1049|       |
 1050|  1.94k|            for(nm = netmaskp[i]; nm; nm <<= 1) {
  ------------------
  |  Branch (1050:35): [True: 1.26k, False: 677]
  ------------------
 1051|  1.26k|                count++;
 1052|  1.26k|            }
 1053|    677|            break;
 1054|    677|        }
 1055|       |
 1056|  5.22k|    }
 1057|       |
 1058|    677|    return count;
 1059|    677|}
ipv6_is_cidr:
 1065|  1.91k|{
 1066|  1.91k|    const uint8_t *netmaskp = &netmask->s6_addr[0];
 1067|  1.91k|    int i;
 1068|       |
 1069|  9.91k|    for (i=0; i<16; i++) {
  ------------------
  |  Branch (1069:15): [True: 9.23k, False: 677]
  ------------------
 1070|  9.23k|        if (netmaskp[i] != 0xff) {
  ------------------
  |  Branch (1070:13): [True: 1.91k, False: 7.31k]
  ------------------
 1071|  1.91k|            uint8_t x = ~netmaskp[i];
 1072|  1.91k|            if (x & (x + 1)) {
  ------------------
  |  Branch (1072:17): [True: 344, False: 1.57k]
  ------------------
 1073|    344|                return false;
 1074|    344|            }
 1075|  10.7k|            while (++i < 16) {
  ------------------
  |  Branch (1075:20): [True: 10.1k, False: 677]
  ------------------
 1076|  10.1k|                if (netmaskp[i]) {
  ------------------
  |  Branch (1076:21): [True: 898, False: 9.21k]
  ------------------
 1077|    898|                    return false;
 1078|    898|                }
 1079|  10.1k|            }
 1080|  1.57k|        }
 1081|  9.23k|    }
 1082|       |
 1083|    677|    return true;
 1084|  1.91k|}
packet_tcp_flag_to_string:
 1717|  59.4k|{
 1718|  59.4k|    switch (flag) {
 1719|  2.95k|    case TCP_FIN:
  ------------------
  |  |  893|  2.95k|#define TCP_FIN 0x001
  ------------------
  |  Branch (1719:5): [True: 2.95k, False: 56.5k]
  ------------------
 1720|  2.95k|        return "fin";
 1721|  1.64k|    case TCP_SYN:
  ------------------
  |  |  894|  1.64k|#define TCP_SYN 0x002
  ------------------
  |  Branch (1721:5): [True: 1.64k, False: 57.8k]
  ------------------
 1722|  1.64k|        return "syn";
 1723|  7.42k|    case TCP_RST:
  ------------------
  |  |  895|  7.42k|#define TCP_RST 0x004
  ------------------
  |  Branch (1723:5): [True: 7.42k, False: 52.0k]
  ------------------
 1724|  7.42k|        return "rst";
 1725|  1.97k|    case TCP_PSH:
  ------------------
  |  |  896|  1.97k|#define TCP_PSH 0x008
  ------------------
  |  Branch (1725:5): [True: 1.97k, False: 57.5k]
  ------------------
 1726|  1.97k|        return "psh";
 1727|  6.52k|    case TCP_ACK:
  ------------------
  |  |  897|  6.52k|#define TCP_ACK 0x010
  ------------------
  |  Branch (1727:5): [True: 6.52k, False: 52.9k]
  ------------------
 1728|  6.52k|        return "ack";
 1729|  7.15k|    case TCP_URG:
  ------------------
  |  |  898|  7.15k|#define TCP_URG 0x020
  ------------------
  |  Branch (1729:5): [True: 7.15k, False: 52.3k]
  ------------------
 1730|  7.15k|        return "urg";
 1731|  3.08k|    case TCP_ECE:
  ------------------
  |  |  899|  3.08k|#define TCP_ECE 0x040
  ------------------
  |  Branch (1731:5): [True: 3.08k, False: 56.4k]
  ------------------
 1732|  3.08k|        return "ece";
 1733|  1.72k|    case TCP_CWR:
  ------------------
  |  |  900|  1.72k|#define TCP_CWR 0x080
  ------------------
  |  Branch (1733:5): [True: 1.72k, False: 57.7k]
  ------------------
 1734|  1.72k|        return "cwr";
 1735|  8.13k|    case TCP_NS:
  ------------------
  |  |  901|  8.13k|#define TCP_NS  0x100
  ------------------
  |  Branch (1735:5): [True: 8.13k, False: 51.3k]
  ------------------
 1736|  8.13k|        return "ns";
 1737|  1.56k|    case 0x200:
  ------------------
  |  Branch (1737:5): [True: 1.56k, False: 57.9k]
  ------------------
 1738|  1.56k|        return "[200]";
 1739|  8.03k|    case 0x400:
  ------------------
  |  Branch (1739:5): [True: 8.03k, False: 51.4k]
  ------------------
 1740|  8.03k|        return "[400]";
 1741|  7.02k|    case 0x800:
  ------------------
  |  Branch (1741:5): [True: 7.02k, False: 52.4k]
  ------------------
 1742|  7.02k|        return "[800]";
 1743|  2.25k|    default:
  ------------------
  |  Branch (1743:5): [True: 2.25k, False: 57.2k]
  ------------------
 1744|       |        return NULL;
 1745|  59.4k|    }
 1746|  59.4k|}

dp-packet.c:pkt_metadata_init:
  165|   100k|{
  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|   100k|    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|   100k|    md->tunnel.ip_dst = 0;
  179|   100k|    md->tunnel.ipv6_dst = in6addr_any;
  180|   100k|    md->in_port.odp_port = port;
  181|   100k|    md->orig_in_port = port;
  182|       |    md->conn = NULL;
  183|   100k|}
flow.c:flow_tnl_dst_is_set:
   51|   200k|{
   52|   200k|    return tnl->ip_dst || ipv6_addr_is_set(&tnl->ipv6_dst);
  ------------------
  |  Branch (52:12): [True: 0, False: 200k]
  |  Branch (52:27): [True: 0, False: 200k]
  ------------------
   53|   200k|}
flow.c:eth_type_vlan:
  429|  41.9k|{
  430|  41.9k|    return eth_type == htons(ETH_TYPE_VLAN_8021Q) ||
  ------------------
  |  Branch (430:12): [True: 203, False: 41.7k]
  ------------------
  431|  41.7k|        eth_type == htons(ETH_TYPE_VLAN_8021AD);
  ------------------
  |  Branch (431:9): [True: 1.98k, False: 39.7k]
  ------------------
  432|  41.9k|}
flow.c:pt_ns_type_be:
 1577|  96.7k|{
 1578|  96.7k|    return be32_to_be16(packet_type);
 1579|  96.7k|}
flow.c:eth_type_mpls:
  423|   125k|{
  424|   125k|    return eth_type == htons(ETH_TYPE_MPLS) ||
  ------------------
  |  Branch (424:12): [True: 330, False: 125k]
  ------------------
  425|   125k|        eth_type == htons(ETH_TYPE_MPLS_MCAST);
  ------------------
  |  Branch (425:9): [True: 1.46k, False: 124k]
  ------------------
  426|   125k|}
flow.c:eth_addr_is_zero:
  246|    239|{
  247|    239|    return !(a.be16[0] | a.be16[1] | a.be16[2]);
  248|    239|}
flow.c:ipv6_addr_is_set:
 1205|   200k|static inline bool ipv6_addr_is_set(const struct in6_addr *addr) {
 1206|   200k|    return !ipv6_addr_equals(addr, &in6addr_any);
 1207|   200k|}
flow.c:ipv6_addr_equals:
 1184|   200k|{
 1185|   200k|#ifdef IN6_ARE_ADDR_EQUAL
 1186|   200k|    return IN6_ARE_ADDR_EQUAL(a, b);
 1187|       |#else
 1188|       |    return !memcmp(a, b, sizeof(*a));
 1189|       |#endif
 1190|   200k|}
flow.c:pt_ns:
 1570|  65.3k|{
 1571|       |    return ntohl(packet_type) >> 16;
 1572|  65.3k|}
flow.c:pt_ns_type:
 1584|  64.5k|{
 1585|       |    return ntohs(pt_ns_type_be(packet_type));
 1586|  64.5k|}
match.c:ipv6_mask_is_any:
 1193|  1.33M|static inline bool ipv6_mask_is_any(const struct in6_addr *mask) {
 1194|  1.33M|    return ipv6_addr_equals(mask, &in6addr_any);
 1195|  1.33M|}
match.c:ipv6_addr_equals:
 1184|  1.33M|{
 1185|  1.33M|#ifdef IN6_ARE_ADDR_EQUAL
 1186|  1.33M|    return IN6_ARE_ADDR_EQUAL(a, b);
 1187|       |#else
 1188|       |    return !memcmp(a, b, sizeof(*a));
 1189|       |#endif
 1190|  1.33M|}
match.c:pt_ns:
 1570|  64.3k|{
 1571|       |    return ntohl(packet_type) >> 16;
 1572|  64.3k|}
match.c:pt_ns_type_be:
 1577|  43.5k|{
 1578|  43.5k|    return be32_to_be16(packet_type);
 1579|  43.5k|}
match.c:vlan_tci_to_vid:
  507|  26.1k|{
  508|  26.1k|    return (ntohs(vlan_tci) & VLAN_VID_MASK) >> VLAN_VID_SHIFT;
  ------------------
  |  |  494|  26.1k|#define VLAN_VID_MASK 0x0fff
  ------------------
                  return (ntohs(vlan_tci) & VLAN_VID_MASK) >> VLAN_VID_SHIFT;
  ------------------
  |  |  495|  26.1k|#define VLAN_VID_SHIFT 0
  ------------------
  509|  26.1k|}
match.c:vlan_tci_to_pcp:
  515|  28.6k|{
  516|  28.6k|    return (ntohs(vlan_tci) & VLAN_PCP_MASK) >> VLAN_PCP_SHIFT;
  ------------------
  |  |  497|  28.6k|#define VLAN_PCP_MASK 0xe000
  ------------------
                  return (ntohs(vlan_tci) & VLAN_PCP_MASK) >> VLAN_PCP_SHIFT;
  ------------------
  |  |  498|  28.6k|#define VLAN_PCP_SHIFT 13
  ------------------
  517|  28.6k|}
match.c:eth_addr_is_zero:
  246|   646k|{
  247|   646k|    return !(a.be16[0] | a.be16[1] | a.be16[2]);
  248|   646k|}
match.c:mpls_lse_to_label:
  568|  2.23k|{
  569|  2.23k|    return (ntohl(mpls_lse) & MPLS_LABEL_MASK) >> MPLS_LABEL_SHIFT;
  ------------------
  |  |  554|  2.23k|#define MPLS_LABEL_MASK     0xfffff000
  ------------------
                  return (ntohl(mpls_lse) & MPLS_LABEL_MASK) >> MPLS_LABEL_SHIFT;
  ------------------
  |  |  555|  2.23k|#define MPLS_LABEL_SHIFT    12
  ------------------
  570|  2.23k|}
match.c:mpls_lse_to_tc:
  576|  1.86k|{
  577|  1.86k|    return (ntohl(mpls_lse) & MPLS_TC_MASK) >> MPLS_TC_SHIFT;
  ------------------
  |  |  551|  1.86k|#define MPLS_TC_MASK        0x00000e00
  ------------------
                  return (ntohl(mpls_lse) & MPLS_TC_MASK) >> MPLS_TC_SHIFT;
  ------------------
  |  |  552|  1.86k|#define MPLS_TC_SHIFT       9
  ------------------
  578|  1.86k|}
match.c:mpls_lse_to_ttl:
  584|    902|{
  585|    902|    return (ntohl(mpls_lse) & MPLS_TTL_MASK) >> MPLS_TTL_SHIFT;
  ------------------
  |  |  545|    902|#define MPLS_TTL_MASK       0x000000ff
  ------------------
                  return (ntohl(mpls_lse) & MPLS_TTL_MASK) >> MPLS_TTL_SHIFT;
  ------------------
  |  |  546|    902|#define MPLS_TTL_SHIFT      0
  ------------------
  586|    902|}
match.c:mpls_lse_to_bos:
  624|  1.12k|{
  625|       |    return (mpls_lse & htonl(MPLS_BOS_MASK)) != 0;
  626|  1.12k|}
match.c:dl_type_is_ip_any:
 1256|   319k|{
 1257|   319k|    return dl_type == htons(ETH_TYPE_IP)
  ------------------
  |  Branch (1257:12): [True: 14.8k, False: 304k]
  ------------------
 1258|   304k|        || dl_type == htons(ETH_TYPE_IPV6);
  ------------------
  |  Branch (1258:12): [True: 26.5k, False: 277k]
  ------------------
 1259|   319k|}
meta-flow.c:ipv6_mask_is_any:
 1193|  10.2k|static inline bool ipv6_mask_is_any(const struct in6_addr *mask) {
 1194|  10.2k|    return ipv6_addr_equals(mask, &in6addr_any);
 1195|  10.2k|}
meta-flow.c:ipv6_addr_equals:
 1184|  10.2k|{
 1185|  10.2k|#ifdef IN6_ARE_ADDR_EQUAL
 1186|  10.2k|    return IN6_ARE_ADDR_EQUAL(a, b);
 1187|       |#else
 1188|       |    return !memcmp(a, b, sizeof(*a));
 1189|       |#endif
 1190|  10.2k|}
meta-flow.c:eth_addr_is_zero:
  246|  6.36k|{
  247|  6.36k|    return !(a.be16[0] | a.be16[1] | a.be16[2]);
  248|  6.36k|}
meta-flow.c:pt_ns:
 1570|  19.8k|{
 1571|       |    return ntohl(packet_type) >> 16;
 1572|  19.8k|}
meta-flow.c:pt_ns_type_be:
 1577|  15.6k|{
 1578|  15.6k|    return be32_to_be16(packet_type);
 1579|  15.6k|}
meta-flow.c:eth_type_mpls:
  423|    164|{
  424|    164|    return eth_type == htons(ETH_TYPE_MPLS) ||
  ------------------
  |  Branch (424:12): [True: 10, False: 154]
  ------------------
  425|    154|        eth_type == htons(ETH_TYPE_MPLS_MCAST);
  ------------------
  |  Branch (425:9): [True: 141, False: 13]
  ------------------
  426|    164|}
meta-flow.c:ip_is_cidr:
  664|    793|{
  665|       |    uint32_t x = ~ntohl(netmask);
  666|    793|    return !(x & (x + 1));
  667|    793|}
meta-flow.c:dl_type_is_ip_any:
 1256|  8.63k|{
 1257|  8.63k|    return dl_type == htons(ETH_TYPE_IP)
  ------------------
  |  Branch (1257:12): [True: 1.92k, False: 6.70k]
  ------------------
 1258|  6.70k|        || dl_type == htons(ETH_TYPE_IPV6);
  ------------------
  |  Branch (1258:12): [True: 4.17k, False: 2.53k]
  ------------------
 1259|  8.63k|}
ofp-actions.c:eth_type_vlan:
  429|  4.19k|{
  430|  4.19k|    return eth_type == htons(ETH_TYPE_VLAN_8021Q) ||
  ------------------
  |  Branch (430:12): [True: 113, False: 4.07k]
  ------------------
  431|  4.07k|        eth_type == htons(ETH_TYPE_VLAN_8021AD);
  ------------------
  |  Branch (431:9): [True: 3.51k, False: 563]
  ------------------
  432|  4.19k|}
ofp-actions.c:eth_type_mpls:
  423|  22.8k|{
  424|  22.8k|    return eth_type == htons(ETH_TYPE_MPLS) ||
  ------------------
  |  Branch (424:12): [True: 3.72k, False: 19.0k]
  ------------------
  425|  19.0k|        eth_type == htons(ETH_TYPE_MPLS_MCAST);
  ------------------
  |  Branch (425:9): [True: 5.76k, False: 13.3k]
  ------------------
  426|  22.8k|}
ofp-actions.c:ipv6_mask_is_any:
 1193|  3.06k|static inline bool ipv6_mask_is_any(const struct in6_addr *mask) {
 1194|  3.06k|    return ipv6_addr_equals(mask, &in6addr_any);
 1195|  3.06k|}
ofp-actions.c:ipv6_addr_equals:
 1184|  3.06k|{
 1185|  3.06k|#ifdef IN6_ARE_ADDR_EQUAL
 1186|  3.06k|    return IN6_ARE_ADDR_EQUAL(a, b);
 1187|       |#else
 1188|       |    return !memcmp(a, b, sizeof(*a));
 1189|       |#endif
 1190|  3.06k|}
ofp-actions.c:pt_ns:
 1570|  41.0k|{
 1571|       |    return ntohl(packet_type) >> 16;
 1572|  41.0k|}
ofp-actions.c:pt_ns_type_be:
 1577|  29.9k|{
 1578|  29.9k|    return be32_to_be16(packet_type);
 1579|  29.9k|}
ofp-actions.c:dl_type_is_ip_any:
 1256|  41.5k|{
 1257|  41.5k|    return dl_type == htons(ETH_TYPE_IP)
  ------------------
  |  Branch (1257:12): [True: 17.2k, False: 24.3k]
  ------------------
 1258|  24.3k|        || dl_type == htons(ETH_TYPE_IPV6);
  ------------------
  |  Branch (1258:12): [True: 4.66k, False: 19.6k]
  ------------------
 1259|  41.5k|}
ofp-actions.c:pt_ns_type:
 1584|  15.2k|{
 1585|       |    return ntohs(pt_ns_type_be(packet_type));
 1586|  15.2k|}
ofp-flow.c:ipv6_addr_is_set:
 1205|   252k|static inline bool ipv6_addr_is_set(const struct in6_addr *addr) {
 1206|   252k|    return !ipv6_addr_equals(addr, &in6addr_any);
 1207|   252k|}
ofp-flow.c:ipv6_addr_equals:
 1184|   252k|{
 1185|   252k|#ifdef IN6_ARE_ADDR_EQUAL
 1186|   252k|    return IN6_ARE_ADDR_EQUAL(a, b);
 1187|       |#else
 1188|       |    return !memcmp(a, b, sizeof(*a));
 1189|       |#endif
 1190|   252k|}
ofp-match.c:eth_addr_is_zero:
  246|  10.0k|{
  247|  10.0k|    return !(a.be16[0] | a.be16[1] | a.be16[2]);
  248|  10.0k|}
ofp-match.c:eth_addr_invert:
  301|  18.5k|{
  302|  18.5k|    struct eth_addr dst;
  303|       |
  304|  74.2k|    for (int i = 0; i < ARRAY_SIZE(src.be16); i++) {
  ------------------
  |  |  297|  74.2k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   46|  74.2k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|  74.2k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   47|  74.2k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  74.2k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|  74.2k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (304:21): [True: 55.6k, False: 18.5k]
  ------------------
  305|  55.6k|        dst.be16[i] = ~src.be16[i];
  306|  55.6k|    }
  307|       |
  308|  18.5k|    return dst;
  309|  18.5k|}
ofp-match.c:eth_type_mpls:
  423|  66.0k|{
  424|  66.0k|    return eth_type == htons(ETH_TYPE_MPLS) ||
  ------------------
  |  Branch (424:12): [True: 1.07k, False: 64.9k]
  ------------------
  425|  64.9k|        eth_type == htons(ETH_TYPE_MPLS_MCAST);
  ------------------
  |  Branch (425:9): [True: 721, False: 64.2k]
  ------------------
  426|  66.0k|}
packets.c:eth_mask_is_exact:
  255|   240k|{
  256|       |    return (a.be16[0] & a.be16[1] & a.be16[2]) == htons(0xffff);
  257|   240k|}
packets.c:ip_is_cidr:
  664|  15.5k|{
  665|       |    uint32_t x = ~ntohl(netmask);
  666|  15.5k|    return !(x & (x + 1));
  667|  15.5k|}
packets.c:ipv6_mask_is_exact:
 1197|  54.4k|static inline bool ipv6_mask_is_exact(const struct in6_addr *mask) {
 1198|  54.4k|    return ipv6_addr_equals(mask, &in6addr_exact);
 1199|  54.4k|}
packets.c:ipv6_addr_equals:
 1184|  54.4k|{
 1185|  54.4k|#ifdef IN6_ARE_ADDR_EQUAL
 1186|  54.4k|    return IN6_ARE_ADDR_EQUAL(a, b);
 1187|       |#else
 1188|       |    return !memcmp(a, b, sizeof(*a));
 1189|       |#endif
 1190|  54.4k|}

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

ofp-print.c:get_16aligned_be32:
  246|    910|{
  247|       |#ifdef WORDS_BIGENDIAN
  248|       |    return ((ovs_be32) x->hi << 16) | x->lo;
  249|       |#else
  250|    910|    return ((ovs_be32) x->lo << 16) | x->hi;
  251|    910|#endif
  252|    910|}
ofp-queue.c:get_32aligned_be64:
  270|  49.8k|{
  271|       |#ifdef WORDS_BIGENDIAN
  272|       |    return ((ovs_be64) x->hi << 32) | x->lo;
  273|       |#else
  274|  49.8k|    return ((ovs_be64) x->lo << 32) | x->hi;
  275|  49.8k|#endif
  276|  49.8k|}
ofp-table.c:get_32aligned_be64:
  270|  19.0k|{
  271|       |#ifdef WORDS_BIGENDIAN
  272|       |    return ((ovs_be64) x->hi << 32) | x->lo;
  273|       |#else
  274|  19.0k|    return ((ovs_be64) x->lo << 32) | x->hi;
  275|  19.0k|#endif
  276|  19.0k|}
flow.c:get_16aligned_be32:
  246|  31.5k|{
  247|       |#ifdef WORDS_BIGENDIAN
  248|       |    return ((ovs_be32) x->hi << 16) | x->lo;
  249|       |#else
  250|  31.5k|    return ((ovs_be32) x->lo << 16) | x->hi;
  251|  31.5k|#endif
  252|  31.5k|}
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|   585k|get_unaligned_##ABBREV(const TYPE *p)           \
   75|   585k|{                                               \
   76|   585k|    return unaligned_##ABBREV(p)->x;            \
   77|   585k|}                                               \
nx-match.c:unaligned_be32:
   68|   585k|unaligned_##ABBREV(const TYPE *p)               \
   69|   585k|{                                               \
   70|   585k|    return (struct unaligned_##ABBREV *) p;     \
   71|   585k|}                                               \
nx-match.c:get_unaligned_be64:
   74|  18.7k|get_unaligned_##ABBREV(const TYPE *p)           \
   75|  18.7k|{                                               \
   76|  18.7k|    return unaligned_##ABBREV(p)->x;            \
   77|  18.7k|}                                               \
nx-match.c:unaligned_be64:
   68|  18.7k|unaligned_##ABBREV(const TYPE *p)               \
   69|  18.7k|{                                               \
   70|  18.7k|    return (struct unaligned_##ABBREV *) p;     \
   71|  18.7k|}                                               \
ofp-actions.c:get_unaligned_be32:
   74|  55.6k|get_unaligned_##ABBREV(const TYPE *p)           \
   75|  55.6k|{                                               \
   76|  55.6k|    return unaligned_##ABBREV(p)->x;            \
   77|  55.6k|}                                               \
ofp-actions.c:unaligned_be32:
   68|  55.6k|unaligned_##ABBREV(const TYPE *p)               \
   69|  55.6k|{                                               \
   70|  55.6k|    return (struct unaligned_##ABBREV *) p;     \
   71|  55.6k|}                                               \
ofp-flow.c:get_32aligned_be64:
  270|  3.59k|{
  271|       |#ifdef WORDS_BIGENDIAN
  272|       |    return ((ovs_be64) x->hi << 32) | x->lo;
  273|       |#else
  274|  3.59k|    return ((ovs_be64) x->lo << 32) | x->hi;
  275|  3.59k|#endif
  276|  3.59k|}
ofp-port.c:get_unaligned_be64:
   74|  55.9k|get_unaligned_##ABBREV(const TYPE *p)           \
   75|  55.9k|{                                               \
   76|  55.9k|    return unaligned_##ABBREV(p)->x;            \
   77|  55.9k|}                                               \
ofp-port.c:unaligned_be64:
   68|  55.9k|unaligned_##ABBREV(const TYPE *p)               \
   69|  55.9k|{                                               \
   70|  55.9k|    return (struct unaligned_##ABBREV *) p;     \
   71|  55.9k|}                                               \
ofp-port.c:get_32aligned_be64:
  270|   115k|{
  271|       |#ifdef WORDS_BIGENDIAN
  272|       |    return ((ovs_be64) x->hi << 32) | x->lo;
  273|       |#else
  274|   115k|    return ((ovs_be64) x->lo << 32) | x->hi;
  275|   115k|#endif
  276|   115k|}
ofp-prop.c:get_32aligned_be128:
  294|  1.36k|{
  295|  1.36k|    ovs_be128 u;
  296|  1.36k|    u.be32[0] = x->be32[0];
  297|  1.36k|    u.be32[1] = x->be32[1];
  298|  1.36k|    u.be32[2] = x->be32[2];
  299|  1.36k|    u.be32[3] = x->be32[3];
  300|  1.36k|    return u;
  301|  1.36k|}
ox-stat.c:get_unaligned_be64:
   74|  1.31k|get_unaligned_##ABBREV(const TYPE *p)           \
   75|  1.31k|{                                               \
   76|  1.31k|    return unaligned_##ABBREV(p)->x;            \
   77|  1.31k|}                                               \
ox-stat.c:unaligned_be64:
   68|  1.31k|unaligned_##ABBREV(const TYPE *p)               \
   69|  1.31k|{                                               \
   70|  1.31k|    return (struct unaligned_##ABBREV *) p;     \
   71|  1.31k|}                                               \
ox-stat.c:get_unaligned_be32:
   74|  4.72k|get_unaligned_##ABBREV(const TYPE *p)           \
   75|  4.72k|{                                               \
   76|  4.72k|    return unaligned_##ABBREV(p)->x;            \
   77|  4.72k|}                                               \
ox-stat.c:unaligned_be32:
   68|  4.72k|unaligned_##ABBREV(const TYPE *p)               \
   69|  4.72k|{                                               \
   70|  4.72k|    return (struct unaligned_##ABBREV *) p;     \
   71|  4.72k|}                                               \

xcalloc__:
  121|  27.1k|{
  122|  27.1k|    void *p = count && size ? calloc(count, size) : malloc(1);
  ------------------
  |  Branch (122:15): [True: 27.0k, False: 164]
  |  Branch (122:24): [True: 27.0k, False: 0]
  ------------------
  123|  27.1k|    if (p == NULL) {
  ------------------
  |  Branch (123:9): [True: 0, False: 27.1k]
  ------------------
  124|      0|        out_of_memory();
  125|      0|    }
  126|  27.1k|    return p;
  127|  27.1k|}
xzalloc__:
  131|  17.8k|{
  132|  17.8k|    return xcalloc__(1, size);
  133|  17.8k|}
xmalloc__:
  137|  1.05M|{
  138|  1.05M|    void *p = malloc(size ? size : 1);
  ------------------
  |  Branch (138:22): [True: 1.04M, False: 2.85k]
  ------------------
  139|  1.05M|    if (p == NULL) {
  ------------------
  |  Branch (139:9): [True: 0, False: 1.05M]
  ------------------
  140|      0|        out_of_memory();
  141|      0|    }
  142|  1.05M|    return p;
  143|  1.05M|}
xrealloc__:
  147|  14.3M|{
  148|  14.3M|    p = realloc(p, size ? size : 1);
  ------------------
  |  Branch (148:20): [True: 14.3M, False: 0]
  ------------------
  149|  14.3M|    if (p == NULL) {
  ------------------
  |  Branch (149:9): [True: 0, False: 14.3M]
  ------------------
  150|      0|        out_of_memory();
  151|      0|    }
  152|  14.3M|    return p;
  153|  14.3M|}
xcalloc:
  157|  9.34k|{
  158|  9.34k|    COVERAGE_INC(util_xalloc);
  ------------------
  |  |   83|  9.34k|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  9.34k|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  159|  9.34k|    return xcalloc__(count, size);
  160|  9.34k|}
xzalloc:
  164|  17.8k|{
  165|  17.8k|    COVERAGE_INC(util_xalloc);
  ------------------
  |  |   83|  17.8k|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  17.8k|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  166|  17.8k|    return xzalloc__(size);
  167|  17.8k|}
xmalloc:
  171|  1.05M|{
  172|  1.05M|    COVERAGE_INC(util_xalloc);
  ------------------
  |  |   83|  1.05M|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  1.05M|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  173|  1.05M|    return xmalloc__(size);
  174|  1.05M|}
xrealloc:
  178|  14.3M|{
  179|  14.3M|    COVERAGE_INC(util_xalloc);
  ------------------
  |  |   83|  14.3M|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  14.3M|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  180|  14.3M|    return xrealloc__(p, size);
  181|  14.3M|}
xmemdup:
  185|  5.35k|{
  186|  5.35k|    void *p = xmalloc(size);
  187|  5.35k|    nullable_memcpy(p, p_, size);
  188|  5.35k|    return p;
  189|  5.35k|}
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|  10.5k|{
  221|  10.5k|    va_list args2;
  222|  10.5k|    size_t needed;
  223|  10.5k|    char *s;
  224|       |
  225|  10.5k|    ovs_assert(format);
  ------------------
  |  |   62|  10.5k|#define ovs_assert ovs_ignore
  ------------------
  226|       |
  227|  10.5k|    va_copy(args2, args);
  228|  10.5k|    needed = vsnprintf(NULL, 0, format, args);
  229|       |
  230|  10.5k|    s = xmalloc(needed + 1);
  231|       |
  232|  10.5k|    vsnprintf(s, needed + 1, format, args2);
  233|  10.5k|    va_end(args2);
  234|       |
  235|  10.5k|    return s;
  236|  10.5k|}
x2nrealloc:
  240|  41.1k|{
  241|  41.1k|    *n = *n == 0 ? 1 : 2 * *n;
  ------------------
  |  Branch (241:10): [True: 23.3k, False: 17.8k]
  ------------------
  242|  41.1k|    return xrealloc(p, *n * s);
  243|  41.1k|}
ovs_strlcpy:
  381|  81.6k|{
  382|  81.6k|    if (size > 0) {
  ------------------
  |  Branch (382:9): [True: 81.6k, False: 0]
  ------------------
  383|  81.6k|        size_t len = strnlen(src, size - 1);
  384|  81.6k|        memcpy(dst, src, len);
  385|  81.6k|        dst[len] = '\0';
  386|  81.6k|    }
  387|  81.6k|}
ovs_ignore:
 1265|  49.6M|void ovs_ignore(bool x OVS_UNUSED) { }
is_all_byte:
 1356|   773k|{
 1357|   773k|    const uint8_t *p = p_;
 1358|   773k|    size_t i;
 1359|       |
 1360|  18.7M|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (1360:17): [True: 18.3M, False: 378k]
  ------------------
 1361|  18.3M|        if (p[i] != byte) {
  ------------------
  |  Branch (1361:13): [True: 395k, False: 17.9M]
  ------------------
 1362|   395k|            return false;
 1363|   395k|        }
 1364|  18.3M|    }
 1365|   378k|    return true;
 1366|   773k|}
is_all_zeros:
 1371|   343k|{
 1372|   343k|    return is_all_byte(p, n, 0);
 1373|   343k|}
is_all_ones:
 1378|   429k|{
 1379|   429k|    return is_all_byte(p, n, 0xff);
 1380|   429k|}
bitwise_copy:
 1414|  55.3k|{
 1415|  55.3k|    const uint8_t *src = src_;
 1416|  55.3k|    uint8_t *dst = dst_;
 1417|       |
 1418|  55.3k|    src += src_len - (src_ofs / 8 + 1);
 1419|  55.3k|    src_ofs %= 8;
 1420|       |
 1421|  55.3k|    dst += dst_len - (dst_ofs / 8 + 1);
 1422|  55.3k|    dst_ofs %= 8;
 1423|       |
 1424|  55.3k|    if (src_ofs == 0 && dst_ofs == 0) {
  ------------------
  |  Branch (1424:9): [True: 54.5k, False: 881]
  |  Branch (1424:25): [True: 29.3k, False: 25.1k]
  ------------------
 1425|  29.3k|        unsigned int n_bytes = n_bits / 8;
 1426|  29.3k|        if (n_bytes) {
  ------------------
  |  Branch (1426:13): [True: 21.0k, False: 8.29k]
  ------------------
 1427|  21.0k|            dst -= n_bytes - 1;
 1428|  21.0k|            src -= n_bytes - 1;
 1429|  21.0k|            memcpy(dst, src, n_bytes);
 1430|       |
 1431|  21.0k|            n_bits %= 8;
 1432|  21.0k|            src--;
 1433|  21.0k|            dst--;
 1434|  21.0k|        }
 1435|  29.3k|        if (n_bits) {
  ------------------
  |  Branch (1435:13): [True: 18.9k, False: 10.3k]
  ------------------
 1436|  18.9k|            uint8_t mask = (1 << n_bits) - 1;
 1437|  18.9k|            *dst = (*dst & ~mask) | (*src & mask);
 1438|  18.9k|        }
 1439|  29.3k|    } else {
 1440|   148k|        while (n_bits > 0) {
  ------------------
  |  Branch (1440:16): [True: 122k, False: 26.0k]
  ------------------
 1441|   122k|            unsigned int max_copy = 8 - MAX(src_ofs, dst_ofs);
  ------------------
  |  |   95|   122k|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (95:20): [True: 53.3k, False: 68.8k]
  |  |  ------------------
  ------------------
 1442|   122k|            unsigned int chunk = MIN(n_bits, max_copy);
  ------------------
  |  |   91|   122k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (91:20): [True: 20.4k, False: 101k]
  |  |  ------------------
  ------------------
 1443|   122k|            uint8_t mask = ((1 << chunk) - 1) << dst_ofs;
 1444|       |
 1445|   122k|            *dst &= ~mask;
 1446|   122k|            *dst |= ((*src >> src_ofs) << dst_ofs) & mask;
 1447|       |
 1448|   122k|            src_ofs += chunk;
 1449|   122k|            if (src_ofs == 8) {
  ------------------
  |  Branch (1449:17): [True: 45.6k, False: 76.5k]
  ------------------
 1450|  45.6k|                src--;
 1451|  45.6k|                src_ofs = 0;
 1452|  45.6k|            }
 1453|   122k|            dst_ofs += chunk;
 1454|   122k|            if (dst_ofs == 8) {
  ------------------
  |  Branch (1454:17): [True: 56.0k, False: 66.1k]
  ------------------
 1455|  56.0k|                dst--;
 1456|  56.0k|                dst_ofs = 0;
 1457|  56.0k|            }
 1458|   122k|            n_bits -= chunk;
 1459|   122k|        }
 1460|  26.0k|    }
 1461|  55.3k|}
bitwise_one:
 1526|  42.8k|{
 1527|  42.8k|    uint8_t *dst = dst_;
 1528|       |
 1529|  42.8k|    if (!n_bits) {
  ------------------
  |  Branch (1529:9): [True: 0, False: 42.8k]
  ------------------
 1530|      0|        return;
 1531|      0|    }
 1532|       |
 1533|  42.8k|    dst += dst_len - (dst_ofs / 8 + 1);
 1534|  42.8k|    dst_ofs %= 8;
 1535|       |
 1536|  42.8k|    if (dst_ofs) {
  ------------------
  |  Branch (1536:9): [True: 23.2k, False: 19.6k]
  ------------------
 1537|  23.2k|        unsigned int chunk = MIN(n_bits, 8 - dst_ofs);
  ------------------
  |  |   91|  23.2k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (91:20): [True: 2.51k, False: 20.6k]
  |  |  ------------------
  ------------------
 1538|       |
 1539|  23.2k|        *dst |= ((1 << chunk) - 1) << dst_ofs;
 1540|       |
 1541|  23.2k|        n_bits -= chunk;
 1542|  23.2k|        if (!n_bits) {
  ------------------
  |  Branch (1542:13): [True: 3.24k, False: 19.9k]
  ------------------
 1543|  3.24k|            return;
 1544|  3.24k|        }
 1545|       |
 1546|  19.9k|        dst--;
 1547|  19.9k|    }
 1548|       |
 1549|  95.1k|    while (n_bits >= 8) {
  ------------------
  |  Branch (1549:12): [True: 55.5k, False: 39.6k]
  ------------------
 1550|  55.5k|        *dst-- = 0xff;
 1551|  55.5k|        n_bits -= 8;
 1552|  55.5k|    }
 1553|       |
 1554|  39.6k|    if (n_bits) {
  ------------------
  |  Branch (1554:9): [True: 31.0k, False: 8.61k]
  ------------------
 1555|  31.0k|        *dst |= (1 << n_bits) - 1;
 1556|  31.0k|    }
 1557|  39.6k|}
bitwise_scan:
 1630|  9.77k|{
 1631|  9.77k|    unsigned int ofs;
 1632|       |
 1633|  2.42M|    for (ofs = start; ofs < end; ofs++) {
  ------------------
  |  Branch (1633:23): [True: 2.41M, False: 4.33k]
  ------------------
 1634|  2.41M|        if (bitwise_get_bit(p, len, ofs) == target) {
  ------------------
  |  Branch (1634:13): [True: 5.44k, False: 2.41M]
  ------------------
 1635|  5.44k|            break;
 1636|  5.44k|        }
 1637|  2.41M|    }
 1638|  9.77k|    return ofs;
 1639|  9.77k|}
bitwise_put:
 1719|  8.90k|{
 1720|  8.90k|    ovs_be64 n_value = htonll(value);
 1721|  8.90k|    bitwise_copy(&n_value, sizeof n_value, 0,
 1722|  8.90k|                 dst, dst_len, dst_ofs,
 1723|  8.90k|                 n_bits);
 1724|  8.90k|}
bitwise_get:
 1742|  3.59k|{
 1743|  3.59k|    ovs_be64 value = htonll(0);
 1744|       |
 1745|  3.59k|    bitwise_copy(src, src_len, src_ofs,
 1746|  3.59k|                 &value, sizeof value, 0,
 1747|  3.59k|                 n_bits);
 1748|  3.59k|    return ntohll(value);
 1749|  3.59k|}
bitwise_get_bit:
 1765|  2.41M|{
 1766|  2.41M|    const uint8_t *src = src_;
 1767|       |
 1768|  2.41M|    return (src[len - (ofs / 8 + 1)] & (1u << (ofs % 8))) != 0;
 1769|  2.41M|}

ofp-protocol.c:rightmost_1bit:
  382|   143k|{
  383|   143k|    return x & -x;
  384|   143k|}
ofp-protocol.c:zero_rightmost_1bit:
  390|   996k|{
  391|   996k|    return x & (x - 1);
  392|   996k|}
ofp-protocol.c:raw_ctz:
  261|   996k|{
  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|   996k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 996k, False: 0]
  |  Branch (265:54): [True: 996k, False: 0]
  ------------------
  266|   996k|            ? __builtin_ctz(n)
  267|   996k|            : __builtin_ctzll(n));
  268|   996k|}
ofp-table.c:raw_ctz:
  261|   547k|{
  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|   547k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 0, False: 547k]
  |  Branch (265:54): [True: 0, False: 0]
  ------------------
  266|   547k|            ? __builtin_ctz(n)
  267|   547k|            : __builtin_ctzll(n));
  268|   547k|}
ofpbuf.c:nullable_memset:
  198|   159k|{
  199|   159k|    if (n) {
  ------------------
  |  Branch (199:9): [True: 159k, False: 58]
  ------------------
  200|   159k|        memset(dst, c, n);
  201|   159k|    }
  202|   159k|}
util.c:nullable_memcpy:
  188|  5.35k|{
  189|  5.35k|    if (n) {
  ------------------
  |  Branch (189:9): [True: 5.35k, False: 0]
  ------------------
  190|  5.35k|        memcpy(dst, src, n);
  191|  5.35k|    }
  192|  5.35k|}
flow.c:ovs_u128_is_zero:
  488|   100k|{
  489|   100k|    return !(val.u64.hi || val.u64.lo);
  ------------------
  |  Branch (489:14): [True: 0, False: 100k]
  |  Branch (489:28): [True: 0, False: 100k]
  ------------------
  490|   100k|}
flow.c:rightmost_1bit:
  382|   118k|{
  383|   118k|    return x & -x;
  384|   118k|}
flow.c:count_1bits:
  332|   116k|{
  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|   116k|    const uint64_t h55 = UINT64_C(0x5555555555555555);
  341|   116k|    const uint64_t h33 = UINT64_C(0x3333333333333333);
  342|   116k|    const uint64_t h0F = UINT64_C(0x0F0F0F0F0F0F0F0F);
  343|       |    const uint64_t h01 = UINT64_C(0x0101010101010101);
  344|   116k|    x -= (x >> 1) & h55;               /* Count of each 2 bits in-place. */
  345|   116k|    x = (x & h33) + ((x >> 2) & h33);  /* Count of each 4 bits in-place. */
  346|   116k|    x = (x + (x >> 4)) & h0F;          /* Count of each 8 bits in-place. */
  347|   116k|    return (x * h01) >> 56;            /* Sum of all bytes. */
  348|   116k|#endif
  349|   116k|}
flow.c:raw_ctz:
  261|  1.24M|{
  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|  1.24M|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 0, False: 1.24M]
  |  Branch (265:54): [True: 0, False: 0]
  ------------------
  266|  1.24M|            ? __builtin_ctz(n)
  267|  1.24M|            : __builtin_ctzll(n));
  268|  1.24M|}
flow.c:zero_rightmost_1bit:
  390|  1.24M|{
  391|  1.24M|    return x & (x - 1);
  392|  1.24M|}
match.c:ovs_u128_and:
  515|  7.61k|{
  516|  7.61k|    ovs_u128 dst;
  517|       |
  518|  7.61k|    dst.u64.hi = a.u64.hi & b.u64.hi;
  519|  7.61k|    dst.u64.lo = a.u64.lo & b.u64.lo;
  520|       |
  521|  7.61k|    return dst;
  522|  7.61k|}
match.c:ovs_u128_is_zero:
  488|   319k|{
  489|   319k|    return !(val.u64.hi || val.u64.lo);
  ------------------
  |  Branch (489:14): [True: 1.09k, False: 318k]
  |  Branch (489:28): [True: 618, False: 318k]
  ------------------
  490|   319k|}
meta-flow.c:ovs_u128_is_zero:
  488|  8.82k|{
  489|  8.82k|    return !(val.u64.hi || val.u64.lo);
  ------------------
  |  Branch (489:14): [True: 194, False: 8.63k]
  |  Branch (489:28): [True: 7, False: 8.62k]
  ------------------
  490|  8.82k|}
meta-flow.c:raw_ctz:
  261|  9.24k|{
  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|  9.24k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 0, False: 9.24k]
  |  Branch (265:54): [True: 0, False: 0]
  ------------------
  266|  9.24k|            ? __builtin_ctz(n)
  267|  9.24k|            : __builtin_ctzll(n));
  268|  9.24k|}
nx-match.c:raw_ctz:
  261|  10.6k|{
  262|       |    /* With GCC 4.7 on 32-bit x86, if a 32-bit integer is passed as 'n', using
  263|       |     * a plain __builtin_ctzll() here always generates an out-of-line function
  264|       |     * call.  The test below helps it to emit a single 'bsf' instruction. */
  265|  10.6k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 0, False: 10.6k]
  |  Branch (265:54): [True: 0, False: 0]
  ------------------
  266|  10.6k|            ? __builtin_ctz(n)
  267|  10.6k|            : __builtin_ctzll(n));
  268|  10.6k|}
ofp-actions.c:log_2_ceil:
  322|  3.35k|{
  323|  3.35k|    return log_2_floor(n) + !is_pow2(n);
  324|  3.35k|}
ofp-actions.c:log_2_floor:
  314|  3.35k|{
  315|  3.35k|    return 63 - raw_clz64(n);
  316|  3.35k|}
ofp-actions.c:raw_clz64:
  272|  3.35k|{
  273|  3.35k|    return __builtin_clzll(n);
  274|  3.35k|}
ofp-actions.c:rightmost_1bit_idx:
  398|   152k|{
  399|   152k|    return ctz64(x);
  400|   152k|}
ofp-actions.c:ctz64:
  291|   152k|{
  292|   152k|    return n ? raw_ctz(n) : 64;
  ------------------
  |  Branch (292:12): [True: 152k, False: 0]
  ------------------
  293|   152k|}
ofp-actions.c:raw_ctz:
  261|   152k|{
  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|   152k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 0, False: 152k]
  |  Branch (265:54): [True: 0, False: 0]
  ------------------
  266|   152k|            ? __builtin_ctz(n)
  267|   152k|            : __builtin_ctzll(n));
  268|   152k|}
ofp-actions.c:zero_rightmost_1bit:
  390|   152k|{
  391|   152k|    return x & (x - 1);
  392|   152k|}
ofp-ct.c:ovs_u128_is_zero:
  488|  6.03k|{
  489|  6.03k|    return !(val.u64.hi || val.u64.lo);
  ------------------
  |  Branch (489:14): [True: 1.12k, False: 4.91k]
  |  Branch (489:28): [True: 226, False: 4.69k]
  ------------------
  490|  6.03k|}
ofp-ct.c:ovs_u128_is_ones:
  495|  1.34k|{
  496|  1.34k|    return ovs_u128_equals(val, OVS_U128_MAX);
  497|  1.34k|}
ofp-ct.c:ovs_u128_equals:
  481|  1.34k|{
  482|  1.34k|    return (a.u64.hi == b.u64.hi) && (a.u64.lo == b.u64.lo);
  ------------------
  |  Branch (482:12): [True: 444, False: 902]
  |  Branch (482:38): [True: 181, False: 263]
  ------------------
  483|  1.34k|}
ofp-group.c:count_1bits:
  332|  18.6k|{
  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|  18.6k|    const uint64_t h55 = UINT64_C(0x5555555555555555);
  341|  18.6k|    const uint64_t h33 = UINT64_C(0x3333333333333333);
  342|  18.6k|    const uint64_t h0F = UINT64_C(0x0F0F0F0F0F0F0F0F);
  343|       |    const uint64_t h01 = UINT64_C(0x0101010101010101);
  344|  18.6k|    x -= (x >> 1) & h55;               /* Count of each 2 bits in-place. */
  345|  18.6k|    x = (x & h33) + ((x >> 2) & h33);  /* Count of each 4 bits in-place. */
  346|  18.6k|    x = (x + (x >> 4)) & h0F;          /* Count of each 8 bits in-place. */
  347|  18.6k|    return (x * h01) >> 56;            /* Sum of all bytes. */
  348|  18.6k|#endif
  349|  18.6k|}
packets.c:ctz32:
  284|  12.5k|{
  285|  12.5k|    return n ? raw_ctz(n) : 32;
  ------------------
  |  Branch (285:12): [True: 12.5k, False: 0]
  ------------------
  286|  12.5k|}
packets.c:raw_ctz:
  261|  12.5k|{
  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|  12.5k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 12.5k, False: 0]
  |  Branch (265:54): [True: 12.5k, False: 0]
  ------------------
  266|  12.5k|            ? __builtin_ctz(n)
  267|  12.5k|            : __builtin_ctzll(n));
  268|  12.5k|}
tun-metadata.c:raw_ctz:
  261|  12.8k|{
  262|       |    /* With GCC 4.7 on 32-bit x86, if a 32-bit integer is passed as 'n', using
  263|       |     * a plain __builtin_ctzll() here always generates an out-of-line function
  264|       |     * call.  The test below helps it to emit a single 'bsf' instruction. */
  265|  12.8k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 0, False: 12.8k]
  |  Branch (265:54): [True: 0, False: 0]
  ------------------
  266|  12.8k|            ? __builtin_ctz(n)
  267|  12.8k|            : __builtin_ctzll(n));
  268|  12.8k|}
tun-metadata.c:zero_rightmost_1bit:
  390|  12.8k|{
  391|  12.8k|    return x & (x - 1);
  392|  12.8k|}

uuid_is_zero:
  204|  98.7k|{
  205|  98.7k|    return (!uuid->parts[0] && !uuid->parts[1]
  ------------------
  |  Branch (205:13): [True: 98.4k, False: 305]
  |  Branch (205:32): [True: 96.4k, False: 1.98k]
  ------------------
  206|  96.4k|            && !uuid->parts[2] && !uuid->parts[3]);
  ------------------
  |  Branch (206:16): [True: 95.4k, False: 994]
  |  Branch (206:35): [True: 95.4k, False: 23]
  ------------------
  207|  98.7k|}

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|   967k|{
 1001|   967k|    return module->min_level >= level;
 1002|   967k|}
vlog_should_drop:
 1330|   965k|{
 1331|   965k|    if (!module->honor_rate_limits) {
  ------------------
  |  Branch (1331:9): [True: 0, False: 965k]
  ------------------
 1332|      0|        return false;
 1333|      0|    }
 1334|       |
 1335|   965k|    if (!vlog_is_enabled(module, level)) {
  ------------------
  |  Branch (1335:9): [True: 965k, False: 0]
  ------------------
 1336|   965k|        return true;
 1337|   965k|    }
 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|  40.0k|{
 1374|  40.0k|    if (!vlog_should_drop(module, level, rl)) {
  ------------------
  |  Branch (1374:9): [True: 0, False: 40.0k]
  ------------------
 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|  40.0k|}
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|  40.4k|{
   11|  40.4k|    if (size < sizeof(struct ofp_header)) {
  ------------------
  |  Branch (11:9): [True: 4, False: 40.4k]
  ------------------
   12|      4|        return 0;
   13|      4|    }
   14|       |
   15|  40.4k|    static bool isInit = false;
   16|  40.4k|    if (!isInit) {
  ------------------
  |  Branch (16:9): [True: 1, False: 40.4k]
  ------------------
   17|      1|        vlog_set_verbosity("off");
   18|      1|        isInit = true;
   19|      1|    }
   20|       |
   21|  40.4k|    struct ofpbuf b;
   22|  40.4k|    ofpbuf_use_const(&b, data, size);
   23|  3.01M|    for (;;) {
   24|       |        /* Check if ofpbuf contains ofp header. */
   25|  3.01M|        struct ofp_header *oh = ofpbuf_at(&b, 0, sizeof *oh);
   26|  3.01M|        if (!oh) {
  ------------------
  |  Branch (26:13): [True: 34.1k, False: 2.97M]
  ------------------
   27|  34.1k|            break;
   28|  34.1k|        }
   29|       |
   30|       |        /* Check if length is geq than lower bound. */
   31|  2.97M|        size_t length = ntohs(oh->length);
   32|  2.97M|        if (length < sizeof *oh) {
  ------------------
  |  Branch (32:13): [True: 1.29k, False: 2.97M]
  ------------------
   33|  1.29k|            break;
   34|  1.29k|        }
   35|       |
   36|       |        /* Check if ofpbuf contains payload. */
   37|  2.97M|        size_t tail_len = length - sizeof *oh;
   38|  2.97M|        void *tail = ofpbuf_at(&b, sizeof *oh, tail_len);
   39|  2.97M|        if (!tail) {
  ------------------
  |  Branch (39:13): [True: 5.04k, False: 2.97M]
  ------------------
   40|  5.04k|            break;
   41|  5.04k|        }
   42|       |
   43|  2.97M|        ofp_print(stdout, ofpbuf_pull(&b, length), length, NULL, NULL, 2);
   44|  2.97M|    }
   45|  40.4k|    ofpbuf_uninit(&b);
   46|  40.4k|    return 0;
   47|  40.4k|}

