ofp-print.c:ds_put_char:
   94|  1.02M|{
   95|  1.02M|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 1.01M, False: 11.6k]
  ------------------
   96|  1.01M|        ds->string[ds->length++] = c;
   97|  1.01M|        ds->string[ds->length] = '\0';
   98|  1.01M|    } else {
   99|  11.6k|        ds_put_char__(ds, c);
  100|  11.6k|    }
  101|  1.02M|}
ofp-queue.c:ds_put_char:
   94|  47.9k|{
   95|  47.9k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 44.5k, False: 3.38k]
  ------------------
   96|  44.5k|        ds->string[ds->length++] = c;
   97|  44.5k|        ds->string[ds->length] = '\0';
   98|  44.5k|    } else {
   99|  3.38k|        ds_put_char__(ds, c);
  100|  3.38k|    }
  101|  47.9k|}
ofp-switch.c:ds_put_char:
   94|  6.45k|{
   95|  6.45k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 6.27k, False: 180]
  ------------------
   96|  6.27k|        ds->string[ds->length++] = c;
   97|  6.27k|        ds->string[ds->length] = '\0';
   98|  6.27k|    } else {
   99|    180|        ds_put_char__(ds, c);
  100|    180|    }
  101|  6.45k|}
ofp-table.c:ds_put_char:
   94|   844k|{
   95|   844k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 840k, False: 4.09k]
  ------------------
   96|   840k|        ds->string[ds->length++] = c;
   97|   840k|        ds->string[ds->length] = '\0';
   98|   840k|    } else {
   99|  4.09k|        ds_put_char__(ds, c);
  100|  4.09k|    }
  101|   844k|}
dynamic-string.c:ds_put_char:
   94|  48.2M|{
   95|  48.2M|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 48.0M, False: 290k]
  ------------------
   96|  48.0M|        ds->string[ds->length++] = c;
   97|  48.0M|        ds->string[ds->length] = '\0';
   98|  48.0M|    } else {
   99|   290k|        ds_put_char__(ds, c);
  100|   290k|    }
  101|  48.2M|}
flow.c:ds_put_char:
   94|  41.9k|{
   95|  41.9k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 40.6k, False: 1.26k]
  ------------------
   96|  40.6k|        ds->string[ds->length++] = c;
   97|  40.6k|        ds->string[ds->length] = '\0';
   98|  40.6k|    } else {
   99|  1.26k|        ds_put_char__(ds, c);
  100|  1.26k|    }
  101|  41.9k|}
match.c:ds_put_char:
   94|   341k|{
   95|   341k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 335k, False: 6.41k]
  ------------------
   96|   335k|        ds->string[ds->length++] = c;
   97|   335k|        ds->string[ds->length] = '\0';
   98|   335k|    } else {
   99|  6.41k|        ds_put_char__(ds, c);
  100|  6.41k|    }
  101|   341k|}
meta-flow.c:ds_put_char:
   94|    424|{
   95|    424|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 417, False: 7]
  ------------------
   96|    417|        ds->string[ds->length++] = c;
   97|    417|        ds->string[ds->length] = '\0';
   98|    417|    } else {
   99|      7|        ds_put_char__(ds, c);
  100|      7|    }
  101|    424|}
netdev.c:ds_put_char:
   94|  75.3k|{
   95|  75.3k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 75.3k, False: 37]
  ------------------
   96|  75.3k|        ds->string[ds->length++] = c;
   97|  75.3k|        ds->string[ds->length] = '\0';
   98|  75.3k|    } else {
   99|     37|        ds_put_char__(ds, c);
  100|     37|    }
  101|  75.3k|}
nx-match.c:ds_put_char:
   94|  13.9k|{
   95|  13.9k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 12.7k, False: 1.13k]
  ------------------
   96|  12.7k|        ds->string[ds->length++] = c;
   97|  12.7k|        ds->string[ds->length] = '\0';
   98|  12.7k|    } else {
   99|  1.13k|        ds_put_char__(ds, c);
  100|  1.13k|    }
  101|  13.9k|}
ofp-actions.c:ds_put_char:
   94|  62.5k|{
   95|  62.5k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 58.9k, False: 3.60k]
  ------------------
   96|  58.9k|        ds->string[ds->length++] = c;
   97|  58.9k|        ds->string[ds->length] = '\0';
   98|  58.9k|    } else {
   99|  3.60k|        ds_put_char__(ds, c);
  100|  3.60k|    }
  101|  62.5k|}
ofp-bundle.c:ds_put_char:
   94|  4.75k|{
   95|  4.75k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 4.75k, False: 0]
  ------------------
   96|  4.75k|        ds->string[ds->length++] = c;
   97|  4.75k|        ds->string[ds->length] = '\0';
   98|  4.75k|    } else {
   99|      0|        ds_put_char__(ds, c);
  100|      0|    }
  101|  4.75k|}
ofp-connection.c:ds_put_char:
   94|  73.4k|{
   95|  73.4k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 73.0k, False: 380]
  ------------------
   96|  73.0k|        ds->string[ds->length++] = c;
   97|  73.0k|        ds->string[ds->length] = '\0';
   98|  73.0k|    } else {
   99|    380|        ds_put_char__(ds, c);
  100|    380|    }
  101|  73.4k|}
ofp-ct.c:ds_put_char:
   94|  1.66k|{
   95|  1.66k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 1.53k, False: 137]
  ------------------
   96|  1.53k|        ds->string[ds->length++] = c;
   97|  1.53k|        ds->string[ds->length] = '\0';
   98|  1.53k|    } else {
   99|    137|        ds_put_char__(ds, c);
  100|    137|    }
  101|  1.66k|}
ofp-flow.c:ds_put_char:
   94|   120k|{
   95|   120k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 113k, False: 6.84k]
  ------------------
   96|   113k|        ds->string[ds->length++] = c;
   97|   113k|        ds->string[ds->length] = '\0';
   98|   113k|    } else {
   99|  6.84k|        ds_put_char__(ds, c);
  100|  6.84k|    }
  101|   120k|}
ofp-group.c:ds_put_char:
   94|  61.3k|{
   95|  61.3k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 56.5k, False: 4.80k]
  ------------------
   96|  56.5k|        ds->string[ds->length++] = c;
   97|  56.5k|        ds->string[ds->length] = '\0';
   98|  56.5k|    } else {
   99|  4.80k|        ds_put_char__(ds, c);
  100|  4.80k|    }
  101|  61.3k|}
ofp-ipfix.c:ds_put_char:
   94|  23.8k|{
   95|  23.8k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 23.3k, False: 518]
  ------------------
   96|  23.3k|        ds->string[ds->length++] = c;
   97|  23.3k|        ds->string[ds->length] = '\0';
   98|  23.3k|    } else {
   99|    518|        ds_put_char__(ds, c);
  100|    518|    }
  101|  23.8k|}
ofp-match.c:ds_put_char:
   94|    692|{
   95|    692|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 692, False: 0]
  ------------------
   96|    692|        ds->string[ds->length++] = c;
   97|    692|        ds->string[ds->length] = '\0';
   98|    692|    } else {
   99|      0|        ds_put_char__(ds, c);
  100|      0|    }
  101|    692|}
ofp-meter.c:ds_put_char:
   94|  7.68k|{
   95|  7.68k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 6.56k, False: 1.12k]
  ------------------
   96|  6.56k|        ds->string[ds->length++] = c;
   97|  6.56k|        ds->string[ds->length] = '\0';
   98|  6.56k|    } else {
   99|  1.12k|        ds_put_char__(ds, c);
  100|  1.12k|    }
  101|  7.68k|}
ofp-monitor.c:ds_put_char:
   94|  7.81k|{
   95|  7.81k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 6.51k, False: 1.30k]
  ------------------
   96|  6.51k|        ds->string[ds->length++] = c;
   97|  6.51k|        ds->string[ds->length] = '\0';
   98|  6.51k|    } else {
   99|  1.30k|        ds_put_char__(ds, c);
  100|  1.30k|    }
  101|  7.81k|}
ofp-packet.c:ds_put_char:
   94|  77.1k|{
   95|  77.1k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 75.1k, False: 2.01k]
  ------------------
   96|  75.1k|        ds->string[ds->length++] = c;
   97|  75.1k|        ds->string[ds->length] = '\0';
   98|  75.1k|    } else {
   99|  2.01k|        ds_put_char__(ds, c);
  100|  2.01k|    }
  101|  77.1k|}
ofp-port.c:ds_put_char:
   94|   113k|{
   95|   113k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 109k, False: 3.50k]
  ------------------
   96|   109k|        ds->string[ds->length++] = c;
   97|   109k|        ds->string[ds->length] = '\0';
   98|   109k|    } else {
   99|  3.50k|        ds_put_char__(ds, c);
  100|  3.50k|    }
  101|   113k|}
packets.c:ds_put_char:
   94|    897|{
   95|    897|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 897, False: 0]
  ------------------
   96|    897|        ds->string[ds->length++] = c;
   97|    897|        ds->string[ds->length] = '\0';
   98|    897|    } else {
   99|      0|        ds_put_char__(ds, c);
  100|      0|    }
  101|    897|}
tun-metadata.c:ds_put_char:
   94|  11.0k|{
   95|  11.0k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 10.4k, False: 606]
  ------------------
   96|  10.4k|        ds->string[ds->length++] = c;
   97|  10.4k|        ds->string[ds->length] = '\0';
   98|  10.4k|    } else {
   99|    606|        ds_put_char__(ds, c);
  100|    606|    }
  101|  11.0k|}
bundle.c:ds_put_char:
   94|  5.52k|{
   95|  5.52k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 5.04k, False: 488]
  ------------------
   96|  5.04k|        ds->string[ds->length++] = c;
   97|  5.04k|        ds->string[ds->length] = '\0';
   98|  5.04k|    } else {
   99|    488|        ds_put_char__(ds, c);
  100|    488|    }
  101|  5.52k|}
learn.c:ds_put_char:
   94|  20.9k|{
   95|  20.9k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 20.5k, False: 410]
  ------------------
   96|  20.5k|        ds->string[ds->length++] = c;
   97|  20.5k|        ds->string[ds->length] = '\0';
   98|  20.5k|    } else {
   99|    410|        ds_put_char__(ds, c);
  100|    410|    }
  101|  20.9k|}

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|  15.6M|{
  368|  15.6M|    return hmap->buckets[hash & hmap->mask];
  369|  15.6M|}
nx-match.c:hmap_next_in_bucket:
  381|  14.4M|{
  382|  14.4M|    return node->next;
  383|  14.4M|}
ofp-actions.c:hmap_first_with_hash:
  359|   202k|{
  360|   202k|    return hmap_next_with_hash__(hmap->buckets[hash & hmap->mask], hash);
  361|   202k|}
ofp-actions.c:hmap_next_with_hash__:
  348|   202k|{
  349|   351k|    while (node != NULL && node->hash != hash) {
  ------------------
  |  Branch (349:12): [True: 341k, False: 9.10k]
  |  Branch (349:28): [True: 149k, False: 192k]
  ------------------
  350|   149k|        node = node->next;
  351|   149k|    }
  352|   202k|    return CONST_CAST(struct hmap_node *, node);
  ------------------
  |  |   85|   202k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   202k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   202k|     (TYPE) (POINTER))
  ------------------
  353|   202k|}
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|  2.47M|{
  360|  2.47M|    return hmap_next_with_hash__(hmap->buckets[hash & hmap->mask], hash);
  361|  2.47M|}
ofp-msgs.c:hmap_next_with_hash__:
  348|  2.47M|{
  349|  3.74M|    while (node != NULL && node->hash != hash) {
  ------------------
  |  Branch (349:12): [True: 3.42M, False: 319k]
  |  Branch (349:28): [True: 1.26M, False: 2.15M]
  ------------------
  350|  1.26M|        node = node->next;
  351|  1.26M|    }
  352|  2.47M|    return CONST_CAST(struct hmap_node *, node);
  ------------------
  |  |   85|  2.47M|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  2.47M|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  2.47M|     (TYPE) (POINTER))
  ------------------
  353|  2.47M|}
ofp-msgs.c:hmap_next_with_hash:
  395|    323|{
  396|    323|    return hmap_next_with_hash__(node->next, node->hash);
  397|    323|}
hmap.c:hmap_insert_fast:
  289|  3.04k|{
  290|  3.04k|    struct hmap_node **bucket = &hmap->buckets[hash & hmap->mask];
  291|  3.04k|    node->hash = hash;
  292|  3.04k|    node->next = *bucket;
  293|  3.04k|    *bucket = node;
  294|  3.04k|    hmap->n++;
  295|  3.04k|}

ofpbuf.c:ovs_list_poison:
  157|  1.11M|{
  158|  1.11M|    *list = OVS_LIST_POISON;
  159|  1.11M|}
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|  39.0k|{
  321|  39.0k|    return list->next == list;
  322|  39.0k|}
ofp-group.c:ovs_list_pop_front:
  261|  9.63k|{
  262|  9.63k|    struct ovs_list *front = list->next;
  263|       |
  264|  9.63k|    ovs_list_remove(front);
  265|  9.63k|    return front;
  266|  9.63k|}
ofp-group.c:ovs_list_remove:
  251|  9.63k|{
  252|  9.63k|    elem->prev->next = elem->next;
  253|  9.63k|    elem->next->prev = elem->prev;
  254|  9.63k|    return elem->next;
  255|  9.63k|}
ofp-group.c:ovs_list_push_back:
  204|  9.63k|{
  205|  9.63k|    ovs_list_insert(list, elem);
  206|  9.63k|}
ofp-group.c:ovs_list_insert:
  164|  9.63k|{
  165|  9.63k|    elem->prev = before->prev;
  166|  9.63k|    elem->next = before;
  167|  9.63k|    before->prev->next = elem;
  168|  9.63k|    before->prev = elem;
  169|  9.63k|}
ofp-group.c:ovs_list_init:
  149|  26.9k|{
  150|  26.9k|    list->next = list->prev = list;
  151|  26.9k|}
ofp-group.c:ovs_list_is_short:
  334|  1.17k|{
  335|  1.17k|    return list->next == list->prev;
  336|  1.17k|}
ofp-group.c:ovs_list_is_singleton:
  327|  1.17k|{
  328|  1.17k|    return ovs_list_is_short(list) && !ovs_list_is_empty(list);
  ------------------
  |  Branch (328:12): [True: 1.16k, False: 7]
  |  Branch (328:39): [True: 823, False: 344]
  ------------------
  329|  1.17k|}
ofp-match.c:ovs_list_init:
  149|  1.65k|{
  150|  1.65k|    list->next = list->prev = list;
  151|  1.65k|}
ofp-match.c:ovs_list_push_back:
  204|  3.01k|{
  205|  3.01k|    ovs_list_insert(list, elem);
  206|  3.01k|}
ofp-match.c:ovs_list_insert:
  164|  3.01k|{
  165|  3.01k|    elem->prev = before->prev;
  166|  3.01k|    elem->next = before;
  167|  3.01k|    before->prev->next = elem;
  168|  3.01k|    before->prev = elem;
  169|  3.01k|}
ofp-match.c:ovs_list_is_empty:
  320|  4.66k|{
  321|  4.66k|    return list->next == list;
  322|  4.66k|}
ofp-match.c:ovs_list_pop_front:
  261|  3.01k|{
  262|  3.01k|    struct ovs_list *front = list->next;
  263|       |
  264|  3.01k|    ovs_list_remove(front);
  265|  3.01k|    return front;
  266|  3.01k|}
ofp-match.c:ovs_list_remove:
  251|  3.01k|{
  252|  3.01k|    elem->prev->next = elem->next;
  253|  3.01k|    elem->next->prev = elem->prev;
  254|  3.01k|    return elem->next;
  255|  3.01k|}

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

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

ofp-actions.c:ofpact_next:
  212|   307k|{
  213|   307k|    return ALIGNED_CAST(struct ofpact *,
  ------------------
  |  |  434|   307k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  214|   307k|                        (uint8_t *) ofpact + OFPACT_ALIGN(ofpact->len));
  215|   307k|}
ofp-actions.c:ofpact_get_CLONE:
 1289|    773|    {                                                                   \
 1290|    773|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    773|#define ovs_assert ovs_ignore
  ------------------
 1291|    773|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    773|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    773|    }                                                                   \
ofp-actions.c:ofpact_get_CT:
 1289|  2.97k|    {                                                                   \
 1290|  2.97k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  2.97k|#define ovs_assert ovs_ignore
  ------------------
 1291|  2.97k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  2.97k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  2.97k|    }                                                                   \
ofp-actions.c:ofpact_get_WRITE_ACTIONS:
 1289|  7.39k|    {                                                                   \
 1290|  7.39k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  7.39k|#define ovs_assert ovs_ignore
  ------------------
 1291|  7.39k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  7.39k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  7.39k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_FIELD:
 1303|  14.5k|    {                                                                   \
 1304|  14.5k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  14.5k|                                            sizeof(struct STRUCT));     \
 1306|  14.5k|    }                                                                   \
ofp-actions.c:ofpact_finish_SET_FIELD:
 1317|  14.5k|    {                                                                   \
 1318|  14.5k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  14.5k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  14.5k|#define ovs_assert ovs_ignore
  ------------------
 1320|  14.5k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  14.5k|    }
ofp-actions.c:ofpact_end:
  221|   540k|{
  222|   540k|    return ofpacts
  ------------------
  |  Branch (222:12): [True: 531k, False: 8.98k]
  ------------------
  223|   540k|           ? ALIGNED_CAST(struct ofpact *, (uint8_t *) ofpacts + ofpacts_len)
  ------------------
  |  |  434|   531k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  224|       |           : NULL;
  225|   540k|}
ofp-actions.c:ofpact_put_METER:
 1303|    662|    {                                                                   \
 1304|    662|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    662|                                            sizeof(struct STRUCT));     \
 1306|    662|    }                                                                   \
ofp-actions.c:ofpact_put_OUTPUT:
 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_VID:
 1303|  6.19k|    {                                                                   \
 1304|  6.19k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  6.19k|                                            sizeof(struct STRUCT));     \
 1306|  6.19k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_VLAN_PCP:
 1303|  2.14k|    {                                                                   \
 1304|  2.14k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  2.14k|                                            sizeof(struct STRUCT));     \
 1306|  2.14k|    }                                                                   \
ofp-actions.c:ofpact_put_PUSH_VLAN:
 1303|  1.92k|    {                                                                   \
 1304|  1.92k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.92k|                                            sizeof(struct STRUCT));     \
 1306|  1.92k|    }                                                                   \
ofp-actions.c:ofpact_put_STRIP_VLAN:
 1303|  4.04k|    {                                                                   \
 1304|  4.04k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  4.04k|                                            sizeof(struct STRUCT));     \
 1306|  4.04k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_ETH_SRC:
 1303|     48|    {                                                                   \
 1304|     48|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|     48|                                            sizeof(struct STRUCT));     \
 1306|     48|    }                                                                   \
ofp-actions.c:ofpact_put_SET_ETH_DST:
 1303|    129|    {                                                                   \
 1304|    129|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    129|                                            sizeof(struct STRUCT));     \
 1306|    129|    }                                                                   \
ofp-actions.c:ofpact_put_SET_IPV4_SRC:
 1303|  2.26k|    {                                                                   \
 1304|  2.26k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  2.26k|                                            sizeof(struct STRUCT));     \
 1306|  2.26k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_IPV4_DST:
 1303|  2.14k|    {                                                                   \
 1304|  2.14k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  2.14k|                                            sizeof(struct STRUCT));     \
 1306|  2.14k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_IP_DSCP:
 1303|  2.60k|    {                                                                   \
 1304|  2.60k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  2.60k|                                            sizeof(struct STRUCT));     \
 1306|  2.60k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_IP_ECN:
 1303|  1.48k|    {                                                                   \
 1304|  1.48k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.48k|                                            sizeof(struct STRUCT));     \
 1306|  1.48k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_L4_SRC_PORT:
 1303|  3.01k|    {                                                                   \
 1304|  3.01k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  3.01k|                                            sizeof(struct STRUCT));     \
 1306|  3.01k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_L4_DST_PORT:
 1303|  4.28k|    {                                                                   \
 1304|  4.28k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  4.28k|                                            sizeof(struct STRUCT));     \
 1306|  4.28k|    }                                                                   \
ofp-actions.c:ofpact_put_ENQUEUE:
 1303|    169|    {                                                                   \
 1304|    169|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    169|                                            sizeof(struct STRUCT));     \
 1306|    169|    }                                                                   \
ofp-actions.c:ofpact_put_SET_MPLS_LABEL:
 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_SET_MPLS_TC:
 1303|    711|    {                                                                   \
 1304|    711|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    711|                                            sizeof(struct STRUCT));     \
 1306|    711|    }                                                                   \
ofp-actions.c:ofpact_put_SET_MPLS_TTL:
 1303|  1.96k|    {                                                                   \
 1304|  1.96k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.96k|                                            sizeof(struct STRUCT));     \
 1306|  1.96k|    }                                                                   \
ofp-actions.c:ofpact_put_DEC_MPLS_TTL:
 1303|  3.49k|    {                                                                   \
 1304|  3.49k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  3.49k|                                            sizeof(struct STRUCT));     \
 1306|  3.49k|    }                                                                   \
ofp-actions.c:ofpact_put_PUSH_MPLS:
 1303|  2.72k|    {                                                                   \
 1304|  2.72k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  2.72k|                                            sizeof(struct STRUCT));     \
 1306|  2.72k|    }                                                                   \
ofp-actions.c:ofpact_put_POP_MPLS:
 1303|  3.67k|    {                                                                   \
 1304|  3.67k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  3.67k|                                            sizeof(struct STRUCT));     \
 1306|  3.67k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_QUEUE:
 1303|    274|    {                                                                   \
 1304|    274|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    274|                                            sizeof(struct STRUCT));     \
 1306|    274|    }                                                                   \
ofp-actions.c:ofpact_put_GROUP:
 1303|    706|    {                                                                   \
 1304|    706|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    706|                                            sizeof(struct STRUCT));     \
 1306|    706|    }                                                                   \
ofp-actions.c:ofpact_put_SET_IP_TTL:
 1303|    439|    {                                                                   \
 1304|    439|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    439|                                            sizeof(struct STRUCT));     \
 1306|    439|    }                                                                   \
ofp-actions.c:ofpact_put_DEC_TTL:
 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_finish_DEC_TTL:
 1317|  2.10k|    {                                                                   \
 1318|  2.10k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  2.10k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  2.10k|#define ovs_assert ovs_ignore
  ------------------
 1320|  2.10k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  2.10k|    }
ofp-actions.c:ofpact_put_REG_MOVE:
 1303|  8.41k|    {                                                                   \
 1304|  8.41k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  8.41k|                                            sizeof(struct STRUCT));     \
 1306|  8.41k|    }                                                                   \
ofp-actions.c:ofpact_put_RESUBMIT:
 1303|  2.53k|    {                                                                   \
 1304|  2.53k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  2.53k|                                            sizeof(struct STRUCT));     \
 1306|  2.53k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_TUNNEL:
 1303|  1.20k|    {                                                                   \
 1304|  1.20k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.20k|                                            sizeof(struct STRUCT));     \
 1306|  1.20k|    }                                                                   \
ofp-actions.c:ofpact_put_POP_QUEUE:
 1303|  1.89k|    {                                                                   \
 1304|  1.89k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.89k|                                            sizeof(struct STRUCT));     \
 1306|  1.89k|    }                                                                   \
ofp-actions.c:ofpact_put_NOTE:
 1303|  10.4k|    {                                                                   \
 1304|  10.4k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  10.4k|                                            sizeof(struct STRUCT));     \
 1306|  10.4k|    }                                                                   \
ofp-actions.c:ofpact_finish_NOTE:
 1317|  10.4k|    {                                                                   \
 1318|  10.4k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  10.4k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  10.4k|#define ovs_assert ovs_ignore
  ------------------
 1320|  10.4k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  10.4k|    }
ofp-actions.c:ofpact_put_MULTIPATH:
 1303|  1.22k|    {                                                                   \
 1304|  1.22k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.22k|                                            sizeof(struct STRUCT));     \
 1306|  1.22k|    }                                                                   \
ofp-actions.c:ofpact_put_BUNDLE:
 1303|  3.26k|    {                                                                   \
 1304|  3.26k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  3.26k|                                            sizeof(struct STRUCT));     \
 1306|  3.26k|    }                                                                   \
ofp-actions.c:ofpact_finish_BUNDLE:
 1317|  2.89k|    {                                                                   \
 1318|  2.89k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  2.89k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  2.89k|#define ovs_assert ovs_ignore
  ------------------
 1320|  2.89k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  2.89k|    }
ofp-actions.c:ofpact_put_OUTPUT_REG:
 1303|    366|    {                                                                   \
 1304|    366|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    366|                                            sizeof(struct STRUCT));     \
 1306|    366|    }                                                                   \
ofp-actions.c:ofpact_put_LEARN:
 1303|  14.8k|    {                                                                   \
 1304|  14.8k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  14.8k|                                            sizeof(struct STRUCT));     \
 1306|  14.8k|    }                                                                   \
ofp-actions.c:ofpact_finish_LEARN:
 1317|  11.3k|    {                                                                   \
 1318|  11.3k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  11.3k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  11.3k|#define ovs_assert ovs_ignore
  ------------------
 1320|  11.3k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  11.3k|    }
ofp-actions.c:ofpact_put_EXIT:
 1303|  1.82k|    {                                                                   \
 1304|  1.82k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.82k|                                            sizeof(struct STRUCT));     \
 1306|  1.82k|    }                                                                   \
ofp-actions.c:ofpact_put_FIN_TIMEOUT:
 1303|    440|    {                                                                   \
 1304|    440|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    440|                                            sizeof(struct STRUCT));     \
 1306|    440|    }                                                                   \
ofp-actions.c:ofpact_put_CONTROLLER:
 1303|  4.04k|    {                                                                   \
 1304|  4.04k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  4.04k|                                            sizeof(struct STRUCT));     \
 1306|  4.04k|    }                                                                   \
ofp-actions.c:ofpact_finish_CONTROLLER:
 1317|  3.44k|    {                                                                   \
 1318|  3.44k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  3.44k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  3.44k|#define ovs_assert ovs_ignore
  ------------------
 1320|  3.44k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  3.44k|    }
ofp-actions.c:ofpact_put_STACK_PUSH:
 1303|    417|    {                                                                   \
 1304|    417|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    417|                                            sizeof(struct STRUCT));     \
 1306|    417|    }                                                                   \
ofp-actions.c:ofpact_put_STACK_POP:
 1303|    734|    {                                                                   \
 1304|    734|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    734|                                            sizeof(struct STRUCT));     \
 1306|    734|    }                                                                   \
ofp-actions.c:ofpact_put_SAMPLE:
 1303|  2.53k|    {                                                                   \
 1304|  2.53k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  2.53k|                                            sizeof(struct STRUCT));     \
 1306|  2.53k|    }                                                                   \
ofp-actions.c:ofpact_put_CONJUNCTION:
 1303|  3.17k|    {                                                                   \
 1304|  3.17k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  3.17k|                                            sizeof(struct STRUCT));     \
 1306|  3.17k|    }                                                                   \
ofp-actions.c:ofpact_put_CT:
 1303|  8.37k|    {                                                                   \
 1304|  8.37k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  8.37k|                                            sizeof(struct STRUCT));     \
 1306|  8.37k|    }                                                                   \
ofp-actions.c:ofpact_finish_CT:
 1317|  5.47k|    {                                                                   \
 1318|  5.47k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  5.47k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  5.47k|#define ovs_assert ovs_ignore
  ------------------
 1320|  5.47k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  5.47k|    }
ofp-actions.c:ofpact_get_NAT:
 1289|  5.57k|    {                                                                   \
 1290|  5.57k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  5.57k|#define ovs_assert ovs_ignore
  ------------------
 1291|  5.57k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  5.57k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  5.57k|    }                                                                   \
ofp-actions.c:ofpact_put_NAT:
 1303|  17.3k|    {                                                                   \
 1304|  17.3k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  17.3k|                                            sizeof(struct STRUCT));     \
 1306|  17.3k|    }                                                                   \
ofp-actions.c:ofpact_put_OUTPUT_TRUNC:
 1303|  1.11k|    {                                                                   \
 1304|  1.11k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.11k|                                            sizeof(struct STRUCT));     \
 1306|  1.11k|    }                                                                   \
ofp-actions.c:ofpact_put_CLONE:
 1303|  1.21k|    {                                                                   \
 1304|  1.21k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.21k|                                            sizeof(struct STRUCT));     \
 1306|  1.21k|    }                                                                   \
ofp-actions.c:ofpact_finish_CLONE:
 1317|  1.12k|    {                                                                   \
 1318|  1.12k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  1.12k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  1.12k|#define ovs_assert ovs_ignore
  ------------------
 1320|  1.12k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  1.12k|    }
ofp-actions.c:ofpact_put_CT_CLEAR:
 1303|    178|    {                                                                   \
 1304|    178|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    178|                                            sizeof(struct STRUCT));     \
 1306|    178|    }                                                                   \
ofp-actions.c:ofpact_put_ENCAP:
 1303|  3.81k|    {                                                                   \
 1304|  3.81k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  3.81k|                                            sizeof(struct STRUCT));     \
 1306|  3.81k|    }                                                                   \
ofp-actions.c:ofpact_finish_ENCAP:
 1317|  2.42k|    {                                                                   \
 1318|  2.42k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  2.42k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  2.42k|#define ovs_assert ovs_ignore
  ------------------
 1320|  2.42k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  2.42k|    }
ofp-actions.c:ofpact_put_DECAP:
 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_DEC_NSH_TTL:
 1303|  1.20k|    {                                                                   \
 1304|  1.20k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.20k|                                            sizeof(struct STRUCT));     \
 1306|  1.20k|    }                                                                   \
ofp-actions.c:ofpact_put_CHECK_PKT_LARGER:
 1303|  1.26k|    {                                                                   \
 1304|  1.26k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.26k|                                            sizeof(struct STRUCT));     \
 1306|  1.26k|    }                                                                   \
ofp-actions.c:ofpact_put_DELETE_FIELD:
 1303|    308|    {                                                                   \
 1304|    308|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    308|                                            sizeof(struct STRUCT));     \
 1306|    308|    }                                                                   \
ofp-actions.c:ofpact_put_CLEAR_ACTIONS:
 1303|    143|    {                                                                   \
 1304|    143|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    143|                                            sizeof(struct STRUCT));     \
 1306|    143|    }                                                                   \
ofp-actions.c:ofpact_put_WRITE_METADATA:
 1303|    567|    {                                                                   \
 1304|    567|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    567|                                            sizeof(struct STRUCT));     \
 1306|    567|    }                                                                   \
ofp-actions.c:ofpact_put_GOTO_TABLE:
 1303|    234|    {                                                                   \
 1304|    234|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    234|                                            sizeof(struct STRUCT));     \
 1306|    234|    }                                                                   \
ofp-actions.c:ofpact_get_OUTPUT:
 1289|  2.02k|    {                                                                   \
 1290|  2.02k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  2.02k|#define ovs_assert ovs_ignore
  ------------------
 1291|  2.02k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  2.02k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  2.02k|    }                                                                   \
ofp-actions.c:ofpact_get_CONTROLLER:
 1289|     41|    {                                                                   \
 1290|     41|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     41|#define ovs_assert ovs_ignore
  ------------------
 1291|     41|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     41|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     41|    }                                                                   \
ofp-actions.c:ofpact_get_ENQUEUE:
 1289|    142|    {                                                                   \
 1290|    142|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    142|#define ovs_assert ovs_ignore
  ------------------
 1291|    142|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    142|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    142|    }                                                                   \
ofp-actions.c:ofpact_get_OUTPUT_REG:
 1289|    102|    {                                                                   \
 1290|    102|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    102|#define ovs_assert ovs_ignore
  ------------------
 1291|    102|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    102|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    102|    }                                                                   \
ofp-actions.c:ofpact_get_BUNDLE:
 1289|    559|    {                                                                   \
 1290|    559|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    559|#define ovs_assert ovs_ignore
  ------------------
 1291|    559|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    559|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    559|    }                                                                   \
ofp-actions.c:ofpact_get_SET_FIELD:
 1289|  1.22k|    {                                                                   \
 1290|  1.22k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  1.22k|#define ovs_assert ovs_ignore
  ------------------
 1291|  1.22k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  1.22k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  1.22k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_VLAN_VID:
 1289|  3.60k|    {                                                                   \
 1290|  3.60k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  3.60k|#define ovs_assert ovs_ignore
  ------------------
 1291|  3.60k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  3.60k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  3.60k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_VLAN_PCP:
 1289|  1.18k|    {                                                                   \
 1290|  1.18k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  1.18k|#define ovs_assert ovs_ignore
  ------------------
 1291|  1.18k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  1.18k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  1.18k|    }                                                                   \
ofp-actions.c:ofpact_get_STRIP_VLAN:
 1289|  2.70k|    {                                                                   \
 1290|  2.70k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  2.70k|#define ovs_assert ovs_ignore
  ------------------
 1291|  2.70k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  2.70k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  2.70k|    }                                                                   \
ofp-actions.c:ofpact_get_PUSH_VLAN:
 1289|  1.53k|    {                                                                   \
 1290|  1.53k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  1.53k|#define ovs_assert ovs_ignore
  ------------------
 1291|  1.53k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  1.53k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  1.53k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_ETH_SRC:
 1289|     38|    {                                                                   \
 1290|     38|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     38|#define ovs_assert ovs_ignore
  ------------------
 1291|     38|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     38|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     38|    }                                                                   \
ofp-actions.c:ofpact_get_SET_ETH_DST:
 1289|    108|    {                                                                   \
 1290|    108|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    108|#define ovs_assert ovs_ignore
  ------------------
 1291|    108|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    108|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    108|    }                                                                   \
ofp-actions.c:ofpact_get_SET_IPV4_SRC:
 1289|  1.52k|    {                                                                   \
 1290|  1.52k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  1.52k|#define ovs_assert ovs_ignore
  ------------------
 1291|  1.52k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  1.52k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  1.52k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_IPV4_DST:
 1289|  1.69k|    {                                                                   \
 1290|  1.69k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  1.69k|#define ovs_assert ovs_ignore
  ------------------
 1291|  1.69k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  1.69k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  1.69k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_IP_DSCP:
 1289|  1.86k|    {                                                                   \
 1290|  1.86k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  1.86k|#define ovs_assert ovs_ignore
  ------------------
 1291|  1.86k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  1.86k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  1.86k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_IP_ECN:
 1289|  1.12k|    {                                                                   \
 1290|  1.12k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  1.12k|#define ovs_assert ovs_ignore
  ------------------
 1291|  1.12k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  1.12k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  1.12k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_IP_TTL:
 1289|    409|    {                                                                   \
 1290|    409|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    409|#define ovs_assert ovs_ignore
  ------------------
 1291|    409|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    409|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    409|    }                                                                   \
ofp-actions.c:ofpact_get_SET_L4_SRC_PORT:
 1289|  1.65k|    {                                                                   \
 1290|  1.65k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  1.65k|#define ovs_assert ovs_ignore
  ------------------
 1291|  1.65k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  1.65k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  1.65k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_L4_DST_PORT:
 1289|  3.41k|    {                                                                   \
 1290|  3.41k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  3.41k|#define ovs_assert ovs_ignore
  ------------------
 1291|  3.41k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  3.41k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  3.41k|    }                                                                   \
ofp-actions.c:ofpact_get_REG_MOVE:
 1289|     50|    {                                                                   \
 1290|     50|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     50|#define ovs_assert ovs_ignore
  ------------------
 1291|     50|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     50|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     50|    }                                                                   \
ofp-actions.c:ofpact_get_STACK_PUSH:
 1289|     67|    {                                                                   \
 1290|     67|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     67|#define ovs_assert ovs_ignore
  ------------------
 1291|     67|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     67|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     67|    }                                                                   \
ofp-actions.c:ofpact_get_STACK_POP:
 1289|    454|    {                                                                   \
 1290|    454|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    454|#define ovs_assert ovs_ignore
  ------------------
 1291|    454|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    454|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    454|    }                                                                   \
ofp-actions.c:ofpact_get_DEC_TTL:
 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_get_SET_MPLS_LABEL:
 1289|  2.09k|    {                                                                   \
 1290|  2.09k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  2.09k|#define ovs_assert ovs_ignore
  ------------------
 1291|  2.09k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  2.09k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  2.09k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_MPLS_TC:
 1289|    678|    {                                                                   \
 1290|    678|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    678|#define ovs_assert ovs_ignore
  ------------------
 1291|    678|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    678|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    678|    }                                                                   \
ofp-actions.c:ofpact_get_SET_MPLS_TTL:
 1289|    963|    {                                                                   \
 1290|    963|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    963|#define ovs_assert ovs_ignore
  ------------------
 1291|    963|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    963|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    963|    }                                                                   \
ofp-actions.c:ofpact_get_DEC_MPLS_TTL:
 1289|  3.20k|    {                                                                   \
 1290|  3.20k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  3.20k|#define ovs_assert ovs_ignore
  ------------------
 1291|  3.20k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  3.20k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  3.20k|    }                                                                   \
ofp-actions.c:ofpact_get_PUSH_MPLS:
 1289|  2.55k|    {                                                                   \
 1290|  2.55k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  2.55k|#define ovs_assert ovs_ignore
  ------------------
 1291|  2.55k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  2.55k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  2.55k|    }                                                                   \
ofp-actions.c:ofpact_get_POP_MPLS:
 1289|  3.09k|    {                                                                   \
 1290|  3.09k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  3.09k|#define ovs_assert ovs_ignore
  ------------------
 1291|  3.09k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  3.09k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  3.09k|    }                                                                   \
ofp-actions.c:ofpact_get_DEC_NSH_TTL:
 1289|  1.18k|    {                                                                   \
 1290|  1.18k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  1.18k|#define ovs_assert ovs_ignore
  ------------------
 1291|  1.18k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  1.18k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  1.18k|    }                                                                   \
ofp-actions.c:ofpact_get_DELETE_FIELD:
 1289|     14|    {                                                                   \
 1290|     14|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     14|#define ovs_assert ovs_ignore
  ------------------
 1291|     14|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     14|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     14|    }                                                                   \
ofp-actions.c:ofpact_get_ENCAP:
 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_DECAP:
 1289|  8.97k|    {                                                                   \
 1290|  8.97k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  8.97k|#define ovs_assert ovs_ignore
  ------------------
 1291|  8.97k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  8.97k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  8.97k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_TUNNEL:
 1289|      7|    {                                                                   \
 1290|      7|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|      7|#define ovs_assert ovs_ignore
  ------------------
 1291|      7|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|      7|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|      7|    }                                                                   \
ofp-actions.c:ofpact_get_SET_QUEUE:
 1289|     99|    {                                                                   \
 1290|     99|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     99|#define ovs_assert ovs_ignore
  ------------------
 1291|     99|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     99|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     99|    }                                                                   \
ofp-actions.c:ofpact_get_POP_QUEUE:
 1289|     98|    {                                                                   \
 1290|     98|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     98|#define ovs_assert ovs_ignore
  ------------------
 1291|     98|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     98|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     98|    }                                                                   \
ofp-actions.c:ofpact_get_FIN_TIMEOUT:
 1289|    144|    {                                                                   \
 1290|    144|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    144|#define ovs_assert ovs_ignore
  ------------------
 1291|    144|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    144|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    144|    }                                                                   \
ofp-actions.c:ofpact_get_RESUBMIT:
 1289|    295|    {                                                                   \
 1290|    295|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    295|#define ovs_assert ovs_ignore
  ------------------
 1291|    295|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    295|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    295|    }                                                                   \
ofp-actions.c:ofpact_get_LEARN:
 1289|  10.8k|    {                                                                   \
 1290|  10.8k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  10.8k|#define ovs_assert ovs_ignore
  ------------------
 1291|  10.8k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  10.8k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  10.8k|    }                                                                   \
ofp-actions.c:ofpact_get_CONJUNCTION:
 1289|     39|    {                                                                   \
 1290|     39|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     39|#define ovs_assert ovs_ignore
  ------------------
 1291|     39|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     39|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     39|    }                                                                   \
ofp-actions.c:ofpact_get_MULTIPATH:
 1289|    123|    {                                                                   \
 1290|    123|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    123|#define ovs_assert ovs_ignore
  ------------------
 1291|    123|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    123|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    123|    }                                                                   \
ofp-actions.c:ofpact_get_NOTE:
 1289|    157|    {                                                                   \
 1290|    157|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    157|#define ovs_assert ovs_ignore
  ------------------
 1291|    157|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    157|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    157|    }                                                                   \
ofp-actions.c:ofpact_get_EXIT:
 1289|    191|    {                                                                   \
 1290|    191|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    191|#define ovs_assert ovs_ignore
  ------------------
 1291|    191|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    191|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    191|    }                                                                   \
ofp-actions.c:ofpact_get_SAMPLE:
 1289|     32|    {                                                                   \
 1290|     32|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     32|#define ovs_assert ovs_ignore
  ------------------
 1291|     32|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     32|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     32|    }                                                                   \
ofp-actions.c:ofpact_ct_get_action_len:
  723|  7.06k|{
  724|       |    return oc->ofpact.len - offsetof(struct ofpact_conntrack, actions);
  725|  7.06k|}
ofp-actions.c:ofpact_get_CT_CLEAR:
 1289|    125|    {                                                                   \
 1290|    125|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    125|#define ovs_assert ovs_ignore
  ------------------
 1291|    125|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    125|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    125|    }                                                                   \
ofp-actions.c:ofpact_get_OUTPUT_TRUNC:
 1289|    953|    {                                                                   \
 1290|    953|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    953|#define ovs_assert ovs_ignore
  ------------------
 1291|    953|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    953|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    953|    }                                                                   \
ofp-actions.c:ofpact_nest_get_action_len:
  673|  16.0k|{
  674|       |    return on->ofpact.len - offsetof(struct ofpact_nest, actions);
  675|  16.0k|}
ofp-actions.c:ofpact_get_CHECK_PKT_LARGER:
 1289|     10|    {                                                                   \
 1290|     10|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     10|#define ovs_assert ovs_ignore
  ------------------
 1291|     10|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     10|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     10|    }                                                                   \
ofp-actions.c:ofpact_get_CLEAR_ACTIONS:
 1289|    140|    {                                                                   \
 1290|    140|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    140|#define ovs_assert ovs_ignore
  ------------------
 1291|    140|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    140|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    140|    }                                                                   \
ofp-actions.c:ofpact_get_WRITE_METADATA:
 1289|     40|    {                                                                   \
 1290|     40|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     40|#define ovs_assert ovs_ignore
  ------------------
 1291|     40|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     40|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     40|    }                                                                   \
ofp-actions.c:ofpact_get_GOTO_TABLE:
 1289|    167|    {                                                                   \
 1290|    167|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    167|#define ovs_assert ovs_ignore
  ------------------
 1291|    167|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    167|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    167|    }                                                                   \
ofp-actions.c:ofpact_get_GROUP:
 1289|    576|    {                                                                   \
 1290|    576|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    576|#define ovs_assert ovs_ignore
  ------------------
 1291|    576|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    576|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    576|    }                                                                   \
ofp-actions.c:ofpact_get_METER:
 1289|    155|    {                                                                   \
 1290|    155|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    155|#define ovs_assert ovs_ignore
  ------------------
 1291|    155|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    155|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    155|    }                                                                   \
ofp-packet.c:ofpact_put_UNROLL_XLATE:
 1303|  1.89k|    {                                                                   \
 1304|  1.89k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.89k|                                            sizeof(struct STRUCT));     \
 1306|  1.89k|    }                                                                   \
learn.c:ofpact_learn_spec_end:
  894|  63.8k|{
  895|  63.8k|    return ALIGNED_CAST(const struct ofpact_learn_spec *,
  ------------------
  |  |  434|  63.8k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  896|  63.8k|                        ofpact_next(&learn->ofpact));
  897|  63.8k|}
learn.c:ofpact_next:
  212|  63.8k|{
  213|  63.8k|    return ALIGNED_CAST(struct ofpact *,
  ------------------
  |  |  434|  63.8k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  214|  63.8k|                        (uint8_t *) ofpact + OFPACT_ALIGN(ofpact->len));
  215|  63.8k|}
learn.c:ofpact_learn_spec_imm:
  850|  35.9k|{
  851|  35.9k|    return spec + 1;
  852|  35.9k|}
learn.c:ofpact_learn_spec_next:
  856|  42.5k|{
  857|  42.5k|    if (spec->src_type == NX_LEARN_SRC_IMMEDIATE) {
  ------------------
  |  |  822|  42.5k|#define NX_LEARN_SRC_IMMEDIATE (1 << 13) /* Copy from immediate value. */
  ------------------
  |  Branch (857:9): [True: 36.7k, False: 5.75k]
  ------------------
  858|  36.7k|        unsigned int n_bytes = OFPACT_ALIGN(DIV_ROUND_UP(spec->n_bits, 8));
  ------------------
  |  |  205|  36.7k|#define OFPACT_ALIGN(SIZE) ROUND_UP(SIZE, OFPACT_ALIGNTO)
  |  |  ------------------
  |  |  |  |  303|  36.7k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|  36.7k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  859|  36.7k|        return ALIGNED_CAST(const struct ofpact_learn_spec *,
  ------------------
  |  |  434|  36.7k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  860|  36.7k|                            (const uint8_t *)(spec + 1) + n_bytes);
  861|  36.7k|    }
  862|  5.75k|    return spec + 1;
  863|  42.5k|}

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

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

ofp_print_target.c:ofpbuf_at:
  183|  2.82M|{
  184|  2.82M|    if (offset + size <= b->size) {
  ------------------
  |  Branch (184:9): [True: 2.79M, False: 30.0k]
  ------------------
  185|  2.79M|        ovs_assert(b->data);
  ------------------
  |  |   62|  2.79M|#define ovs_assert ovs_ignore
  ------------------
  186|  2.79M|        return (char *) b->data + offset;
  187|  2.79M|    }
  188|  30.0k|    return NULL;
  189|  2.82M|}
ofp_print_target.c:ofpbuf_pull:
  258|  1.39M|{
  259|  1.39M|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  1.39M|#define ovs_assert ovs_ignore
  ------------------
  260|  1.39M|    void *data = b->data;
  261|       |
  262|  1.39M|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 1.39M]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  1.39M|    b->data = (char*)b->data + size;
  267|  1.39M|    b->size = b->size - size;
  268|  1.39M|    return data;
  269|  1.39M|}
ofp-print.c:ofpbuf_const_initializer:
   97|  55.9k|{
   98|  55.9k|    return (struct ofpbuf) {
   99|  55.9k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  55.9k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  55.9k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  55.9k|     (TYPE) (POINTER))
  ------------------
  100|  55.9k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  55.9k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  55.9k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  55.9k|     (TYPE) (POINTER))
  ------------------
  101|  55.9k|        .size = size,
  102|  55.9k|        .allocated = size,
  103|  55.9k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  55.9k|        .list_node = OVS_LIST_POISON,
  106|  55.9k|        .source = OFPBUF_STACK,
  107|  55.9k|    };
  108|  55.9k|}
ofp-protocol.c:ofpbuf_const_initializer:
   97|    393|{
   98|    393|    return (struct ofpbuf) {
   99|    393|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|    393|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|    393|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|    393|     (TYPE) (POINTER))
  ------------------
  100|    393|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|    393|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|    393|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|    393|     (TYPE) (POINTER))
  ------------------
  101|    393|        .size = size,
  102|    393|        .allocated = size,
  103|    393|        .header = NULL,
  104|       |        .msg = NULL,
  105|    393|        .list_node = OVS_LIST_POISON,
  106|    393|        .source = OFPBUF_STACK,
  107|    393|    };
  108|    393|}
ofp-protocol.c:ofpbuf_pull:
  258|    393|{
  259|    393|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|    393|#define ovs_assert ovs_ignore
  ------------------
  260|    393|    void *data = b->data;
  261|       |
  262|    393|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 393]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|    393|    b->data = (char*)b->data + size;
  267|    393|    b->size = b->size - size;
  268|    393|    return data;
  269|    393|}
ofp-queue.c:ofpbuf_const_initializer:
   97|  19.4k|{
   98|  19.4k|    return (struct ofpbuf) {
   99|  19.4k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  19.4k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  19.4k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  19.4k|     (TYPE) (POINTER))
  ------------------
  100|  19.4k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  19.4k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  19.4k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  19.4k|     (TYPE) (POINTER))
  ------------------
  101|  19.4k|        .size = size,
  102|  19.4k|        .allocated = size,
  103|  19.4k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  19.4k|        .list_node = OVS_LIST_POISON,
  106|  19.4k|        .source = OFPBUF_STACK,
  107|  19.4k|    };
  108|  19.4k|}
ofp-queue.c:ofpbuf_pull:
  258|  59.6k|{
  259|  59.6k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  59.6k|#define ovs_assert ovs_ignore
  ------------------
  260|  59.6k|    void *data = b->data;
  261|       |
  262|  59.6k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 4.65k, False: 54.9k]
  ------------------
  263|  4.65k|        return data;
  264|  4.65k|    }
  265|       |
  266|  54.9k|    b->data = (char*)b->data + size;
  267|  54.9k|    b->size = b->size - size;
  268|  54.9k|    return data;
  269|  59.6k|}
ofp-queue.c:ofpbuf_at_assert:
  195|  6.87k|{
  196|  6.87k|    ovs_assert(offset + size <= b->size);
  ------------------
  |  |   62|  6.87k|#define ovs_assert ovs_ignore
  ------------------
  197|  6.87k|    ovs_assert(b->data);
  ------------------
  |  |   62|  6.87k|#define ovs_assert ovs_ignore
  ------------------
  198|  6.87k|    return (char *) b->data + offset;
  199|  6.87k|}
ofp-queue.c:ofpbuf_try_pull:
  275|  45.1k|{
  276|  45.1k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 43.4k, False: 1.71k]
  ------------------
  277|  45.1k|}
ofp-switch.c:ofpbuf_pull:
  258|  6.64k|{
  259|  6.64k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  6.64k|#define ovs_assert ovs_ignore
  ------------------
  260|  6.64k|    void *data = b->data;
  261|       |
  262|  6.64k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 6.64k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  6.64k|    b->data = (char*)b->data + size;
  267|  6.64k|    b->size = b->size - size;
  268|  6.64k|    return data;
  269|  6.64k|}
ofp-switch.c:ofpbuf_const_initializer:
   97|  3.93k|{
   98|  3.93k|    return (struct ofpbuf) {
   99|  3.93k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  3.93k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  3.93k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  3.93k|     (TYPE) (POINTER))
  ------------------
  100|  3.93k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  3.93k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  3.93k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  3.93k|     (TYPE) (POINTER))
  ------------------
  101|  3.93k|        .size = size,
  102|  3.93k|        .allocated = size,
  103|  3.93k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  3.93k|        .list_node = OVS_LIST_POISON,
  106|  3.93k|        .source = OFPBUF_STACK,
  107|  3.93k|    };
  108|  3.93k|}
ofp-table.c:ofpbuf_const_initializer:
   97|  13.3k|{
   98|  13.3k|    return (struct ofpbuf) {
   99|  13.3k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  13.3k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  13.3k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  13.3k|     (TYPE) (POINTER))
  ------------------
  100|  13.3k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  13.3k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  13.3k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  13.3k|     (TYPE) (POINTER))
  ------------------
  101|  13.3k|        .size = size,
  102|  13.3k|        .allocated = size,
  103|  13.3k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  13.3k|        .list_node = OVS_LIST_POISON,
  106|  13.3k|        .source = OFPBUF_STACK,
  107|  13.3k|    };
  108|  13.3k|}
ofp-table.c:ofpbuf_pull:
  258|  68.6k|{
  259|  68.6k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  68.6k|#define ovs_assert ovs_ignore
  ------------------
  260|  68.6k|    void *data = b->data;
  261|       |
  262|  68.6k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 1.00k, False: 67.6k]
  ------------------
  263|  1.00k|        return data;
  264|  1.00k|    }
  265|       |
  266|  67.6k|    b->data = (char*)b->data + size;
  267|  67.6k|    b->size = b->size - size;
  268|  67.6k|    return data;
  269|  68.6k|}
ofp-table.c:ofpbuf_try_pull:
  275|  36.4k|{
  276|  36.4k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 36.4k, False: 0]
  ------------------
  277|  36.4k|}
ofp-util.c:ofpbuf_const_initializer:
   97|  23.1k|{
   98|  23.1k|    return (struct ofpbuf) {
   99|  23.1k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  23.1k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  23.1k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  23.1k|     (TYPE) (POINTER))
  ------------------
  100|  23.1k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  23.1k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  23.1k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  23.1k|     (TYPE) (POINTER))
  ------------------
  101|  23.1k|        .size = size,
  102|  23.1k|        .allocated = size,
  103|  23.1k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  23.1k|        .list_node = OVS_LIST_POISON,
  106|  23.1k|        .source = OFPBUF_STACK,
  107|  23.1k|    };
  108|  23.1k|}
ofp-util.c:ofpbuf_pull:
  258|  29.2k|{
  259|  29.2k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  29.2k|#define ovs_assert ovs_ignore
  ------------------
  260|  29.2k|    void *data = b->data;
  261|       |
  262|  29.2k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 29.2k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  29.2k|    b->data = (char*)b->data + size;
  267|  29.2k|    b->size = b->size - size;
  268|  29.2k|    return data;
  269|  29.2k|}
ofp-util.c:ofpbuf_try_pull:
  275|  19.2k|{
  276|  19.2k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 6.15k, False: 13.0k]
  ------------------
  277|  19.2k|}
ofpbuf.c:ofpbuf_tailroom:
  228|   791k|{
  229|   791k|    return (char*)ofpbuf_end(b) - (char*)ofpbuf_tail(b);
  230|   791k|}
ofpbuf.c:ofpbuf_end:
  211|   791k|{
  212|   791k|    ovs_assert(b->base || !b->allocated);
  ------------------
  |  |   62|   791k|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (212:16): [True: 509k, False: 281k]
  |  Branch (212:27): [True: 281k, False: 0]
  ------------------
  213|   791k|    return b->base ? (char *) b->base + b->allocated : NULL;
  ------------------
  |  Branch (213:12): [True: 509k, False: 281k]
  ------------------
  214|   791k|}
ofpbuf.c:ofpbuf_headroom:
  221|   733k|{
  222|   733k|    return (char*)b->data - (char*)b->base;
  223|   733k|}
ofpbuf.c:ofpbuf_tail:
  203|  1.15M|{
  204|  1.15M|    ovs_assert(b->data || !b->size);
  ------------------
  |  |   62|  1.15M|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (204:16): [True: 865k, False: 292k]
  |  Branch (204:27): [True: 292k, False: 0]
  ------------------
  205|  1.15M|    return b->data ? (char *) b->data + b->size : NULL;
  ------------------
  |  Branch (205:12): [True: 865k, False: 292k]
  ------------------
  206|  1.15M|}
nx-match.c:ofpbuf_try_pull:
  275|   419k|{
  276|   419k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 392k, False: 27.1k]
  ------------------
  277|   419k|}
nx-match.c:ofpbuf_pull:
  258|   728k|{
  259|   728k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|   728k|#define ovs_assert ovs_ignore
  ------------------
  260|   728k|    void *data = b->data;
  261|       |
  262|   728k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 131k, False: 596k]
  ------------------
  263|   131k|        return data;
  264|   131k|    }
  265|       |
  266|   596k|    b->data = (char*)b->data + size;
  267|   596k|    b->size = b->size - size;
  268|   596k|    return data;
  269|   728k|}
nx-match.c:ofpbuf_const_initializer:
   97|   145k|{
   98|   145k|    return (struct ofpbuf) {
   99|   145k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|   145k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   145k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   145k|     (TYPE) (POINTER))
  ------------------
  100|   145k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|   145k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   145k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   145k|     (TYPE) (POINTER))
  ------------------
  101|   145k|        .size = size,
  102|   145k|        .allocated = size,
  103|   145k|        .header = NULL,
  104|       |        .msg = NULL,
  105|   145k|        .list_node = OVS_LIST_POISON,
  106|   145k|        .source = OFPBUF_STACK,
  107|   145k|    };
  108|   145k|}
nx-match.c:ofpbuf_tail:
  203|  4.02k|{
  204|  4.02k|    ovs_assert(b->data || !b->size);
  ------------------
  |  |   62|  4.02k|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (204:16): [True: 4.02k, False: 0]
  |  Branch (204:27): [True: 0, False: 0]
  ------------------
  205|  4.02k|    return b->data ? (char *) b->data + b->size : NULL;
  ------------------
  |  Branch (205:12): [True: 4.02k, False: 0]
  ------------------
  206|  4.02k|}
ofp-actions.c:ofpbuf_clear:
  250|   132k|{
  251|   132k|    b->data = b->base;
  252|   132k|    b->size = 0;
  253|   132k|}
ofp-actions.c:ofpbuf_try_pull:
  275|   156k|{
  276|   156k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 155k, False: 1.48k]
  ------------------
  277|   156k|}
ofp-actions.c:ofpbuf_pull:
  258|   389k|{
  259|   389k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|   389k|#define ovs_assert ovs_ignore
  ------------------
  260|   389k|    void *data = b->data;
  261|       |
  262|   389k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 32.9k, False: 356k]
  ------------------
  263|  32.9k|        return data;
  264|  32.9k|    }
  265|       |
  266|   356k|    b->data = (char*)b->data + size;
  267|   356k|    b->size = b->size - size;
  268|   356k|    return data;
  269|   389k|}
ofp-actions.c:ofpbuf_const_initializer:
   97|  36.2k|{
   98|  36.2k|    return (struct ofpbuf) {
   99|  36.2k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  36.2k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  36.2k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  36.2k|     (TYPE) (POINTER))
  ------------------
  100|  36.2k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  36.2k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  36.2k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  36.2k|     (TYPE) (POINTER))
  ------------------
  101|  36.2k|        .size = size,
  102|  36.2k|        .allocated = size,
  103|  36.2k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  36.2k|        .list_node = OVS_LIST_POISON,
  106|  36.2k|        .source = OFPBUF_STACK,
  107|  36.2k|    };
  108|  36.2k|}
ofp-actions.c:ofpbuf_msgsize:
  244|     96|{
  245|     96|    return (char *)ofpbuf_tail(b) - (char *)b->msg;
  246|     96|}
ofp-actions.c:ofpbuf_at_assert:
  195|  52.4k|{
  196|  52.4k|    ovs_assert(offset + size <= b->size);
  ------------------
  |  |   62|  52.4k|#define ovs_assert ovs_ignore
  ------------------
  197|  52.4k|    ovs_assert(b->data);
  ------------------
  |  |   62|  52.4k|#define ovs_assert ovs_ignore
  ------------------
  198|  52.4k|    return (char *) b->data + offset;
  199|  52.4k|}
ofp-actions.c:ofpbuf_tail:
  203|  53.8k|{
  204|  53.8k|    ovs_assert(b->data || !b->size);
  ------------------
  |  |   62|  53.8k|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (204:16): [True: 53.8k, False: 0]
  |  Branch (204:27): [True: 0, False: 0]
  ------------------
  205|  53.8k|    return b->data ? (char *) b->data + b->size : NULL;
  ------------------
  |  Branch (205:12): [True: 53.8k, False: 0]
  ------------------
  206|  53.8k|}
ofp-bundle.c:ofpbuf_const_initializer:
   97|  4.86k|{
   98|  4.86k|    return (struct ofpbuf) {
   99|  4.86k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  4.86k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  4.86k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  4.86k|     (TYPE) (POINTER))
  ------------------
  100|  4.86k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  4.86k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  4.86k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  4.86k|     (TYPE) (POINTER))
  ------------------
  101|  4.86k|        .size = size,
  102|  4.86k|        .allocated = size,
  103|  4.86k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  4.86k|        .list_node = OVS_LIST_POISON,
  106|  4.86k|        .source = OFPBUF_STACK,
  107|  4.86k|    };
  108|  4.86k|}
ofp-bundle.c:ofpbuf_pull:
  258|  2.66k|{
  259|  2.66k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  2.66k|#define ovs_assert ovs_ignore
  ------------------
  260|  2.66k|    void *data = b->data;
  261|       |
  262|  2.66k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 2.66k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  2.66k|    b->data = (char*)b->data + size;
  267|  2.66k|    b->size = b->size - size;
  268|  2.66k|    return data;
  269|  2.66k|}
ofp-connection.c:ofpbuf_const_initializer:
   97|  17.4k|{
   98|  17.4k|    return (struct ofpbuf) {
   99|  17.4k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  17.4k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  17.4k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  17.4k|     (TYPE) (POINTER))
  ------------------
  100|  17.4k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  17.4k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  17.4k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  17.4k|     (TYPE) (POINTER))
  ------------------
  101|  17.4k|        .size = size,
  102|  17.4k|        .allocated = size,
  103|  17.4k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  17.4k|        .list_node = OVS_LIST_POISON,
  106|  17.4k|        .source = OFPBUF_STACK,
  107|  17.4k|    };
  108|  17.4k|}
ofp-ct.c:ofpbuf_const_initializer:
   97|  8.01k|{
   98|  8.01k|    return (struct ofpbuf) {
   99|  8.01k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  8.01k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  8.01k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  8.01k|     (TYPE) (POINTER))
  ------------------
  100|  8.01k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  8.01k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  8.01k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  8.01k|     (TYPE) (POINTER))
  ------------------
  101|  8.01k|        .size = size,
  102|  8.01k|        .allocated = size,
  103|  8.01k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  8.01k|        .list_node = OVS_LIST_POISON,
  106|  8.01k|        .source = OFPBUF_STACK,
  107|  8.01k|    };
  108|  8.01k|}
ofp-ct.c:ofpbuf_pull:
  258|  8.01k|{
  259|  8.01k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  8.01k|#define ovs_assert ovs_ignore
  ------------------
  260|  8.01k|    void *data = b->data;
  261|       |
  262|  8.01k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 8.01k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  8.01k|    b->data = (char*)b->data + size;
  267|  8.01k|    b->size = b->size - size;
  268|  8.01k|    return data;
  269|  8.01k|}
ofp-ct.c:ofpbuf_msgsize:
  244|  7.61k|{
  245|  7.61k|    return (char *)ofpbuf_tail(b) - (char *)b->msg;
  246|  7.61k|}
ofp-ct.c:ofpbuf_tail:
  203|  7.61k|{
  204|  7.61k|    ovs_assert(b->data || !b->size);
  ------------------
  |  |   62|  7.61k|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (204:16): [True: 7.61k, False: 0]
  |  Branch (204:27): [True: 0, False: 0]
  ------------------
  205|  7.61k|    return b->data ? (char *) b->data + b->size : NULL;
  ------------------
  |  Branch (205:12): [True: 7.61k, False: 0]
  ------------------
  206|  7.61k|}
ofp-errors.c:ofpbuf_const_initializer:
   97|   497k|{
   98|   497k|    return (struct ofpbuf) {
   99|   497k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|   497k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   497k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   497k|     (TYPE) (POINTER))
  ------------------
  100|   497k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|   497k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   497k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   497k|     (TYPE) (POINTER))
  ------------------
  101|   497k|        .size = size,
  102|   497k|        .allocated = size,
  103|   497k|        .header = NULL,
  104|       |        .msg = NULL,
  105|   497k|        .list_node = OVS_LIST_POISON,
  106|   497k|        .source = OFPBUF_STACK,
  107|   497k|    };
  108|   497k|}
ofp-errors.c:ofpbuf_pull:
  258|   584k|{
  259|   584k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|   584k|#define ovs_assert ovs_ignore
  ------------------
  260|   584k|    void *data = b->data;
  261|       |
  262|   584k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 584k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|   584k|    b->data = (char*)b->data + size;
  267|   584k|    b->size = b->size - size;
  268|   584k|    return data;
  269|   584k|}
ofp-errors.c:ofpbuf_try_pull:
  275|  92.8k|{
  276|  92.8k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 87.6k, False: 5.23k]
  ------------------
  277|  92.8k|}
ofp-flow.c:ofpbuf_const_initializer:
   97|  69.1k|{
   98|  69.1k|    return (struct ofpbuf) {
   99|  69.1k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  69.1k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  69.1k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  69.1k|     (TYPE) (POINTER))
  ------------------
  100|  69.1k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  69.1k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  69.1k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  69.1k|     (TYPE) (POINTER))
  ------------------
  101|  69.1k|        .size = size,
  102|  69.1k|        .allocated = size,
  103|  69.1k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  69.1k|        .list_node = OVS_LIST_POISON,
  106|  69.1k|        .source = OFPBUF_STACK,
  107|  69.1k|    };
  108|  69.1k|}
ofp-flow.c:ofpbuf_pull:
  258|  79.8k|{
  259|  79.8k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  79.8k|#define ovs_assert ovs_ignore
  ------------------
  260|  79.8k|    void *data = b->data;
  261|       |
  262|  79.8k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 79.8k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  79.8k|    b->data = (char*)b->data + size;
  267|  79.8k|    b->size = b->size - size;
  268|  79.8k|    return data;
  269|  79.8k|}
ofp-flow.c:ofpbuf_try_pull:
  275|  16.5k|{
  276|  16.5k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 13.0k, False: 3.47k]
  ------------------
  277|  16.5k|}
ofp-group.c:ofpbuf_const_initializer:
   97|  50.5k|{
   98|  50.5k|    return (struct ofpbuf) {
   99|  50.5k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  50.5k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  50.5k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  50.5k|     (TYPE) (POINTER))
  ------------------
  100|  50.5k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  50.5k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  50.5k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  50.5k|     (TYPE) (POINTER))
  ------------------
  101|  50.5k|        .size = size,
  102|  50.5k|        .allocated = size,
  103|  50.5k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  50.5k|        .list_node = OVS_LIST_POISON,
  106|  50.5k|        .source = OFPBUF_STACK,
  107|  50.5k|    };
  108|  50.5k|}
ofp-group.c:ofpbuf_pull:
  258|  76.9k|{
  259|  76.9k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  76.9k|#define ovs_assert ovs_ignore
  ------------------
  260|  76.9k|    void *data = b->data;
  261|       |
  262|  76.9k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 11.3k, False: 65.6k]
  ------------------
  263|  11.3k|        return data;
  264|  11.3k|    }
  265|       |
  266|  65.6k|    b->data = (char*)b->data + size;
  267|  65.6k|    b->size = b->size - size;
  268|  65.6k|    return data;
  269|  76.9k|}
ofp-group.c:ofpbuf_try_pull:
  275|  29.0k|{
  276|  29.0k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 27.5k, False: 1.47k]
  ------------------
  277|  29.0k|}
ofp-ipfix.c:ofpbuf_try_pull:
  275|  7.54k|{
  276|  7.54k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 7.54k, False: 0]
  ------------------
  277|  7.54k|}
ofp-ipfix.c:ofpbuf_pull:
  258|  7.54k|{
  259|  7.54k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  7.54k|#define ovs_assert ovs_ignore
  ------------------
  260|  7.54k|    void *data = b->data;
  261|       |
  262|  7.54k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 7.54k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  7.54k|    b->data = (char*)b->data + size;
  267|  7.54k|    b->size = b->size - size;
  268|  7.54k|    return data;
  269|  7.54k|}
ofp-ipfix.c:ofpbuf_const_initializer:
   97|  1.14k|{
   98|  1.14k|    return (struct ofpbuf) {
   99|  1.14k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  1.14k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  1.14k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  1.14k|     (TYPE) (POINTER))
  ------------------
  100|  1.14k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  1.14k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  1.14k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  1.14k|     (TYPE) (POINTER))
  ------------------
  101|  1.14k|        .size = size,
  102|  1.14k|        .allocated = size,
  103|  1.14k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  1.14k|        .list_node = OVS_LIST_POISON,
  106|  1.14k|        .source = OFPBUF_STACK,
  107|  1.14k|    };
  108|  1.14k|}
ofp-match.c:ofpbuf_pull:
  258|  8.76k|{
  259|  8.76k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  8.76k|#define ovs_assert ovs_ignore
  ------------------
  260|  8.76k|    void *data = b->data;
  261|       |
  262|  8.76k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 8.76k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  8.76k|    b->data = (char*)b->data + size;
  267|  8.76k|    b->size = b->size - size;
  268|  8.76k|    return data;
  269|  8.76k|}
ofp-match.c:ofpbuf_const_initializer:
   97|  1.89k|{
   98|  1.89k|    return (struct ofpbuf) {
   99|  1.89k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  1.89k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  1.89k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  1.89k|     (TYPE) (POINTER))
  ------------------
  100|  1.89k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  1.89k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  1.89k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  1.89k|     (TYPE) (POINTER))
  ------------------
  101|  1.89k|        .size = size,
  102|  1.89k|        .allocated = size,
  103|  1.89k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  1.89k|        .list_node = OVS_LIST_POISON,
  106|  1.89k|        .source = OFPBUF_STACK,
  107|  1.89k|    };
  108|  1.89k|}
ofp-meter.c:ofpbuf_const_initializer:
   97|  7.33k|{
   98|  7.33k|    return (struct ofpbuf) {
   99|  7.33k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  7.33k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  7.33k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  7.33k|     (TYPE) (POINTER))
  ------------------
  100|  7.33k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  7.33k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  7.33k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  7.33k|     (TYPE) (POINTER))
  ------------------
  101|  7.33k|        .size = size,
  102|  7.33k|        .allocated = size,
  103|  7.33k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  7.33k|        .list_node = OVS_LIST_POISON,
  106|  7.33k|        .source = OFPBUF_STACK,
  107|  7.33k|    };
  108|  7.33k|}
ofp-meter.c:ofpbuf_pull:
  258|  16.6k|{
  259|  16.6k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  16.6k|#define ovs_assert ovs_ignore
  ------------------
  260|  16.6k|    void *data = b->data;
  261|       |
  262|  16.6k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 1.86k, False: 14.8k]
  ------------------
  263|  1.86k|        return data;
  264|  1.86k|    }
  265|       |
  266|  14.8k|    b->data = (char*)b->data + size;
  267|  14.8k|    b->size = b->size - size;
  268|  14.8k|    return data;
  269|  16.6k|}
ofp-meter.c:ofpbuf_try_pull:
  275|  10.3k|{
  276|  10.3k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 9.36k, False: 950]
  ------------------
  277|  10.3k|}
ofp-meter.c:ofpbuf_clear:
  250|  2.81k|{
  251|  2.81k|    b->data = b->base;
  252|  2.81k|    b->size = 0;
  253|  2.81k|}
ofp-monitor.c:ofpbuf_const_initializer:
   97|  8.17k|{
   98|  8.17k|    return (struct ofpbuf) {
   99|  8.17k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  8.17k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  8.17k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  8.17k|     (TYPE) (POINTER))
  ------------------
  100|  8.17k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  8.17k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  8.17k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  8.17k|     (TYPE) (POINTER))
  ------------------
  101|  8.17k|        .size = size,
  102|  8.17k|        .allocated = size,
  103|  8.17k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  8.17k|        .list_node = OVS_LIST_POISON,
  106|  8.17k|        .source = OFPBUF_STACK,
  107|  8.17k|    };
  108|  8.17k|}
ofp-monitor.c:ofpbuf_pull:
  258|  19.2k|{
  259|  19.2k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  19.2k|#define ovs_assert ovs_ignore
  ------------------
  260|  19.2k|    void *data = b->data;
  261|       |
  262|  19.2k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 19.2k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  19.2k|    b->data = (char*)b->data + size;
  267|  19.2k|    b->size = b->size - size;
  268|  19.2k|    return data;
  269|  19.2k|}
ofp-monitor.c:ofpbuf_try_pull:
  275|  6.46k|{
  276|  6.46k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 5.68k, False: 777]
  ------------------
  277|  6.46k|}
ofp-monitor.c:ofpbuf_clear:
  250|  15.6k|{
  251|  15.6k|    b->data = b->base;
  252|  15.6k|    b->size = 0;
  253|  15.6k|}
ofp-msgs.c:ofpbuf_const_initializer:
   97|  1.52M|{
   98|  1.52M|    return (struct ofpbuf) {
   99|  1.52M|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  1.52M|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  1.52M|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  1.52M|     (TYPE) (POINTER))
  ------------------
  100|  1.52M|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  1.52M|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  1.52M|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  1.52M|     (TYPE) (POINTER))
  ------------------
  101|  1.52M|        .size = size,
  102|  1.52M|        .allocated = size,
  103|  1.52M|        .header = NULL,
  104|       |        .msg = NULL,
  105|  1.52M|        .list_node = OVS_LIST_POISON,
  106|  1.52M|        .source = OFPBUF_STACK,
  107|  1.52M|    };
  108|  1.52M|}
ofp-msgs.c:ofpbuf_pull:
  258|  2.09M|{
  259|  2.09M|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  2.09M|#define ovs_assert ovs_ignore
  ------------------
  260|  2.09M|    void *data = b->data;
  261|       |
  262|  2.09M|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 2.09M]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  2.09M|    b->data = (char*)b->data + size;
  267|  2.09M|    b->size = b->size - size;
  268|  2.09M|    return data;
  269|  2.09M|}
ofp-packet.c:ofpbuf_const_initializer:
   97|   227k|{
   98|   227k|    return (struct ofpbuf) {
   99|   227k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|   227k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   227k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   227k|     (TYPE) (POINTER))
  ------------------
  100|   227k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|   227k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   227k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   227k|     (TYPE) (POINTER))
  ------------------
  101|   227k|        .size = size,
  102|   227k|        .allocated = size,
  103|   227k|        .header = NULL,
  104|       |        .msg = NULL,
  105|   227k|        .list_node = OVS_LIST_POISON,
  106|   227k|        .source = OFPBUF_STACK,
  107|   227k|    };
  108|   227k|}
ofp-packet.c:ofpbuf_pull:
  258|   248k|{
  259|   248k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|   248k|#define ovs_assert ovs_ignore
  ------------------
  260|   248k|    void *data = b->data;
  261|       |
  262|   248k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 248k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|   248k|    b->data = (char*)b->data + size;
  267|   248k|    b->size = b->size - size;
  268|   248k|    return data;
  269|   248k|}
ofp-packet.c:ofpbuf_try_pull:
  275|  32.8k|{
  276|  32.8k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 30.1k, False: 2.70k]
  ------------------
  277|  32.8k|}
ofp-packet.c:ofpbuf_msgsize:
  244|  13.8k|{
  245|  13.8k|    return (char *)ofpbuf_tail(b) - (char *)b->msg;
  246|  13.8k|}
ofp-packet.c:ofpbuf_tail:
  203|  13.8k|{
  204|  13.8k|    ovs_assert(b->data || !b->size);
  ------------------
  |  |   62|  13.8k|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (204:16): [True: 13.8k, False: 0]
  |  Branch (204:27): [True: 0, False: 0]
  ------------------
  205|  13.8k|    return b->data ? (char *) b->data + b->size : NULL;
  ------------------
  |  Branch (205:12): [True: 13.8k, False: 0]
  ------------------
  206|  13.8k|}
ofp-packet.c:ofpbuf_headersize:
  236|  3.25k|{
  237|  3.25k|    return (char *)b->msg - (char *)b->header;
  238|  3.25k|}
ofp-packet.c:ofpbuf_clear:
  250|   136k|{
  251|   136k|    b->data = b->base;
  252|   136k|    b->size = 0;
  253|   136k|}
ofp-port.c:ofpbuf_const_initializer:
   97|  20.1k|{
   98|  20.1k|    return (struct ofpbuf) {
   99|  20.1k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  20.1k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  20.1k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  20.1k|     (TYPE) (POINTER))
  ------------------
  100|  20.1k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  20.1k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  20.1k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  20.1k|     (TYPE) (POINTER))
  ------------------
  101|  20.1k|        .size = size,
  102|  20.1k|        .allocated = size,
  103|  20.1k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  20.1k|        .list_node = OVS_LIST_POISON,
  106|  20.1k|        .source = OFPBUF_STACK,
  107|  20.1k|    };
  108|  20.1k|}
ofp-port.c:ofpbuf_pull:
  258|   151k|{
  259|   151k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|   151k|#define ovs_assert ovs_ignore
  ------------------
  260|   151k|    void *data = b->data;
  261|       |
  262|   151k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 11.3k, False: 140k]
  ------------------
  263|  11.3k|        return data;
  264|  11.3k|    }
  265|       |
  266|   140k|    b->data = (char*)b->data + size;
  267|   140k|    b->size = b->size - size;
  268|   140k|    return data;
  269|   151k|}
ofp-port.c:ofpbuf_try_pull:
  275|   145k|{
  276|   145k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 140k, False: 5.23k]
  ------------------
  277|   145k|}
ofp-prop.c:ofpbuf_pull:
  258|   106k|{
  259|   106k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|   106k|#define ovs_assert ovs_ignore
  ------------------
  260|   106k|    void *data = b->data;
  261|       |
  262|   106k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 106k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|   106k|    b->data = (char*)b->data + size;
  267|   106k|    b->size = b->size - size;
  268|   106k|    return data;
  269|   106k|}
ofp-prop.c:ofpbuf_msgsize:
  244|  18.9k|{
  245|  18.9k|    return (char *)ofpbuf_tail(b) - (char *)b->msg;
  246|  18.9k|}
ofp-prop.c:ofpbuf_tail:
  203|  18.9k|{
  204|  18.9k|    ovs_assert(b->data || !b->size);
  ------------------
  |  |   62|  18.9k|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (204:16): [True: 18.9k, False: 0]
  |  Branch (204:27): [True: 0, False: 0]
  ------------------
  205|  18.9k|    return b->data ? (char *) b->data + b->size : NULL;
  ------------------
  |  Branch (205:12): [True: 18.9k, False: 0]
  ------------------
  206|  18.9k|}
ofp-prop.c:ofpbuf_headersize:
  236|  11.5k|{
  237|  11.5k|    return (char *)b->msg - (char *)b->header;
  238|  11.5k|}
ox-stat.c:ofpbuf_try_pull:
  275|  8.96k|{
  276|  8.96k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 7.77k, False: 1.19k]
  ------------------
  277|  8.96k|}
ox-stat.c:ofpbuf_pull:
  258|  10.3k|{
  259|  10.3k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  10.3k|#define ovs_assert ovs_ignore
  ------------------
  260|  10.3k|    void *data = b->data;
  261|       |
  262|  10.3k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 1.23k, False: 9.11k]
  ------------------
  263|  1.23k|        return data;
  264|  1.23k|    }
  265|       |
  266|  9.11k|    b->data = (char*)b->data + size;
  267|  9.11k|    b->size = b->size - size;
  268|  9.11k|    return data;
  269|  10.3k|}
ox-stat.c:ofpbuf_const_initializer:
   97|  5.80k|{
   98|  5.80k|    return (struct ofpbuf) {
   99|  5.80k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  5.80k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  5.80k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  5.80k|     (TYPE) (POINTER))
  ------------------
  100|  5.80k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  5.80k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  5.80k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  5.80k|     (TYPE) (POINTER))
  ------------------
  101|  5.80k|        .size = size,
  102|  5.80k|        .allocated = size,
  103|  5.80k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  5.80k|        .list_node = OVS_LIST_POISON,
  106|  5.80k|        .source = OFPBUF_STACK,
  107|  5.80k|    };
  108|  5.80k|}

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

ofp-actions.c:is_pow2:
  399|  1.22k|{
  400|  1.22k|    return IS_POW2(x);
  ------------------
  |  |  312|  1.22k|#define IS_POW2(X) ((X) && !((X) & ((X) - 1)))
  |  |  ------------------
  |  |  |  Branch (312:21): [True: 1.22k, False: 0]
  |  |  |  Branch (312:28): [True: 854, False: 374]
  |  |  ------------------
  ------------------
  401|  1.22k|}
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|  2.38k|{
   45|  2.38k|    return bitmap_n_longs(n_bits) * sizeof(unsigned long int);
   46|  2.38k|}
ofp-table.c:bitmap_n_longs:
   38|  2.38k|{
   39|  2.38k|    return BITMAP_N_LONGS(n_bits);
  ------------------
  |  |  424|  2.38k|#define BITMAP_N_LONGS(N_BITS) DIV_ROUND_UP(N_BITS, BITMAP_ULONG_BITS)
  |  |  ------------------
  |  |  |  |  300|  2.38k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
   40|  2.38k|}
ofp-table.c:bitmap_set1:
   96|   124k|{
   97|   124k|    *bitmap_unit__(bitmap, offset) |= bitmap_bit__(offset);
   98|   124k|    return bitmap;
   99|   124k|}
ofp-table.c:bitmap_bit__:
   32|   125k|{
   33|       |    return 1UL << (offset % BITMAP_ULONG_BITS);
  ------------------
  |  |  423|   125k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
   34|   125k|}
ofp-table.c:bitmap_unit__:
   26|  1.28M|{
   27|  1.28M|    return CONST_CAST(unsigned long *, &bitmap[offset / BITMAP_ULONG_BITS]);
  ------------------
  |  |   85|  1.28M|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  1.28M|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  1.28M|     (TYPE) (POINTER))
  ------------------
   28|  1.28M|}
ofp-table.c:bitmap_or:
  179|  26.5k|{
  180|  26.5k|    size_t i;
  181|       |
  182|   132k|    for (i = 0; i < BITMAP_N_LONGS(n); i++) {
  ------------------
  |  |  424|   132k|#define BITMAP_N_LONGS(N_BITS) DIV_ROUND_UP(N_BITS, BITMAP_ULONG_BITS)
  |  |  ------------------
  |  |  |  |  300|   132k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (182:17): [True: 106k, False: 26.5k]
  ------------------
  183|   106k|        dst[i] |= arg[i];
  184|   106k|    }
  185|  26.5k|    return dst;
  186|  26.5k|}
ofp-table.c:bitmap_and:
  167|  1.11k|{
  168|  1.11k|    size_t i;
  169|       |
  170|  5.57k|    for (i = 0; i < BITMAP_N_LONGS(n); i++) {
  ------------------
  |  |  424|  5.57k|#define BITMAP_N_LONGS(N_BITS) DIV_ROUND_UP(N_BITS, BITMAP_ULONG_BITS)
  |  |  ------------------
  |  |  |  |  300|  5.57k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (170:17): [True: 4.45k, False: 1.11k]
  ------------------
  171|  4.45k|        dst[i] &= arg[i];
  172|  4.45k|    }
  173|  1.11k|    return dst;
  174|  1.11k|}
ofp-table.c:bitmap_scan:
  227|   781k|{
  228|   781k|    if (OVS_LIKELY(start < end)) {
  ------------------
  |  |   65|   781k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 781k, False: 0]
  |  |  ------------------
  ------------------
  229|   781k|        unsigned long *p, unit;
  230|       |
  231|   781k|        p = bitmap_unit__(bitmap, start);
  232|   781k|        unit = (target ? *p : ~*p) >> (start % BITMAP_ULONG_BITS);
  ------------------
  |  |  423|   781k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (232:17): [True: 781k, False: 0]
  ------------------
  233|   781k|        if (!unit) {
  ------------------
  |  Branch (233:13): [True: 363k, False: 418k]
  ------------------
  234|   363k|            start -= start % BITMAP_ULONG_BITS; /* Round down. */
  ------------------
  |  |  423|   363k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  235|   363k|            start += BITMAP_ULONG_BITS; /* Start of the next unit. */
  ------------------
  |  |  423|   363k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  236|       |
  237|   821k|            for (; start < end; start += BITMAP_ULONG_BITS) {
  ------------------
  |  |  423|   457k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (237:20): [True: 645k, False: 175k]
  ------------------
  238|   645k|                unit = target ? *++p : ~*++p;
  ------------------
  |  Branch (238:24): [True: 645k, False: 0]
  ------------------
  239|   645k|                if (unit) {
  ------------------
  |  Branch (239:21): [True: 187k, False: 457k]
  ------------------
  240|   187k|                    goto found;
  241|   187k|                }
  242|   645k|            }
  243|   175k|            return end;
  244|   363k|        }
  245|   605k|found:
  246|   605k|        start += raw_ctz(unit);  /* unit != 0 */
  247|   605k|        if (OVS_LIKELY(start < end)) {
  ------------------
  |  |   65|   605k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 605k, False: 0]
  |  |  ------------------
  ------------------
  248|   605k|            return start;
  249|   605k|        }
  250|   605k|    }
  251|      0|    return end;
  252|   781k|}
ofp-table.c:bitmap_is_set:
   90|  1.46k|{
   91|  1.46k|    return (*bitmap_unit__(bitmap, offset) & bitmap_bit__(offset)) != 0;
   92|  1.46k|}
ofp-table.c:bitmap_is_all_zeros:
  273|   205k|{
  274|       |    return bitmap_scan(bitmap, true, 0, n) == n;
  275|   205k|}
ofp-table.c:bitmap_equal:
  207|   217k|{
  208|   217k|    if (memcmp(a, b, n / BITMAP_ULONG_BITS * sizeof(unsigned long))) {
  ------------------
  |  |  423|   217k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (208:9): [True: 26.4k, False: 190k]
  ------------------
  209|  26.4k|        return false;
  210|  26.4k|    }
  211|   190k|    if (n % BITMAP_ULONG_BITS) {
  ------------------
  |  |  423|   190k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (211:9): [True: 190k, False: 0]
  ------------------
  212|   190k|        unsigned long mask = (1UL << n % BITMAP_ULONG_BITS) - 1;
  ------------------
  |  |  423|   190k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  213|   190k|        unsigned long diff = *bitmap_unit__(a, n) ^ *bitmap_unit__(b, n);
  214|       |
  215|   190k|        return !(diff & mask);
  216|   190k|    }
  217|      0|    return true;
  218|   190k|}
meta-flow.c:bitmap_scan:
  227|  12.1k|{
  228|  12.1k|    if (OVS_LIKELY(start < end)) {
  ------------------
  |  |   65|  12.1k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 11.7k, False: 413]
  |  |  ------------------
  ------------------
  229|  11.7k|        unsigned long *p, unit;
  230|       |
  231|  11.7k|        p = bitmap_unit__(bitmap, start);
  232|  11.7k|        unit = (target ? *p : ~*p) >> (start % BITMAP_ULONG_BITS);
  ------------------
  |  |  423|  11.7k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (232:17): [True: 11.7k, False: 0]
  ------------------
  233|  11.7k|        if (!unit) {
  ------------------
  |  Branch (233:13): [True: 9.10k, False: 2.68k]
  ------------------
  234|  9.10k|            start -= start % BITMAP_ULONG_BITS; /* Round down. */
  ------------------
  |  |  423|  9.10k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  235|  9.10k|            start += BITMAP_ULONG_BITS; /* Start of the next unit. */
  ------------------
  |  |  423|  9.10k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  236|       |
  237|  13.6k|            for (; start < end; start += BITMAP_ULONG_BITS) {
  ------------------
  |  |  423|  4.57k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (237:20): [True: 7.17k, False: 6.50k]
  ------------------
  238|  7.17k|                unit = target ? *++p : ~*++p;
  ------------------
  |  Branch (238:24): [True: 7.17k, False: 0]
  ------------------
  239|  7.17k|                if (unit) {
  ------------------
  |  Branch (239:21): [True: 2.60k, False: 4.57k]
  ------------------
  240|  2.60k|                    goto found;
  241|  2.60k|                }
  242|  7.17k|            }
  243|  6.50k|            return end;
  244|  9.10k|        }
  245|  5.28k|found:
  246|  5.28k|        start += raw_ctz(unit);  /* unit != 0 */
  247|  5.28k|        if (OVS_LIKELY(start < end)) {
  ------------------
  |  |   65|  5.28k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 4.49k, False: 790]
  |  |  ------------------
  ------------------
  248|  4.49k|            return start;
  249|  4.49k|        }
  250|  5.28k|    }
  251|  1.20k|    return end;
  252|  12.1k|}
meta-flow.c:bitmap_unit__:
   26|  27.1k|{
   27|  27.1k|    return CONST_CAST(unsigned long *, &bitmap[offset / BITMAP_ULONG_BITS]);
  ------------------
  |  |   85|  27.1k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  27.1k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  27.1k|     (TYPE) (POINTER))
  ------------------
   28|  27.1k|}
meta-flow.c:bitmap_is_set:
   90|  7.70k|{
   91|  7.70k|    return (*bitmap_unit__(bitmap, offset) & bitmap_bit__(offset)) != 0;
   92|  7.70k|}
meta-flow.c:bitmap_bit__:
   32|  15.4k|{
   33|       |    return 1UL << (offset % BITMAP_ULONG_BITS);
  ------------------
  |  |  423|  15.4k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
   34|  15.4k|}
meta-flow.c:bitmap_set1:
   96|  7.70k|{
   97|  7.70k|    *bitmap_unit__(bitmap, offset) |= bitmap_bit__(offset);
   98|  7.70k|    return bitmap;
   99|  7.70k|}
meta-flow.c:bitmap_and:
  167|   122k|{
  168|   122k|    size_t i;
  169|       |
  170|   610k|    for (i = 0; i < BITMAP_N_LONGS(n); i++) {
  ------------------
  |  |  424|   610k|#define BITMAP_N_LONGS(N_BITS) DIV_ROUND_UP(N_BITS, BITMAP_ULONG_BITS)
  |  |  ------------------
  |  |  |  |  300|   610k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (170:17): [True: 488k, False: 122k]
  ------------------
  171|   488k|        dst[i] &= arg[i];
  172|   488k|    }
  173|   122k|    return dst;
  174|   122k|}
meta-flow.c:bitmap_not:
  191|  61.0k|{
  192|  61.0k|    size_t i;
  193|       |
  194|   244k|    for (i = 0; i < n / BITMAP_ULONG_BITS; i++) {
  ------------------
  |  |  423|   244k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (194:17): [True: 183k, False: 61.0k]
  ------------------
  195|   183k|        dst[i] = ~dst[i];
  196|   183k|    }
  197|  61.0k|    if (n % BITMAP_ULONG_BITS) {
  ------------------
  |  |  423|  61.0k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (197:9): [True: 61.0k, False: 0]
  ------------------
  198|       |        dst[i] ^= (1UL << (n % BITMAP_ULONG_BITS)) - 1;
  ------------------
  |  |  423|  61.0k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  199|  61.0k|    }
  200|  61.0k|    return dst;
  201|  61.0k|}
nx-match.c:bitmap_is_set:
   90|  7.79k|{
   91|  7.79k|    return (*bitmap_unit__(bitmap, offset) & bitmap_bit__(offset)) != 0;
   92|  7.79k|}
nx-match.c:bitmap_unit__:
   26|   705k|{
   27|   705k|    return CONST_CAST(unsigned long *, &bitmap[offset / BITMAP_ULONG_BITS]);
  ------------------
  |  |   85|   705k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   705k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   705k|     (TYPE) (POINTER))
  ------------------
   28|   705k|}
nx-match.c:bitmap_bit__:
   32|   696k|{
   33|       |    return 1UL << (offset % BITMAP_ULONG_BITS);
  ------------------
  |  |  423|   696k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
   34|   696k|}
nx-match.c:bitmap_scan:
  227|  9.41k|{
  228|  9.41k|    if (OVS_LIKELY(start < end)) {
  ------------------
  |  |   65|  9.41k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 9.34k, False: 77]
  |  |  ------------------
  ------------------
  229|  9.34k|        unsigned long *p, unit;
  230|       |
  231|  9.34k|        p = bitmap_unit__(bitmap, start);
  232|  9.34k|        unit = (target ? *p : ~*p) >> (start % BITMAP_ULONG_BITS);
  ------------------
  |  |  423|  9.34k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (232:17): [True: 9.34k, False: 0]
  ------------------
  233|  9.34k|        if (!unit) {
  ------------------
  |  Branch (233:13): [True: 6.32k, False: 3.01k]
  ------------------
  234|  6.32k|            start -= start % BITMAP_ULONG_BITS; /* Round down. */
  ------------------
  |  |  423|  6.32k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  235|  6.32k|            start += BITMAP_ULONG_BITS; /* Start of the next unit. */
  ------------------
  |  |  423|  6.32k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  236|       |
  237|  9.48k|            for (; start < end; start += BITMAP_ULONG_BITS) {
  ------------------
  |  |  423|  3.15k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (237:20): [True: 7.16k, False: 2.31k]
  ------------------
  238|  7.16k|                unit = target ? *++p : ~*++p;
  ------------------
  |  Branch (238:24): [True: 7.16k, False: 0]
  ------------------
  239|  7.16k|                if (unit) {
  ------------------
  |  Branch (239:21): [True: 4.01k, False: 3.15k]
  ------------------
  240|  4.01k|                    goto found;
  241|  4.01k|                }
  242|  7.16k|            }
  243|  2.31k|            return end;
  244|  6.32k|        }
  245|  7.02k|found:
  246|  7.02k|        start += raw_ctz(unit);  /* unit != 0 */
  247|  7.02k|        if (OVS_LIKELY(start < end)) {
  ------------------
  |  |   65|  7.02k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 7.02k, False: 0]
  |  |  ------------------
  ------------------
  248|  7.02k|            return start;
  249|  7.02k|        }
  250|  7.02k|    }
  251|     77|    return end;
  252|  9.41k|}
nx-match.c:bitmap_set1:
   96|   688k|{
   97|   688k|    *bitmap_unit__(bitmap, offset) |= bitmap_bit__(offset);
   98|   688k|    return bitmap;
   99|   688k|}
ofp-group.c:bitmap_count1:
  153|  2.71k|{
  154|  2.71k|    size_t i;
  155|  2.71k|    size_t count = 0;
  156|       |
  157|  2.71k|    BUILD_ASSERT(ULONG_MAX <= UINT64_MAX);
  ------------------
  |  |  271|  2.71k|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  ------------------
  158|  13.5k|    for (i = 0; i < BITMAP_N_LONGS(n); i++) {
  ------------------
  |  |  424|  13.5k|#define BITMAP_N_LONGS(N_BITS) DIV_ROUND_UP(N_BITS, BITMAP_ULONG_BITS)
  |  |  ------------------
  |  |  |  |  300|  13.5k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (158:17): [True: 10.8k, False: 2.71k]
  ------------------
  159|  10.8k|        count += count_1bits(bitmap[i]);
  160|  10.8k|    }
  161|  2.71k|    return count;
  162|  2.71k|}

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

ofp-queue.c:ntohll:
   35|  47.3k|{
   36|  47.3k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 47.3k]
  ------------------
   37|  47.3k|}
ofp-switch.c:ntohll:
   35|  2.71k|{
   36|  2.71k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 2.71k]
  ------------------
   37|  2.71k|}
ofp-table.c:ntohll:
   35|   103k|{
   36|   103k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 103k]
  ------------------
   37|   103k|}
util.c:htonll:
   29|  5.58k|{
   30|  5.58k|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 5.58k]
  ------------------
   31|  5.58k|}
util.c:ntohll:
   35|  1.67k|{
   36|  1.67k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 1.67k]
  ------------------
   37|  1.67k|}
flow.c:be32_to_be16:
  135|  60.4k|static inline ovs_be16 be32_to_be16(ovs_be32 x) { return x >> 16; }
flow.c:bytes_to_be32:
  110|  15.1k|{
  111|       |#if WORDS_BIGENDIAN
  112|       |    uint32_t x = ((uint32_t) b0 << 24) | (b1 << 16) | (b2 << 8) | b3;
  113|       |#else
  114|  15.1k|    uint32_t x = ((uint32_t) b3 << 24) | (b2 << 16) | (b1 << 8) | b0;
  115|  15.1k|#endif
  116|  15.1k|    return (OVS_FORCE ovs_be32) x;
  117|  15.1k|}
match.c:hton128:
   48|  1.01k|{
   49|  1.01k|    ovs_be128 dst;
   50|       |
   51|  1.01k|    dst.be64.hi = htonll(src.u64.hi);
   52|  1.01k|    dst.be64.lo = htonll(src.u64.lo);
   53|  1.01k|    return dst;
   54|  1.01k|}
match.c:htonll:
   29|   332k|{
   30|   332k|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 332k]
  ------------------
   31|   332k|}
match.c:be32_to_be16:
  135|  28.3k|static inline ovs_be16 be32_to_be16(ovs_be32 x) { return x >> 16; }
match.c:ntohll:
   35|  4.35k|{
   36|  4.35k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 4.35k]
  ------------------
   37|  4.35k|}
meta-flow.c:be32_to_be16:
  135|  10.1k|static inline ovs_be16 be32_to_be16(ovs_be32 x) { return x >> 16; }
meta-flow.c:hton128:
   48|     90|{
   49|     90|    ovs_be128 dst;
   50|       |
   51|     90|    dst.be64.hi = htonll(src.u64.hi);
   52|     90|    dst.be64.lo = htonll(src.u64.lo);
   53|     90|    return dst;
   54|     90|}
meta-flow.c:htonll:
   29|  2.43k|{
   30|  2.43k|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 2.43k]
  ------------------
   31|  2.43k|}
meta-flow.c:ntoh128:
   58|  4.29k|{
   59|  4.29k|    ovs_u128 dst;
   60|       |
   61|  4.29k|    dst.u64.hi = ntohll(src.be64.hi);
   62|  4.29k|    dst.u64.lo = ntohll(src.be64.lo);
   63|  4.29k|    return dst;
   64|  4.29k|}
meta-flow.c:ntohll:
   35|  15.1k|{
   36|  15.1k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 15.1k]
  ------------------
   37|  15.1k|}
nx-match.c:ntohll:
   35|  12.6k|{
   36|  12.6k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 12.6k]
  ------------------
   37|  12.6k|}
nx-match.c:htonll:
   29|  2.59M|{
   30|  2.59M|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 2.59M]
  ------------------
   31|  2.59M|}
ofp-actions.c:ntohll:
   35|  5.19k|{
   36|  5.19k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 5.19k]
  ------------------
   37|  5.19k|}
ofp-actions.c:be32_to_be16:
  135|  12.3k|static inline ovs_be16 be32_to_be16(ovs_be32 x) { return x >> 16; }
ofp-connection.c:ntohll:
   35|  4.89k|{
   36|  4.89k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 4.89k]
  ------------------
   37|  4.89k|}
ofp-ct.c:hton128:
   48|  1.39k|{
   49|  1.39k|    ovs_be128 dst;
   50|       |
   51|  1.39k|    dst.be64.hi = htonll(src.u64.hi);
   52|  1.39k|    dst.be64.lo = htonll(src.u64.lo);
   53|  1.39k|    return dst;
   54|  1.39k|}
ofp-ct.c:htonll:
   29|  2.79k|{
   30|  2.79k|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 2.79k]
  ------------------
   31|  2.79k|}
ofp-flow.c:htonll:
   29|   143k|{
   30|   143k|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 143k]
  ------------------
   31|   143k|}
ofp-flow.c:ntohll:
   35|  40.7k|{
   36|  40.7k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 40.7k]
  ------------------
   37|  40.7k|}
ofp-group.c:ntohll:
   35|  76.3k|{
   36|  76.3k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 76.3k]
  ------------------
   37|  76.3k|}
ofp-ipfix.c:ntohll:
   35|  75.4k|{
   36|  75.4k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 75.4k]
  ------------------
   37|  75.4k|}
ofp-meter.c:ntohll:
   35|  3.70k|{
   36|  3.70k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 3.70k]
  ------------------
   37|  3.70k|}
ofp-monitor.c:ntohll:
   35|  7.86k|{
   36|  7.86k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 7.86k]
  ------------------
   37|  7.86k|}
ofp-monitor.c:htonll:
   29|  2.50k|{
   30|  2.50k|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 2.50k]
  ------------------
   31|  2.50k|}
ofp-packet.c:ntohll:
   35|  4.15k|{
   36|  4.15k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 4.15k]
  ------------------
   37|  4.15k|}
ofp-port.c:ntohll:
   35|   208k|{
   36|   208k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 208k]
  ------------------
   37|   208k|}
ofp-prop.c:ntohll:
   35|  1.41k|{
   36|  1.41k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 1.41k]
  ------------------
   37|  1.41k|}
ofp-prop.c:ntoh128:
   58|    707|{
   59|    707|    ovs_u128 dst;
   60|       |
   61|    707|    dst.u64.hi = ntohll(src.be64.hi);
   62|    707|    dst.u64.lo = ntohll(src.be64.lo);
   63|    707|    return dst;
   64|    707|}
ox-stat.c:ntohll:
   35|    913|{
   36|    913|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 913]
  ------------------
   37|    913|}
learn.c:ntohll:
   35|  10.2k|{
   36|  10.2k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 10.2k]
  ------------------
   37|  10.2k|}

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

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

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

ds_init:
   30|  1.72M|{
   31|       |    ds->string = NULL;
   32|  1.72M|    ds->length = 0;
   33|  1.72M|    ds->allocated = 0;
   34|  1.72M|}
ds_reserve:
   60|  8.74M|{
   61|  8.74M|    if (min_length > ds->allocated || !ds->string) {
  ------------------
  |  Branch (61:9): [True: 6.70M, False: 2.03M]
  |  Branch (61:39): [True: 0, False: 2.03M]
  ------------------
   62|  6.70M|        ds->allocated += MAX(min_length, ds->allocated);
  ------------------
  |  |   95|  6.70M|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (95:20): [True: 6.70M, False: 0]
  |  |  ------------------
  ------------------
   63|  6.70M|        ds->allocated = MAX(8, ds->allocated);
  ------------------
  |  |   95|  6.70M|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (95:20): [True: 18.9k, False: 6.68M]
  |  |  ------------------
  ------------------
   64|  6.70M|        ds->string = xrealloc(ds->string, ds->allocated + 1);
   65|  6.70M|    }
   66|  8.74M|}
ds_put_uninit:
   73|  4.81M|{
   74|  4.81M|    ds_reserve(ds, ds->length + n);
   75|  4.81M|    ds->length += n;
   76|  4.81M|    ds->string[ds->length] = '\0';
   77|  4.81M|    return &ds->string[ds->length - n];
   78|  4.81M|}
ds_put_char__:
   82|   344k|{
   83|   344k|    *ds_put_uninit(ds, 1) = c;
   84|   344k|}
ds_put_char_multiple:
  113|  7.54k|{
  114|  7.54k|    memset(ds_put_uninit(ds, n), c, n);
  115|  7.54k|}
ds_put_cstr:
  125|  4.46M|{
  126|  4.46M|    size_t s_len = strlen(s);
  127|  4.46M|    memcpy(ds_put_uninit(ds, s_len), s, s_len);
  128|  4.46M|}
ds_put_and_free_cstr:
  132|  1.27k|{
  133|  1.27k|    ds_put_cstr(ds, s);
  134|  1.27k|    free(s);
  135|  1.27k|}
ds_put_format:
  139|  78.0M|{
  140|  78.0M|    va_list args;
  141|       |
  142|  78.0M|    va_start(args, format);
  143|  78.0M|    ds_put_format_valist(ds, format, args);
  144|       |    va_end(args);
  145|  78.0M|}
ds_put_format_valist:
  149|  78.0M|{
  150|  78.0M|    va_list args;
  151|  78.0M|    size_t available;
  152|  78.0M|    int needed;
  153|       |
  154|  78.0M|    va_copy(args, args_);
  155|  78.0M|    available = ds->string ? ds->allocated - ds->length + 1 : 0;
  ------------------
  |  Branch (155:17): [True: 77.5M, False: 488k]
  ------------------
  156|  78.0M|    needed = vsnprintf(ds->string
  ------------------
  |  Branch (156:24): [True: 77.5M, False: 488k]
  ------------------
  157|  78.0M|                       ? &ds->string[ds->length]
  158|  78.0M|                       : NULL,
  159|  78.0M|                       available, format, args);
  160|  78.0M|    va_end(args);
  161|       |
  162|  78.0M|    if (needed < available) {
  ------------------
  |  Branch (162:9): [True: 74.1M, False: 3.87M]
  ------------------
  163|  74.1M|        ds->length += needed;
  164|  74.1M|    } else {
  165|  3.87M|        ds_reserve(ds, ds->length + needed);
  166|       |
  167|  3.87M|        va_copy(args, args_);
  168|  3.87M|        available = ds->allocated - ds->length + 1;
  169|  3.87M|        needed = vsnprintf(&ds->string[ds->length],
  170|  3.87M|                           available, format, args);
  171|  3.87M|        va_end(args);
  172|       |
  173|  3.87M|        ovs_assert(needed < available);
  ------------------
  |  |   62|  3.87M|#define ovs_assert ovs_ignore
  ------------------
  174|  3.87M|        ds->length += needed;
  175|  3.87M|    }
  176|  78.0M|}
ds_put_printable:
  180|  9.32k|{
  181|  9.32k|    ds_reserve(ds, ds->length + n);
  182|   300k|    while (n-- > 0) {
  ------------------
  |  Branch (182:12): [True: 291k, False: 9.32k]
  ------------------
  183|   291k|        unsigned char c = *s++;
  184|   291k|        if (c < 0x20 || c > 0x7e || c == '\\' || c == '"') {
  ------------------
  |  Branch (184:13): [True: 192k, False: 99.3k]
  |  Branch (184:25): [True: 53.0k, False: 46.2k]
  |  Branch (184:37): [True: 205, False: 46.0k]
  |  Branch (184:50): [True: 729, False: 45.3k]
  ------------------
  185|   246k|            ds_put_format(ds, "\\%03o", (int) c);
  186|   246k|        } else {
  187|  45.3k|            ds_put_char(ds, c);
  188|  45.3k|        }
  189|   291k|    }
  190|  9.32k|}
ds_cstr:
  343|  1.76M|{
  344|  1.76M|    if (!ds->string) {
  ------------------
  |  Branch (344:9): [True: 0, False: 1.76M]
  ------------------
  345|      0|        ds_reserve(ds, 0);
  346|      0|    }
  347|  1.76M|    ds->string[ds->length] = '\0';
  348|  1.76M|    return ds->string;
  349|  1.76M|}
ds_steal_cstr:
  362|  1.71M|{
  363|  1.71M|    char *s = ds_cstr(ds);
  364|  1.71M|    ds_init(ds);
  365|  1.71M|    return s;
  366|  1.71M|}
ds_destroy:
  370|    558|{
  371|    558|    free(ds->string);
  372|    558|}
ds_put_hex:
  385|  33.7k|{
  386|  33.7k|    const uint8_t *buf = buf_;
  387|  33.7k|    bool printed = false;
  388|  33.7k|    int i;
  389|       |
  390|  1.22M|    for (i = 0; i < size; i++) {
  ------------------
  |  Branch (390:17): [True: 1.19M, False: 33.7k]
  ------------------
  391|  1.19M|        uint8_t val = buf[i];
  392|  1.19M|        if (val || printed) {
  ------------------
  |  Branch (392:13): [True: 46.9k, False: 1.14M]
  |  Branch (392:20): [True: 10.1k, False: 1.13M]
  ------------------
  393|  57.1k|            if (!printed) {
  ------------------
  |  Branch (393:17): [True: 20.0k, False: 37.0k]
  ------------------
  394|  20.0k|                ds_put_format(ds, "0x%"PRIx8, val);
  395|  37.0k|            } else {
  396|  37.0k|                ds_put_format(ds, "%02"PRIx8, val);
  397|  37.0k|            }
  398|  57.1k|            printed = true;
  399|  57.1k|        }
  400|  1.19M|    }
  401|  33.7k|    if (!printed) {
  ------------------
  |  Branch (401:9): [True: 13.6k, False: 20.0k]
  ------------------
  402|  13.6k|        ds_put_char(ds, '0');
  403|  13.6k|    }
  404|  33.7k|}
ds_put_hex_with_delimiter:
  409|  4.19k|{
  410|  4.19k|    const uint8_t *buf = buf_;
  411|  4.19k|    size_t i;
  412|       |
  413|  32.6k|    for (i = 0; i < size; i++) {
  ------------------
  |  Branch (413:17): [True: 28.4k, False: 4.19k]
  ------------------
  414|  28.4k|        if (i && delimiter) {
  ------------------
  |  Branch (414:13): [True: 24.2k, False: 4.19k]
  |  Branch (414:18): [True: 24.2k, False: 0]
  ------------------
  415|  24.2k|            ds_put_format(ds, "%s", delimiter);
  416|  24.2k|        }
  417|       |        ds_put_format(ds, "%02" PRIx8, buf[i]);
  418|  28.4k|    }
  419|  4.19k|}
ds_put_hex_dump:
  484|  1.20M|{
  485|       |    ds_put_hex_dump__(ds, buf_, size, ofs, ascii, false);
  486|  1.20M|}
ds_last:
  499|  26.5k|{
  500|  26.5k|    return ds->length > 0 ? (unsigned char) ds->string[ds->length - 1] : EOF;
  ------------------
  |  Branch (500:12): [True: 26.5k, False: 0]
  ------------------
  501|  26.5k|}
ds_chomp:
  505|   816k|{
  506|   816k|    if (ds->length > 0 && ds->string[ds->length - 1] == (char) c) {
  ------------------
  |  Branch (506:9): [True: 816k, False: 0]
  |  Branch (506:27): [True: 220k, False: 596k]
  ------------------
  507|   220k|        ds->string[--ds->length] = '\0';
  508|   220k|        return true;
  509|   596k|    } else {
  510|       |        return false;
  511|   596k|    }
  512|   816k|}
dynamic-string.c:ds_put_hex_dump__:
  424|  1.20M|{
  425|  1.20M|    const uint8_t *buf = buf_;
  426|  1.20M|    const size_t per_line = 16; /* Maximum bytes per line. */
  427|       |
  428|  4.52M|    while (size > 0) {
  ------------------
  |  Branch (428:12): [True: 3.31M, False: 1.20M]
  ------------------
  429|  3.31M|        size_t start, end, n;
  430|  3.31M|        size_t i;
  431|       |
  432|       |        /* Number of bytes on this line. */
  433|  3.31M|        start = ofs % per_line;
  434|  3.31M|        end = per_line;
  435|  3.31M|        if (end - start > size)
  ------------------
  |  Branch (435:13): [True: 687k, False: 2.63M]
  ------------------
  436|   687k|            end = start + size;
  437|  3.31M|        n = end - start;
  438|       |
  439|  3.31M|        if (skip_zero_lines && is_all_zeros(&buf[start], n)) {
  ------------------
  |  Branch (439:13): [True: 0, False: 3.31M]
  |  Branch (439:32): [True: 0, False: 0]
  ------------------
  440|      0|            goto next;
  441|      0|        }
  442|       |
  443|       |        /* Print line. */
  444|  3.31M|        ds_put_format(ds, "%08"PRIxMAX"  ",
  445|  3.31M|                      (uintmax_t) ROUND_DOWN(ofs, per_line));
  ------------------
  |  |  309|  3.31M|#define ROUND_DOWN(X, Y) ((X) / (Y) * (Y))
  ------------------
  446|  3.31M|        for (i = 0; i < start; i++) {
  ------------------
  |  Branch (446:21): [True: 0, False: 3.31M]
  ------------------
  447|      0|            ds_put_format(ds, "   ");
  448|      0|        }
  449|  51.5M|        for (; i < end; i++) {
  ------------------
  |  Branch (449:16): [True: 48.2M, False: 3.31M]
  ------------------
  450|  48.2M|            ds_put_format(ds, "%02x%c",
  451|  48.2M|                          buf[i - start], i == per_line / 2 - 1? '-' : ' ');
  ------------------
  |  Branch (451:43): [True: 3.21M, False: 45.0M]
  ------------------
  452|  48.2M|        }
  453|  3.31M|        if (ascii) {
  ------------------
  |  Branch (453:13): [True: 3.31M, False: 0]
  ------------------
  454|  8.19M|            for (; i < per_line; i++)
  ------------------
  |  Branch (454:20): [True: 4.87M, False: 3.31M]
  ------------------
  455|  4.87M|                ds_put_format(ds, "   ");
  456|  3.31M|            ds_put_format(ds, "|");
  457|  3.31M|            for (i = 0; i < start; i++)
  ------------------
  |  Branch (457:25): [True: 0, False: 3.31M]
  ------------------
  458|      0|                ds_put_format(ds, " ");
  459|  51.5M|            for (; i < end; i++) {
  ------------------
  |  Branch (459:20): [True: 48.2M, False: 3.31M]
  ------------------
  460|  48.2M|                int c = buf[i - start];
  461|  48.2M|                ds_put_char(ds, c >= 32 && c < 127 ? c : '.');
  ------------------
  |  Branch (461:33): [True: 17.4M, False: 30.7M]
  |  Branch (461:44): [True: 8.39M, False: 9.09M]
  ------------------
  462|  48.2M|            }
  463|  8.19M|            for (; i < per_line; i++)
  ------------------
  |  Branch (463:20): [True: 4.87M, False: 3.31M]
  ------------------
  464|  4.87M|                ds_put_format(ds, " ");
  465|  3.31M|            ds_put_format(ds, "|");
  466|  3.31M|        } else {
  467|      0|            ds_chomp(ds, ' ');
  468|      0|        }
  469|  3.31M|        ds_put_format(ds, "\n");
  470|  3.31M|next:
  471|  3.31M|        ofs += n;
  472|  3.31M|        buf += n;
  473|  3.31M|        size -= n;
  474|  3.31M|    }
  475|  1.20M|}

parse_ipv6_ext_hdrs:
  605|  15.7k|{
  606|  15.7k|    return parse_ipv6_ext_hdrs__(datap, sizep, nw_proto, nw_frag,
  607|  15.7k|                                 frag_hdr, rt_hdr);
  608|  15.7k|}
parse_nsh:
  612|  8.50k|{
  613|  8.50k|    const struct nsh_hdr *nsh = (const struct nsh_hdr *) *datap;
  614|  8.50k|    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|  8.50k|    if (OVS_UNLIKELY(*sizep < NSH_BASE_HDR_LEN)) {
  ------------------
  |  |   66|  8.50k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 535, False: 7.97k]
  |  |  ------------------
  ------------------
  620|    535|        return false;
  621|    535|    }
  622|       |
  623|  7.97k|    version = nsh_get_ver(nsh);
  624|  7.97k|    flags = nsh_get_flags(nsh);
  625|  7.97k|    length = nsh_hdr_len(nsh);
  626|  7.97k|    ttl = nsh_get_ttl(nsh);
  627|       |
  628|  7.97k|    if (OVS_UNLIKELY(length > *sizep || version != 0)) {
  ------------------
  |  |   66|  13.4k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 2.53k, False: 5.43k]
  |  |  |  Branch (66:53): [True: 2.53k, False: 5.43k]
  |  |  |  Branch (66:53): [True: 2, False: 5.43k]
  |  |  ------------------
  ------------------
  629|  2.53k|        return false;
  630|  2.53k|    }
  631|       |
  632|  5.43k|    key->flags = flags;
  633|  5.43k|    key->ttl = ttl;
  634|  5.43k|    key->mdtype = nsh->md_type;
  635|  5.43k|    key->np = nsh->next_proto;
  636|  5.43k|    key->path_hdr = nsh_get_path_hdr(nsh);
  637|       |
  638|  5.43k|    switch (key->mdtype) {
  639|    785|        case NSH_M_TYPE1:
  ------------------
  |  |  251|    785|#define NSH_M_TYPE1     0x01
  ------------------
  |  Branch (639:9): [True: 785, False: 4.65k]
  ------------------
  640|    785|            if (length != NSH_M_TYPE1_LEN) {
  ------------------
  |  |  263|    785|#define NSH_M_TYPE1_LEN   24
  ------------------
  |  Branch (640:17): [True: 688, False: 97]
  ------------------
  641|    688|                return false;
  642|    688|            }
  643|    485|            for (size_t i = 0; i < 4; i++) {
  ------------------
  |  Branch (643:32): [True: 388, False: 97]
  ------------------
  644|    388|                key->context[i] = get_16aligned_be32(&nsh->md1.context[i]);
  645|    388|            }
  646|     97|            break;
  647|    223|        case NSH_M_TYPE2:
  ------------------
  |  |  252|    223|#define NSH_M_TYPE2     0x02
  ------------------
  |  Branch (647:9): [True: 223, False: 5.21k]
  ------------------
  648|       |            /* Don't support MD type 2 metedata parsing yet */
  649|    223|            if (length < NSH_BASE_HDR_LEN) {
  ------------------
  |  |  260|    223|#define NSH_BASE_HDR_LEN  8
  ------------------
  |  Branch (649:17): [True: 26, False: 197]
  ------------------
  650|     26|                return false;
  651|     26|            }
  652|       |
  653|    197|            memset(key->context, 0, sizeof(key->context));
  654|    197|            break;
  655|  4.42k|        default:
  ------------------
  |  Branch (655:9): [True: 4.42k, False: 1.00k]
  ------------------
  656|       |            /* We don't parse other context headers yet. */
  657|  4.42k|            memset(key->context, 0, sizeof(key->context));
  658|  4.42k|            break;
  659|  5.43k|    }
  660|       |
  661|  4.72k|    data_pull(datap, sizep, length);
  662|       |
  663|       |    return true;
  664|  5.43k|}
flow_extract:
  670|  52.7k|{
  671|  52.7k|    struct {
  672|  52.7k|        struct miniflow mf;
  673|  52.7k|        uint64_t buf[FLOW_U64S];
  674|  52.7k|    } m;
  675|       |
  676|  52.7k|    COVERAGE_INC(flow_extract);
  ------------------
  |  |   83|  52.7k|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  52.7k|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  677|       |
  678|  52.7k|    miniflow_extract(packet, &m.mf);
  679|  52.7k|    miniflow_expand(&m.mf, flow);
  680|  52.7k|}
miniflow_extract:
  797|  52.7k|{
  798|       |    /* Add code to this function (or its callees) to extract new fields. */
  799|  52.7k|    BUILD_ASSERT_DECL(FLOW_WC_SEQ == 43);
  ------------------
  |  |  270|  52.7k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  ------------------
  800|       |
  801|  52.7k|    const struct pkt_metadata *md = &packet->md;
  802|  52.7k|    const void *data = dp_packet_data(packet);
  803|  52.7k|    size_t size = dp_packet_size(packet);
  804|  52.7k|    ovs_be32 packet_type = packet->packet_type;
  805|  52.7k|    uint64_t *values = miniflow_values(dst);
  806|  52.7k|    struct mf_ctx mf = { FLOWMAP_EMPTY_INITIALIZER, values,
  ------------------
  |  |  286|  52.7k|#define FLOWMAP_EMPTY_INITIALIZER { { 0 } }
  ------------------
  807|  52.7k|                         values + FLOW_U64S };
  ------------------
  |  |  165|  52.7k|#define FLOW_U64S (sizeof(struct flow) / sizeof(uint64_t))
  ------------------
  808|  52.7k|    const char *frame;
  809|  52.7k|    ovs_be16 dl_type = OVS_BE16_MAX;
  ------------------
  |  |   42|  52.7k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  810|  52.7k|    uint8_t nw_frag, nw_tos, nw_ttl, nw_proto;
  811|  52.7k|    uint8_t *ct_nw_proto_p = NULL;
  812|  52.7k|    ovs_be16 ct_tp_src = 0, ct_tp_dst = 0;
  813|       |
  814|       |    /* Metadata. */
  815|  52.7k|    if (flow_tnl_dst_is_set(&md->tunnel)) {
  ------------------
  |  Branch (815:9): [True: 0, False: 52.7k]
  ------------------
  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|  52.7k|    if (md->skb_priority || md->pkt_mark) {
  ------------------
  |  Branch (837:9): [True: 0, False: 52.7k]
  |  Branch (837:29): [True: 0, False: 52.7k]
  ------------------
  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|  52.7k|    miniflow_push_uint32(mf, dp_hash, md->dp_hash);
  ------------------
  |  |  297|  52.7k|    miniflow_push_uint32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  179|  52.7k|    {                                           \
  |  |  |  |  180|  52.7k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  181|  52.7k|                                                \
  |  |  |  |  182|  52.7k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (182:9): [True: 52.7k, Folded]
  |  |  |  |  ------------------
  |  |  |  |  183|  52.7k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|  52.7k|    {                                        \
  |  |  |  |  |  |  160|  52.7k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  52.7k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  52.7k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  52.7k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  52.7k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|   105k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  52.7k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|   105k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|   105k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 52.7k, False: 52.7k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|  52.7k|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|  52.7k|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  52.7k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|  52.7k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|  52.7k|}
  |  |  |  |  ------------------
  |  |  |  |  184|  52.7k|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  185|  52.7k|    } 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|  52.7k|}
  |  |  ------------------
  ------------------
  842|  52.7k|    miniflow_push_uint32(mf, in_port, odp_to_u32(md->in_port.odp_port));
  ------------------
  |  |  297|  52.7k|    miniflow_push_uint32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  179|  52.7k|    {                                           \
  |  |  |  |  180|  52.7k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  181|  52.7k|                                                \
  |  |  |  |  182|  52.7k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (182:9): [Folded, False: 52.7k]
  |  |  |  |  ------------------
  |  |  |  |  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|  52.7k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:16): [True: 52.7k, Folded]
  |  |  |  |  ------------------
  |  |  |  |  186|  52.7k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|  52.7k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|  52.7k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  52.7k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  52.7k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  52.7k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  52.7k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|   105k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  52.7k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|   105k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|   105k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 52.7k, False: 52.7k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|  52.7k|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|  52.7k|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  52.7k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  52.7k|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  188|  52.7k|        MF.data++;                              \
  |  |  |  |  189|  52.7k|    }                                           \
  |  |  |  |  190|  52.7k|}
  |  |  ------------------
  ------------------
  843|  52.7k|    if (md->ct_state) {
  ------------------
  |  Branch (843:9): [True: 0, False: 52.7k]
  ------------------
  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|  52.7k|    } else {
  856|  52.7k|        if (md->recirc_id) {
  ------------------
  |  Branch (856:13): [True: 0, False: 52.7k]
  ------------------
  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|  52.7k|        miniflow_pad_from_64(mf, packet_type);
  ------------------
  |  |  315|  52.7k|    miniflow_pad_from_64_(MF, offsetof(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  241|  52.7k|#define miniflow_pad_from_64_(MF, OFS)                          \
  |  |  |  |  242|  52.7k|{                                                               \
  |  |  |  |  243|  52.7k|    MINIFLOW_ASSERT(MF.data < MF.end);                          \
  |  |  |  |  244|  52.7k|                                                                \
  |  |  |  |  245|  52.7k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  246|  52.7k|    miniflow_set_map(MF, OFS / 8);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|  52.7k|    {                                        \
  |  |  |  |  |  |  160|  52.7k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  52.7k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  52.7k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  52.7k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  52.7k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|   105k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  52.7k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|   105k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|   105k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 52.7k, False: 52.7k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|  52.7k|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|  52.7k|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  52.7k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|  52.7k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|  52.7k|}
  |  |  |  |  ------------------
  |  |  |  |  247|  52.7k|                                                                \
  |  |  |  |  248|  52.7k|    memset((uint8_t *)MF.data, 0, (OFS) % 8);                   \
  |  |  |  |  249|  52.7k|}
  |  |  ------------------
  ------------------
  861|  52.7k|        miniflow_push_be32(mf, packet_type, packet_type);
  ------------------
  |  |  300|  52.7k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  52.7k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  52.7k|    {                                           \
  |  |  |  |  |  |  180|  52.7k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  52.7k|                                                \
  |  |  |  |  |  |  182|  52.7k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded, False: 52.7k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|  52.7k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [True: 52.7k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|  52.7k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  52.7k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  52.7k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  52.7k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  52.7k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  52.7k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  52.7k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  52.7k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  52.7k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  52.7k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  52.7k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 52.7k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  52.7k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|  52.7k|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|  52.7k|        MF.data++;                              \
  |  |  |  |  |  |  189|  52.7k|    }                                           \
  |  |  |  |  |  |  190|  52.7k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  862|  52.7k|    }
  863|       |
  864|       |    /* Initialize packet's layer pointer and offsets. */
  865|  52.7k|    frame = data;
  866|  52.7k|    if (dp_packet_tunnel(packet)) {
  ------------------
  |  Branch (866:9): [True: 0, False: 52.7k]
  ------------------
  867|       |        /* Preserve inner offsets from previous circulation. */
  868|      0|        dp_packet_reset_outer_offsets(packet);
  869|  52.7k|    } else {
  870|  52.7k|        dp_packet_reset_offsets(packet);
  871|  52.7k|    }
  872|       |
  873|  52.7k|    if (packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (873:9): [True: 42.7k, False: 9.98k]
  ------------------
  874|       |        /* Must have full Ethernet header to proceed. */
  875|  42.7k|        if (OVS_UNLIKELY(size < sizeof(struct eth_header))) {
  ------------------
  |  |   66|  42.7k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 18.1k, False: 24.5k]
  |  |  ------------------
  ------------------
  876|  18.1k|            goto out;
  877|  24.5k|        } else {
  878|       |            /* Link layer. */
  879|  24.5k|            ASSERT_SEQUENTIAL(dl_dst, dl_src);
  ------------------
  |  |   71|  24.5k|    BUILD_ASSERT_DECL(offsetof(struct flow, f0)         \
  |  |  ------------------
  |  |  |  |  270|  24.5k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  |  |  ------------------
  |  |   72|  24.5k|                      + MEMBER_SIZEOF(struct flow, f0)  \
  |  |   73|  24.5k|                      == offsetof(struct flow, f1))
  ------------------
  880|  24.5k|            miniflow_push_macs(mf, dl_dst, data);
  ------------------
  |  |  324|  24.5k|    miniflow_push_macs_(MF, offsetof(struct flow, FIELD), VALUEP)
  |  |  ------------------
  |  |  |  |  289|  24.5k|#define miniflow_push_macs_(MF, OFS, VALUEP)                    \
  |  |  |  |  290|  24.5k|{                                                               \
  |  |  |  |  291|  24.5k|    miniflow_set_maps(MF, (OFS) / 8, 2);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|  24.5k|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|  24.5k|{                                                               \
  |  |  |  |  |  |  259|  24.5k|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|  24.5k|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|  24.5k|                                                                \
  |  |  |  |  |  |  262|  24.5k|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|  24.5k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  24.5k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  24.5k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  24.5k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  24.5k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  24.5k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  24.5k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  24.5k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  24.5k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 24.5k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  24.5k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  24.5k|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|  24.5k|}
  |  |  |  |  ------------------
  |  |  |  |  292|  24.5k|    memcpy(MF.data, (VALUEP), 2 * ETH_ADDR_LEN);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  205|  24.5k|#define ETH_ADDR_LEN           6
  |  |  |  |  ------------------
  |  |  |  |  293|  24.5k|    MF.data += 1;                   /* First word only. */      \
  |  |  |  |  294|  24.5k|}
  |  |  ------------------
  ------------------
  881|       |
  882|       |            /* VLAN */
  883|  24.5k|            union flow_vlan_hdr vlans[FLOW_MAX_VLAN_HEADERS];
  884|  24.5k|            size_t num_vlans = parse_vlan(&data, &size, vlans);
  885|       |
  886|  24.5k|            dl_type = parse_ethertype(&data, &size);
  887|  24.5k|            miniflow_push_be16(mf, dl_type, dl_type);
  ------------------
  |  |  306|  24.5k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  24.5k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  24.5k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  24.5k|{                                               \
  |  |  |  |  |  |  197|  24.5k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  24.5k|                                                \
  |  |  |  |  |  |  199|  24.5k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 24.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|  24.5k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 24.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|  24.5k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 24.5k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|  24.5k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  24.5k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  24.5k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  24.5k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  24.5k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  24.5k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  24.5k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  24.5k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  24.5k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  24.5k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  24.5k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 24.5k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  24.5k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|  24.5k|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|  24.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|  24.5k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  888|  24.5k|            miniflow_pad_to_64(mf, dl_type);
  ------------------
  |  |  312|  24.5k|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|  24.5k|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|  24.5k|{                                                               \
  |  |  |  |  234|  24.5k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|  24.5k|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|  24.5k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|  24.5k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  24.5k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  24.5k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  24.5k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  24.5k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  24.5k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  24.5k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  24.5k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  24.5k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 24.5k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  24.5k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|  24.5k|                                                                \
  |  |  |  |  237|  24.5k|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|  24.5k|    MF.data++;                                                  \
  |  |  |  |  239|  24.5k|}
  |  |  ------------------
  ------------------
  889|  24.5k|            if (num_vlans > 0) {
  ------------------
  |  Branch (889:17): [True: 714, False: 23.8k]
  ------------------
  890|    714|                miniflow_push_words_32(mf, vlans, vlans, num_vlans);
  ------------------
  |  |  321|    714|    miniflow_push_words_32_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  277|    714|#define miniflow_push_words_32_(MF, OFS, VALUEP, N_WORDS)               \
  |  |  |  |  278|    714|{                                                                       \
  |  |  |  |  279|    714|    miniflow_set_maps(MF, (OFS) / 8, DIV_ROUND_UP(N_WORDS, 2));         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|    714|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|    714|{                                                               \
  |  |  |  |  |  |  259|    714|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|    714|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|    714|                                                                \
  |  |  |  |  |  |  262|    714|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|    714|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    714|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    714|{                                                                       \
  |  |  |  |  |  |  |  |  151|    714|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    714|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    714|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    714|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    714|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    714|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 714]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    714|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    714|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|    714|}
  |  |  |  |  ------------------
  |  |  |  |  280|    714|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof(uint32_t));            \
  |  |  |  |  281|    714|    MF.data += DIV_ROUND_UP(N_WORDS, 2);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|    714|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  |  |  282|    714|    if ((N_WORDS) & 1) {                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (282:9): [True: 305, False: 409]
  |  |  |  |  ------------------
  |  |  |  |  283|    305|        *((uint32_t *)MF.data - 1) = 0;                                 \
  |  |  |  |  284|    305|    }                                                                   \
  |  |  |  |  285|    714|}
  |  |  ------------------
  ------------------
  891|    714|            }
  892|       |
  893|  24.5k|        }
  894|  42.7k|    } else {
  895|       |        /* Take dl_type from packet_type. */
  896|  9.98k|        dl_type = pt_ns_type_be(packet_type);
  897|  9.98k|        miniflow_pad_from_64(mf, dl_type);
  ------------------
  |  |  315|  9.98k|    miniflow_pad_from_64_(MF, offsetof(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  241|  9.98k|#define miniflow_pad_from_64_(MF, OFS)                          \
  |  |  |  |  242|  9.98k|{                                                               \
  |  |  |  |  243|  9.98k|    MINIFLOW_ASSERT(MF.data < MF.end);                          \
  |  |  |  |  244|  9.98k|                                                                \
  |  |  |  |  245|  9.98k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  246|  9.98k|    miniflow_set_map(MF, OFS / 8);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|  9.98k|    {                                        \
  |  |  |  |  |  |  160|  9.98k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  9.98k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  9.98k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  9.98k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  9.98k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  9.98k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  9.98k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  9.98k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  9.98k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 9.98k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  9.98k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|  9.98k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|  9.98k|}
  |  |  |  |  ------------------
  |  |  |  |  247|  9.98k|                                                                \
  |  |  |  |  248|  9.98k|    memset((uint8_t *)MF.data, 0, (OFS) % 8);                   \
  |  |  |  |  249|  9.98k|}
  |  |  ------------------
  ------------------
  898|  9.98k|        miniflow_push_be16(mf, dl_type, dl_type);
  ------------------
  |  |  306|  9.98k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  9.98k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  9.98k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  9.98k|{                                               \
  |  |  |  |  |  |  197|  9.98k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  9.98k|                                                \
  |  |  |  |  |  |  199|  9.98k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 9.98k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  9.98k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 9.98k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  9.98k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 9.98k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|  9.98k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  9.98k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  9.98k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  9.98k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  9.98k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  9.98k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  9.98k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  9.98k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  9.98k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  9.98k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  9.98k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 9.98k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  9.98k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|  9.98k|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|  9.98k|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|  9.98k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  899|       |        /* Do not push vlan_tci, pad instead */
  900|  9.98k|        miniflow_pad_to_64(mf, dl_type);
  ------------------
  |  |  312|  9.98k|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|  9.98k|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|  9.98k|{                                                               \
  |  |  |  |  234|  9.98k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|  9.98k|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|  9.98k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|  9.98k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  9.98k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  9.98k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  9.98k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  9.98k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  9.98k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  9.98k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  9.98k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  9.98k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 9.98k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  9.98k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|  9.98k|                                                                \
  |  |  |  |  237|  9.98k|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|  9.98k|    MF.data++;                                                  \
  |  |  |  |  239|  9.98k|}
  |  |  ------------------
  ------------------
  901|  9.98k|    }
  902|       |
  903|       |    /* Parse mpls. */
  904|  34.5k|    if (OVS_UNLIKELY(eth_type_mpls(dl_type))) {
  ------------------
  |  |   66|  34.5k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 458, False: 34.0k]
  |  |  ------------------
  ------------------
  905|    458|        int count;
  906|    458|        const void *mpls = data;
  907|       |
  908|    458|        packet->l2_5_ofs = (char *)data - frame;
  909|    458|        count = parse_mpls(&data, &size);
  910|    458|        miniflow_push_words_32(mf, mpls_lse, mpls, count);
  ------------------
  |  |  321|    458|    miniflow_push_words_32_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  277|    458|#define miniflow_push_words_32_(MF, OFS, VALUEP, N_WORDS)               \
  |  |  |  |  278|    458|{                                                                       \
  |  |  |  |  279|    458|    miniflow_set_maps(MF, (OFS) / 8, DIV_ROUND_UP(N_WORDS, 2));         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|    458|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|    458|{                                                               \
  |  |  |  |  |  |  259|    458|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|    458|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|    458|                                                                \
  |  |  |  |  |  |  262|    458|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|    458|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    458|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    458|{                                                                       \
  |  |  |  |  |  |  |  |  151|    458|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    458|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    458|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    458|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    458|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    458|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 458]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    458|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    458|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|    458|}
  |  |  |  |  ------------------
  |  |  |  |  280|    458|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof(uint32_t));            \
  |  |  |  |  281|    458|    MF.data += DIV_ROUND_UP(N_WORDS, 2);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|    458|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  |  |  282|    458|    if ((N_WORDS) & 1) {                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (282:9): [True: 151, False: 307]
  |  |  |  |  ------------------
  |  |  |  |  283|    151|        *((uint32_t *)MF.data - 1) = 0;                                 \
  |  |  |  |  284|    151|    }                                                                   \
  |  |  |  |  285|    458|}
  |  |  ------------------
  ------------------
  911|    458|    }
  912|       |
  913|       |    /* Network layer. */
  914|  34.5k|    packet->l3_ofs = (char *)data - frame;
  915|       |
  916|  34.5k|    nw_frag = 0;
  917|  34.5k|    if (OVS_LIKELY(dl_type == htons(ETH_TYPE_IP))) {
  ------------------
  |  |   65|  34.5k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 1.30k, False: 33.2k]
  |  |  ------------------
  ------------------
  918|  1.30k|        const struct ip_header *nh = data;
  919|  1.30k|        int ip_len;
  920|  1.30k|        uint16_t tot_len;
  921|       |
  922|  1.30k|        if (OVS_UNLIKELY(!ipv4_sanity_check(nh, size, &ip_len, &tot_len))) {
  ------------------
  |  |   66|  1.30k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 248, False: 1.06k]
  |  |  ------------------
  ------------------
  923|    248|            if (OVS_UNLIKELY(VLOG_IS_DBG_ENABLED())) {
  ------------------
  |  |   66|    248|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 0, False: 248]
  |  |  ------------------
  ------------------
  924|      0|                dump_invalid_packet(packet, "ipv4_sanity_check");
  925|      0|            }
  926|    248|            goto out;
  927|    248|        }
  928|  1.06k|        dp_packet_set_l2_pad_size(packet, size - tot_len);
  929|  1.06k|        size = tot_len;   /* Never pull padding. */
  930|       |
  931|       |        /* Push both source and destination address at once. */
  932|  1.06k|        miniflow_push_words(mf, nw_src, &nh->ip_src, 1);
  ------------------
  |  |  318|  1.06k|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|  1.06k|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|  1.06k|{                                                               \
  |  |  |  |  270|  1.06k|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|  1.06k|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|  1.06k|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|  1.06k|{                                                               \
  |  |  |  |  |  |  259|  1.06k|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|  1.06k|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|  1.06k|                                                                \
  |  |  |  |  |  |  262|  1.06k|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|  1.06k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  1.06k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  1.06k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  1.06k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  1.06k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  1.06k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  1.06k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  1.06k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  1.06k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.06k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  1.06k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  1.06k|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|  1.06k|}
  |  |  |  |  ------------------
  |  |  |  |  272|  1.06k|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|  1.06k|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|  1.06k|}
  |  |  ------------------
  ------------------
  933|  1.06k|        if (ct_nw_proto_p && !md->ct_orig_tuple_ipv6) {
  ------------------
  |  Branch (933:13): [True: 0, False: 1.06k]
  |  Branch (933:30): [True: 0, False: 0]
  ------------------
  934|      0|            *ct_nw_proto_p = md->ct_orig_tuple.ipv4.ipv4_proto;
  935|      0|            if (*ct_nw_proto_p) {
  ------------------
  |  Branch (935:17): [True: 0, False: 0]
  ------------------
  936|      0|                miniflow_push_words(mf, ct_nw_src,
  ------------------
  |  |  318|      0|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|      0|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|      0|{                                                               \
  |  |  |  |  270|      0|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|      0|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|      0|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|      0|{                                                               \
  |  |  |  |  |  |  259|      0|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|      0|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|      0|                                                                \
  |  |  |  |  |  |  262|      0|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|      0|}
  |  |  |  |  ------------------
  |  |  |  |  272|      0|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|      0|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|      0|}
  |  |  ------------------
  ------------------
  937|      0|                                    &md->ct_orig_tuple.ipv4.ipv4_src, 1);
  938|      0|                ct_tp_src = md->ct_orig_tuple.ipv4.src_port;
  939|      0|                ct_tp_dst = md->ct_orig_tuple.ipv4.dst_port;
  940|      0|            }
  941|      0|        }
  942|       |
  943|  1.06k|        miniflow_push_be32(mf, ipv6_label, 0); /* Padding for IPv4. */
  ------------------
  |  |  300|  1.06k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  1.06k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  1.06k|    {                                           \
  |  |  |  |  |  |  180|  1.06k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  1.06k|                                                \
  |  |  |  |  |  |  182|  1.06k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 1.06k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|  1.06k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  1.06k|    {                                        \
  |  |  |  |  |  |  |  |  160|  1.06k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  1.06k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  1.06k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  1.06k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  1.06k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  1.06k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  1.06k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  1.06k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  1.06k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.06k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  1.06k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  1.06k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  1.06k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|  1.06k|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|  1.06k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  |  |  190|  1.06k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  944|       |
  945|  1.06k|        nw_tos = nh->ip_tos;
  946|  1.06k|        nw_ttl = nh->ip_ttl;
  947|  1.06k|        nw_proto = nh->ip_proto;
  948|  1.06k|        nw_frag = ipv4_get_nw_frag(nh);
  949|  1.06k|        data_pull(&data, &size, ip_len);
  950|  33.2k|    } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (950:16): [True: 16.5k, False: 16.7k]
  ------------------
  951|  16.5k|        const struct ovs_16aligned_ip6_hdr *nh = data;
  952|  16.5k|        ovs_be32 tc_flow;
  953|  16.5k|        uint16_t plen;
  954|       |
  955|  16.5k|        if (OVS_UNLIKELY(!ipv6_sanity_check(nh, size))) {
  ------------------
  |  |   66|  16.5k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 800, False: 15.7k]
  |  |  ------------------
  ------------------
  956|    800|            if (OVS_UNLIKELY(VLOG_IS_DBG_ENABLED())) {
  ------------------
  |  |   66|    800|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 0, False: 800]
  |  |  ------------------
  ------------------
  957|      0|                dump_invalid_packet(packet, "ipv6_sanity_check");
  958|      0|            }
  959|    800|            goto out;
  960|    800|        }
  961|  15.7k|        data_pull(&data, &size, sizeof *nh);
  962|  15.7k|        plen = ntohs(nh->ip6_plen);
  963|  15.7k|        dp_packet_set_l2_pad_size(packet, size - plen);
  964|  15.7k|        size = plen;   /* Never pull padding. */
  965|       |
  966|  15.7k|        miniflow_push_words(mf, ipv6_src, &nh->ip6_src,
  ------------------
  |  |  318|  15.7k|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|  15.7k|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|  15.7k|{                                                               \
  |  |  |  |  270|  15.7k|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|  15.7k|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|  15.7k|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|  15.7k|{                                                               \
  |  |  |  |  |  |  259|  15.7k|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|  15.7k|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|  15.7k|                                                                \
  |  |  |  |  |  |  262|  15.7k|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|  15.7k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  15.7k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  15.7k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  15.7k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  15.7k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  15.7k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  15.7k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  15.7k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  15.7k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 15.7k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  15.7k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  15.7k|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|  15.7k|}
  |  |  |  |  ------------------
  |  |  |  |  272|  15.7k|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|  15.7k|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|  15.7k|}
  |  |  ------------------
  ------------------
  967|  15.7k|                            sizeof nh->ip6_src / 8);
  968|  15.7k|        miniflow_push_words(mf, ipv6_dst, &nh->ip6_dst,
  ------------------
  |  |  318|  15.7k|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|  15.7k|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|  15.7k|{                                                               \
  |  |  |  |  270|  15.7k|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|  15.7k|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|  15.7k|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|  15.7k|{                                                               \
  |  |  |  |  |  |  259|  15.7k|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|  15.7k|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|  15.7k|                                                                \
  |  |  |  |  |  |  262|  15.7k|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|  15.7k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  15.7k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  15.7k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  15.7k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  15.7k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  15.7k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  15.7k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  15.7k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  15.7k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 15.7k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  15.7k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  15.7k|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|  15.7k|}
  |  |  |  |  ------------------
  |  |  |  |  272|  15.7k|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|  15.7k|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|  15.7k|}
  |  |  ------------------
  ------------------
  969|  15.7k|                            sizeof nh->ip6_dst / 8);
  970|  15.7k|        if (ct_nw_proto_p && md->ct_orig_tuple_ipv6) {
  ------------------
  |  Branch (970:13): [True: 0, False: 15.7k]
  |  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|  15.7k|        tc_flow = get_16aligned_be32(&nh->ip6_flow);
  983|  15.7k|        nw_tos = ntohl(tc_flow) >> 20;
  984|  15.7k|        nw_ttl = nh->ip6_hlim;
  985|  15.7k|        nw_proto = nh->ip6_nxt;
  986|       |
  987|  15.7k|        if (!parse_ipv6_ext_hdrs(&data, &size, &nw_proto, &nw_frag,
  ------------------
  |  Branch (987:13): [True: 1.67k, False: 14.0k]
  ------------------
  988|  15.7k|                                 NULL, NULL)) {
  989|  1.67k|            goto out;
  990|  1.67k|        }
  991|       |
  992|       |        /* This needs to be after the parse_ipv6_ext_hdrs__() call because it
  993|       |         * leaves the nw_frag word uninitialized. */
  994|  14.0k|        ASSERT_SEQUENTIAL(ipv6_label, nw_frag);
  ------------------
  |  |   71|  14.0k|    BUILD_ASSERT_DECL(offsetof(struct flow, f0)         \
  |  |  ------------------
  |  |  |  |  270|  14.0k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  |  |  ------------------
  |  |   72|  14.0k|                      + MEMBER_SIZEOF(struct flow, f0)  \
  |  |   73|  14.0k|                      == offsetof(struct flow, f1))
  ------------------
  995|  14.0k|        ovs_be32 label = tc_flow & htonl(IPV6_LABEL_MASK);
  996|  14.0k|        miniflow_push_be32(mf, ipv6_label, label);
  ------------------
  |  |  300|  14.0k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  14.0k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  14.0k|    {                                           \
  |  |  |  |  |  |  180|  14.0k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  14.0k|                                                \
  |  |  |  |  |  |  182|  14.0k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 14.0k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|  14.0k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  14.0k|    {                                        \
  |  |  |  |  |  |  |  |  160|  14.0k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  14.0k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  14.0k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  14.0k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  14.0k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  14.0k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  14.0k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  14.0k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  14.0k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 14.0k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  14.0k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  14.0k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  14.0k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|  14.0k|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|  14.0k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  |  |  190|  14.0k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  997|  16.7k|    } else {
  998|  16.7k|        if (dl_type == htons(ETH_TYPE_ARP) ||
  ------------------
  |  Branch (998:13): [True: 358, False: 16.3k]
  ------------------
  999|  16.3k|            dl_type == htons(ETH_TYPE_RARP)) {
  ------------------
  |  Branch (999:13): [True: 323, False: 16.0k]
  ------------------
 1000|    681|            struct eth_addr arp_buf[2];
 1001|    681|            const struct arp_eth_header *arp = (const struct arp_eth_header *)
 1002|    681|                data_try_pull(&data, &size, ARP_ETH_HEADER_LEN);
  ------------------
  |  |  957|    681|#define ARP_ETH_HEADER_LEN 28
  ------------------
 1003|       |
 1004|    681|            if (OVS_LIKELY(arp) && OVS_LIKELY(arp->ar_hrd == htons(1))
  ------------------
  |  |   65|  1.36k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 331, False: 350]
  |  |  ------------------
  ------------------
                          if (OVS_LIKELY(arp) && OVS_LIKELY(arp->ar_hrd == htons(1))
  ------------------
  |  |   65|  1.01k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 302, False: 29]
  |  |  ------------------
  ------------------
 1005|    302|                && OVS_LIKELY(arp->ar_pro == htons(ETH_TYPE_IP))
  ------------------
  |  |   65|    983|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 250, False: 52]
  |  |  ------------------
  ------------------
 1006|    250|                && OVS_LIKELY(arp->ar_hln == ETH_ADDR_LEN)
  ------------------
  |  |   65|    931|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 232, False: 18]
  |  |  ------------------
  ------------------
 1007|    232|                && OVS_LIKELY(arp->ar_pln == 4)) {
  ------------------
  |  |   65|    232|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 189, False: 43]
  |  |  ------------------
  ------------------
 1008|    189|                miniflow_push_be32(mf, nw_src,
  ------------------
  |  |  300|    189|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|    189|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|    189|    {                                           \
  |  |  |  |  |  |  180|    189|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|    189|                                                \
  |  |  |  |  |  |  182|    189|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 189, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|    189|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    189|    {                                        \
  |  |  |  |  |  |  |  |  160|    189|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    189|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    189|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    189|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    189|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    189|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    189|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    189|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    189|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 189]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    189|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    189|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    189|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|    189|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|    189|    } 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|    189|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1009|    189|                                   get_16aligned_be32(&arp->ar_spa));
 1010|    189|                miniflow_push_be32(mf, nw_dst,
  ------------------
  |  |  300|    189|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|    189|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|    189|    {                                           \
  |  |  |  |  |  |  180|    189|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|    189|                                                \
  |  |  |  |  |  |  182|    189|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded, False: 189]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    189|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [True: 189, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|    189|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    189|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    189|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    189|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    189|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    189|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    189|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    189|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    189|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    189|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    189|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 189]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    189|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|    189|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|    189|        MF.data++;                              \
  |  |  |  |  |  |  189|    189|    }                                           \
  |  |  |  |  |  |  190|    189|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1011|    189|                                   get_16aligned_be32(&arp->ar_tpa));
 1012|       |
 1013|       |                /* We only match on the lower 8 bits of the opcode. */
 1014|    189|                if (OVS_LIKELY(ntohs(arp->ar_op) <= 0xff)) {
  ------------------
  |  |   65|    189|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 10, False: 179]
  |  |  ------------------
  ------------------
 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|    189|                ASSERT_SEQUENTIAL(arp_sha, arp_tha);
  ------------------
  |  |   71|    189|    BUILD_ASSERT_DECL(offsetof(struct flow, f0)         \
  |  |  ------------------
  |  |  |  |  270|    189|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  |  |  ------------------
  |  |   72|    189|                      + MEMBER_SIZEOF(struct flow, f0)  \
  |  |   73|    189|                      == offsetof(struct flow, f1))
  ------------------
 1021|       |
 1022|    189|                arp_buf[0] = arp->ar_sha;
 1023|    189|                arp_buf[1] = arp->ar_tha;
 1024|    189|                miniflow_push_macs(mf, arp_sha, arp_buf);
  ------------------
  |  |  324|    189|    miniflow_push_macs_(MF, offsetof(struct flow, FIELD), VALUEP)
  |  |  ------------------
  |  |  |  |  289|    189|#define miniflow_push_macs_(MF, OFS, VALUEP)                    \
  |  |  |  |  290|    189|{                                                               \
  |  |  |  |  291|    189|    miniflow_set_maps(MF, (OFS) / 8, 2);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|    189|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|    189|{                                                               \
  |  |  |  |  |  |  259|    189|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|    189|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|    189|                                                                \
  |  |  |  |  |  |  262|    189|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|    189|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    189|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    189|{                                                                       \
  |  |  |  |  |  |  |  |  151|    189|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    189|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    189|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    189|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    189|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    189|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 189]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    189|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    189|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|    189|}
  |  |  |  |  ------------------
  |  |  |  |  292|    189|    memcpy(MF.data, (VALUEP), 2 * ETH_ADDR_LEN);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  205|    189|#define ETH_ADDR_LEN           6
  |  |  |  |  ------------------
  |  |  |  |  293|    189|    MF.data += 1;                   /* First word only. */      \
  |  |  |  |  294|    189|}
  |  |  ------------------
  ------------------
 1025|    189|                miniflow_pad_to_64(mf, arp_tha);
  ------------------
  |  |  312|    189|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|    189|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|    189|{                                                               \
  |  |  |  |  234|    189|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|    189|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|    189|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|    189|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    189|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    189|{                                                                       \
  |  |  |  |  |  |  |  |  151|    189|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    189|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    189|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    189|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    189|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    189|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 189]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    189|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|    189|                                                                \
  |  |  |  |  237|    189|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|    189|    MF.data++;                                                  \
  |  |  |  |  239|    189|}
  |  |  ------------------
  ------------------
 1026|    189|            }
 1027|  16.0k|        } else if (dl_type == htons(ETH_TYPE_NSH)) {
  ------------------
  |  Branch (1027:20): [True: 8.50k, False: 7.54k]
  ------------------
 1028|  8.50k|            struct ovs_key_nsh nsh;
 1029|       |
 1030|  8.50k|            if (OVS_LIKELY(parse_nsh(&data, &size, &nsh))) {
  ------------------
  |  |   65|  8.50k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 4.72k, False: 3.78k]
  |  |  ------------------
  ------------------
 1031|  4.72k|                miniflow_push_words(mf, nsh, &nsh,
  ------------------
  |  |  318|  4.72k|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|  4.72k|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|  4.72k|{                                                               \
  |  |  |  |  270|  4.72k|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|  4.72k|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|  4.72k|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|  4.72k|{                                                               \
  |  |  |  |  |  |  259|  4.72k|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|  4.72k|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|  4.72k|                                                                \
  |  |  |  |  |  |  262|  4.72k|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|  4.72k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  4.72k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  4.72k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  4.72k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  4.72k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  4.72k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  4.72k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  4.72k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  4.72k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 4.72k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  4.72k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  4.72k|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|  4.72k|}
  |  |  |  |  ------------------
  |  |  |  |  272|  4.72k|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|  4.72k|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|  4.72k|}
  |  |  ------------------
  ------------------
 1032|  4.72k|                                    sizeof(struct ovs_key_nsh) /
 1033|  4.72k|                                    sizeof(uint64_t));
 1034|  4.72k|            }
 1035|  8.50k|        }
 1036|  16.7k|        goto out;
 1037|  16.7k|    }
 1038|       |
 1039|  15.1k|    packet->l4_ofs = (char *)data - frame;
 1040|  15.1k|    miniflow_push_be32(mf, nw_frag,
  ------------------
  |  |  300|  15.1k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  15.1k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  15.1k|    {                                           \
  |  |  |  |  |  |  180|  15.1k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  15.1k|                                                \
  |  |  |  |  |  |  182|  15.1k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded, False: 15.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|  15.1k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [True: 15.1k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|  15.1k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  15.1k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  15.1k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  15.1k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  15.1k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  15.1k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  15.1k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  15.1k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  15.1k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  15.1k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  15.1k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 15.1k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  15.1k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|  15.1k|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|  15.1k|        MF.data++;                              \
  |  |  |  |  |  |  189|  15.1k|    }                                           \
  |  |  |  |  |  |  190|  15.1k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1041|  15.1k|                       bytes_to_be32(nw_frag, nw_tos, nw_ttl, nw_proto));
 1042|       |
 1043|  15.1k|    if (OVS_LIKELY(!(nw_frag & FLOW_NW_FRAG_LATER))) {
  ------------------
  |  |   65|  15.1k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 14.7k, False: 308]
  |  |  ------------------
  ------------------
 1044|  14.7k|        if (OVS_LIKELY(nw_proto == IPPROTO_TCP)) {
  ------------------
  |  |   65|  14.7k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 7.93k, False: 6.85k]
  |  |  ------------------
  ------------------
 1045|  7.93k|            if (OVS_LIKELY(size >= TCP_HEADER_LEN)) {
  ------------------
  |  |   65|  7.93k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 7.86k, False: 67]
  |  |  ------------------
  ------------------
 1046|  7.86k|                const struct tcp_header *tcp = data;
 1047|  7.86k|                size_t tcp_hdr_len = TCP_OFFSET(tcp->tcp_ctl) * 4;
  ------------------
  |  |  906|  7.86k|#define TCP_OFFSET(tcp_ctl) (ntohs(tcp_ctl) >> 12)
  ------------------
 1048|       |
 1049|  7.86k|                if (OVS_LIKELY(tcp_hdr_len >= TCP_HEADER_LEN)
  ------------------
  |  |   65|  15.7k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 6.84k, False: 1.02k]
  |  |  ------------------
  ------------------
 1050|  6.84k|                    && OVS_LIKELY(size >= tcp_hdr_len)) {
  ------------------
  |  |   65|  6.84k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 6.82k, False: 18]
  |  |  ------------------
  ------------------
 1051|       |                    /* tcp_flags are not at the beginning of the block. */
 1052|  6.82k|                    miniflow_pad_from_64(mf, tcp_flags);
  ------------------
  |  |  315|  6.82k|    miniflow_pad_from_64_(MF, offsetof(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  241|  6.82k|#define miniflow_pad_from_64_(MF, OFS)                          \
  |  |  |  |  242|  6.82k|{                                                               \
  |  |  |  |  243|  6.82k|    MINIFLOW_ASSERT(MF.data < MF.end);                          \
  |  |  |  |  244|  6.82k|                                                                \
  |  |  |  |  245|  6.82k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  246|  6.82k|    miniflow_set_map(MF, OFS / 8);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|  6.82k|    {                                        \
  |  |  |  |  |  |  160|  6.82k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  6.82k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  6.82k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  6.82k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  6.82k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  6.82k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  6.82k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  6.82k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  6.82k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 6.82k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  6.82k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|  6.82k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|  6.82k|}
  |  |  |  |  ------------------
  |  |  |  |  247|  6.82k|                                                                \
  |  |  |  |  248|  6.82k|    memset((uint8_t *)MF.data, 0, (OFS) % 8);                   \
  |  |  |  |  249|  6.82k|}
  |  |  ------------------
  ------------------
 1053|  6.82k|                    miniflow_push_be32(mf, tcp_flags,
  ------------------
  |  |  300|  6.82k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  6.82k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  6.82k|    {                                           \
  |  |  |  |  |  |  180|  6.82k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  6.82k|                                                \
  |  |  |  |  |  |  182|  6.82k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded, False: 6.82k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|  6.82k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [True: 6.82k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|  6.82k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  6.82k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  6.82k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  6.82k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  6.82k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  6.82k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  6.82k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  6.82k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  6.82k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  6.82k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  6.82k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 6.82k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  6.82k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|  6.82k|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|  6.82k|        MF.data++;                              \
  |  |  |  |  |  |  189|  6.82k|    }                                           \
  |  |  |  |  |  |  190|  6.82k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1054|  6.82k|                                       TCP_FLAGS_BE32(tcp->tcp_ctl));
 1055|  6.82k|                    miniflow_push_be16(mf, tp_src, tcp->tcp_src);
  ------------------
  |  |  306|  6.82k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  6.82k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  6.82k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  6.82k|{                                               \
  |  |  |  |  |  |  197|  6.82k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  6.82k|                                                \
  |  |  |  |  |  |  199|  6.82k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 6.82k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|  6.82k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  6.82k|    {                                        \
  |  |  |  |  |  |  |  |  160|  6.82k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  6.82k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  6.82k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  6.82k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  6.82k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  6.82k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  6.82k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  6.82k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  6.82k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 6.82k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  6.82k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  6.82k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  6.82k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|  6.82k|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  6.82k|    } 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|  6.82k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1056|  6.82k|                    miniflow_push_be16(mf, tp_dst, tcp->tcp_dst);
  ------------------
  |  |  306|  6.82k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  6.82k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  6.82k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  6.82k|{                                               \
  |  |  |  |  |  |  197|  6.82k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  6.82k|                                                \
  |  |  |  |  |  |  199|  6.82k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 6.82k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|  6.82k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 6.82k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|  6.82k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  6.82k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  6.82k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  6.82k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  6.82k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  6.82k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  6.82k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  6.82k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  6.82k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  6.82k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  6.82k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 6.82k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  6.82k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|  6.82k|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  6.82k|    } 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|  6.82k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1057|  6.82k|                    miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|  6.82k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  6.82k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  6.82k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  6.82k|{                                               \
  |  |  |  |  |  |  197|  6.82k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  6.82k|                                                \
  |  |  |  |  |  |  199|  6.82k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 6.82k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|  6.82k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 6.82k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|  6.82k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 6.82k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|  6.82k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  6.82k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  6.82k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  6.82k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  6.82k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  6.82k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  6.82k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  6.82k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  6.82k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  6.82k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  6.82k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 6.82k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  6.82k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|  6.82k|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|  6.82k|    } 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|  6.82k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1058|  6.82k|                    miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|  6.82k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  6.82k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  6.82k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  6.82k|{                                               \
  |  |  |  |  |  |  197|  6.82k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  6.82k|                                                \
  |  |  |  |  |  |  199|  6.82k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 6.82k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|  6.82k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 6.82k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|  6.82k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 6.82k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|  6.82k|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [True: 6.82k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|  6.82k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  6.82k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  6.82k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  6.82k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  6.82k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  6.82k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  6.82k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  6.82k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  6.82k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  6.82k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  6.82k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 6.82k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  6.82k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|  6.82k|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|  6.82k|        MF.data++;                              \
  |  |  |  |  |  |  212|  6.82k|    }                                           \
  |  |  |  |  |  |  213|  6.82k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1059|  6.82k|                    if (dl_type == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (1059:25): [True: 447, False: 6.37k]
  ------------------
 1060|    447|                        dp_packet_update_rss_hash_ipv4_tcp_udp(packet);
 1061|  6.37k|                    } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1061:32): [True: 6.37k, False: 0]
  ------------------
 1062|  6.37k|                        dp_packet_update_rss_hash_ipv6_tcp_udp(packet);
 1063|  6.37k|                    }
 1064|  6.82k|                    dp_packet_l4_proto_set_tcp(packet);
 1065|  6.82k|                }
 1066|  7.86k|            }
 1067|  7.93k|        } else if (OVS_LIKELY(nw_proto == IPPROTO_UDP)) {
  ------------------
  |  |   65|  6.85k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 504, False: 6.35k]
  |  |  ------------------
  ------------------
 1068|    504|            if (OVS_LIKELY(size >= UDP_HEADER_LEN)) {
  ------------------
  |  |   65|    504|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 486, False: 18]
  |  |  ------------------
  ------------------
 1069|    486|                const struct udp_header *udp = data;
 1070|       |
 1071|    486|                miniflow_push_be16(mf, tp_src, udp->udp_src);
  ------------------
  |  |  306|    486|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    486|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    486|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    486|{                                               \
  |  |  |  |  |  |  197|    486|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    486|                                                \
  |  |  |  |  |  |  199|    486|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 486, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|    486|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    486|    {                                        \
  |  |  |  |  |  |  |  |  160|    486|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    486|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    486|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    486|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    486|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    486|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    486|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    486|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    486|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 486]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    486|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    486|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    486|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|    486|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    486|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|    486|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1072|    486|                miniflow_push_be16(mf, tp_dst, udp->udp_dst);
  ------------------
  |  |  306|    486|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    486|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    486|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    486|{                                               \
  |  |  |  |  |  |  197|    486|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    486|                                                \
  |  |  |  |  |  |  199|    486|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 486]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    486|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 486, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|    486|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    486|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    486|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    486|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    486|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    486|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    486|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    486|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    486|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    486|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    486|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 486]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    486|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|    486|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    486|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|    486|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1073|    486|                miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|    486|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    486|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    486|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    486|{                                               \
  |  |  |  |  |  |  197|    486|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    486|                                                \
  |  |  |  |  |  |  199|    486|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 486]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    486|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 486]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    486|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 486, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|    486|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    486|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    486|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    486|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    486|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    486|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    486|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    486|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    486|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    486|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    486|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 486]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    486|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|    486|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|    486|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|    486|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1074|    486|                miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|    486|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    486|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    486|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    486|{                                               \
  |  |  |  |  |  |  197|    486|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    486|                                                \
  |  |  |  |  |  |  199|    486|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 486]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    486|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 486]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    486|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 486]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|    486|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [True: 486, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|    486|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    486|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    486|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    486|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    486|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    486|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    486|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    486|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    486|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    486|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    486|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 486]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    486|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|    486|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|    486|        MF.data++;                              \
  |  |  |  |  |  |  212|    486|    }                                           \
  |  |  |  |  |  |  213|    486|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1075|    486|                if (dl_type == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (1075:21): [True: 288, False: 198]
  ------------------
 1076|    288|                    dp_packet_update_rss_hash_ipv4_tcp_udp(packet);
 1077|    288|                } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1077:28): [True: 198, False: 0]
  ------------------
 1078|    198|                    dp_packet_update_rss_hash_ipv6_tcp_udp(packet);
 1079|    198|                }
 1080|    486|                dp_packet_l4_proto_set_udp(packet);
 1081|    486|            }
 1082|  6.35k|        } else if (OVS_LIKELY(nw_proto == IPPROTO_SCTP)) {
  ------------------
  |  |   65|  6.35k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 628, False: 5.72k]
  |  |  ------------------
  ------------------
 1083|    628|            if (OVS_LIKELY(size >= SCTP_HEADER_LEN)) {
  ------------------
  |  |   65|    628|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 588, False: 40]
  |  |  ------------------
  ------------------
 1084|    588|                const struct sctp_header *sctp = data;
 1085|       |
 1086|    588|                miniflow_push_be16(mf, tp_src, sctp->sctp_src);
  ------------------
  |  |  306|    588|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    588|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    588|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    588|{                                               \
  |  |  |  |  |  |  197|    588|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    588|                                                \
  |  |  |  |  |  |  199|    588|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 588, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|    588|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    588|    {                                        \
  |  |  |  |  |  |  |  |  160|    588|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    588|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    588|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    588|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    588|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    588|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    588|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    588|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    588|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 588]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    588|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    588|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    588|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|    588|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    588|    } 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|    588|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1087|    588|                miniflow_push_be16(mf, tp_dst, sctp->sctp_dst);
  ------------------
  |  |  306|    588|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    588|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    588|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    588|{                                               \
  |  |  |  |  |  |  197|    588|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    588|                                                \
  |  |  |  |  |  |  199|    588|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 588]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    588|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 588, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|    588|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    588|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    588|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    588|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    588|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    588|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    588|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    588|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    588|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    588|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    588|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 588]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    588|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|    588|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    588|    } 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|    588|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1088|    588|                miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|    588|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    588|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    588|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    588|{                                               \
  |  |  |  |  |  |  197|    588|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    588|                                                \
  |  |  |  |  |  |  199|    588|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 588]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    588|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 588]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    588|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 588, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|    588|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    588|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    588|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    588|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    588|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    588|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    588|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    588|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    588|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    588|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    588|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 588]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    588|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|    588|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|    588|    } 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|    588|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1089|    588|                miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|    588|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    588|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    588|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    588|{                                               \
  |  |  |  |  |  |  197|    588|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    588|                                                \
  |  |  |  |  |  |  199|    588|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 588]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    588|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 588]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    588|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 588]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    588|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [True: 588, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|    588|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    588|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    588|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    588|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    588|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    588|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    588|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    588|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    588|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    588|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    588|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 588]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    588|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|    588|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|    588|        MF.data++;                              \
  |  |  |  |  |  |  212|    588|    }                                           \
  |  |  |  |  |  |  213|    588|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1090|    588|                dp_packet_l4_proto_set_sctp(packet);
 1091|    588|            }
 1092|  5.72k|        } else if (OVS_LIKELY(nw_proto == IPPROTO_ICMP)) {
  ------------------
  |  |   65|  5.72k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 2.80k, False: 2.91k]
  |  |  ------------------
  ------------------
 1093|  2.80k|            if (OVS_LIKELY(size >= ICMP_HEADER_LEN)) {
  ------------------
  |  |   65|  2.80k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 2.65k, False: 151]
  |  |  ------------------
  ------------------
 1094|  2.65k|                const struct icmp_header *icmp = data;
 1095|       |
 1096|  2.65k|                miniflow_push_be16(mf, tp_src, htons(icmp->icmp_type));
  ------------------
  |  |  306|  2.65k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  2.65k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  2.65k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  2.65k|{                                               \
  |  |  |  |  |  |  197|  2.65k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  2.65k|                                                \
  |  |  |  |  |  |  199|  2.65k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 2.65k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|  2.65k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  2.65k|    {                                        \
  |  |  |  |  |  |  |  |  160|  2.65k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  2.65k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  2.65k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  2.65k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  2.65k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  2.65k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  2.65k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  2.65k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  2.65k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 2.65k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  2.65k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  2.65k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  2.65k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|  2.65k|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  2.65k|    } 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|  2.65k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1097|  2.65k|                miniflow_push_be16(mf, tp_dst, htons(icmp->icmp_code));
  ------------------
  |  |  306|  2.65k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  2.65k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  2.65k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  2.65k|{                                               \
  |  |  |  |  |  |  197|  2.65k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  2.65k|                                                \
  |  |  |  |  |  |  199|  2.65k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 2.65k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  2.65k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 2.65k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|  2.65k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  2.65k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  2.65k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  2.65k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  2.65k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  2.65k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  2.65k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  2.65k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  2.65k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  2.65k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  2.65k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 2.65k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  2.65k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|  2.65k|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  2.65k|    } 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|  2.65k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1098|  2.65k|                miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|  2.65k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  2.65k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  2.65k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  2.65k|{                                               \
  |  |  |  |  |  |  197|  2.65k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  2.65k|                                                \
  |  |  |  |  |  |  199|  2.65k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 2.65k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  2.65k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 2.65k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  2.65k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 2.65k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|  2.65k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  2.65k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  2.65k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  2.65k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  2.65k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  2.65k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  2.65k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  2.65k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  2.65k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  2.65k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  2.65k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 2.65k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  2.65k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|  2.65k|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|  2.65k|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|  2.65k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1099|  2.65k|                miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|  2.65k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  2.65k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  2.65k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  2.65k|{                                               \
  |  |  |  |  |  |  197|  2.65k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  2.65k|                                                \
  |  |  |  |  |  |  199|  2.65k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 2.65k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  2.65k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 2.65k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  2.65k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 2.65k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|  2.65k|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [True: 2.65k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|  2.65k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  2.65k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  2.65k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  2.65k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  2.65k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  2.65k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  2.65k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  2.65k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  2.65k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  2.65k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  2.65k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 2.65k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  2.65k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|  2.65k|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|  2.65k|        MF.data++;                              \
  |  |  |  |  |  |  212|  2.65k|    }                                           \
  |  |  |  |  |  |  213|  2.65k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1100|  2.65k|            }
 1101|  2.91k|        } else if (OVS_LIKELY(nw_proto == IPPROTO_IGMP)) {
  ------------------
  |  |   65|  2.91k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 2.06k, False: 850]
  |  |  ------------------
  ------------------
 1102|  2.06k|            if (OVS_LIKELY(size >= IGMP_HEADER_LEN)) {
  ------------------
  |  |   65|  2.06k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 2.02k, False: 47]
  |  |  ------------------
  ------------------
 1103|  2.02k|                const struct igmp_header *igmp = data;
 1104|       |
 1105|  2.02k|                miniflow_push_be16(mf, tp_src, htons(igmp->igmp_type));
  ------------------
  |  |  306|  2.02k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  2.02k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  2.02k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  2.02k|{                                               \
  |  |  |  |  |  |  197|  2.02k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  2.02k|                                                \
  |  |  |  |  |  |  199|  2.02k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 2.02k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|  2.02k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  2.02k|    {                                        \
  |  |  |  |  |  |  |  |  160|  2.02k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  2.02k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  2.02k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  2.02k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  2.02k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  2.02k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  2.02k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  2.02k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  2.02k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 2.02k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  2.02k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  2.02k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  2.02k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|  2.02k|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  2.02k|    } 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|  2.02k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1106|  2.02k|                miniflow_push_be16(mf, tp_dst, htons(igmp->igmp_code));
  ------------------
  |  |  306|  2.02k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  2.02k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  2.02k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  2.02k|{                                               \
  |  |  |  |  |  |  197|  2.02k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  2.02k|                                                \
  |  |  |  |  |  |  199|  2.02k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 2.02k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  2.02k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 2.02k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|  2.02k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  2.02k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  2.02k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  2.02k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  2.02k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  2.02k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  2.02k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  2.02k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  2.02k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  2.02k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  2.02k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 2.02k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  2.02k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|  2.02k|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  2.02k|    } 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|  2.02k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1107|       |                /* ct_tp_src/dst are not extracted for IGMP. */
 1108|  2.02k|                miniflow_pad_to_64(mf, tp_dst);
  ------------------
  |  |  312|  2.02k|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|  2.02k|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|  2.02k|{                                                               \
  |  |  |  |  234|  2.02k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|  2.02k|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|  2.02k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|  2.02k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  2.02k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  2.02k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  2.02k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  2.02k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  2.02k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  2.02k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  2.02k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  2.02k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 2.02k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  2.02k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|  2.02k|                                                                \
  |  |  |  |  237|  2.02k|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|  2.02k|    MF.data++;                                                  \
  |  |  |  |  239|  2.02k|}
  |  |  ------------------
  ------------------
 1109|  2.02k|                miniflow_push_be32(mf, igmp_group_ip4,
  ------------------
  |  |  300|  2.02k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  2.02k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  2.02k|    {                                           \
  |  |  |  |  |  |  180|  2.02k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  2.02k|                                                \
  |  |  |  |  |  |  182|  2.02k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 2.02k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|  2.02k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  2.02k|    {                                        \
  |  |  |  |  |  |  |  |  160|  2.02k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  2.02k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  2.02k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  2.02k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  2.02k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  2.02k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  2.02k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  2.02k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  2.02k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 2.02k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  2.02k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  2.02k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  2.02k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|  2.02k|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|  2.02k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  |  |  190|  2.02k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1110|  2.02k|                                   get_16aligned_be32(&igmp->group));
 1111|  2.02k|                miniflow_pad_to_64(mf, igmp_group_ip4);
  ------------------
  |  |  312|  2.02k|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|  2.02k|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|  2.02k|{                                                               \
  |  |  |  |  234|  2.02k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|  2.02k|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|  2.02k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|  2.02k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  2.02k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  2.02k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  2.02k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  2.02k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  2.02k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  2.02k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  2.02k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  2.02k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 2.02k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  2.02k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|  2.02k|                                                                \
  |  |  |  |  237|  2.02k|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|  2.02k|    MF.data++;                                                  \
  |  |  |  |  239|  2.02k|}
  |  |  ------------------
  ------------------
 1112|  2.02k|            }
 1113|  2.06k|        } else if (OVS_LIKELY(nw_proto == IPPROTO_ICMPV6)) {
  ------------------
  |  |   65|    850|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 604, False: 246]
  |  |  ------------------
  ------------------
 1114|    604|            if (OVS_LIKELY(size >= sizeof(struct icmp6_data_header))) {
  ------------------
  |  |   65|    604|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 561, False: 43]
  |  |  ------------------
  ------------------
 1115|    561|                const union ovs_16aligned_in6_addr *nd_target;
 1116|    561|                struct eth_addr arp_buf[2];
 1117|       |                /* This will populate whether we received Option 1
 1118|       |                 * or Option 2. */
 1119|    561|                uint8_t opt_type;
 1120|       |                /* This holds the ND Reserved field. */
 1121|    561|                ovs_be32 rso_flags;
 1122|    561|                const struct icmp6_data_header *icmp6;
 1123|       |
 1124|    561|                icmp6 = data_pull(&data, &size, sizeof *icmp6);
 1125|    561|                if (parse_icmpv6(&data, &size, icmp6,
  ------------------
  |  Branch (1125:21): [True: 400, False: 161]
  ------------------
 1126|    561|                                 &rso_flags, &nd_target, arp_buf, &opt_type)) {
 1127|    400|                    if (nd_target) {
  ------------------
  |  Branch (1127:25): [True: 243, False: 157]
  ------------------
 1128|    243|                        miniflow_push_words(mf, nd_target, nd_target,
  ------------------
  |  |  318|    243|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|    243|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|    243|{                                                               \
  |  |  |  |  270|    243|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|    243|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|    243|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|    243|{                                                               \
  |  |  |  |  |  |  259|    243|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|    243|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|    243|                                                                \
  |  |  |  |  |  |  262|    243|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|    243|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    243|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    243|{                                                                       \
  |  |  |  |  |  |  |  |  151|    243|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    243|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    243|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    243|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    243|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    243|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 243]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    243|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    243|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|    243|}
  |  |  |  |  ------------------
  |  |  |  |  272|    243|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|    243|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|    243|}
  |  |  ------------------
  ------------------
 1129|    243|                                            sizeof *nd_target / sizeof(uint64_t));
 1130|    243|                    }
 1131|    400|                    miniflow_push_macs(mf, arp_sha, arp_buf);
  ------------------
  |  |  324|    400|    miniflow_push_macs_(MF, offsetof(struct flow, FIELD), VALUEP)
  |  |  ------------------
  |  |  |  |  289|    400|#define miniflow_push_macs_(MF, OFS, VALUEP)                    \
  |  |  |  |  290|    400|{                                                               \
  |  |  |  |  291|    400|    miniflow_set_maps(MF, (OFS) / 8, 2);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|    400|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|    400|{                                                               \
  |  |  |  |  |  |  259|    400|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|    400|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|    400|                                                                \
  |  |  |  |  |  |  262|    400|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|    400|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    400|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    400|{                                                                       \
  |  |  |  |  |  |  |  |  151|    400|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    400|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    400|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    400|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    400|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    400|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 400]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    400|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    400|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|    400|}
  |  |  |  |  ------------------
  |  |  |  |  292|    400|    memcpy(MF.data, (VALUEP), 2 * ETH_ADDR_LEN);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  205|    400|#define ETH_ADDR_LEN           6
  |  |  |  |  ------------------
  |  |  |  |  293|    400|    MF.data += 1;                   /* First word only. */      \
  |  |  |  |  294|    400|}
  |  |  ------------------
  ------------------
 1132|       |                    /* Populate options field and set the padding
 1133|       |                     * accordingly. */
 1134|    400|                    if (opt_type != 0) {
  ------------------
  |  Branch (1134:25): [True: 95, False: 305]
  ------------------
 1135|     95|                        miniflow_push_be16(mf, tcp_flags, htons(opt_type));
  ------------------
  |  |  306|     95|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|     95|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     95|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|     95|{                                               \
  |  |  |  |  |  |  197|     95|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|     95|                                                \
  |  |  |  |  |  |  199|     95|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 95]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|     95|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 95]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|     95|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 95, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|     95|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|     95|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|     95|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     95|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     95|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     95|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     95|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     95|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     95|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     95|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     95|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 95]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     95|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|     95|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|     95|    } 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|     95|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1136|       |                        /* Pad to align with 64 bits.
 1137|       |                         * This will zero out the pad3 field. */
 1138|     95|                        miniflow_pad_to_64(mf, tcp_flags);
  ------------------
  |  |  312|     95|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|     95|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|     95|{                                                               \
  |  |  |  |  234|     95|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|     95|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|     95|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|     95|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|     95|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|     95|{                                                                       \
  |  |  |  |  |  |  |  |  151|     95|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|     95|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|     95|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|     95|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|     95|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|     95|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 95]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|     95|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|     95|                                                                \
  |  |  |  |  237|     95|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|     95|    MF.data++;                                                  \
  |  |  |  |  239|     95|}
  |  |  ------------------
  ------------------
 1139|    305|                    } else {
 1140|       |                        /* Pad to align with 64 bits.
 1141|       |                         * This will zero out the tcp_flags & pad3 field. */
 1142|    305|                        miniflow_pad_to_64(mf, arp_tha);
  ------------------
  |  |  312|    305|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|    305|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|    305|{                                                               \
  |  |  |  |  234|    305|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|    305|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|    305|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|    305|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    305|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    305|{                                                                       \
  |  |  |  |  |  |  |  |  151|    305|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    305|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    305|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    305|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    305|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    305|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 305]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    305|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|    305|                                                                \
  |  |  |  |  237|    305|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|    305|    MF.data++;                                                  \
  |  |  |  |  239|    305|}
  |  |  ------------------
  ------------------
 1143|    305|                    }
 1144|    400|                    miniflow_push_be16(mf, tp_src,
  ------------------
  |  |  306|    400|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    400|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    400|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    400|{                                               \
  |  |  |  |  |  |  197|    400|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    400|                                                \
  |  |  |  |  |  |  199|    400|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 400, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|    400|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    400|    {                                        \
  |  |  |  |  |  |  |  |  160|    400|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    400|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    400|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    400|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    400|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    400|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    400|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    400|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    400|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 400]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    400|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    400|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    400|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|    400|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    400|    } 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|    400|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1145|    400|                                       htons(icmp6->icmp6_base.icmp6_type));
 1146|    400|                    miniflow_push_be16(mf, tp_dst,
  ------------------
  |  |  306|    400|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    400|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    400|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    400|{                                               \
  |  |  |  |  |  |  197|    400|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    400|                                                \
  |  |  |  |  |  |  199|    400|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 400]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    400|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 400, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|    400|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    400|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    400|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    400|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    400|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    400|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    400|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    400|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    400|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    400|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    400|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 400]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    400|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|    400|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    400|    } 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|    400|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1147|    400|                                       htons(icmp6->icmp6_base.icmp6_code));
 1148|    400|                    miniflow_pad_to_64(mf, tp_dst);
  ------------------
  |  |  312|    400|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|    400|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|    400|{                                                               \
  |  |  |  |  234|    400|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|    400|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|    400|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|    400|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    400|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    400|{                                                                       \
  |  |  |  |  |  |  |  |  151|    400|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    400|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    400|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    400|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    400|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    400|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 400]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    400|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|    400|                                                                \
  |  |  |  |  237|    400|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|    400|    MF.data++;                                                  \
  |  |  |  |  239|    400|}
  |  |  ------------------
  ------------------
 1149|       |                    /* Fill ND reserved field. */
 1150|    400|                    miniflow_push_be32(mf, igmp_group_ip4, rso_flags);
  ------------------
  |  |  300|    400|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|    400|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|    400|    {                                           \
  |  |  |  |  |  |  180|    400|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|    400|                                                \
  |  |  |  |  |  |  182|    400|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 400, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|    400|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    400|    {                                        \
  |  |  |  |  |  |  |  |  160|    400|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    400|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    400|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    400|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    400|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    400|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    400|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    400|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    400|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 400]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    400|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    400|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    400|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|    400|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|    400|    } 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|    400|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1151|    400|                    miniflow_pad_to_64(mf, igmp_group_ip4);
  ------------------
  |  |  312|    400|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|    400|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|    400|{                                                               \
  |  |  |  |  234|    400|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|    400|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|    400|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|    400|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    400|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    400|{                                                                       \
  |  |  |  |  |  |  |  |  151|    400|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    400|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    400|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    400|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    400|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    400|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 400]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    400|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|    400|                                                                \
  |  |  |  |  237|    400|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|    400|    MF.data++;                                                  \
  |  |  |  |  239|    400|}
  |  |  ------------------
  ------------------
 1152|    400|                } else {
 1153|       |                    /* ICMPv6 but not ND. */
 1154|    161|                    miniflow_push_be16(mf, tp_src,
  ------------------
  |  |  306|    161|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    161|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    161|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    161|{                                               \
  |  |  |  |  |  |  197|    161|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    161|                                                \
  |  |  |  |  |  |  199|    161|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 161, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|    161|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    161|    {                                        \
  |  |  |  |  |  |  |  |  160|    161|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    161|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    161|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    161|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    161|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    161|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    161|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    161|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    161|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 161]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    161|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    161|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    161|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|    161|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    161|    } 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|    161|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1155|    161|                                       htons(icmp6->icmp6_base.icmp6_type));
 1156|    161|                    miniflow_push_be16(mf, tp_dst,
  ------------------
  |  |  306|    161|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    161|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    161|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    161|{                                               \
  |  |  |  |  |  |  197|    161|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    161|                                                \
  |  |  |  |  |  |  199|    161|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 161]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    161|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 161, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|    161|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    161|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    161|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    161|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    161|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    161|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    161|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    161|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    161|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    161|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    161|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 161]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    161|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|    161|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    161|    } 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|    161|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1157|    161|                                       htons(icmp6->icmp6_base.icmp6_code));
 1158|    161|                    miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|    161|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    161|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    161|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    161|{                                               \
  |  |  |  |  |  |  197|    161|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    161|                                                \
  |  |  |  |  |  |  199|    161|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 161]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    161|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 161]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    161|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 161, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|    161|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    161|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    161|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    161|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    161|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    161|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    161|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    161|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    161|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    161|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    161|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 161]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    161|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|    161|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|    161|    } 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|    161|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1159|    161|                    miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|    161|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    161|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    161|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    161|{                                               \
  |  |  |  |  |  |  197|    161|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    161|                                                \
  |  |  |  |  |  |  199|    161|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 161]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    161|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 161]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    161|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 161]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    161|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [True: 161, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|    161|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    161|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    161|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    161|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    161|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    161|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    161|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    161|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    161|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    161|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    161|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 161]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    161|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|    161|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|    161|        MF.data++;                              \
  |  |  |  |  |  |  212|    161|    }                                           \
  |  |  |  |  |  |  213|    161|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1160|    161|                }
 1161|    561|            }
 1162|    604|        }
 1163|  14.7k|    } else if (ct_nw_proto_p &&
  ------------------
  |  Branch (1163:16): [True: 0, False: 308]
  ------------------
 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|  52.7k| out:
 1174|  52.7k|    dst->map = mf.map;
 1175|  52.7k|}
flow_zero_wildcards:
 1288|  65.0k|{
 1289|  65.0k|    uint64_t *flow_u64 = (uint64_t *) flow;
 1290|  65.0k|    const uint64_t *wc_u64 = (const uint64_t *) &wildcards->masks;
 1291|  65.0k|    size_t i;
 1292|       |
 1293|  6.04M|    for (i = 0; i < FLOW_U64S; i++) {
  ------------------
  |  |  165|  6.04M|#define FLOW_U64S (sizeof(struct flow) / sizeof(uint64_t))
  ------------------
  |  Branch (1293:17): [True: 5.98M, False: 65.0k]
  ------------------
 1294|  5.98M|        flow_u64[i] &= wc_u64[i];
 1295|  5.98M|    }
 1296|  65.0k|}
ct_state_to_string:
 1416|  23.8k|{
 1417|  23.8k|    switch (state) {
 1418|      0|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
 1419|      0|        CS_STATES
  ------------------
  |  |  926|    832|    CS_STATE(NEW,         0, "new")             \
  |  |  ------------------
  |  |  |  | 1418|    832|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1418:37): [True: 832, False: 23.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  927|    876|    CS_STATE(ESTABLISHED, 1, "est")             \
  |  |  ------------------
  |  |  |  | 1418|    876|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1418:37): [True: 876, False: 22.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  928|    933|    CS_STATE(RELATED,     2, "rel")             \
  |  |  ------------------
  |  |  |  | 1418|    933|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1418:37): [True: 933, False: 22.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  929|    933|    CS_STATE(REPLY_DIR,   3, "rpl")             \
  |  |  ------------------
  |  |  |  | 1418|    834|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1418:37): [True: 834, False: 23.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  930|    932|    CS_STATE(INVALID,     4, "inv")             \
  |  |  ------------------
  |  |  |  | 1418|    932|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1418:37): [True: 932, False: 22.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  931|    932|    CS_STATE(TRACKED,     5, "trk")             \
  |  |  ------------------
  |  |  |  | 1418|    831|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1418:37): [True: 831, False: 23.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  932|    831|    CS_STATE(SRC_NAT,     6, "snat")            \
  |  |  ------------------
  |  |  |  | 1418|    831|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1418:37): [True: 831, False: 23.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  933|    831|    CS_STATE(DST_NAT,     7, "dnat")
  |  |  ------------------
  |  |  |  | 1418|    830|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1418:37): [True: 830, False: 23.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1420|      0|#undef CS_STATE
 1421|  16.9k|    default:
  ------------------
  |  Branch (1421:5): [True: 16.9k, False: 6.89k]
  ------------------
 1422|       |        return NULL;
 1423|  23.8k|    }
 1424|  23.8k|}
flow_tun_flag_to_string:
 1539|  1.50k|{
 1540|  1.50k|    switch (flags) {
 1541|    105|    case FLOW_TNL_F_DONT_FRAGMENT:
  ------------------
  |  |   61|    105|#define FLOW_TNL_F_DONT_FRAGMENT (1 << 1)
  ------------------
  |  Branch (1541:5): [True: 105, False: 1.39k]
  ------------------
 1542|    105|        return "df";
 1543|    108|    case FLOW_TNL_F_CSUM:
  ------------------
  |  |   62|    108|#define FLOW_TNL_F_CSUM (1 << 2)
  ------------------
  |  Branch (1543:5): [True: 108, False: 1.39k]
  ------------------
 1544|    108|        return "csum";
 1545|    171|    case FLOW_TNL_F_KEY:
  ------------------
  |  |   63|    171|#define FLOW_TNL_F_KEY (1 << 3)
  ------------------
  |  Branch (1545:5): [True: 171, False: 1.33k]
  ------------------
 1546|    171|        return "key";
 1547|    336|    case FLOW_TNL_F_OAM:
  ------------------
  |  |   56|    336|#define FLOW_TNL_F_OAM (1 << 0)
  ------------------
  |  Branch (1547:5): [True: 336, False: 1.16k]
  ------------------
 1548|    336|        return "oam";
 1549|    781|    default:
  ------------------
  |  Branch (1549:5): [True: 781, False: 720]
  ------------------
 1550|       |        return NULL;
 1551|  1.50k|    }
 1552|  1.50k|}
format_flags:
 1557|  9.79k|{
 1558|  9.79k|    uint32_t bad = 0;
 1559|       |
 1560|  9.79k|    if (!flags) {
  ------------------
  |  Branch (1560:9): [True: 1.53k, False: 8.25k]
  ------------------
 1561|  1.53k|        ds_put_char(ds, '0');
 1562|  1.53k|        return;
 1563|  1.53k|    }
 1564|  40.6k|    while (flags) {
  ------------------
  |  Branch (1564:12): [True: 32.4k, False: 8.25k]
  ------------------
 1565|  32.4k|        uint32_t bit = rightmost_1bit(flags);
 1566|  32.4k|        const char *s;
 1567|       |
 1568|  32.4k|        s = bit_to_string(bit);
 1569|  32.4k|        if (s) {
  ------------------
  |  Branch (1569:13): [True: 30.9k, False: 1.52k]
  ------------------
 1570|  30.9k|            ds_put_format(ds, "%s%c", s, del);
 1571|  30.9k|        } else {
 1572|  1.52k|            bad |= bit;
 1573|  1.52k|        }
 1574|       |
 1575|  32.4k|        flags &= ~bit;
 1576|  32.4k|    }
 1577|       |
 1578|  8.25k|    if (bad) {
  ------------------
  |  Branch (1578:9): [True: 637, False: 7.61k]
  ------------------
 1579|    637|        ds_put_format(ds, "0x%"PRIx32"%c", bad, del);
 1580|    637|    }
 1581|  8.25k|    ds_chomp(ds, del);
 1582|  8.25k|}
format_flags_masked:
 1588|  10.7k|{
 1589|  10.7k|    if (name) {
  ------------------
  |  Branch (1589:9): [True: 8.25k, False: 2.52k]
  ------------------
 1590|  8.25k|        ds_put_format(ds, "%s%s=%s", colors.param, name, colors.end);
 1591|  8.25k|    }
 1592|       |
 1593|  10.7k|    if (mask == max_mask) {
  ------------------
  |  Branch (1593:9): [True: 9.72k, False: 1.06k]
  ------------------
 1594|  9.72k|        format_flags(ds, bit_to_string, flags, '|');
 1595|  9.72k|        return;
 1596|  9.72k|    }
 1597|       |
 1598|  1.06k|    if (!mask) {
  ------------------
  |  Branch (1598:9): [True: 34, False: 1.03k]
  ------------------
 1599|     34|        ds_put_cstr(ds, "0/0");
 1600|     34|        return;
 1601|     34|    }
 1602|       |
 1603|  24.5k|    while (mask) {
  ------------------
  |  Branch (1603:12): [True: 23.4k, False: 1.03k]
  ------------------
 1604|  23.4k|        uint32_t bit = rightmost_1bit(mask);
 1605|  23.4k|        const char *s = bit_to_string(bit);
 1606|       |
 1607|  23.4k|        ds_put_format(ds, "%s%s", (flags & bit) ? "+" : "-",
  ------------------
  |  Branch (1607:35): [True: 6.65k, False: 16.8k]
  ------------------
 1608|  23.4k|                      s ? s : "[Unknown]");
  ------------------
  |  Branch (1608:23): [True: 6.52k, False: 16.9k]
  ------------------
 1609|  23.4k|        mask &= ~bit;
 1610|  23.4k|    }
 1611|  1.03k|}
format_packet_type_masked:
 1633|  20.3k|{
 1634|  20.3k|    if (value == htonl(PT_ETH) && mask == OVS_BE32_MAX) {
  ------------------
  |  |   43|    177|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  |  Branch (1634:9): [True: 177, False: 20.1k]
  |  Branch (1634:35): [True: 177, False: 0]
  ------------------
 1635|    177|        ds_put_cstr(s, "eth");
 1636|  20.1k|    } else {
 1637|  20.1k|        ds_put_cstr(s, "packet_type=(");
 1638|  20.1k|        put_u16_masked(s, pt_ns(value), pt_ns(mask));
 1639|  20.1k|        ds_put_char(s, ',');
 1640|  20.1k|        put_u16_masked(s, pt_ns_type(value), pt_ns_type(mask));
 1641|  20.1k|        ds_put_char(s, ')');
 1642|  20.1k|    }
 1643|  20.3k|}
flow_format:
 1807|  52.7k|{
 1808|  52.7k|    struct match match;
 1809|  52.7k|    struct flow_wildcards *wc = &match.wc;
 1810|       |
 1811|  52.7k|    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|  52.7k|    if (!flow->in_port.ofp_port) {
  ------------------
  |  Branch (1820:9): [True: 52.7k, False: 0]
  ------------------
 1821|  52.7k|        WC_UNMASK_FIELD(wc, in_port);
  ------------------
  |  |  205|  52.7k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1822|  52.7k|    }
 1823|  52.7k|    if (!flow->skb_priority) {
  ------------------
  |  Branch (1823:9): [True: 52.7k, False: 0]
  ------------------
 1824|  52.7k|        WC_UNMASK_FIELD(wc, skb_priority);
  ------------------
  |  |  205|  52.7k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1825|  52.7k|    }
 1826|  52.7k|    if (!flow->pkt_mark) {
  ------------------
  |  Branch (1826:9): [True: 52.7k, False: 0]
  ------------------
 1827|  52.7k|        WC_UNMASK_FIELD(wc, pkt_mark);
  ------------------
  |  |  205|  52.7k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1828|  52.7k|    }
 1829|  52.7k|    if (!flow->recirc_id) {
  ------------------
  |  Branch (1829:9): [True: 52.7k, False: 0]
  ------------------
 1830|  52.7k|        WC_UNMASK_FIELD(wc, recirc_id);
  ------------------
  |  |  205|  52.7k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1831|  52.7k|    }
 1832|  52.7k|    if (!flow->dp_hash) {
  ------------------
  |  Branch (1832:9): [True: 52.7k, False: 0]
  ------------------
 1833|  52.7k|        WC_UNMASK_FIELD(wc, dp_hash);
  ------------------
  |  |  205|  52.7k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1834|  52.7k|    }
 1835|  52.7k|    if (!flow->ct_state) {
  ------------------
  |  Branch (1835:9): [True: 52.7k, False: 0]
  ------------------
 1836|  52.7k|        WC_UNMASK_FIELD(wc, ct_state);
  ------------------
  |  |  205|  52.7k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1837|  52.7k|    }
 1838|  52.7k|    if (!flow->ct_zone) {
  ------------------
  |  Branch (1838:9): [True: 52.7k, False: 0]
  ------------------
 1839|  52.7k|        WC_UNMASK_FIELD(wc, ct_zone);
  ------------------
  |  |  205|  52.7k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1840|  52.7k|    }
 1841|  52.7k|    if (!flow->ct_mark) {
  ------------------
  |  Branch (1841:9): [True: 52.7k, False: 0]
  ------------------
 1842|  52.7k|        WC_UNMASK_FIELD(wc, ct_mark);
  ------------------
  |  |  205|  52.7k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1843|  52.7k|    }
 1844|  52.7k|    if (ovs_u128_is_zero(flow->ct_label)) {
  ------------------
  |  Branch (1844:9): [True: 52.7k, False: 0]
  ------------------
 1845|  52.7k|        WC_UNMASK_FIELD(wc, ct_label);
  ------------------
  |  |  205|  52.7k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1846|  52.7k|    }
 1847|  52.7k|    if (!is_ct_valid(flow, &match.wc, NULL) || !flow->ct_nw_proto) {
  ------------------
  |  Branch (1847:9): [True: 52.7k, False: 0]
  |  Branch (1847:48): [True: 0, False: 0]
  ------------------
 1848|  52.7k|        WC_UNMASK_FIELD(wc, ct_nw_proto);
  ------------------
  |  |  205|  52.7k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1849|  52.7k|        WC_UNMASK_FIELD(wc, ct_tp_src);
  ------------------
  |  |  205|  52.7k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1850|  52.7k|        WC_UNMASK_FIELD(wc, ct_tp_dst);
  ------------------
  |  |  205|  52.7k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1851|  52.7k|        if (flow->dl_type == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (1851:13): [True: 1.30k, False: 51.4k]
  ------------------
 1852|  1.30k|            WC_UNMASK_FIELD(wc, ct_nw_src);
  ------------------
  |  |  205|  1.30k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1853|  1.30k|            WC_UNMASK_FIELD(wc, ct_nw_dst);
  ------------------
  |  |  205|  1.30k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1854|  51.4k|        } else if (flow->dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1854:20): [True: 16.5k, False: 34.9k]
  ------------------
 1855|  16.5k|            WC_UNMASK_FIELD(wc, ct_ipv6_src);
  ------------------
  |  |  205|  16.5k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1856|  16.5k|            WC_UNMASK_FIELD(wc, ct_ipv6_dst);
  ------------------
  |  |  205|  16.5k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1857|  16.5k|        }
 1858|  52.7k|    }
 1859|  1.74M|    for (int i = 0; i < FLOW_N_REGS; i++) {
  ------------------
  |  |   33|  1.74M|#define FLOW_N_REGS 32
  ------------------
  |  Branch (1859:21): [True: 1.68M, False: 52.7k]
  ------------------
 1860|  1.68M|        if (!flow->regs[i]) {
  ------------------
  |  Branch (1860:13): [True: 1.68M, False: 0]
  ------------------
 1861|  1.68M|            WC_UNMASK_FIELD(wc, regs[i]);
  ------------------
  |  |  205|  1.68M|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1862|  1.68M|        }
 1863|  1.68M|    }
 1864|  52.7k|    if (!flow->metadata) {
  ------------------
  |  Branch (1864:9): [True: 52.7k, False: 0]
  ------------------
 1865|  52.7k|        WC_UNMASK_FIELD(wc, metadata);
  ------------------
  |  |  205|  52.7k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1866|  52.7k|    }
 1867|       |
 1868|  52.7k|    match_format(&match, port_map, ds, OFP_DEFAULT_PRIORITY);
  ------------------
  |  |  138|  52.7k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
 1869|  52.7k|}
flow_wildcards_init_catchall:
 1885|   361k|{
 1886|   361k|    memset(&wc->masks, 0, sizeof wc->masks);
 1887|   361k|}
flow_wildcards_init_for_packet:
 1896|  52.7k|{
 1897|  52.7k|    ovs_be16 dl_type = OVS_BE16_MAX;
  ------------------
  |  |   42|  52.7k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
 1898|       |
 1899|  52.7k|    memset(&wc->masks, 0x0, sizeof wc->masks);
 1900|       |
 1901|       |    /* Update this function whenever struct flow changes. */
 1902|  52.7k|    BUILD_ASSERT_DECL(FLOW_WC_SEQ == 43);
  ------------------
  |  |  270|  52.7k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  ------------------
 1903|       |
 1904|  52.7k|    if (flow_tnl_dst_is_set(&flow->tunnel)) {
  ------------------
  |  Branch (1904:9): [True: 0, False: 52.7k]
  ------------------
 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|  52.7k|    } else if (flow->tunnel.tun_id) {
  ------------------
  |  Branch (1938:16): [True: 0, False: 52.7k]
  ------------------
 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|  52.7k|    WC_MASK_FIELD(wc, skb_priority);
  ------------------
  |  |  201|  52.7k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1945|  52.7k|    WC_MASK_FIELD(wc, pkt_mark);
  ------------------
  |  |  201|  52.7k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1946|  52.7k|    WC_MASK_FIELD(wc, ct_state);
  ------------------
  |  |  201|  52.7k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1947|  52.7k|    WC_MASK_FIELD(wc, ct_zone);
  ------------------
  |  |  201|  52.7k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1948|  52.7k|    WC_MASK_FIELD(wc, ct_mark);
  ------------------
  |  |  201|  52.7k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1949|  52.7k|    WC_MASK_FIELD(wc, ct_label);
  ------------------
  |  |  201|  52.7k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1950|  52.7k|    WC_MASK_FIELD(wc, recirc_id);
  ------------------
  |  |  201|  52.7k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1951|  52.7k|    WC_MASK_FIELD(wc, dp_hash);
  ------------------
  |  |  201|  52.7k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1952|  52.7k|    WC_MASK_FIELD(wc, in_port);
  ------------------
  |  |  201|  52.7k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1953|       |
 1954|       |    /* actset_output wildcarded. */
 1955|       |
 1956|  52.7k|    WC_MASK_FIELD(wc, packet_type);
  ------------------
  |  |  201|  52.7k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1957|  52.7k|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (1957:9): [True: 42.7k, False: 9.98k]
  ------------------
 1958|  42.7k|        WC_MASK_FIELD(wc, dl_dst);
  ------------------
  |  |  201|  42.7k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1959|  42.7k|        WC_MASK_FIELD(wc, dl_src);
  ------------------
  |  |  201|  42.7k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1960|  42.7k|        WC_MASK_FIELD(wc, dl_type);
  ------------------
  |  |  201|  42.7k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1961|       |        /* No need to set mask of inner VLANs that don't exist. */
 1962|  43.8k|        for (int i = 0; i < FLOW_MAX_VLAN_HEADERS; i++) {
  ------------------
  |  |   75|  43.8k|#define FLOW_MAX_VLAN_HEADERS 2
  ------------------
  |  Branch (1962:25): [True: 43.4k, False: 409]
  ------------------
 1963|       |            /* Always show the first zero VLAN. */
 1964|  43.4k|            WC_MASK_FIELD(wc, vlans[i]);
  ------------------
  |  |  201|  43.4k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1965|  43.4k|            if (flow->vlans[i].tci == htons(0)) {
  ------------------
  |  Branch (1965:17): [True: 42.3k, False: 1.12k]
  ------------------
 1966|  42.3k|                break;
 1967|  42.3k|            }
 1968|  43.4k|        }
 1969|  42.7k|        dl_type = flow->dl_type;
 1970|  42.7k|    } else {
 1971|  9.98k|        dl_type = pt_ns_type_be(flow->packet_type);
 1972|  9.98k|    }
 1973|       |
 1974|  52.7k|    if (dl_type == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (1974:9): [True: 1.30k, False: 51.4k]
  ------------------
 1975|  1.30k|        WC_MASK_FIELD(wc, nw_src);
  ------------------
  |  |  201|  1.30k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1976|  1.30k|        WC_MASK_FIELD(wc, nw_dst);
  ------------------
  |  |  201|  1.30k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1977|  1.30k|        WC_MASK_FIELD(wc, ct_nw_src);
  ------------------
  |  |  201|  1.30k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1978|  1.30k|        WC_MASK_FIELD(wc, ct_nw_dst);
  ------------------
  |  |  201|  1.30k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1979|  51.4k|    } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1979:16): [True: 16.5k, False: 34.9k]
  ------------------
 1980|  16.5k|        WC_MASK_FIELD(wc, ipv6_src);
  ------------------
  |  |  201|  16.5k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1981|  16.5k|        WC_MASK_FIELD(wc, ipv6_dst);
  ------------------
  |  |  201|  16.5k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1982|  16.5k|        WC_MASK_FIELD(wc, ipv6_label);
  ------------------
  |  |  201|  16.5k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1983|  16.5k|        if (is_nd(flow, wc)) {
  ------------------
  |  Branch (1983:13): [True: 384, False: 16.1k]
  ------------------
 1984|    384|            WC_MASK_FIELD(wc, arp_sha);
  ------------------
  |  |  201|    384|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1985|    384|            WC_MASK_FIELD(wc, arp_tha);
  ------------------
  |  |  201|    384|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1986|    384|            WC_MASK_FIELD(wc, nd_target);
  ------------------
  |  |  201|    384|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1987|  16.1k|        } else {
 1988|  16.1k|            WC_MASK_FIELD(wc, ct_ipv6_src);
  ------------------
  |  |  201|  16.1k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1989|  16.1k|            WC_MASK_FIELD(wc, ct_ipv6_dst);
  ------------------
  |  |  201|  16.1k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1990|  16.1k|        }
 1991|  34.9k|    } else if (dl_type == htons(ETH_TYPE_ARP) ||
  ------------------
  |  Branch (1991:16): [True: 358, False: 34.5k]
  ------------------
 1992|  34.5k|               dl_type == htons(ETH_TYPE_RARP)) {
  ------------------
  |  Branch (1992:16): [True: 323, False: 34.2k]
  ------------------
 1993|    681|        WC_MASK_FIELD(wc, nw_src);
  ------------------
  |  |  201|    681|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1994|    681|        WC_MASK_FIELD(wc, nw_dst);
  ------------------
  |  |  201|    681|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1995|    681|        WC_MASK_FIELD(wc, nw_proto);
  ------------------
  |  |  201|    681|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1996|    681|        WC_MASK_FIELD(wc, arp_sha);
  ------------------
  |  |  201|    681|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1997|    681|        WC_MASK_FIELD(wc, arp_tha);
  ------------------
  |  |  201|    681|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1998|    681|        return;
 1999|  34.2k|    } else if (eth_type_mpls(dl_type)) {
  ------------------
  |  Branch (1999:16): [True: 458, False: 33.7k]
  ------------------
 2000|  1.18k|        for (int i = 0; i < FLOW_MAX_MPLS_LABELS; i++) {
  ------------------
  |  |   66|  1.18k|#define FLOW_MAX_MPLS_LABELS 3
  ------------------
  |  Branch (2000:25): [True: 997, False: 190]
  ------------------
 2001|    997|            WC_MASK_FIELD(wc, mpls_lse[i]);
  ------------------
  |  |  201|    997|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2002|    997|            if (flow->mpls_lse[i] & htonl(MPLS_BOS_MASK)) {
  ------------------
  |  Branch (2002:17): [True: 268, False: 729]
  ------------------
 2003|    268|                break;
 2004|    268|            }
 2005|    997|        }
 2006|    458|        return;
 2007|  33.7k|    } else if (flow->dl_type == htons(ETH_TYPE_NSH)) {
  ------------------
  |  Branch (2007:16): [True: 8.50k, False: 25.2k]
  ------------------
 2008|  8.50k|        WC_MASK_FIELD(wc, nsh.flags);
  ------------------
  |  |  201|  8.50k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2009|  8.50k|        WC_MASK_FIELD(wc, nsh.ttl);
  ------------------
  |  |  201|  8.50k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2010|  8.50k|        WC_MASK_FIELD(wc, nsh.mdtype);
  ------------------
  |  |  201|  8.50k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2011|  8.50k|        WC_MASK_FIELD(wc, nsh.np);
  ------------------
  |  |  201|  8.50k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2012|  8.50k|        WC_MASK_FIELD(wc, nsh.path_hdr);
  ------------------
  |  |  201|  8.50k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2013|  8.50k|        WC_MASK_FIELD(wc, nsh.context);
  ------------------
  |  |  201|  8.50k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2014|  25.2k|    } else {
 2015|  25.2k|        return; /* Unknown ethertype. */
 2016|  25.2k|    }
 2017|       |
 2018|       |    /* IPv4 or IPv6. */
 2019|  26.3k|    WC_MASK_FIELD_MASK(wc, nw_frag, FLOW_NW_FRAG_MASK);
  ------------------
  |  |  203|  26.3k|    ((WC)->masks.FIELD |= (MASK))
  ------------------
 2020|  26.3k|    WC_MASK_FIELD(wc, nw_tos);
  ------------------
  |  |  201|  26.3k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2021|  26.3k|    WC_MASK_FIELD(wc, nw_ttl);
  ------------------
  |  |  201|  26.3k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2022|  26.3k|    WC_MASK_FIELD(wc, nw_proto);
  ------------------
  |  |  201|  26.3k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2023|  26.3k|    WC_MASK_FIELD(wc, ct_nw_proto);
  ------------------
  |  |  201|  26.3k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2024|  26.3k|    WC_MASK_FIELD(wc, ct_tp_src);
  ------------------
  |  |  201|  26.3k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2025|  26.3k|    WC_MASK_FIELD(wc, ct_tp_dst);
  ------------------
  |  |  201|  26.3k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2026|       |
 2027|       |    /* No transport layer header in later fragments. */
 2028|  26.3k|    if (!(flow->nw_frag & FLOW_NW_FRAG_LATER) &&
  ------------------
  |  |   55|  26.3k|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  |  Branch (2028:9): [True: 26.0k, False: 308]
  ------------------
 2029|  26.0k|        (flow->nw_proto == IPPROTO_ICMP ||
  ------------------
  |  Branch (2029:10): [True: 2.80k, False: 23.2k]
  ------------------
 2030|  23.2k|         flow->nw_proto == IPPROTO_ICMPV6 ||
  ------------------
  |  Branch (2030:10): [True: 604, False: 22.6k]
  ------------------
 2031|  22.6k|         flow->nw_proto == IPPROTO_TCP ||
  ------------------
  |  Branch (2031:10): [True: 7.93k, False: 14.6k]
  ------------------
 2032|  14.6k|         flow->nw_proto == IPPROTO_UDP ||
  ------------------
  |  Branch (2032:10): [True: 504, False: 14.1k]
  ------------------
 2033|  14.1k|         flow->nw_proto == IPPROTO_SCTP ||
  ------------------
  |  Branch (2033:10): [True: 628, False: 13.5k]
  ------------------
 2034|  14.5k|         flow->nw_proto == IPPROTO_IGMP)) {
  ------------------
  |  Branch (2034:10): [True: 2.06k, False: 11.4k]
  ------------------
 2035|  14.5k|        WC_MASK_FIELD(wc, tp_src);
  ------------------
  |  |  201|  14.5k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2036|  14.5k|        WC_MASK_FIELD(wc, tp_dst);
  ------------------
  |  |  201|  14.5k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2037|       |
 2038|  14.5k|        if (flow->nw_proto == IPPROTO_TCP) {
  ------------------
  |  Branch (2038:13): [True: 7.93k, False: 6.61k]
  ------------------
 2039|  7.93k|            WC_MASK_FIELD(wc, tcp_flags);
  ------------------
  |  |  201|  7.93k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2040|  7.93k|        } else if (flow->nw_proto == IPPROTO_IGMP) {
  ------------------
  |  Branch (2040:20): [True: 2.06k, False: 4.54k]
  ------------------
 2041|  2.06k|            WC_MASK_FIELD(wc, igmp_group_ip4);
  ------------------
  |  |  201|  2.06k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2042|  2.06k|        }
 2043|  14.5k|    }
 2044|  26.3k|}
flow_wildcards_equal:
 2230|  33.4k|{
 2231|  33.4k|    return flow_equal(&a->masks, &b->masks);
 2232|  33.4k|}
flow_wildcards_set_reg_mask:
 2275|  11.7k|{
 2276|  11.7k|    wc->masks.regs[idx] = mask;
 2277|  11.7k|}
flow_wildcards_set_xreg_mask:
 2283|  5.82k|{
 2284|  5.82k|    flow_set_xreg(&wc->masks, idx, mask);
 2285|  5.82k|}
flow_wildcards_set_xxreg_mask:
 2292|  6.73k|{
 2293|  6.73k|    flow_set_xxreg(&wc->masks, idx, mask);
 2294|  6.73k|}
flow_hash_fields_to_str:
 2723|  1.84k|{
 2724|  1.84k|    switch (fields) {
 2725|    622|    case NX_HASH_FIELDS_ETH_SRC: return "eth_src";
  ------------------
  |  Branch (2725:5): [True: 622, False: 1.22k]
  ------------------
 2726|    303|    case NX_HASH_FIELDS_SYMMETRIC_L4: return "symmetric_l4";
  ------------------
  |  Branch (2726:5): [True: 303, False: 1.54k]
  ------------------
 2727|    108|    case NX_HASH_FIELDS_SYMMETRIC_L3L4: return "symmetric_l3l4";
  ------------------
  |  Branch (2727:5): [True: 108, False: 1.74k]
  ------------------
 2728|    234|    case NX_HASH_FIELDS_SYMMETRIC_L3L4_UDP: return "symmetric_l3l4+udp";
  ------------------
  |  Branch (2728:5): [True: 234, False: 1.61k]
  ------------------
 2729|     23|    case NX_HASH_FIELDS_NW_SRC: return "nw_src";
  ------------------
  |  Branch (2729:5): [True: 23, False: 1.82k]
  ------------------
 2730|    136|    case NX_HASH_FIELDS_NW_DST: return "nw_dst";
  ------------------
  |  Branch (2730:5): [True: 136, False: 1.71k]
  ------------------
 2731|    122|    case NX_HASH_FIELDS_SYMMETRIC_L3: return "symmetric_l3";
  ------------------
  |  Branch (2731:5): [True: 122, False: 1.72k]
  ------------------
 2732|    301|    default: return "<unknown>";
  ------------------
  |  Branch (2732:5): [True: 301, False: 1.54k]
  ------------------
 2733|  1.84k|    }
 2734|  1.84k|}
flow_hash_fields_valid:
 2739|  4.43k|{
 2740|  4.43k|    return fields == NX_HASH_FIELDS_ETH_SRC
  ------------------
  |  Branch (2740:12): [True: 799, False: 3.63k]
  ------------------
 2741|  3.63k|        || fields == NX_HASH_FIELDS_SYMMETRIC_L4
  ------------------
  |  Branch (2741:12): [True: 453, False: 3.18k]
  ------------------
 2742|  3.18k|        || fields == NX_HASH_FIELDS_SYMMETRIC_L3L4
  ------------------
  |  Branch (2742:12): [True: 255, False: 2.92k]
  ------------------
 2743|  2.92k|        || fields == NX_HASH_FIELDS_SYMMETRIC_L3L4_UDP
  ------------------
  |  Branch (2743:12): [True: 263, False: 2.66k]
  ------------------
 2744|  2.66k|        || fields == NX_HASH_FIELDS_NW_SRC
  ------------------
  |  Branch (2744:12): [True: 28, False: 2.63k]
  ------------------
 2745|  2.63k|        || fields == NX_HASH_FIELDS_NW_DST
  ------------------
  |  Branch (2745:12): [True: 262, False: 2.37k]
  ------------------
 2746|  2.37k|        || fields == NX_HASH_FIELDS_SYMMETRIC_L3;
  ------------------
  |  Branch (2746:12): [True: 122, False: 2.25k]
  ------------------
 2747|  4.43k|}
flow_set_vlan_vid:
 2805|    245|{
 2806|       |    ovs_be16 mask = htons(VLAN_VID_MASK | VLAN_CFI);
 2807|    245|    flow->vlans[0].tci &= ~mask;
 2808|    245|    flow->vlans[0].tci |= vid & mask;
 2809|    245|}
flow_set_vlan_pcp:
 2820|    136|{
 2821|    136|    pcp &= 0x07;
 2822|    136|    flow->vlans[id].tci &= ~htons(VLAN_PCP_MASK);
 2823|       |    flow->vlans[id].tci |= htons((pcp << VLAN_PCP_SHIFT) | VLAN_CFI);
 2824|    136|}
flow_count_vlan_headers:
 2829|  2.70k|{
 2830|  2.70k|    int i;
 2831|       |
 2832|  4.33k|    for (i = 0; i < FLOW_MAX_VLAN_HEADERS; i++) {
  ------------------
  |  |   75|  4.33k|#define FLOW_MAX_VLAN_HEADERS 2
  ------------------
  |  Branch (2832:17): [True: 4.07k, False: 264]
  ------------------
 2833|  4.07k|        if (!(flow->vlans[i].tci & htons(VLAN_CFI))) {
  ------------------
  |  Branch (2833:13): [True: 2.44k, False: 1.63k]
  ------------------
 2834|  2.44k|            break;
 2835|  2.44k|        }
 2836|  4.07k|    }
 2837|  2.70k|    return i;
 2838|  2.70k|}
flow_pop_vlan:
 2860|  2.70k|{
 2861|  2.70k|    int n = flow_count_vlan_headers(flow);
 2862|  2.70k|    if (n > 1) {
  ------------------
  |  Branch (2862:9): [True: 264, False: 2.44k]
  ------------------
 2863|    264|        if (wc) {
  ------------------
  |  Branch (2863:13): [True: 0, False: 264]
  ------------------
 2864|      0|            memset(&wc->masks.vlans[1], 0xff,
 2865|      0|                   sizeof(union flow_vlan_hdr) * (n - 1));
 2866|      0|        }
 2867|    264|        memmove(&flow->vlans[0], &flow->vlans[1],
 2868|    264|                sizeof(union flow_vlan_hdr) * (n - 1));
 2869|    264|    }
 2870|  2.70k|    if (n > 0) {
  ------------------
  |  Branch (2870:9): [True: 1.36k, False: 1.34k]
  ------------------
 2871|  1.36k|        memset(&flow->vlans[n - 1], 0, sizeof(union flow_vlan_hdr));
 2872|  1.36k|    }
 2873|  2.70k|}
flow_push_vlan_uninit:
 2877|  1.19k|{
 2878|  1.19k|    if (wc) {
  ------------------
  |  Branch (2878:9): [True: 0, False: 1.19k]
  ------------------
 2879|      0|        int n = flow_count_vlan_headers(flow);
 2880|      0|        if (n) {
  ------------------
  |  Branch (2880:13): [True: 0, False: 0]
  ------------------
 2881|      0|            memset(wc->masks.vlans, 0xff, sizeof(union flow_vlan_hdr) * n);
 2882|      0|        }
 2883|      0|    }
 2884|  1.19k|    memmove(&flow->vlans[1], &flow->vlans[0],
 2885|  1.19k|            sizeof(union flow_vlan_hdr) * (FLOW_MAX_VLAN_HEADERS - 1));
  ------------------
  |  |   75|  1.19k|#define FLOW_MAX_VLAN_HEADERS 2
  ------------------
 2886|  1.19k|    memset(&flow->vlans[0], 0, sizeof(union flow_vlan_hdr));
 2887|  1.19k|}
flow_set_mpls_label:
 3076|  1.53k|{
 3077|  1.53k|    set_mpls_lse_label(&flow->mpls_lse[idx], label);
 3078|  1.53k|}
flow_set_mpls_ttl:
 3084|    232|{
 3085|    232|    set_mpls_lse_ttl(&flow->mpls_lse[idx], ttl);
 3086|    232|}
flow_set_mpls_tc:
 3092|    564|{
 3093|    564|    set_mpls_lse_tc(&flow->mpls_lse[idx], tc);
 3094|    564|}
flow_set_mpls_bos:
 3099|    125|{
 3100|    125|    set_mpls_lse_bos(&flow->mpls_lse[idx], bos);
 3101|    125|}
miniflow_init:
 3474|  53.0k|{
 3475|  53.0k|    uint64_t *dst_u64 = miniflow_values(dst);
 3476|  53.0k|    size_t idx;
 3477|       |
 3478|   178k|    FLOWMAP_FOR_EACH_INDEX(idx, dst->map) {
  ------------------
  |  |  337|  53.0k|    for (struct flowmap_aux aux__ = FLOWMAP_AUX_INITIALIZER(MAP);   \
  |  |  ------------------
  |  |  |  |  331|  53.0k|#define FLOWMAP_AUX_INITIALIZER(FLOWMAP) { .unit = 0, .map = (FLOWMAP) }
  |  |  ------------------
  |  |  338|   231k|         flowmap_next_index(&aux__, &(IDX));)
  |  |  ------------------
  |  |  |  Branch (338:10): [True: 178k, False: 53.0k]
  |  |  ------------------
  ------------------
 3479|   178k|        *dst_u64++ = flow_u64_value(src, idx);
 3480|   178k|    }
 3481|  53.0k|}
miniflow_map_init:
 3486|  26.5k|{
 3487|       |    /* Initialize map, counting the number of nonzero elements. */
 3488|  26.5k|    flowmap_init(&flow->map);
 3489|  2.46M|    for (size_t i = 0; i < FLOW_U64S; i++) {
  ------------------
  |  |  165|  2.46M|#define FLOW_U64S (sizeof(struct flow) / sizeof(uint64_t))
  ------------------
  |  Branch (3489:24): [True: 2.43M, False: 26.5k]
  ------------------
 3490|  2.43M|        if (flow_u64_value(src, i)) {
  ------------------
  |  Branch (3490:13): [True: 89.4k, False: 2.34M]
  ------------------
 3491|  89.4k|            flowmap_set(&flow->map, i, 1);
 3492|  89.4k|        }
 3493|  2.43M|    }
 3494|  26.5k|}
miniflow_alloc:
 3501|  26.5k|{
 3502|  26.5k|    size_t n_values = miniflow_n_values(src);
 3503|  26.5k|    size_t data_size = MINIFLOW_VALUES_SIZE(n_values);
  ------------------
  |  |  527|  26.5k|#define MINIFLOW_VALUES_SIZE(COUNT) ((COUNT) * sizeof(uint64_t))
  ------------------
 3504|  26.5k|    struct miniflow *dst = xmalloc(n * (sizeof *src + data_size));
 3505|  26.5k|    size_t i;
 3506|       |
 3507|  26.5k|    COVERAGE_INC(miniflow_malloc);
  ------------------
  |  |   83|  26.5k|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  26.5k|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
 3508|       |
 3509|  79.5k|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (3509:17): [True: 53.0k, False: 26.5k]
  ------------------
 3510|  53.0k|        *dst = *src;   /* Copy maps. */
 3511|  53.0k|        dsts[i] = dst;
 3512|  53.0k|        dst += 1;      /* Just past the maps. */
 3513|  53.0k|        dst = (struct miniflow *)((uint64_t *)dst + n_values); /* Skip data. */
 3514|  53.0k|    }
 3515|  26.5k|    return data_size;
 3516|  26.5k|}
miniflow_expand:
 3547|   105k|{
 3548|   105k|    memset(dst, 0, sizeof *dst);
 3549|   105k|    flow_union_with_miniflow(dst, src);
 3550|   105k|}
minimask_init:
 3616|  26.5k|{
 3617|  26.5k|    miniflow_init(&mask->masks, &wc->masks);
 3618|  26.5k|}
minimask_expand:
 3660|  26.5k|{
 3661|  26.5k|    miniflow_expand(&mask->masks, &wc->masks);
 3662|  26.5k|}
flow.c:parse_ipv6_ext_hdrs__:
  491|  15.7k|{
  492|  15.7k|    if (frag_hdr) {
  ------------------
  |  Branch (492:9): [True: 0, False: 15.7k]
  ------------------
  493|      0|        *frag_hdr = NULL;
  494|      0|    }
  495|       |
  496|  15.7k|    if (rt_hdr) {
  ------------------
  |  Branch (496:9): [True: 0, False: 15.7k]
  ------------------
  497|      0|        *rt_hdr = NULL;
  498|      0|    }
  499|       |
  500|  26.3k|    while (1) {
  ------------------
  |  Branch (500:12): [True: 26.3k, Folded]
  ------------------
  501|  26.3k|        if (OVS_LIKELY((*nw_proto != IPPROTO_HOPOPTS)
  ------------------
  |  |   65|   162k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 13.8k, False: 12.5k]
  |  |  |  Branch (65:51): [True: 14.4k, False: 11.8k]
  |  |  |  Branch (65:51): [True: 14.2k, False: 181]
  |  |  |  Branch (65:51): [True: 14.2k, False: 28]
  |  |  |  Branch (65:51): [True: 14.1k, False: 74]
  |  |  |  Branch (65:51): [True: 13.8k, False: 358]
  |  |  ------------------
  ------------------
  502|  26.3k|                       && (*nw_proto != IPPROTO_ROUTING)
  503|  26.3k|                       && (*nw_proto != IPPROTO_DSTOPTS)
  504|  26.3k|                       && (*nw_proto != IPPROTO_AH)
  505|  26.3k|                       && (*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|  13.8k|            return true;
  510|  13.8k|        }
  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|  12.5k|        if (OVS_UNLIKELY(*sizep < 8)) {
  ------------------
  |  |   66|  12.5k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 156, False: 12.3k]
  |  |  ------------------
  ------------------
  518|    156|            return false;
  519|    156|        }
  520|       |
  521|  12.3k|        if ((*nw_proto == IPPROTO_HOPOPTS)
  ------------------
  |  Branch (521:13): [True: 11.7k, False: 610]
  ------------------
  522|  11.7k|            || (*nw_proto == IPPROTO_DSTOPTS)) {
  ------------------
  |  Branch (522:16): [True: 25, False: 585]
  ------------------
  523|       |            /* These headers, while different, have the fields we care
  524|       |             * about in the same location and with the same
  525|       |             * interpretation. */
  526|  11.7k|            const struct ip6_ext *ext_hdr = *datap;
  527|  11.7k|            *nw_proto = ext_hdr->ip6e_nxt;
  528|  11.7k|            if (OVS_UNLIKELY(!data_try_pull(datap, sizep,
  ------------------
  |  |   66|  11.7k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 1.43k, False: 10.3k]
  |  |  ------------------
  ------------------
  529|  11.7k|                                            (ext_hdr->ip6e_len + 1) * 8))) {
  530|  1.43k|                return false;
  531|  1.43k|            }
  532|  11.7k|        } else if (*nw_proto == IPPROTO_ROUTING) {
  ------------------
  |  Branch (532:20): [True: 177, False: 408]
  ------------------
  533|    177|            const struct ip6_rt_hdr *tmp;
  534|    177|            if (!rt_hdr) {
  ------------------
  |  Branch (534:17): [True: 97, False: 80]
  ------------------
  535|     97|                rt_hdr = &tmp;
  536|     97|            }
  537|       |
  538|    177|            *rt_hdr = *datap;
  539|    177|            *nw_proto = (*rt_hdr)->nexthdr;
  540|    177|            if (OVS_UNLIKELY(!data_try_pull(datap, sizep,
  ------------------
  |  |   66|    177|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 68, False: 109]
  |  |  ------------------
  ------------------
  541|    177|                                            ((*rt_hdr)->hdrlen + 1) * 8))) {
  542|     68|                return false;
  543|     68|            }
  544|    408|        } else if (*nw_proto == IPPROTO_AH) {
  ------------------
  |  Branch (544:20): [True: 50, False: 358]
  ------------------
  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|     50|            const struct ip6_ext *ext_hdr = *datap;
  550|     50|            *nw_proto = ext_hdr->ip6e_nxt;
  551|     50|            if (OVS_UNLIKELY(!data_try_pull(datap, sizep,
  ------------------
  |  |   66|     50|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 18, False: 32]
  |  |  ------------------
  ------------------
  552|     50|                                            (ext_hdr->ip6e_len + 2) * 4))) {
  553|     18|                return false;
  554|     18|            }
  555|    358|        } else if (*nw_proto == IPPROTO_FRAGMENT) {
  ------------------
  |  Branch (555:20): [True: 358, False: 0]
  ------------------
  556|    358|            const struct ovs_16aligned_ip6_frag *tmp;
  557|    358|            if (!frag_hdr) {
  ------------------
  |  Branch (557:17): [True: 231, False: 127]
  ------------------
  558|    231|                frag_hdr = &tmp;
  559|    231|            }
  560|       |
  561|    358|            *frag_hdr = *datap;
  562|       |
  563|    358|            *nw_proto = (*frag_hdr)->ip6f_nxt;
  564|    358|            if (!data_try_pull(datap, sizep, sizeof **frag_hdr)) {
  ------------------
  |  Branch (564:17): [True: 0, False: 358]
  ------------------
  565|      0|                return false;
  566|      0|            }
  567|       |
  568|       |            /* We only process the first fragment. */
  569|    358|            if ((*frag_hdr)->ip6f_offlg != htons(0)) {
  ------------------
  |  Branch (569:17): [True: 299, False: 59]
  ------------------
  570|    299|                *nw_frag = FLOW_NW_FRAG_ANY;
  ------------------
  |  |   54|    299|#define FLOW_NW_FRAG_ANY   (1 << 0) /* Set for any IP frag. */
  ------------------
  571|    299|                if (((*frag_hdr)->ip6f_offlg & IP6F_OFF_MASK) != htons(0)) {
  ------------------
  |  Branch (571:21): [True: 203, False: 96]
  ------------------
  572|    203|                    *nw_frag |= FLOW_NW_FRAG_LATER;
  ------------------
  |  |   55|    203|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  573|    203|                    *nw_proto = IPPROTO_FRAGMENT;
  574|       |                    return true;
  575|    203|                }
  576|    299|            }
  577|    358|        }
  578|  12.3k|    }
  579|  15.7k|}
flow.c:data_pull:
  110|  85.0k|{
  111|  85.0k|    const char *data = *datap;
  112|  85.0k|    *datap = data + size;
  113|  85.0k|    *sizep -= size;
  114|  85.0k|    return data;
  115|  85.0k|}
flow.c:parse_vlan:
  350|  24.5k|{
  351|  24.5k|    const ovs_be16 *eth_type;
  352|       |
  353|  24.5k|    data_pull(datap, sizep, ETH_ADDR_LEN * 2);
  ------------------
  |  |  205|  24.5k|#define ETH_ADDR_LEN           6
  ------------------
  354|       |
  355|  24.5k|    eth_type = *datap;
  356|       |
  357|  24.5k|    size_t n;
  358|  25.6k|    for (n = 0; eth_type_vlan(*eth_type) && n < flow_vlan_limit; n++) {
  ------------------
  |  Branch (358:17): [True: 1.56k, False: 24.1k]
  |  Branch (358:45): [True: 1.19k, False: 372]
  ------------------
  359|  1.19k|        if (OVS_UNLIKELY(*sizep < sizeof(ovs_be32) + sizeof(ovs_be16))) {
  ------------------
  |  |   66|  1.19k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 67, False: 1.12k]
  |  |  ------------------
  ------------------
  360|     67|            break;
  361|     67|        }
  362|       |
  363|  1.12k|        memset(vlan_hdrs + n, 0, sizeof(union flow_vlan_hdr));
  364|  1.12k|        const ovs_16aligned_be32 *qp = data_pull(datap, sizep, sizeof *qp);
  365|  1.12k|        vlan_hdrs[n].qtag = get_16aligned_be32(qp);
  366|       |        vlan_hdrs[n].tci |= htons(VLAN_CFI);
  367|  1.12k|        eth_type = *datap;
  368|  1.12k|    }
  369|  24.5k|    return n;
  370|  24.5k|}
flow.c:parse_ethertype:
  374|  24.5k|{
  375|  24.5k|    const struct llc_snap_header *llc;
  376|  24.5k|    ovs_be16 proto;
  377|       |
  378|  24.5k|    proto = *(ovs_be16 *) data_pull(datap, sizep, sizeof proto);
  379|  24.5k|    if (OVS_LIKELY(ntohs(proto) >= ETH_TYPE_MIN)) {
  ------------------
  |  |   65|  24.5k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 22.8k, False: 1.70k]
  |  |  ------------------
  ------------------
  380|  22.8k|        return proto;
  381|  22.8k|    }
  382|       |
  383|  1.70k|    if (OVS_UNLIKELY(*sizep < sizeof *llc)) {
  ------------------
  |  |   66|  1.70k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 396, False: 1.31k]
  |  |  ------------------
  ------------------
  384|    396|        return htons(FLOW_DL_TYPE_NONE);
  385|    396|    }
  386|       |
  387|  1.31k|    llc = *datap;
  388|  1.31k|    if (OVS_UNLIKELY(llc->llc.llc_dsap != LLC_DSAP_SNAP
  ------------------
  |  |   66|  4.29k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 1.23k, False: 76]
  |  |  |  Branch (66:53): [True: 1.13k, False: 174]
  |  |  |  Branch (66:53): [True: 73, False: 101]
  |  |  |  Branch (66:53): [True: 19, False: 82]
  |  |  |  Branch (66:53): [True: 6, False: 76]
  |  |  ------------------
  ------------------
  389|  1.31k|                     || llc->llc.llc_ssap != LLC_SSAP_SNAP
  390|  1.31k|                     || llc->llc.llc_cntl != LLC_CNTL_SNAP
  391|  1.31k|                     || memcmp(llc->snap.snap_org, SNAP_ORG_ETHERNET,
  392|  1.31k|                               sizeof llc->snap.snap_org))) {
  393|  1.23k|        return htons(FLOW_DL_TYPE_NONE);
  394|  1.23k|    }
  395|       |
  396|     76|    data_pull(datap, sizep, sizeof *llc);
  397|       |
  398|     76|    if (OVS_LIKELY(ntohs(llc->snap.snap_type) >= ETH_TYPE_MIN)) {
  ------------------
  |  |   65|     76|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 66, False: 10]
  |  |  ------------------
  ------------------
  399|     66|        return llc->snap.snap_type;
  400|     66|    }
  401|       |
  402|     10|    return htons(FLOW_DL_TYPE_NONE);
  403|     76|}
flow.c:parse_mpls:
  334|    458|{
  335|    458|    const struct mpls_hdr *mh;
  336|    458|    int count = 0;
  337|       |
  338|    974|    while ((mh = data_try_pull(datap, sizep, sizeof *mh))) {
  ------------------
  |  Branch (338:12): [True: 786, False: 188]
  ------------------
  339|    786|        count++;
  340|    786|        if (mh->mpls_lse.lo & htons(1 << MPLS_BOS_SHIFT)) {
  ------------------
  |  Branch (340:13): [True: 270, False: 516]
  ------------------
  341|    270|            break;
  342|    270|        }
  343|    786|    }
  344|    458|    return MIN(count, FLOW_MAX_MPLS_LABELS);
  ------------------
  |  |   91|    458|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (91:20): [True: 418, False: 40]
  |  |  ------------------
  ------------------
  345|    458|}
flow.c:ipv4_sanity_check:
  685|  1.30k|{
  686|  1.30k|    int ip_len;
  687|  1.30k|    uint16_t tot_len;
  688|       |
  689|  1.30k|    if (OVS_UNLIKELY(size < IP_HEADER_LEN)) {
  ------------------
  |  |   66|  1.30k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 71, False: 1.23k]
  |  |  ------------------
  ------------------
  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|  1.23k|    ip_len = IP_IHL(nh->ip_ihl_ver) * 4;
  ------------------
  |  |  694|  1.23k|#define IP_IHL(ip_ihl_ver) ((ip_ihl_ver) & 15)
  ------------------
  694|       |
  695|  1.23k|    if (OVS_UNLIKELY(ip_len < IP_HEADER_LEN || size < ip_len)) {
  ------------------
  |  |   66|  2.43k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 66, False: 1.17k]
  |  |  |  Branch (66:53): [True: 37, False: 1.20k]
  |  |  |  Branch (66:53): [True: 29, False: 1.17k]
  |  |  ------------------
  ------------------
  696|     66|        COVERAGE_INC(miniflow_extract_ipv4_pkt_len_error);
  ------------------
  |  |   83|     66|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|     66|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  697|     66|        return false;
  698|     66|    }
  699|       |
  700|  1.17k|    tot_len = ntohs(nh->ip_tot_len);
  701|  1.17k|    if (OVS_UNLIKELY(tot_len > size || ip_len > tot_len ||
  ------------------
  |  |   66|  4.53k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 111, False: 1.06k]
  |  |  |  Branch (66:53): [True: 38, False: 1.13k]
  |  |  |  Branch (66:53): [True: 73, False: 1.06k]
  |  |  |  Branch (66:53): [True: 0, False: 1.06k]
  |  |  ------------------
  ------------------
  702|  1.17k|                size - tot_len > UINT16_MAX)) {
  703|    111|        COVERAGE_INC(miniflow_extract_ipv4_pkt_len_error);
  ------------------
  |  |   83|    111|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|    111|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  704|    111|        return false;
  705|    111|    }
  706|       |
  707|  1.06k|    *ip_lenp = ip_len;
  708|  1.06k|    *tot_lenp = tot_len;
  709|       |
  710|       |    return true;
  711|  1.17k|}
flow.c:ipv4_get_nw_frag:
  715|  1.06k|{
  716|  1.06k|    uint8_t nw_frag = 0;
  717|       |
  718|  1.06k|    if (OVS_UNLIKELY(IP_IS_FRAGMENT(nh->ip_frag_off))) {
  ------------------
  |  |   66|  1.06k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 147, False: 913]
  |  |  ------------------
  ------------------
  719|    147|        nw_frag = FLOW_NW_FRAG_ANY;
  ------------------
  |  |   54|    147|#define FLOW_NW_FRAG_ANY   (1 << 0) /* Set for any IP frag. */
  ------------------
  720|    147|        if (nh->ip_frag_off & htons(IP_FRAG_OFF_MASK)) {
  ------------------
  |  Branch (720:13): [True: 105, False: 42]
  ------------------
  721|    105|            nw_frag |= FLOW_NW_FRAG_LATER;
  ------------------
  |  |   55|    105|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  722|    105|        }
  723|    147|    }
  724|       |
  725|  1.06k|    return nw_frag;
  726|  1.06k|}
flow.c:ipv6_sanity_check:
  730|  16.5k|{
  731|  16.5k|    uint16_t plen;
  732|       |
  733|  16.5k|    if (OVS_UNLIKELY(size < sizeof *nh)) {
  ------------------
  |  |   66|  16.5k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 341, False: 16.1k]
  |  |  ------------------
  ------------------
  734|    341|        COVERAGE_INC(miniflow_extract_ipv6_pkt_too_short);
  ------------------
  |  |   83|    341|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|    341|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  735|    341|        return false;
  736|    341|    }
  737|       |
  738|  16.1k|    plen = ntohs(nh->ip6_plen);
  739|  16.1k|    if (OVS_UNLIKELY(plen + IPV6_HEADER_LEN > size)) {
  ------------------
  |  |   66|  16.1k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 459, False: 15.7k]
  |  |  ------------------
  ------------------
  740|    459|        COVERAGE_INC(miniflow_extract_ipv6_pkt_len_error);
  ------------------
  |  |   83|    459|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|    459|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  741|    459|        return false;
  742|    459|    }
  743|       |
  744|  15.7k|    if (OVS_UNLIKELY(size - (plen + IPV6_HEADER_LEN) > UINT16_MAX)) {
  ------------------
  |  |   66|  15.7k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 0, False: 15.7k]
  |  |  ------------------
  ------------------
  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|  15.7k|    return true;
  750|  15.7k|}
flow.c:data_try_pull:
  122|  14.8k|{
  123|  14.8k|    return OVS_LIKELY(*sizep >= size) ? data_pull(datap, sizep, size) : NULL;
  ------------------
  |  |   65|  14.8k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 12.6k, False: 2.20k]
  |  |  ------------------
  ------------------
  124|  14.8k|}
flow.c:parse_icmpv6:
  422|    561|{
  423|    561|    if (!icmp6_is_nd(icmp6)) {
  ------------------
  |  Branch (423:9): [True: 161, False: 400]
  ------------------
  424|    161|        return false;
  425|    161|    }
  426|       |
  427|    400|    arp_buf[0] = eth_addr_zero;
  428|    400|    arp_buf[1] = eth_addr_zero;
  429|    400|    *opt_type = 0;
  430|       |
  431|    400|    *rso_flags = get_16aligned_be32(icmp6->icmp6_data.be32);
  432|       |
  433|    400|    *nd_target = data_try_pull(datap, sizep, sizeof **nd_target);
  434|    400|    if (OVS_UNLIKELY(!*nd_target)) {
  ------------------
  |  |   66|    400|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 144, False: 256]
  |  |  ------------------
  ------------------
  435|    144|        return true;
  436|    144|    }
  437|       |
  438|    689|    while (*sizep >= 8) {
  ------------------
  |  Branch (438:12): [True: 620, False: 69]
  ------------------
  439|       |        /* The minimum size of an option is 8 bytes, which also is
  440|       |         * the size of Ethernet link-layer options. */
  441|    620|        const struct ovs_nd_lla_opt *lla_opt = *datap;
  442|    620|        int opt_len = lla_opt->len * ND_LLA_OPT_LEN;
  ------------------
  |  | 1044|    620|#define ND_LLA_OPT_LEN 8
  ------------------
  443|       |
  444|    620|        if (!opt_len || opt_len > *sizep) {
  ------------------
  |  Branch (444:13): [True: 82, False: 538]
  |  Branch (444:25): [True: 92, False: 446]
  ------------------
  445|    174|            return true;
  446|    174|        }
  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|    446|        if (lla_opt->type == ND_OPT_SOURCE_LINKADDR && opt_len == 8) {
  ------------------
  |  Branch (451:13): [True: 106, False: 340]
  |  Branch (451:56): [True: 71, False: 35]
  ------------------
  452|     71|            if (OVS_LIKELY(eth_addr_is_zero(arp_buf[0]))) {
  ------------------
  |  |   65|     71|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 61, False: 10]
  |  |  ------------------
  ------------------
  453|     61|                arp_buf[0] = lla_opt->mac;
  454|       |                /* We use only first option type present in ND packet. */
  455|     61|                if (*opt_type == 0) {
  ------------------
  |  Branch (455:21): [True: 21, False: 40]
  ------------------
  456|     21|                    *opt_type = lla_opt->type;
  457|     21|                }
  458|     61|            } else {
  459|     10|                goto invalid;
  460|     10|            }
  461|    375|        } else if (lla_opt->type == ND_OPT_TARGET_LINKADDR && opt_len == 8) {
  ------------------
  |  Branch (461:20): [True: 100, False: 275]
  |  Branch (461:63): [True: 87, False: 13]
  ------------------
  462|     87|            if (OVS_LIKELY(eth_addr_is_zero(arp_buf[1]))) {
  ------------------
  |  |   65|     87|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 84, False: 3]
  |  |  ------------------
  ------------------
  463|     84|                arp_buf[1] = lla_opt->mac;
  464|       |                /* We use only first option type present in ND packet. */
  465|     84|                if (*opt_type == 0) {
  ------------------
  |  Branch (465:21): [True: 74, False: 10]
  ------------------
  466|     74|                    *opt_type = lla_opt->type;
  467|     74|                }
  468|     84|            } else {
  469|      3|                goto invalid;
  470|      3|            }
  471|     87|        }
  472|       |
  473|    433|        if (OVS_UNLIKELY(!data_try_pull(datap, sizep, opt_len))) {
  ------------------
  |  |   66|    433|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 0, False: 433]
  |  |  ------------------
  ------------------
  474|      0|            return true;
  475|      0|        }
  476|    433|    }
  477|     69|    return true;
  478|       |
  479|     13|invalid:
  480|     13|    *nd_target = NULL;
  481|     13|    arp_buf[0] = eth_addr_zero;
  482|     13|    arp_buf[1] = eth_addr_zero;
  483|       |    return true;
  484|    256|}
flow.c:icmp6_is_nd:
  407|    561|{
  408|    561|    return (icmp6->icmp6_base.icmp6_code == 0 &&
  ------------------
  |  Branch (408:13): [True: 476, False: 85]
  ------------------
  409|    476|            (icmp6->icmp6_base.icmp6_type == ND_NEIGHBOR_SOLICIT ||
  ------------------
  |  Branch (409:14): [True: 362, False: 114]
  ------------------
  410|    114|             icmp6->icmp6_base.icmp6_type == ND_NEIGHBOR_ADVERT));
  ------------------
  |  Branch (410:14): [True: 38, False: 76]
  ------------------
  411|    561|}
flow.c:put_u16_masked:
 1615|  40.3k|{
 1616|  40.3k|    if (!mask) {
  ------------------
  |  Branch (1616:9): [True: 0, False: 40.3k]
  ------------------
 1617|      0|        ds_put_char(s, '*');
 1618|  40.3k|    } else {
 1619|  40.3k|        if (value > 9) {
  ------------------
  |  Branch (1619:13): [True: 25.0k, False: 15.2k]
  ------------------
 1620|  25.0k|            ds_put_format(s, "0x%"PRIx16, value);
 1621|  25.0k|        } else {
 1622|  15.2k|            ds_put_format(s, "%"PRIu16, value);
 1623|  15.2k|        }
 1624|       |
 1625|  40.3k|        if (mask != UINT16_MAX) {
  ------------------
  |  Branch (1625:13): [True: 0, False: 40.3k]
  ------------------
 1626|       |            ds_put_format(s, "/0x%"PRIx16, mask);
 1627|      0|        }
 1628|  40.3k|    }
 1629|  40.3k|}

ofp-queue.c:ofp_to_u16:
  196|  29.7k|{
  197|  29.7k|    return (OVS_FORCE uint16_t) ofp_port;
  198|  29.7k|}
ofp-queue.c:u16_to_ofp:
  214|  15.2k|{
  215|  15.2k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|  15.2k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|  15.2k|}
flow.c:miniflow_values:
  530|   105k|{
  531|   105k|    return (uint64_t *)(mf + 1);
  532|   105k|}
flow.c:flowmap_set:
  385|   306k|{
  386|   306k|    map_t n_bits_mask = (MAP_1 << n_bits) - 1;
  ------------------
  |  |  271|   306k|#define MAP_1 (map_t)1
  ------------------
  387|   306k|    size_t unit = idx / MAP_T_BITS;
  ------------------
  |  |  270|   306k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  388|       |
  389|   306k|    idx %= MAP_T_BITS;
  ------------------
  |  |  270|   306k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  390|       |
  391|   306k|    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|   306k|    if (unit + 1 < FLOWMAP_UNITS && idx + n_bits > MAP_T_BITS) {
  ------------------
  |  |  280|   306k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  ------------------
  |  |  |  |  300|   612k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
                  if (unit + 1 < FLOWMAP_UNITS && idx + n_bits > MAP_T_BITS) {
  ------------------
  |  |  270|   136k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  |  Branch (394:9): [True: 136k, False: 169k]
  |  Branch (394:37): [True: 0, False: 136k]
  ------------------
  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|   306k|}
flow.c:odp_to_u32:
  202|  52.7k|{
  203|  52.7k|    return (OVS_FORCE uint32_t) odp_port;
  204|  52.7k|}
flow.c:is_ct_valid:
  954|  52.7k|{
  955|       |    /* Matches are checked with 'mask' and without 'wc'. */
  956|  52.7k|    if (mask && !wc) {
  ------------------
  |  Branch (956:9): [True: 52.7k, False: 0]
  |  Branch (956:17): [True: 52.7k, False: 0]
  ------------------
  957|       |        /* Must match at least one of the bits that implies a valid
  958|       |         * conntrack entry, or an explicit not-invalid. */
  959|  52.7k|        return flow->ct_state & (CS_NEW | CS_ESTABLISHED | CS_RELATED
  ------------------
  |  Branch (959:16): [True: 0, False: 52.7k]
  ------------------
  960|  52.7k|                                 | CS_REPLY_DIR | CS_SRC_NAT | CS_DST_NAT)
  961|  52.7k|            || (flow->ct_state & CS_TRACKED
  ------------------
  |  Branch (961:17): [True: 0, False: 52.7k]
  ------------------
  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|  52.7k|    }
  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|  52.7k|}
flow.c:is_nd:
 1119|  16.5k|{
 1120|  16.5k|    if (is_icmpv6(flow, wc)) {
  ------------------
  |  Branch (1120:9): [True: 558, False: 15.9k]
  ------------------
 1121|    558|        if (wc) {
  ------------------
  |  Branch (1121:13): [True: 558, False: 0]
  ------------------
 1122|    558|            memset(&wc->masks.tp_dst, 0xff, sizeof wc->masks.tp_dst);
 1123|    558|        }
 1124|    558|        if (flow->tp_dst != htons(0)) {
  ------------------
  |  Branch (1124:13): [True: 76, False: 482]
  ------------------
 1125|     76|            return false;
 1126|     76|        }
 1127|       |
 1128|    482|        if (wc) {
  ------------------
  |  Branch (1128:13): [True: 482, False: 0]
  ------------------
 1129|    482|            memset(&wc->masks.tp_src, 0xff, sizeof wc->masks.tp_src);
 1130|    482|        }
 1131|    482|        return (flow->tp_src == htons(ND_NEIGHBOR_SOLICIT) ||
  ------------------
  |  Branch (1131:17): [True: 361, False: 121]
  ------------------
 1132|    121|                flow->tp_src == htons(ND_NEIGHBOR_ADVERT));
  ------------------
  |  Branch (1132:17): [True: 23, False: 98]
  ------------------
 1133|    558|    }
 1134|  15.9k|    return false;
 1135|  16.5k|}
flow.c:is_icmpv6:
 1107|  16.5k|{
 1108|  16.5k|    if (get_dl_type(flow) == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1108:9): [True: 16.1k, False: 319]
  ------------------
 1109|  16.1k|        if (wc) {
  ------------------
  |  Branch (1109:13): [True: 16.1k, False: 0]
  ------------------
 1110|  16.1k|            memset(&wc->masks.nw_proto, 0xff, sizeof wc->masks.nw_proto);
 1111|  16.1k|        }
 1112|  16.1k|        return flow->nw_proto == IPPROTO_ICMPV6;
 1113|  16.1k|    }
 1114|    319|    return false;
 1115|  16.5k|}
flow.c:get_dl_type:
 1036|  16.5k|{
 1037|  16.5k|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (1037:9): [True: 16.0k, False: 442]
  ------------------
 1038|  16.0k|        return flow->dl_type;
 1039|  16.0k|    } else if (pt_ns(flow->packet_type) == OFPHTN_ETHERTYPE) {
  ------------------
  |  Branch (1039:16): [True: 123, False: 319]
  ------------------
 1040|    123|        return pt_ns_type_be(flow->packet_type);
 1041|    319|    } else {
 1042|       |        return htons(FLOW_DL_TYPE_NONE);
 1043|    319|    }
 1044|  16.5k|}
flow.c:flowmap_init:
  343|  26.5k|{
  344|  26.5k|    memset(fm, 0, sizeof *fm);
  345|  26.5k|}
flow.c:flow_equal:
  184|  33.4k|{
  185|  33.4k|    return !flow_compare_3way(a, b);
  186|  33.4k|}
flow.c:flow_compare_3way:
  178|  33.4k|{
  179|  33.4k|    return memcmp(a, b, sizeof *a);
  180|  33.4k|}
flow.c:flow_set_xreg:
  149|  5.82k|{
  150|  5.82k|    flow->regs[idx * 2] = value >> 32;
  151|  5.82k|    flow->regs[idx * 2 + 1] = value;
  152|  5.82k|}
flow.c:flow_set_xxreg:
  169|  6.73k|{
  170|  6.73k|    flow->regs[idx * 4] = value.u64.hi >> 32;
  171|  6.73k|    flow->regs[idx * 4 + 1] = value.u64.hi;
  172|  6.73k|    flow->regs[idx * 4 + 2] = value.u64.lo >> 32;
  173|  6.73k|    flow->regs[idx * 4 + 3] = value.u64.lo;
  174|  6.73k|}
flow.c:miniflow_get_values:
  535|   105k|{
  536|   105k|    return (const uint64_t *)(mf + 1);
  537|   105k|}
flow.c:flowmap_next_index:
  479|   231k|{
  480|   284k|    for (;;) {
  481|   284k|        map_t *map = &aux->map.bits[aux->unit];
  482|   284k|        if (*map) {
  ------------------
  |  Branch (482:13): [True: 178k, False: 106k]
  ------------------
  483|   178k|            *idx = aux->unit * MAP_T_BITS + raw_ctz(*map);
  ------------------
  |  |  270|   178k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  484|   178k|            *map = zero_rightmost_1bit(*map);
  485|   178k|            return true;
  486|   178k|        }
  487|   106k|        if (++aux->unit >= FLOWMAP_UNITS) {
  ------------------
  |  |  280|   106k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  ------------------
  |  |  |  |  300|   106k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (487:13): [True: 53.0k, False: 53.0k]
  ------------------
  488|       |            return false;
  489|  53.0k|        }
  490|   106k|    }
  491|   231k|}
flow.c:flow_u64_value:
  557|  2.61M|{
  558|  2.61M|    return ((uint64_t *)flow)[index];
  559|  2.61M|}
flow.c:miniflow_n_values:
  568|  26.5k|{
  569|  26.5k|    return flowmap_n_1bits(flow->map);
  570|  26.5k|}
flow.c:flowmap_n_1bits:
  462|  26.5k|{
  463|  26.5k|    unsigned int n_1bits = 0;
  464|  26.5k|    size_t unit;
  465|       |
  466|  53.0k|    FLOWMAP_FOR_EACH_UNIT (unit) {
  ------------------
  |  |  320|  79.5k|    for ((UNIT) = 0; (UNIT) < FLOWMAP_UNITS; (UNIT)++)
  |  |  ------------------
  |  |  |  |  280|  79.5k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|  79.5k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (320:22): [True: 53.0k, False: 26.5k]
  |  |  ------------------
  ------------------
  467|  53.0k|        n_1bits += count_1bits(fm.bits[unit]);
  468|  53.0k|    }
  469|  26.5k|    return n_1bits;
  470|  26.5k|}
flow.c:flow_union_with_miniflow:
  938|   105k|{
  939|   105k|    flow_union_with_miniflow_subset(dst, src, src->map);
  940|   105k|}
flow.c:flow_union_with_miniflow_subset:
  919|   105k|{
  920|   105k|    uint64_t *dst_u64 = (uint64_t *) dst;
  921|   105k|    const uint64_t *p = miniflow_get_values(src);
  922|   105k|    map_t map;
  923|       |
  924|   211k|    FLOWMAP_FOR_EACH_MAP (map, subset) {
  ------------------
  |  |  324|   105k|    for (size_t unit__ = 0;                                       \
  |  |  325|   317k|         unit__ < FLOWMAP_UNITS && ((MAP) = (FLOWMAP).bits[unit__], true); \
  |  |  ------------------
  |  |  |  |  280|   317k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|   634k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (325:10): [True: 211k, False: 105k]
  |  |  |  Branch (325:36): [True: 211k, False: 0]
  |  |  ------------------
  |  |  326|   211k|         unit__++)
  ------------------
  925|   211k|        size_t idx;
  926|       |
  927|   461k|        MAP_FOR_EACH_INDEX(idx, map) {
  ------------------
  |  |  278|   211k|    ULLONG_FOR_EACH_1(IDX, MAP)
  |  |  ------------------
  |  |  |  |  285|   211k|    for (uint64_t map__ = (MAP);                    \
  |  |  |  |  286|   673k|         map__ && (((IDX) = raw_ctz(map__)), true); \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (286:10): [True: 461k, False: 211k]
  |  |  |  |  |  Branch (286:19): [True: 461k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  287|   461k|         map__ = zero_rightmost_1bit(map__))
  |  |  ------------------
  ------------------
  928|   461k|            dst_u64[idx] |= *p++;
  929|   461k|        }
  930|       |        dst_u64 += MAP_T_BITS;
  ------------------
  |  |  270|   211k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  931|   211k|    }
  932|   105k|}
match.c:flow_set_xreg:
  149|  5.82k|{
  150|  5.82k|    flow->regs[idx * 2] = value >> 32;
  151|  5.82k|    flow->regs[idx * 2 + 1] = value;
  152|  5.82k|}
match.c:flow_set_xxreg:
  169|  6.73k|{
  170|  6.73k|    flow->regs[idx * 4] = value.u64.hi >> 32;
  171|  6.73k|    flow->regs[idx * 4 + 1] = value.u64.hi;
  172|  6.73k|    flow->regs[idx * 4 + 2] = value.u64.lo >> 32;
  173|  6.73k|    flow->regs[idx * 4 + 3] = value.u64.lo;
  174|  6.73k|}
match.c:u16_to_ofp:
  214|   100k|{
  215|   100k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|   100k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|   100k|}
match.c:is_ip_any:
 1059|   165k|{
 1060|   165k|    return dl_type_is_ip_any(get_dl_type(flow));
 1061|   165k|}
match.c:get_dl_type:
 1036|   165k|{
 1037|   165k|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (1037:9): [True: 145k, False: 19.9k]
  ------------------
 1038|   145k|        return flow->dl_type;
 1039|   145k|    } else if (pt_ns(flow->packet_type) == OFPHTN_ETHERTYPE) {
  ------------------
  |  Branch (1039:16): [True: 14.1k, False: 5.80k]
  ------------------
 1040|  14.1k|        return pt_ns_type_be(flow->packet_type);
 1041|  14.1k|    } else {
 1042|       |        return htons(FLOW_DL_TYPE_NONE);
 1043|  5.80k|    }
 1044|   165k|}
meta-flow.c:flow_get_xreg:
  143|  6.89k|{
  144|  6.89k|    return ((uint64_t) flow->regs[idx * 2] << 32) | flow->regs[idx * 2 + 1];
  145|  6.89k|}
meta-flow.c:flow_get_xxreg:
  156|  6.88k|{
  157|  6.88k|    ovs_u128 value;
  158|       |
  159|  6.88k|    value.u64.hi = (uint64_t) flow->regs[idx * 4] << 32;
  160|  6.88k|    value.u64.hi |= flow->regs[idx * 4 + 1];
  161|  6.88k|    value.u64.lo = (uint64_t) flow->regs[idx * 4 + 2] << 32;
  162|  6.88k|    value.u64.lo |= flow->regs[idx * 4 + 3];
  163|       |
  164|  6.88k|    return value;
  165|  6.88k|}
meta-flow.c:get_dl_type:
 1036|  47.7k|{
 1037|  47.7k|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (1037:9): [True: 34.3k, False: 13.4k]
  ------------------
 1038|  34.3k|        return flow->dl_type;
 1039|  34.3k|    } else if (pt_ns(flow->packet_type) == OFPHTN_ETHERTYPE) {
  ------------------
  |  Branch (1039:16): [True: 10.1k, False: 3.33k]
  ------------------
 1040|  10.1k|        return pt_ns_type_be(flow->packet_type);
 1041|  10.1k|    } else {
 1042|       |        return htons(FLOW_DL_TYPE_NONE);
 1043|  3.33k|    }
 1044|  47.7k|}
meta-flow.c:is_ethernet:
 1028|    798|{
 1029|    798|    if (wc) {
  ------------------
  |  Branch (1029:9): [True: 0, False: 798]
  ------------------
 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|    798|}
meta-flow.c:is_vlan:
 1048|    423|{
 1049|    423|    if (!is_ethernet(flow, wc)) {
  ------------------
  |  Branch (1049:9): [True: 73, False: 350]
  ------------------
 1050|     73|        return false;
 1051|     73|    }
 1052|    350|    if (wc) {
  ------------------
  |  Branch (1052:9): [True: 0, False: 350]
  ------------------
 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|    423|}
meta-flow.c:is_ct_valid:
  954|    967|{
  955|       |    /* Matches are checked with 'mask' and without 'wc'. */
  956|    967|    if (mask && !wc) {
  ------------------
  |  Branch (956:9): [True: 967, False: 0]
  |  Branch (956:17): [True: 967, False: 0]
  ------------------
  957|       |        /* Must match at least one of the bits that implies a valid
  958|       |         * conntrack entry, or an explicit not-invalid. */
  959|    967|        return flow->ct_state & (CS_NEW | CS_ESTABLISHED | CS_RELATED
  ------------------
  |  Branch (959:16): [True: 324, False: 643]
  ------------------
  960|    967|                                 | CS_REPLY_DIR | CS_SRC_NAT | CS_DST_NAT)
  961|    643|            || (flow->ct_state & CS_TRACKED
  ------------------
  |  Branch (961:17): [True: 414, False: 229]
  ------------------
  962|    414|                && mask->masks.ct_state & CS_INVALID
  ------------------
  |  Branch (962:20): [True: 411, False: 3]
  ------------------
  963|    411|                && !(flow->ct_state & CS_INVALID));
  ------------------
  |  Branch (963:20): [True: 411, False: 0]
  ------------------
  964|    967|    }
  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|    967|}
meta-flow.c:is_tcp:
 1077|    384|{
 1078|       |    return is_ip_proto(flow, IPPROTO_TCP, wc);
 1079|    384|}
meta-flow.c:is_ip_proto:
 1065|  1.13k|{
 1066|  1.13k|    if (is_ip_any(flow)) {
  ------------------
  |  Branch (1066:9): [True: 594, False: 544]
  ------------------
 1067|    594|        if (wc) {
  ------------------
  |  Branch (1067:13): [True: 0, False: 594]
  ------------------
 1068|      0|            WC_MASK_FIELD(wc, nw_proto);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1069|      0|        }
 1070|    594|        return flow->nw_proto == ip_proto;
 1071|    594|    }
 1072|    544|    return false;
 1073|  1.13k|}
meta-flow.c:is_udp:
 1083|    465|{
 1084|       |    return is_ip_proto(flow, IPPROTO_UDP, wc);
 1085|    465|}
meta-flow.c:is_sctp:
 1089|    289|{
 1090|       |    return is_ip_proto(flow, IPPROTO_SCTP, wc);
 1091|    289|}
meta-flow.c:is_icmpv4:
 1095|    709|{
 1096|    709|    if (get_dl_type(flow) == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (1096:9): [True: 47, False: 662]
  ------------------
 1097|     47|        if (wc) {
  ------------------
  |  Branch (1097:13): [True: 0, False: 47]
  ------------------
 1098|      0|            memset(&wc->masks.nw_proto, 0xff, sizeof wc->masks.nw_proto);
 1099|      0|        }
 1100|     47|        return flow->nw_proto == IPPROTO_ICMP;
 1101|     47|    }
 1102|    662|    return false;
 1103|    709|}
meta-flow.c:is_icmpv6:
 1107|  2.57k|{
 1108|  2.57k|    if (get_dl_type(flow) == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1108:9): [True: 1.65k, False: 920]
  ------------------
 1109|  1.65k|        if (wc) {
  ------------------
  |  Branch (1109:13): [True: 0, False: 1.65k]
  ------------------
 1110|      0|            memset(&wc->masks.nw_proto, 0xff, sizeof wc->masks.nw_proto);
 1111|      0|        }
 1112|  1.65k|        return flow->nw_proto == IPPROTO_ICMPV6;
 1113|  1.65k|    }
 1114|    920|    return false;
 1115|  2.57k|}
meta-flow.c:is_nd:
 1119|  1.87k|{
 1120|  1.87k|    if (is_icmpv6(flow, wc)) {
  ------------------
  |  Branch (1120:9): [True: 471, False: 1.40k]
  ------------------
 1121|    471|        if (wc) {
  ------------------
  |  Branch (1121:13): [True: 0, False: 471]
  ------------------
 1122|      0|            memset(&wc->masks.tp_dst, 0xff, sizeof wc->masks.tp_dst);
 1123|      0|        }
 1124|    471|        if (flow->tp_dst != htons(0)) {
  ------------------
  |  Branch (1124:13): [True: 71, False: 400]
  ------------------
 1125|     71|            return false;
 1126|     71|        }
 1127|       |
 1128|    400|        if (wc) {
  ------------------
  |  Branch (1128:13): [True: 0, False: 400]
  ------------------
 1129|      0|            memset(&wc->masks.tp_src, 0xff, sizeof wc->masks.tp_src);
 1130|      0|        }
 1131|    400|        return (flow->tp_src == htons(ND_NEIGHBOR_SOLICIT) ||
  ------------------
  |  Branch (1131:17): [True: 138, False: 262]
  ------------------
 1132|    262|                flow->tp_src == htons(ND_NEIGHBOR_ADVERT));
  ------------------
  |  Branch (1132:17): [True: 233, False: 29]
  ------------------
 1133|    471|    }
 1134|  1.40k|    return false;
 1135|  1.87k|}
meta-flow.c:ofp_to_u16:
  196|    198|{
  197|    198|    return (OVS_FORCE uint16_t) ofp_port;
  198|    198|}
meta-flow.c:u16_to_ofp:
  214|  1.39k|{
  215|  1.39k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|  1.39k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|  1.39k|}
meta-flow.c:is_ip_any:
 1059|  4.37k|{
 1060|  4.37k|    return dl_type_is_ip_any(get_dl_type(flow));
 1061|  4.37k|}
ofp-actions.c:u16_to_ofp:
  214|  24.8k|{
  215|  24.8k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|  24.8k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|  24.8k|}
ofp-actions.c:ofp_to_u16:
  196|  41.2k|{
  197|  41.2k|    return (OVS_FORCE uint16_t) ofp_port;
  198|  41.2k|}
ofp-actions.c:get_dl_type:
 1036|  29.5k|{
 1037|  29.5k|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (1037:9): [True: 17.9k, False: 11.6k]
  ------------------
 1038|  17.9k|        return flow->dl_type;
 1039|  17.9k|    } else if (pt_ns(flow->packet_type) == OFPHTN_ETHERTYPE) {
  ------------------
  |  Branch (1039:16): [True: 5.74k, False: 5.93k]
  ------------------
 1040|  5.74k|        return pt_ns_type_be(flow->packet_type);
 1041|  5.93k|    } else {
 1042|       |        return htons(FLOW_DL_TYPE_NONE);
 1043|  5.93k|    }
 1044|  29.5k|}
ofp-actions.c:is_ip_any:
 1059|  10.9k|{
 1060|  10.9k|    return dl_type_is_ip_any(get_dl_type(flow));
 1061|  10.9k|}
ofp-actions.c:is_ct_valid:
  954|      3|{
  955|       |    /* Matches are checked with 'mask' and without 'wc'. */
  956|      3|    if (mask && !wc) {
  ------------------
  |  Branch (956:9): [True: 3, False: 0]
  |  Branch (956:17): [True: 3, False: 0]
  ------------------
  957|       |        /* Must match at least one of the bits that implies a valid
  958|       |         * conntrack entry, or an explicit not-invalid. */
  959|      3|        return flow->ct_state & (CS_NEW | CS_ESTABLISHED | CS_RELATED
  ------------------
  |  Branch (959:16): [True: 0, False: 3]
  ------------------
  960|      3|                                 | CS_REPLY_DIR | CS_SRC_NAT | CS_DST_NAT)
  961|      3|            || (flow->ct_state & CS_TRACKED
  ------------------
  |  Branch (961:17): [True: 0, False: 3]
  ------------------
  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|      3|    }
  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|      3|}
ofp-flow.c:u16_to_ofp:
  214|  36.4k|{
  215|  36.4k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|  36.4k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|  36.4k|}
ofp-match.c:u16_to_ofp:
  214|  61.1k|{
  215|  61.1k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|  61.1k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|  61.1k|}
ofp-monitor.c:u16_to_ofp:
  214|  2.71k|{
  215|  2.71k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|  2.71k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|  2.71k|}
ofp-packet.c:u16_to_ofp:
  214|  59.0k|{
  215|  59.0k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|  59.0k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|  59.0k|}
ofp-packet.c:u32_to_odp:
  220|    177|{
  221|    177|    return ODP_PORT_C(port);
  ------------------
  |  |  158|    177|#define ODP_PORT_C(X) ((OVS_FORCE odp_port_t) (X))
  ------------------
  222|    177|}
ofp-packet.c:ofp_to_u16:
  196|  39.4k|{
  197|  39.4k|    return (OVS_FORCE uint16_t) ofp_port;
  198|  39.4k|}
ofp-port.c:ofp_to_u16:
  196|   504k|{
  197|   504k|    return (OVS_FORCE uint16_t) ofp_port;
  198|   504k|}
ofp-port.c:u16_to_ofp:
  214|   141k|{
  215|   141k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|   141k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|   141k|}
ofp-port.c:ofp11_to_u32:
  208|  38.4k|{
  209|  38.4k|    return (OVS_FORCE uint32_t) ofp11_port;
  210|  38.4k|}

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

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|  10.8k|{
   43|  10.8k|    const struct ofpact_learn_spec *spec;
   44|  10.8k|    struct match dst_match;
   45|       |
   46|  10.8k|    match_init_catchall(&dst_match);
   47|  22.3k|    OFPACT_LEARN_SPEC_FOR_EACH (spec, learn) {
  ------------------
  |  |  900|  10.8k|    for ((SPEC) = (LEARN)->specs;               \
  |  |  901|  32.4k|         (SPEC) < ofpact_learn_spec_end(LEARN); \
  |  |  ------------------
  |  |  |  Branch (901:10): [True: 22.3k, False: 10.0k]
  |  |  ------------------
  |  |  902|  21.5k|         (SPEC) = ofpact_learn_spec_next(SPEC))
  ------------------
   48|  22.3k|        enum ofperr error;
   49|       |
   50|       |        /* Check the source. */
   51|  22.3k|        if (spec->src_type == NX_LEARN_SRC_FIELD) {
  ------------------
  |  |  821|  22.3k|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
  |  Branch (51:13): [True: 3.04k, False: 19.3k]
  ------------------
   52|  3.04k|            error = mf_check_src(&spec->src, src_match);
   53|  3.04k|            if (error) {
  ------------------
  |  Branch (53:17): [True: 136, False: 2.91k]
  ------------------
   54|    136|                return error;
   55|    136|            }
   56|  3.04k|        }
   57|       |
   58|       |        /* Check the destination. */
   59|  22.2k|        switch (spec->dst_type) {
  ------------------
  |  Branch (59:17): [True: 22.2k, False: 0]
  ------------------
   60|  18.5k|        case NX_LEARN_DST_MATCH:
  ------------------
  |  |  825|  18.5k|#define NX_LEARN_DST_MATCH     (0 << 11) /* Add match criterion. */
  ------------------
  |  Branch (60:9): [True: 18.5k, False: 3.70k]
  ------------------
   61|  18.5k|            error = mf_check_src(&spec->dst, &dst_match);
   62|  18.5k|            if (error) {
  ------------------
  |  Branch (62:17): [True: 630, False: 17.8k]
  ------------------
   63|    630|                return error;
   64|    630|            }
   65|  17.8k|            if (spec->src_type & NX_LEARN_SRC_IMMEDIATE) {
  ------------------
  |  |  822|  17.8k|#define NX_LEARN_SRC_IMMEDIATE (1 << 13) /* Copy from immediate value. */
  ------------------
  |  Branch (65:17): [True: 17.8k, False: 73]
  ------------------
   66|  17.8k|                mf_write_subfield_value(&spec->dst,
   67|  17.8k|                                        ofpact_learn_spec_imm(spec),
   68|  17.8k|                                        &dst_match);
   69|  17.8k|            }
   70|  17.8k|            break;
   71|       |
   72|    868|        case NX_LEARN_DST_LOAD:
  ------------------
  |  |  826|    868|#define NX_LEARN_DST_LOAD      (1 << 11) /* Add NXAST_REG_LOAD action. */
  ------------------
  |  Branch (72:9): [True: 868, False: 21.3k]
  ------------------
   73|    868|            error = mf_check_dst(&spec->dst, &dst_match);
   74|    868|            if (error) {
  ------------------
  |  Branch (74:17): [True: 34, False: 834]
  ------------------
   75|     34|                return error;
   76|     34|            }
   77|    834|            break;
   78|       |
   79|  2.83k|        case NX_LEARN_DST_OUTPUT:
  ------------------
  |  |  827|  2.83k|#define NX_LEARN_DST_OUTPUT    (2 << 11) /* Add OFPAT_OUTPUT action. */
  ------------------
  |  Branch (79:9): [True: 2.83k, False: 19.3k]
  ------------------
   80|       |            /* Nothing to do. */
   81|  2.83k|            break;
   82|  22.2k|        }
   83|  22.2k|    }
   84|  10.0k|    return 0;
   85|  10.8k|}
learn_format:
  494|  10.4k|{
  495|  10.4k|    const struct ofpact_learn_spec *spec;
  496|  10.4k|    struct match match;
  497|       |
  498|  10.4k|    match_init_catchall(&match);
  499|       |
  500|  10.4k|    ds_put_format(s, "%slearn(%s%stable=%s",
  501|  10.4k|                  colors.learn, colors.end, colors.special, colors.end);
  502|  10.4k|    ofputil_format_table(learn->table_id, table_map, s);
  503|  10.4k|    if (learn->idle_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  10.4k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (503:9): [True: 9.90k, False: 533]
  ------------------
  504|  9.90k|        ds_put_format(s, ",%sidle_timeout=%s%"PRIu16,
  505|  9.90k|                      colors.param, colors.end, learn->idle_timeout);
  506|  9.90k|    }
  507|  10.4k|    if (learn->hard_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  10.4k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (507:9): [True: 9.78k, False: 647]
  ------------------
  508|  9.78k|        ds_put_format(s, ",%shard_timeout=%s%"PRIu16,
  509|  9.78k|                      colors.param, colors.end, learn->hard_timeout);
  510|  9.78k|    }
  511|  10.4k|    if (learn->fin_idle_timeout) {
  ------------------
  |  Branch (511:9): [True: 9.88k, False: 549]
  ------------------
  512|  9.88k|        ds_put_format(s, ",%sfin_idle_timeout=%s%"PRIu16,
  513|  9.88k|                      colors.param, colors.end, learn->fin_idle_timeout);
  514|  9.88k|    }
  515|  10.4k|    if (learn->fin_hard_timeout) {
  ------------------
  |  Branch (515:9): [True: 9.85k, False: 579]
  ------------------
  516|  9.85k|        ds_put_format(s, "%s,fin_hard_timeout=%s%"PRIu16,
  517|  9.85k|                      colors.param, colors.end, learn->fin_hard_timeout);
  518|  9.85k|    }
  519|  10.4k|    if (learn->priority != OFP_DEFAULT_PRIORITY) {
  ------------------
  |  |  138|  10.4k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
  |  Branch (519:9): [True: 9.32k, False: 1.11k]
  ------------------
  520|  9.32k|        ds_put_format(s, "%s,priority=%s%"PRIu16,
  521|  9.32k|                      colors.special, colors.end, learn->priority);
  522|  9.32k|    }
  523|  10.4k|    if (learn->flags & NX_LEARN_F_SEND_FLOW_REM) {
  ------------------
  |  Branch (523:9): [True: 3.95k, False: 6.48k]
  ------------------
  524|  3.95k|        ds_put_format(s, ",%ssend_flow_rem%s", colors.value, colors.end);
  525|  3.95k|    }
  526|  10.4k|    if (learn->flags & NX_LEARN_F_DELETE_LEARNED) {
  ------------------
  |  Branch (526:9): [True: 2.66k, False: 7.77k]
  ------------------
  527|  2.66k|        ds_put_format(s, ",%sdelete_learned%s", colors.value, colors.end);
  528|  2.66k|    }
  529|  10.4k|    if (learn->cookie != 0) {
  ------------------
  |  Branch (529:9): [True: 10.2k, False: 199]
  ------------------
  530|  10.2k|        ds_put_format(s, ",%scookie=%s%#"PRIx64,
  531|  10.2k|                      colors.param, colors.end, ntohll(learn->cookie));
  532|  10.2k|    }
  533|  10.4k|    if (learn->limit != 0) {
  ------------------
  |  Branch (533:9): [True: 157, False: 10.2k]
  ------------------
  534|    157|        ds_put_format(s, ",%slimit=%s%"PRIu32,
  535|    157|                      colors.param, colors.end, learn->limit);
  536|    157|    }
  537|  10.4k|    if (learn->flags & NX_LEARN_F_WRITE_RESULT) {
  ------------------
  |  Branch (537:9): [True: 142, False: 10.2k]
  ------------------
  538|    142|        ds_put_format(s, ",%sresult_dst=%s", colors.param, colors.end);
  539|    142|        mf_format_subfield(&learn->result_dst, s);
  540|    142|    }
  541|       |
  542|  20.9k|    OFPACT_LEARN_SPEC_FOR_EACH (spec, learn) {
  ------------------
  |  |  900|  10.4k|    for ((SPEC) = (LEARN)->specs;               \
  |  |  901|  31.4k|         (SPEC) < ofpact_learn_spec_end(LEARN); \
  |  |  ------------------
  |  |  |  Branch (901:10): [True: 20.9k, False: 10.4k]
  |  |  ------------------
  |  |  902|  20.9k|         (SPEC) = ofpact_learn_spec_next(SPEC))
  ------------------
  543|  20.9k|        unsigned int n_bytes = DIV_ROUND_UP(spec->n_bits, 8);
  ------------------
  |  |  300|  20.9k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  ------------------
  544|  20.9k|        ds_put_char(s, ',');
  545|       |
  546|  20.9k|        switch (spec->src_type | spec->dst_type) {
  ------------------
  |  Branch (546:17): [True: 20.9k, False: 0]
  ------------------
  547|  17.2k|        case NX_LEARN_SRC_IMMEDIATE | NX_LEARN_DST_MATCH: {
  ------------------
  |  |  822|  17.2k|#define NX_LEARN_SRC_IMMEDIATE (1 << 13) /* Copy from immediate value. */
  ------------------
                      case NX_LEARN_SRC_IMMEDIATE | NX_LEARN_DST_MATCH: {
  ------------------
  |  |  825|  17.2k|#define NX_LEARN_DST_MATCH     (0 << 11) /* Add match criterion. */
  ------------------
  |  Branch (547:9): [True: 17.2k, False: 3.70k]
  ------------------
  548|  17.2k|            if (spec->dst.ofs == 0
  ------------------
  |  Branch (548:17): [True: 6.24k, False: 11.0k]
  ------------------
  549|  6.24k|                && spec->dst.n_bits == spec->dst.field->n_bits) {
  ------------------
  |  Branch (549:20): [True: 1.47k, False: 4.76k]
  ------------------
  550|  1.47k|                union mf_value value;
  551|       |
  552|  1.47k|                memset(&value, 0, sizeof value);
  553|  1.47k|                memcpy(&value.b[spec->dst.field->n_bytes - n_bytes],
  554|  1.47k|                       ofpact_learn_spec_imm(spec), n_bytes);
  555|  1.47k|                ds_put_format(s, "%s%s=%s", colors.param,
  556|  1.47k|                              spec->dst.field->name, colors.end);
  557|  1.47k|                mf_format(spec->dst.field, &value, NULL, port_map, s);
  558|  15.7k|            } else {
  559|  15.7k|                ds_put_format(s, "%s", colors.param);
  560|  15.7k|                mf_format_subfield(&spec->dst, s);
  561|  15.7k|                ds_put_format(s, "=%s", colors.end);
  562|  15.7k|                ds_put_hex(s, ofpact_learn_spec_imm(spec), n_bytes);
  563|  15.7k|            }
  564|  17.2k|            break;
  565|      0|        }
  566|    149|        case NX_LEARN_SRC_FIELD | NX_LEARN_DST_MATCH:
  ------------------
  |  |  821|    149|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
                      case NX_LEARN_SRC_FIELD | NX_LEARN_DST_MATCH:
  ------------------
  |  |  825|    149|#define NX_LEARN_DST_MATCH     (0 << 11) /* Add match criterion. */
  ------------------
  |  Branch (566:9): [True: 149, False: 20.8k]
  ------------------
  567|    149|            ds_put_format(s, "%s", colors.param);
  568|    149|            mf_format_subfield(&spec->dst, s);
  569|    149|            ds_put_format(s, "%s", colors.end);
  570|    149|            if (spec->src.field != spec->dst.field ||
  ------------------
  |  Branch (570:17): [True: 74, False: 75]
  ------------------
  571|     96|                spec->src.ofs != spec->dst.ofs) {
  ------------------
  |  Branch (571:17): [True: 22, False: 53]
  ------------------
  572|     96|                ds_put_format(s, "%s=%s", colors.param, colors.end);
  573|     96|                mf_format_subfield(&spec->src, s);
  574|     96|            }
  575|    149|            break;
  576|       |
  577|    864|        case NX_LEARN_SRC_IMMEDIATE | NX_LEARN_DST_LOAD:
  ------------------
  |  |  822|    864|#define NX_LEARN_SRC_IMMEDIATE (1 << 13) /* Copy from immediate value. */
  ------------------
                      case NX_LEARN_SRC_IMMEDIATE | NX_LEARN_DST_LOAD:
  ------------------
  |  |  826|    864|#define NX_LEARN_DST_LOAD      (1 << 11) /* Add NXAST_REG_LOAD action. */
  ------------------
  |  Branch (577:9): [True: 864, False: 20.1k]
  ------------------
  578|    864|            ds_put_format(s, "%sload:%s", colors.special, colors.end);
  579|    864|            ds_put_hex(s, ofpact_learn_spec_imm(spec), n_bytes);
  580|    864|            ds_put_format(s, "%s->%s", colors.special, colors.end);
  581|    864|            mf_format_subfield(&spec->dst, s);
  582|    864|            break;
  583|       |
  584|     10|        case NX_LEARN_SRC_FIELD | NX_LEARN_DST_LOAD:
  ------------------
  |  |  821|     10|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
                      case NX_LEARN_SRC_FIELD | NX_LEARN_DST_LOAD:
  ------------------
  |  |  826|     10|#define NX_LEARN_DST_LOAD      (1 << 11) /* Add NXAST_REG_LOAD action. */
  ------------------
  |  Branch (584:9): [True: 10, False: 20.9k]
  ------------------
  585|     10|            ds_put_format(s, "%sload:%s", colors.special, colors.end);
  586|     10|            mf_format_subfield(&spec->src, s);
  587|     10|            ds_put_format(s, "%s->%s", colors.special, colors.end);
  588|     10|            mf_format_subfield(&spec->dst, s);
  589|     10|            break;
  590|       |
  591|  2.68k|        case NX_LEARN_SRC_FIELD | NX_LEARN_DST_OUTPUT:
  ------------------
  |  |  821|  2.68k|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
                      case NX_LEARN_SRC_FIELD | NX_LEARN_DST_OUTPUT:
  ------------------
  |  |  827|  2.68k|#define NX_LEARN_DST_OUTPUT    (2 << 11) /* Add OFPAT_OUTPUT action. */
  ------------------
  |  Branch (591:9): [True: 2.68k, False: 18.2k]
  ------------------
  592|  2.68k|            ds_put_format(s, "%soutput:%s", colors.special, colors.end);
  593|  2.68k|            mf_format_subfield(&spec->src, s);
  594|  2.68k|            break;
  595|  20.9k|        }
  596|  20.9k|    }
  597|  10.4k|    ds_put_format(s, "%s)%s", colors.learn, colors.end);
  598|  10.4k|}

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

mf_subvalue_format:
  195|  2.01k|{
  196|  2.01k|    ds_put_hex(s, sv, sizeof *sv);
  197|  2.01k|}
mf_is_all_wild:
  206|   146k|{
  207|   146k|    switch (mf->id) {
  208|  1.24k|    case MFF_DP_HASH:
  ------------------
  |  Branch (208:5): [True: 1.24k, False: 145k]
  ------------------
  209|  1.24k|        return !wc->masks.dp_hash;
  210|    734|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (210:5): [True: 734, False: 145k]
  ------------------
  211|    734|        return !wc->masks.recirc_id;
  212|  13.3k|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (212:5): [True: 13.3k, False: 133k]
  ------------------
  213|  13.3k|        return !wc->masks.packet_type;
  214|    246|    case MFF_CONJ_ID:
  ------------------
  |  Branch (214:5): [True: 246, False: 146k]
  ------------------
  215|    246|        return !wc->masks.conj_id;
  216|    444|    case MFF_TUN_SRC:
  ------------------
  |  Branch (216:5): [True: 444, False: 145k]
  ------------------
  217|    444|        return !wc->masks.tunnel.ip_src;
  218|    145|    case MFF_TUN_DST:
  ------------------
  |  Branch (218:5): [True: 145, False: 146k]
  ------------------
  219|    145|        return !wc->masks.tunnel.ip_dst;
  220|  1.19k|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (220:5): [True: 1.19k, False: 145k]
  ------------------
  221|  1.19k|        return ipv6_mask_is_any(&wc->masks.tunnel.ipv6_src);
  222|    802|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (222:5): [True: 802, False: 145k]
  ------------------
  223|    802|        return ipv6_mask_is_any(&wc->masks.tunnel.ipv6_dst);
  224|    298|    case MFF_TUN_ID:
  ------------------
  |  Branch (224:5): [True: 298, False: 146k]
  ------------------
  225|    298|        return !wc->masks.tunnel.tun_id;
  226|      0|    case MFF_TUN_TOS:
  ------------------
  |  Branch (226:5): [True: 0, False: 146k]
  ------------------
  227|      0|        return !wc->masks.tunnel.ip_tos;
  228|      0|    case MFF_TUN_TTL:
  ------------------
  |  Branch (228:5): [True: 0, False: 146k]
  ------------------
  229|      0|        return !wc->masks.tunnel.ip_ttl;
  230|    295|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (230:5): [True: 295, False: 146k]
  ------------------
  231|    295|        return !(wc->masks.tunnel.flags & FLOW_TNL_PUB_F_MASK);
  ------------------
  |  |   58|    295|#define FLOW_TNL_PUB_F_MASK ((1 << 1) - 1)
  ------------------
  232|    327|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (232:5): [True: 327, False: 146k]
  ------------------
  233|    327|        return !wc->masks.tunnel.gbp_id;
  234|    418|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (234:5): [True: 418, False: 146k]
  ------------------
  235|    418|        return !wc->masks.tunnel.gbp_flags;
  236|    470|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (236:5): [True: 470, False: 145k]
  ------------------
  237|    470|        return !wc->masks.tunnel.erspan_ver;
  238|    195|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (238:5): [True: 195, False: 146k]
  ------------------
  239|    195|        return !wc->masks.tunnel.erspan_idx;
  240|    196|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (240:5): [True: 196, False: 146k]
  ------------------
  241|    196|        return !wc->masks.tunnel.erspan_dir;
  242|    431|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (242:5): [True: 431, False: 146k]
  ------------------
  243|    431|        return !wc->masks.tunnel.erspan_hwid;
  244|  59.9k|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2110|  4.46k|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2110:5): [True: 860, False: 145k]
  |  |  |  Branch (2110:29): [True: 3.60k, False: 142k]
  |  |  ------------------
  |  | 2111|  5.79k|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2111:5): [True: 642, False: 145k]
  |  |  |  Branch (2111:29): [True: 690, False: 145k]
  |  |  ------------------
  |  | 2112|  7.70k|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2112:5): [True: 551, False: 145k]
  |  |  |  Branch (2112:29): [True: 1.35k, False: 145k]
  |  |  ------------------
  |  | 2113|  11.3k|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2113:5): [True: 3.33k, False: 143k]
  |  |  |  Branch (2113:29): [True: 279, False: 146k]
  |  |  ------------------
  |  | 2114|  13.1k|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2114:5): [True: 1.56k, False: 144k]
  |  |  |  Branch (2114:29): [True: 228, False: 146k]
  |  |  ------------------
  |  | 2115|  14.4k|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2115:5): [True: 1.16k, False: 145k]
  |  |  |  Branch (2115:30): [True: 181, False: 146k]
  |  |  ------------------
  |  | 2116|  18.0k|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2116:5): [True: 3.11k, False: 143k]
  |  |  |  Branch (2116:30): [True: 459, False: 145k]
  |  |  ------------------
  |  | 2117|  20.5k|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2117:5): [True: 1.52k, False: 144k]
  |  |  |  Branch (2117:30): [True: 976, False: 145k]
  |  |  ------------------
  |  | 2118|  22.6k|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2118:5): [True: 1.41k, False: 145k]
  |  |  |  Branch (2118:30): [True: 675, False: 145k]
  |  |  ------------------
  |  | 2119|  27.2k|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2119:5): [True: 3.91k, False: 142k]
  |  |  |  Branch (2119:30): [True: 714, False: 145k]
  |  |  ------------------
  |  | 2120|  29.6k|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2120:5): [True: 1.26k, False: 145k]
  |  |  |  Branch (2120:30): [True: 1.13k, False: 145k]
  |  |  ------------------
  |  | 2121|  31.7k|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2121:5): [True: 1.51k, False: 144k]
  |  |  |  Branch (2121:30): [True: 580, False: 145k]
  |  |  ------------------
  |  | 2122|  33.5k|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2122:5): [True: 768, False: 145k]
  |  |  |  Branch (2122:30): [True: 1.02k, False: 145k]
  |  |  ------------------
  |  | 2123|  34.7k|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2123:5): [True: 864, False: 145k]
  |  |  |  Branch (2123:30): [True: 338, False: 146k]
  |  |  ------------------
  |  | 2124|  35.7k|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2124:5): [True: 284, False: 146k]
  |  |  |  Branch (2124:30): [True: 716, False: 145k]
  |  |  ------------------
  |  | 2125|  37.7k|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2125:5): [True: 607, False: 145k]
  |  |  |  Branch (2125:30): [True: 1.37k, False: 145k]
  |  |  ------------------
  |  | 2126|  40.5k|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2126:5): [True: 1.27k, False: 145k]
  |  |  |  Branch (2126:30): [True: 1.58k, False: 144k]
  |  |  ------------------
  |  | 2127|  42.2k|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2127:5): [True: 976, False: 145k]
  |  |  |  Branch (2127:30): [True: 668, False: 145k]
  |  |  ------------------
  |  | 2128|  43.4k|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2128:5): [True: 149, False: 146k]
  |  |  |  Branch (2128:30): [True: 1.05k, False: 145k]
  |  |  ------------------
  |  | 2129|  44.6k|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2129:5): [True: 584, False: 145k]
  |  |  |  Branch (2129:30): [True: 673, False: 145k]
  |  |  ------------------
  |  | 2130|  46.0k|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2130:5): [True: 546, False: 145k]
  |  |  |  Branch (2130:30): [True: 830, False: 145k]
  |  |  ------------------
  |  | 2131|  46.9k|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2131:5): [True: 264, False: 146k]
  |  |  |  Branch (2131:30): [True: 675, False: 145k]
  |  |  ------------------
  |  | 2132|  47.7k|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2132:5): [True: 96, False: 146k]
  |  |  |  Branch (2132:30): [True: 626, False: 145k]
  |  |  ------------------
  |  | 2133|  49.4k|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2133:5): [True: 1.11k, False: 145k]
  |  |  |  Branch (2133:30): [True: 642, False: 145k]
  |  |  ------------------
  |  | 2134|  50.7k|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2134:5): [True: 427, False: 146k]
  |  |  |  Branch (2134:30): [True: 827, False: 145k]
  |  |  ------------------
  |  | 2135|  51.9k|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2135:5): [True: 839, False: 145k]
  |  |  |  Branch (2135:30): [True: 358, False: 146k]
  |  |  ------------------
  |  | 2136|  53.6k|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2136:5): [True: 317, False: 146k]
  |  |  |  Branch (2136:30): [True: 1.38k, False: 145k]
  |  |  ------------------
  |  | 2137|  55.4k|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2137:5): [True: 167, False: 146k]
  |  |  |  Branch (2137:30): [True: 1.69k, False: 144k]
  |  |  ------------------
  |  | 2138|  56.5k|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2138:5): [True: 251, False: 146k]
  |  |  |  Branch (2138:30): [True: 807, False: 145k]
  |  |  ------------------
  |  | 2139|  57.6k|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2139:5): [True: 573, False: 145k]
  |  |  |  Branch (2139:30): [True: 555, False: 145k]
  |  |  ------------------
  |  | 2140|  58.6k|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2140:5): [True: 542, False: 145k]
  |  |  |  Branch (2140:30): [True: 403, False: 146k]
  |  |  ------------------
  |  | 2141|  59.9k|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2141:5): [True: 510, False: 145k]
  |  |  ------------------
  ------------------
  245|  59.9k|        return !ULLONG_GET(wc->masks.tunnel.metadata.present.map,
  ------------------
  |  |  293|  59.9k|#define ULLONG_GET(MAP, OFFSET) !!((MAP) & (1ULL << (OFFSET)))
  ------------------
  246|  2.21M|                           mf->id - MFF_TUN_METADATA0);
  247|    538|    case MFF_METADATA:
  ------------------
  |  Branch (247:5): [True: 538, False: 145k]
  ------------------
  248|    538|        return !wc->masks.metadata;
  249|  1.41k|    case MFF_IN_PORT:
  ------------------
  |  Branch (249:5): [True: 1.41k, False: 145k]
  ------------------
  250|  1.96k|    case MFF_IN_PORT_OXM:
  ------------------
  |  Branch (250:5): [True: 546, False: 145k]
  ------------------
  251|  1.96k|        return !wc->masks.in_port.ofp_port;
  252|      0|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (252:5): [True: 0, False: 146k]
  ------------------
  253|      0|        return !wc->masks.skb_priority;
  254|    191|    case MFF_PKT_MARK:
  ------------------
  |  Branch (254:5): [True: 191, False: 146k]
  ------------------
  255|    191|        return !wc->masks.pkt_mark;
  256|    737|    case MFF_CT_STATE:
  ------------------
  |  Branch (256:5): [True: 737, False: 145k]
  ------------------
  257|    737|        return !wc->masks.ct_state;
  258|    275|    case MFF_CT_ZONE:
  ------------------
  |  Branch (258:5): [True: 275, False: 146k]
  ------------------
  259|    275|        return !wc->masks.ct_zone;
  260|    275|    case MFF_CT_MARK:
  ------------------
  |  Branch (260:5): [True: 275, False: 146k]
  ------------------
  261|    275|        return !wc->masks.ct_mark;
  262|    639|    case MFF_CT_LABEL:
  ------------------
  |  Branch (262:5): [True: 639, False: 145k]
  ------------------
  263|    639|        return ovs_u128_is_zero(wc->masks.ct_label);
  264|    181|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (264:5): [True: 181, False: 146k]
  ------------------
  265|    181|        return !wc->masks.ct_nw_proto;
  266|    235|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (266:5): [True: 235, False: 146k]
  ------------------
  267|    235|        return !wc->masks.ct_nw_src;
  268|    335|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (268:5): [True: 335, False: 146k]
  ------------------
  269|    335|        return !wc->masks.ct_nw_dst;
  270|    899|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (270:5): [True: 899, False: 145k]
  ------------------
  271|    899|        return !wc->masks.ct_tp_src;
  272|    140|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (272:5): [True: 140, False: 146k]
  ------------------
  273|    140|        return !wc->masks.ct_tp_dst;
  274|    447|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (274:5): [True: 447, False: 145k]
  ------------------
  275|    447|        return ipv6_mask_is_any(&wc->masks.ct_ipv6_src);
  276|  1.05k|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (276:5): [True: 1.05k, False: 145k]
  ------------------
  277|  1.05k|        return ipv6_mask_is_any(&wc->masks.ct_ipv6_dst);
  278|  9.88k|    CASE_MFF_REGS:
  ------------------
  |  | 2065|  1.83k|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:     \
  |  |  ------------------
  |  |  |  Branch (2065:5): [True: 482, False: 145k]
  |  |  |  Branch (2065:20): [True: 344, False: 146k]
  |  |  |  Branch (2065:35): [True: 535, False: 145k]
  |  |  |  Branch (2065:50): [True: 472, False: 145k]
  |  |  ------------------
  |  | 2066|  3.26k|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:     \
  |  |  ------------------
  |  |  |  Branch (2066:5): [True: 275, False: 146k]
  |  |  |  Branch (2066:20): [True: 360, False: 146k]
  |  |  |  Branch (2066:35): [True: 548, False: 145k]
  |  |  |  Branch (2066:50): [True: 253, False: 146k]
  |  |  ------------------
  |  | 2067|  5.64k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11:   \
  |  |  ------------------
  |  |  |  Branch (2067:5): [True: 537, False: 145k]
  |  |  |  Branch (2067:20): [True: 506, False: 145k]
  |  |  |  Branch (2067:35): [True: 878, False: 145k]
  |  |  |  Branch (2067:51): [True: 451, False: 145k]
  |  |  ------------------
  |  | 2068|  8.11k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15: \
  |  |  ------------------
  |  |  |  Branch (2068:5): [True: 437, False: 146k]
  |  |  |  Branch (2068:21): [True: 295, False: 146k]
  |  |  |  Branch (2068:37): [True: 1.00k, False: 145k]
  |  |  |  Branch (2068:53): [True: 739, False: 145k]
  |  |  ------------------
  |  | 2069|  8.52k|    case MFF_REG16: case MFF_REG17: case MFF_REG18: case MFF_REG19: \
  |  |  ------------------
  |  |  |  Branch (2069:5): [True: 104, False: 146k]
  |  |  |  Branch (2069:21): [True: 82, False: 146k]
  |  |  |  Branch (2069:37): [True: 28, False: 146k]
  |  |  |  Branch (2069:53): [True: 201, False: 146k]
  |  |  ------------------
  |  | 2070|  9.09k|    case MFF_REG20: case MFF_REG21: case MFF_REG22: case MFF_REG23: \
  |  |  ------------------
  |  |  |  Branch (2070:5): [True: 39, False: 146k]
  |  |  |  Branch (2070:21): [True: 256, False: 146k]
  |  |  |  Branch (2070:37): [True: 140, False: 146k]
  |  |  |  Branch (2070:53): [True: 135, False: 146k]
  |  |  ------------------
  |  | 2071|  9.58k|    case MFF_REG24: case MFF_REG25: case MFF_REG26: case MFF_REG27: \
  |  |  ------------------
  |  |  |  Branch (2071:5): [True: 90, False: 146k]
  |  |  |  Branch (2071:21): [True: 108, False: 146k]
  |  |  |  Branch (2071:37): [True: 55, False: 146k]
  |  |  |  Branch (2071:53): [True: 232, False: 146k]
  |  |  ------------------
  |  | 2072|  9.88k|    case MFF_REG28: case MFF_REG29: case MFF_REG30: case MFF_REG31
  |  |  ------------------
  |  |  |  Branch (2072:5): [True: 178, False: 146k]
  |  |  |  Branch (2072:21): [True: 61, False: 146k]
  |  |  |  Branch (2072:37): [True: 33, False: 146k]
  |  |  ------------------
  ------------------
  279|  9.88k|        return !wc->masks.regs[mf->id - MFF_REG0];
  280|  4.83k|    CASE_MFF_XREGS:
  ------------------
  |  | 2081|  1.95k|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3:    \
  |  |  ------------------
  |  |  |  Branch (2081:5): [True: 233, False: 146k]
  |  |  |  Branch (2081:21): [True: 74, False: 146k]
  |  |  |  Branch (2081:37): [True: 463, False: 145k]
  |  |  |  Branch (2081:53): [True: 1.18k, False: 145k]
  |  |  ------------------
  |  | 2082|  3.33k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7:    \
  |  |  ------------------
  |  |  |  Branch (2082:5): [True: 169, False: 146k]
  |  |  |  Branch (2082:21): [True: 628, False: 145k]
  |  |  |  Branch (2082:37): [True: 296, False: 146k]
  |  |  |  Branch (2082:53): [True: 283, False: 146k]
  |  |  ------------------
  |  | 2083|  4.14k|    case MFF_XREG8: case MFF_XREG9: case MFF_XREG10: case MFF_XREG11:  \
  |  |  ------------------
  |  |  |  Branch (2083:5): [True: 272, False: 146k]
  |  |  |  Branch (2083:21): [True: 210, False: 146k]
  |  |  |  Branch (2083:37): [True: 118, False: 146k]
  |  |  |  Branch (2083:54): [True: 210, False: 146k]
  |  |  ------------------
  |  | 2084|  4.83k|    case MFF_XREG12: case MFF_XREG13: case MFF_XREG14: case MFF_XREG15
  |  |  ------------------
  |  |  |  Branch (2084:5): [True: 300, False: 146k]
  |  |  |  Branch (2084:22): [True: 152, False: 146k]
  |  |  |  Branch (2084:39): [True: 125, False: 146k]
  |  |  ------------------
  ------------------
  281|  4.83k|        return !flow_get_xreg(&wc->masks, mf->id - MFF_XREG0);
  282|  6.82k|    CASE_MFF_XXREGS: {
  ------------------
  |  | 2093|  6.73k|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3: \
  |  |  ------------------
  |  |  |  Branch (2093:5): [True: 283, False: 146k]
  |  |  |  Branch (2093:22): [True: 135, False: 146k]
  |  |  |  Branch (2093:39): [True: 4.77k, False: 141k]
  |  |  |  Branch (2093:56): [True: 1.54k, False: 144k]
  |  |  ------------------
  |  | 2094|  6.82k|    case MFF_XXREG4: case MFF_XXREG5: case MFF_XXREG6: case MFF_XXREG7
  |  |  ------------------
  |  |  |  Branch (2094:5): [True: 18, False: 146k]
  |  |  |  Branch (2094:22): [True: 40, False: 146k]
  |  |  |  Branch (2094:39): [True: 8, False: 146k]
  |  |  ------------------
  ------------------
  283|  6.82k|        ovs_u128 value = flow_get_xxreg(&wc->masks, mf->id - MFF_XXREG0);
  284|  6.82k|        return ovs_u128_is_zero(value);
  285|  32.9k|    }
  286|    465|    case MFF_ACTSET_OUTPUT:
  ------------------
  |  Branch (286:5): [True: 465, False: 145k]
  ------------------
  287|    465|        return !wc->masks.actset_output;
  288|       |
  289|    323|    case MFF_ETH_SRC:
  ------------------
  |  Branch (289:5): [True: 323, False: 146k]
  ------------------
  290|    323|        return eth_addr_is_zero(wc->masks.dl_src);
  291|    153|    case MFF_ETH_DST:
  ------------------
  |  Branch (291:5): [True: 153, False: 146k]
  ------------------
  292|    153|        return eth_addr_is_zero(wc->masks.dl_dst);
  293|    231|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (293:5): [True: 231, False: 146k]
  ------------------
  294|    231|        return !wc->masks.dl_type;
  295|       |
  296|     95|    case MFF_ARP_SHA:
  ------------------
  |  Branch (296:5): [True: 95, False: 146k]
  ------------------
  297|    511|    case MFF_ND_SLL:
  ------------------
  |  Branch (297:5): [True: 416, False: 146k]
  ------------------
  298|    511|        return eth_addr_is_zero(wc->masks.arp_sha);
  299|       |
  300|    672|    case MFF_ARP_THA:
  ------------------
  |  Branch (300:5): [True: 672, False: 145k]
  ------------------
  301|  3.76k|    case MFF_ND_TLL:
  ------------------
  |  Branch (301:5): [True: 3.08k, False: 143k]
  ------------------
  302|  3.76k|        return eth_addr_is_zero(wc->masks.arp_tha);
  303|       |
  304|    948|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (304:5): [True: 948, False: 145k]
  ------------------
  305|    948|        return !wc->masks.vlans[0].tci;
  306|      0|    case MFF_DL_VLAN:
  ------------------
  |  Branch (306:5): [True: 0, False: 146k]
  ------------------
  307|      0|        return !(wc->masks.vlans[0].tci & htons(VLAN_VID_MASK));
  308|    825|    case MFF_VLAN_VID:
  ------------------
  |  Branch (308:5): [True: 825, False: 145k]
  ------------------
  309|    825|        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: 146k]
  ------------------
  311|    411|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (311:5): [True: 411, False: 146k]
  ------------------
  312|    411|        return !(wc->masks.vlans[0].tci & htons(VLAN_PCP_MASK));
  313|       |
  314|  1.25k|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (314:5): [True: 1.25k, False: 145k]
  ------------------
  315|  1.25k|        return !(wc->masks.mpls_lse[0] & htonl(MPLS_LABEL_MASK));
  316|    270|    case MFF_MPLS_TC:
  ------------------
  |  Branch (316:5): [True: 270, False: 146k]
  ------------------
  317|    270|        return !(wc->masks.mpls_lse[0] & htonl(MPLS_TC_MASK));
  318|    294|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (318:5): [True: 294, False: 146k]
  ------------------
  319|    294|        return !(wc->masks.mpls_lse[0] & htonl(MPLS_BOS_MASK));
  320|  2.08k|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (320:5): [True: 2.08k, False: 144k]
  ------------------
  321|  2.08k|        return !(wc->masks.mpls_lse[0] & htonl(MPLS_TTL_MASK));
  322|       |
  323|    281|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (323:5): [True: 281, False: 146k]
  ------------------
  324|    281|        return !wc->masks.nw_src;
  325|    869|    case MFF_IPV4_DST:
  ------------------
  |  Branch (325:5): [True: 869, False: 145k]
  ------------------
  326|    869|        return !wc->masks.nw_dst;
  327|       |
  328|    547|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (328:5): [True: 547, False: 145k]
  ------------------
  329|    547|        return ipv6_mask_is_any(&wc->masks.ipv6_src);
  330|    928|    case MFF_IPV6_DST:
  ------------------
  |  Branch (330:5): [True: 928, False: 145k]
  ------------------
  331|    928|        return ipv6_mask_is_any(&wc->masks.ipv6_dst);
  332|       |
  333|    317|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (333:5): [True: 317, False: 146k]
  ------------------
  334|    317|        return !wc->masks.ipv6_label;
  335|       |
  336|  1.73k|    case MFF_IP_PROTO:
  ------------------
  |  Branch (336:5): [True: 1.73k, False: 144k]
  ------------------
  337|  1.73k|        return !wc->masks.nw_proto;
  338|     58|    case MFF_IP_DSCP:
  ------------------
  |  Branch (338:5): [True: 58, False: 146k]
  ------------------
  339|  1.03k|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (339:5): [True: 973, False: 145k]
  ------------------
  340|  1.03k|        return !(wc->masks.nw_tos & IP_DSCP_MASK);
  ------------------
  |  |  724|  1.03k|#define IP_DSCP_MASK 0xfc
  ------------------
  341|    670|    case MFF_IP_ECN:
  ------------------
  |  Branch (341:5): [True: 670, False: 145k]
  ------------------
  342|    670|        return !(wc->masks.nw_tos & IP_ECN_MASK);
  ------------------
  |  |  722|    670|#define IP_ECN_MASK 0x03
  ------------------
  343|    552|    case MFF_IP_TTL:
  ------------------
  |  Branch (343:5): [True: 552, False: 145k]
  ------------------
  344|    552|        return !wc->masks.nw_ttl;
  345|       |
  346|  1.61k|    case MFF_ND_TARGET:
  ------------------
  |  Branch (346:5): [True: 1.61k, False: 144k]
  ------------------
  347|  1.61k|        return ipv6_mask_is_any(&wc->masks.nd_target);
  348|       |
  349|    794|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (349:5): [True: 794, False: 145k]
  ------------------
  350|    794|        return !wc->masks.igmp_group_ip4;
  351|    555|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (351:5): [True: 555, False: 145k]
  ------------------
  352|    555|        return !wc->masks.tcp_flags;
  353|       |
  354|    874|    case MFF_IP_FRAG:
  ------------------
  |  Branch (354:5): [True: 874, False: 145k]
  ------------------
  355|    874|        return !(wc->masks.nw_frag & FLOW_NW_FRAG_MASK);
  ------------------
  |  |   56|    874|#define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   54|    874|#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|    874|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  |  |  ------------------
  ------------------
  356|       |
  357|    667|    case MFF_ARP_OP:
  ------------------
  |  Branch (357:5): [True: 667, False: 145k]
  ------------------
  358|    667|        return !wc->masks.nw_proto;
  359|    475|    case MFF_ARP_SPA:
  ------------------
  |  Branch (359:5): [True: 475, False: 145k]
  ------------------
  360|    475|        return !wc->masks.nw_src;
  361|  1.15k|    case MFF_ARP_TPA:
  ------------------
  |  Branch (361:5): [True: 1.15k, False: 145k]
  ------------------
  362|  1.15k|        return !wc->masks.nw_dst;
  363|       |
  364|    821|    case MFF_TCP_SRC:
  ------------------
  |  Branch (364:5): [True: 821, False: 145k]
  ------------------
  365|  1.34k|    case MFF_UDP_SRC:
  ------------------
  |  Branch (365:5): [True: 521, False: 145k]
  ------------------
  366|  1.72k|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (366:5): [True: 382, False: 146k]
  ------------------
  367|  1.92k|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (367:5): [True: 198, False: 146k]
  ------------------
  368|  2.57k|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (368:5): [True: 653, False: 145k]
  ------------------
  369|  2.57k|        return !wc->masks.tp_src;
  370|    150|    case MFF_TCP_DST:
  ------------------
  |  Branch (370:5): [True: 150, False: 146k]
  ------------------
  371|  1.05k|    case MFF_UDP_DST:
  ------------------
  |  Branch (371:5): [True: 907, False: 145k]
  ------------------
  372|  1.51k|    case MFF_SCTP_DST:
  ------------------
  |  Branch (372:5): [True: 456, False: 145k]
  ------------------
  373|  1.95k|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (373:5): [True: 438, False: 146k]
  ------------------
  374|  2.07k|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (374:5): [True: 124, False: 146k]
  ------------------
  375|  2.07k|        return !wc->masks.tp_dst;
  376|    657|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (376:5): [True: 657, False: 145k]
  ------------------
  377|    657|        return !wc->masks.tcp_flags;
  378|       |
  379|    698|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (379:5): [True: 698, False: 145k]
  ------------------
  380|    698|        return !wc->masks.nsh.flags;
  381|    502|    case MFF_NSH_TTL:
  ------------------
  |  Branch (381:5): [True: 502, False: 145k]
  ------------------
  382|    502|        return !wc->masks.nsh.ttl;
  383|    259|    case MFF_NSH_MDTYPE:
  ------------------
  |  Branch (383:5): [True: 259, False: 146k]
  ------------------
  384|    259|        return !wc->masks.nsh.mdtype;
  385|    832|    case MFF_NSH_NP:
  ------------------
  |  Branch (385:5): [True: 832, False: 145k]
  ------------------
  386|    832|        return !wc->masks.nsh.np;
  387|    267|    case MFF_NSH_SPI:
  ------------------
  |  Branch (387:5): [True: 267, False: 146k]
  ------------------
  388|    267|        return !(wc->masks.nsh.path_hdr & htonl(NSH_SPI_MASK));
  389|    387|    case MFF_NSH_SI:
  ------------------
  |  Branch (389:5): [True: 387, False: 146k]
  ------------------
  390|    387|        return !(wc->masks.nsh.path_hdr & htonl(NSH_SI_MASK));
  391|    492|    case MFF_NSH_C1:
  ------------------
  |  Branch (391:5): [True: 492, False: 145k]
  ------------------
  392|  2.37k|    case MFF_NSH_C2:
  ------------------
  |  Branch (392:5): [True: 1.88k, False: 144k]
  ------------------
  393|  2.53k|    case MFF_NSH_C3:
  ------------------
  |  Branch (393:5): [True: 153, False: 146k]
  ------------------
  394|  2.69k|    case MFF_NSH_C4:
  ------------------
  |  Branch (394:5): [True: 159, False: 146k]
  ------------------
  395|  2.69k|        return !wc->masks.nsh.context[mf->id - MFF_NSH_C1];
  396|    398|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (396:5): [True: 398, False: 146k]
  ------------------
  397|    398|        return !wc->masks.tunnel.gtpu_flags;
  398|    298|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (398:5): [True: 298, False: 146k]
  ------------------
  399|    298|        return !wc->masks.tunnel.gtpu_msgtype;
  400|       |
  401|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (401:5): [True: 0, False: 146k]
  ------------------
  402|      0|    default:
  ------------------
  |  Branch (402:5): [True: 0, False: 146k]
  ------------------
  403|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  404|   146k|    }
  405|   146k|}
mf_get_mask:
  416|  17.8k|{
  417|  17.8k|    mf_get_value(mf, &wc->masks, mask);
  418|  17.8k|}
mf_is_mask_valid:
  424|   158k|{
  425|   158k|    switch (mf->maskable) {
  ------------------
  |  Branch (425:13): [True: 158k, False: 0]
  ------------------
  426|  34.2k|    case MFM_NONE:
  ------------------
  |  Branch (426:5): [True: 34.2k, False: 124k]
  ------------------
  427|  34.2k|        return (is_all_zeros(mask, mf->n_bytes) ||
  ------------------
  |  Branch (427:17): [True: 4.59k, False: 29.6k]
  ------------------
  428|  29.6k|                is_all_ones(mask, mf->n_bytes));
  ------------------
  |  Branch (428:17): [True: 28.9k, False: 693]
  ------------------
  429|       |
  430|   124k|    case MFM_FULLY:
  ------------------
  |  Branch (430:5): [True: 124k, False: 34.2k]
  ------------------
  431|   124k|        return true;
  432|   158k|    }
  433|       |
  434|      0|    OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  435|   158k|}
mf_are_prereqs_ok:
  496|  1.22k|{
  497|       |    return mf_are_prereqs_ok__(mf, flow, NULL, wc);
  498|  1.22k|}
mf_are_match_prereqs_ok:
  504|  38.8k|{
  505|       |    return mf_are_prereqs_ok__(mf, &match->flow, &match->wc, NULL);
  506|  38.8k|}
mf_is_value_valid:
  520|   162k|{
  521|   162k|    switch (mf->id) {
  522|  1.24k|    case MFF_DP_HASH:
  ------------------
  |  Branch (522:5): [True: 1.24k, False: 160k]
  ------------------
  523|  1.98k|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (523:5): [True: 734, False: 161k]
  ------------------
  524|  15.3k|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (524:5): [True: 13.3k, False: 148k]
  ------------------
  525|  15.5k|    case MFF_CONJ_ID:
  ------------------
  |  Branch (525:5): [True: 246, False: 161k]
  ------------------
  526|  15.8k|    case MFF_TUN_ID:
  ------------------
  |  Branch (526:5): [True: 298, False: 161k]
  ------------------
  527|  16.3k|    case MFF_TUN_SRC:
  ------------------
  |  Branch (527:5): [True: 444, False: 161k]
  ------------------
  528|  16.4k|    case MFF_TUN_DST:
  ------------------
  |  Branch (528:5): [True: 145, False: 161k]
  ------------------
  529|  17.6k|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (529:5): [True: 1.19k, False: 160k]
  ------------------
  530|  18.4k|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (530:5): [True: 802, False: 161k]
  ------------------
  531|  18.4k|    case MFF_TUN_TOS:
  ------------------
  |  Branch (531:5): [True: 0, False: 162k]
  ------------------
  532|  18.4k|    case MFF_TUN_TTL:
  ------------------
  |  Branch (532:5): [True: 0, False: 162k]
  ------------------
  533|  18.8k|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (533:5): [True: 327, False: 161k]
  ------------------
  534|  19.2k|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (534:5): [True: 418, False: 161k]
  ------------------
  535|  19.4k|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (535:5): [True: 195, False: 161k]
  ------------------
  536|  19.8k|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (536:5): [True: 470, False: 161k]
  ------------------
  537|  20.0k|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (537:5): [True: 196, False: 161k]
  ------------------
  538|  20.5k|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (538:5): [True: 431, False: 161k]
  ------------------
  539|  20.9k|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (539:5): [True: 398, False: 161k]
  ------------------
  540|  21.2k|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (540:5): [True: 298, False: 161k]
  ------------------
  541|  3.95M|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2110|  25.6k|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2110:5): [True: 860, False: 161k]
  |  |  |  Branch (2110:29): [True: 3.60k, False: 158k]
  |  |  ------------------
  |  | 2111|  27.0k|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2111:5): [True: 642, False: 161k]
  |  |  |  Branch (2111:29): [True: 690, False: 161k]
  |  |  ------------------
  |  | 2112|  30.0k|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2112:5): [True: 1.73k, False: 160k]
  |  |  |  Branch (2112:29): [True: 1.35k, False: 160k]
  |  |  ------------------
  |  | 2113|  33.7k|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2113:5): [True: 3.33k, False: 158k]
  |  |  |  Branch (2113:29): [True: 279, False: 161k]
  |  |  ------------------
  |  | 2114|  37.1k|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2114:5): [True: 3.19k, False: 158k]
  |  |  |  Branch (2114:29): [True: 228, False: 161k]
  |  |  ------------------
  |  | 2115|  38.6k|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2115:5): [True: 1.16k, False: 160k]
  |  |  |  Branch (2115:30): [True: 378, False: 161k]
  |  |  ------------------
  |  | 2116|  42.2k|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2116:5): [True: 3.11k, False: 158k]
  |  |  |  Branch (2116:30): [True: 459, False: 161k]
  |  |  ------------------
  |  | 2117|  44.7k|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2117:5): [True: 1.53k, False: 160k]
  |  |  |  Branch (2117:30): [True: 976, False: 161k]
  |  |  ------------------
  |  | 2118|  47.5k|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2118:5): [True: 1.41k, False: 160k]
  |  |  |  Branch (2118:30): [True: 1.39k, False: 160k]
  |  |  ------------------
  |  | 2119|  52.1k|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2119:5): [True: 3.91k, False: 158k]
  |  |  |  Branch (2119:30): [True: 714, False: 161k]
  |  |  ------------------
  |  | 2120|  54.5k|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2120:5): [True: 1.26k, False: 160k]
  |  |  |  Branch (2120:30): [True: 1.13k, False: 160k]
  |  |  ------------------
  |  | 2121|  56.6k|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2121:5): [True: 1.51k, False: 160k]
  |  |  |  Branch (2121:30): [True: 581, False: 161k]
  |  |  ------------------
  |  | 2122|  58.9k|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2122:5): [True: 1.23k, False: 160k]
  |  |  |  Branch (2122:30): [True: 1.02k, False: 161k]
  |  |  ------------------
  |  | 2123|  60.1k|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2123:5): [True: 864, False: 161k]
  |  |  |  Branch (2123:30): [True: 338, False: 161k]
  |  |  ------------------
  |  | 2124|  61.1k|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2124:5): [True: 284, False: 161k]
  |  |  |  Branch (2124:30): [True: 722, False: 161k]
  |  |  ------------------
  |  | 2125|  63.1k|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2125:5): [True: 607, False: 161k]
  |  |  |  Branch (2125:30): [True: 1.37k, False: 160k]
  |  |  ------------------
  |  | 2126|  68.0k|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2126:5): [True: 1.27k, False: 160k]
  |  |  |  Branch (2126:30): [True: 3.62k, False: 158k]
  |  |  ------------------
  |  | 2127|  69.6k|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2127:5): [True: 976, False: 161k]
  |  |  |  Branch (2127:30): [True: 668, False: 161k]
  |  |  ------------------
  |  | 2128|  70.8k|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2128:5): [True: 149, False: 161k]
  |  |  |  Branch (2128:30): [True: 1.05k, False: 160k]
  |  |  ------------------
  |  | 2129|  72.1k|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2129:5): [True: 584, False: 161k]
  |  |  |  Branch (2129:30): [True: 673, False: 161k]
  |  |  ------------------
  |  | 2130|  73.4k|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2130:5): [True: 546, False: 161k]
  |  |  |  Branch (2130:30): [True: 830, False: 161k]
  |  |  ------------------
  |  | 2131|  74.4k|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2131:5): [True: 264, False: 161k]
  |  |  |  Branch (2131:30): [True: 675, False: 161k]
  |  |  ------------------
  |  | 2132|  75.1k|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2132:5): [True: 96, False: 161k]
  |  |  |  Branch (2132:30): [True: 626, False: 161k]
  |  |  ------------------
  |  | 2133|  76.9k|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2133:5): [True: 1.11k, False: 160k]
  |  |  |  Branch (2133:30): [True: 642, False: 161k]
  |  |  ------------------
  |  | 2134|  78.1k|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2134:5): [True: 427, False: 161k]
  |  |  |  Branch (2134:30): [True: 827, False: 161k]
  |  |  ------------------
  |  | 2135|  79.3k|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2135:5): [True: 840, False: 161k]
  |  |  |  Branch (2135:30): [True: 358, False: 161k]
  |  |  ------------------
  |  | 2136|  81.0k|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2136:5): [True: 317, False: 161k]
  |  |  |  Branch (2136:30): [True: 1.38k, False: 160k]
  |  |  ------------------
  |  | 2137|  82.9k|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2137:5): [True: 167, False: 161k]
  |  |  |  Branch (2137:30): [True: 1.69k, False: 160k]
  |  |  ------------------
  |  | 2138|  88.5k|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2138:5): [True: 2.31k, False: 159k]
  |  |  |  Branch (2138:30): [True: 3.29k, False: 158k]
  |  |  ------------------
  |  | 2139|  89.6k|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2139:5): [True: 573, False: 161k]
  |  |  |  Branch (2139:30): [True: 555, False: 161k]
  |  |  ------------------
  |  | 2140|  90.6k|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2140:5): [True: 542, False: 161k]
  |  |  |  Branch (2140:30): [True: 404, False: 161k]
  |  |  ------------------
  |  | 2141|  91.9k|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2141:5): [True: 510, False: 161k]
  |  |  ------------------
  ------------------
  542|  3.95M|    case MFF_METADATA:
  ------------------
  |  Branch (542:5): [True: 538, False: 161k]
  ------------------
  543|  93.9k|    case MFF_IN_PORT:
  ------------------
  |  Branch (543:5): [True: 1.41k, False: 160k]
  ------------------
  544|  93.9k|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (544:5): [True: 0, False: 162k]
  ------------------
  545|  94.1k|    case MFF_PKT_MARK:
  ------------------
  |  Branch (545:5): [True: 191, False: 161k]
  ------------------
  546|  94.3k|    case MFF_CT_ZONE:
  ------------------
  |  Branch (546:5): [True: 275, False: 161k]
  ------------------
  547|  94.6k|    case MFF_CT_MARK:
  ------------------
  |  Branch (547:5): [True: 275, False: 161k]
  ------------------
  548|  95.2k|    case MFF_CT_LABEL:
  ------------------
  |  Branch (548:5): [True: 639, False: 161k]
  ------------------
  549|  95.4k|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (549:5): [True: 188, False: 161k]
  ------------------
  550|  95.7k|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (550:5): [True: 235, False: 161k]
  ------------------
  551|  96.0k|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (551:5): [True: 335, False: 161k]
  ------------------
  552|  96.5k|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (552:5): [True: 447, False: 161k]
  ------------------
  553|  97.5k|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (553:5): [True: 1.05k, False: 160k]
  ------------------
  554|  98.4k|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (554:5): [True: 902, False: 161k]
  ------------------
  555|  98.6k|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (555:5): [True: 140, False: 161k]
  ------------------
  556|  3.36M|    CASE_MFF_REGS:
  ------------------
  |  | 2065|   100k|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:     \
  |  |  ------------------
  |  |  |  Branch (2065:5): [True: 485, False: 161k]
  |  |  |  Branch (2065:20): [True: 344, False: 161k]
  |  |  |  Branch (2065:35): [True: 535, False: 161k]
  |  |  |  Branch (2065:50): [True: 472, False: 161k]
  |  |  ------------------
  |  | 2066|   101k|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:     \
  |  |  ------------------
  |  |  |  Branch (2066:5): [True: 275, False: 161k]
  |  |  |  Branch (2066:20): [True: 360, False: 161k]
  |  |  |  Branch (2066:35): [True: 548, False: 161k]
  |  |  |  Branch (2066:50): [True: 253, False: 161k]
  |  |  ------------------
  |  | 2067|   104k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11:   \
  |  |  ------------------
  |  |  |  Branch (2067:5): [True: 537, False: 161k]
  |  |  |  Branch (2067:20): [True: 506, False: 161k]
  |  |  |  Branch (2067:35): [True: 878, False: 161k]
  |  |  |  Branch (2067:51): [True: 451, False: 161k]
  |  |  ------------------
  |  | 2068|   106k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15: \
  |  |  ------------------
  |  |  |  Branch (2068:5): [True: 437, False: 161k]
  |  |  |  Branch (2068:21): [True: 295, False: 161k]
  |  |  |  Branch (2068:37): [True: 1.00k, False: 161k]
  |  |  |  Branch (2068:53): [True: 739, False: 161k]
  |  |  ------------------
  |  | 2069|   107k|    case MFF_REG16: case MFF_REG17: case MFF_REG18: case MFF_REG19: \
  |  |  ------------------
  |  |  |  Branch (2069:5): [True: 104, False: 161k]
  |  |  |  Branch (2069:21): [True: 82, False: 161k]
  |  |  |  Branch (2069:37): [True: 28, False: 162k]
  |  |  |  Branch (2069:53): [True: 201, False: 161k]
  |  |  ------------------
  |  | 2070|   107k|    case MFF_REG20: case MFF_REG21: case MFF_REG22: case MFF_REG23: \
  |  |  ------------------
  |  |  |  Branch (2070:5): [True: 39, False: 161k]
  |  |  |  Branch (2070:21): [True: 256, False: 161k]
  |  |  |  Branch (2070:37): [True: 140, False: 161k]
  |  |  |  Branch (2070:53): [True: 135, False: 161k]
  |  |  ------------------
  |  | 2071|   108k|    case MFF_REG24: case MFF_REG25: case MFF_REG26: case MFF_REG27: \
  |  |  ------------------
  |  |  |  Branch (2071:5): [True: 90, False: 161k]
  |  |  |  Branch (2071:21): [True: 108, False: 161k]
  |  |  |  Branch (2071:37): [True: 55, False: 161k]
  |  |  |  Branch (2071:53): [True: 232, False: 161k]
  |  |  ------------------
  |  | 2072|   108k|    case MFF_REG28: case MFF_REG29: case MFF_REG30: case MFF_REG31
  |  |  ------------------
  |  |  |  Branch (2072:5): [True: 178, False: 161k]
  |  |  |  Branch (2072:21): [True: 61, False: 161k]
  |  |  |  Branch (2072:37): [True: 33, False: 162k]
  |  |  ------------------
  ------------------
  557|  3.36M|    CASE_MFF_XREGS:
  ------------------
  |  | 2081|   110k|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3:    \
  |  |  ------------------
  |  |  |  Branch (2081:5): [True: 233, False: 161k]
  |  |  |  Branch (2081:21): [True: 74, False: 161k]
  |  |  |  Branch (2081:37): [True: 463, False: 161k]
  |  |  |  Branch (2081:53): [True: 1.18k, False: 160k]
  |  |  ------------------
  |  | 2082|   111k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7:    \
  |  |  ------------------
  |  |  |  Branch (2082:5): [True: 169, False: 161k]
  |  |  |  Branch (2082:21): [True: 628, False: 161k]
  |  |  |  Branch (2082:37): [True: 296, False: 161k]
  |  |  |  Branch (2082:53): [True: 283, False: 161k]
  |  |  ------------------
  |  | 2083|   112k|    case MFF_XREG8: case MFF_XREG9: case MFF_XREG10: case MFF_XREG11:  \
  |  |  ------------------
  |  |  |  Branch (2083:5): [True: 272, False: 161k]
  |  |  |  Branch (2083:21): [True: 210, False: 161k]
  |  |  |  Branch (2083:37): [True: 118, False: 161k]
  |  |  |  Branch (2083:54): [True: 210, False: 161k]
  |  |  ------------------
  |  | 2084|   113k|    case MFF_XREG12: case MFF_XREG13: case MFF_XREG14: case MFF_XREG15
  |  |  ------------------
  |  |  |  Branch (2084:5): [True: 300, False: 161k]
  |  |  |  Branch (2084:22): [True: 152, False: 161k]
  |  |  |  Branch (2084:39): [True: 125, False: 161k]
  |  |  ------------------
  ------------------
  558|  1.78M|    CASE_MFF_XXREGS:
  ------------------
  |  | 2093|   120k|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3: \
  |  |  ------------------
  |  |  |  Branch (2093:5): [True: 283, False: 161k]
  |  |  |  Branch (2093:22): [True: 135, False: 161k]
  |  |  |  Branch (2093:39): [True: 4.77k, False: 157k]
  |  |  |  Branch (2093:56): [True: 1.54k, False: 160k]
  |  |  ------------------
  |  | 2094|   120k|    case MFF_XXREG4: case MFF_XXREG5: case MFF_XXREG6: case MFF_XXREG7
  |  |  ------------------
  |  |  |  Branch (2094:5): [True: 18, False: 162k]
  |  |  |  Branch (2094:22): [True: 40, False: 161k]
  |  |  |  Branch (2094:39): [True: 8, False: 162k]
  |  |  ------------------
  ------------------
  559|   946k|    case MFF_ETH_SRC:
  ------------------
  |  Branch (559:5): [True: 373, False: 161k]
  ------------------
  560|   120k|    case MFF_ETH_DST:
  ------------------
  |  Branch (560:5): [True: 154, False: 161k]
  ------------------
  561|   120k|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (561:5): [True: 231, False: 161k]
  ------------------
  562|   121k|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (562:5): [True: 950, False: 161k]
  ------------------
  563|   123k|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (563:5): [True: 2.08k, False: 159k]
  ------------------
  564|   124k|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (564:5): [True: 281, False: 161k]
  ------------------
  565|   125k|    case MFF_IPV4_DST:
  ------------------
  |  Branch (565:5): [True: 879, False: 161k]
  ------------------
  566|   125k|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (566:5): [True: 547, False: 161k]
  ------------------
  567|   126k|    case MFF_IPV6_DST:
  ------------------
  |  Branch (567:5): [True: 928, False: 161k]
  ------------------
  568|   129k|    case MFF_IP_PROTO:
  ------------------
  |  Branch (568:5): [True: 2.55k, False: 159k]
  ------------------
  569|   129k|    case MFF_IP_TTL:
  ------------------
  |  Branch (569:5): [True: 552, False: 161k]
  ------------------
  570|   130k|    case MFF_ARP_SPA:
  ------------------
  |  Branch (570:5): [True: 481, False: 161k]
  ------------------
  571|   131k|    case MFF_ARP_TPA:
  ------------------
  |  Branch (571:5): [True: 1.15k, False: 160k]
  ------------------
  572|   131k|    case MFF_ARP_SHA:
  ------------------
  |  Branch (572:5): [True: 97, False: 161k]
  ------------------
  573|   132k|    case MFF_ARP_THA:
  ------------------
  |  Branch (573:5): [True: 672, False: 161k]
  ------------------
  574|   133k|    case MFF_TCP_SRC:
  ------------------
  |  Branch (574:5): [True: 929, False: 161k]
  ------------------
  575|   133k|    case MFF_TCP_DST:
  ------------------
  |  Branch (575:5): [True: 150, False: 161k]
  ------------------
  576|   133k|    case MFF_UDP_SRC:
  ------------------
  |  Branch (576:5): [True: 584, False: 161k]
  ------------------
  577|   134k|    case MFF_UDP_DST:
  ------------------
  |  Branch (577:5): [True: 1.05k, False: 160k]
  ------------------
  578|   135k|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (578:5): [True: 383, False: 161k]
  ------------------
  579|   135k|    case MFF_SCTP_DST:
  ------------------
  |  Branch (579:5): [True: 560, False: 161k]
  ------------------
  580|   135k|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (580:5): [True: 200, False: 161k]
  ------------------
  581|   136k|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (581:5): [True: 1.04k, False: 160k]
  ------------------
  582|   137k|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (582:5): [True: 753, False: 161k]
  ------------------
  583|   137k|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (583:5): [True: 138, False: 161k]
  ------------------
  584|   139k|    case MFF_ND_TARGET:
  ------------------
  |  Branch (584:5): [True: 1.68k, False: 160k]
  ------------------
  585|   140k|    case MFF_ND_SLL:
  ------------------
  |  Branch (585:5): [True: 1.24k, False: 160k]
  ------------------
  586|   144k|    case MFF_ND_TLL:
  ------------------
  |  Branch (586:5): [True: 3.71k, False: 158k]
  ------------------
  587|   145k|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (587:5): [True: 794, False: 161k]
  ------------------
  588|   145k|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (588:5): [True: 589, False: 161k]
  ------------------
  589|   145k|        return true;
  590|       |
  591|    566|    case MFF_IN_PORT_OXM:
  ------------------
  |  Branch (591:5): [True: 566, False: 161k]
  ------------------
  592|  1.03k|    case MFF_ACTSET_OUTPUT: {
  ------------------
  |  Branch (592:5): [True: 466, False: 161k]
  ------------------
  593|  1.03k|        ofp_port_t port;
  594|  1.03k|        return !ofputil_port_from_ofp11(value->be32, &port);
  595|    566|    }
  596|       |
  597|     69|    case MFF_IP_DSCP:
  ------------------
  |  Branch (597:5): [True: 69, False: 161k]
  ------------------
  598|     69|        return !(value->u8 & ~IP_DSCP_MASK);
  ------------------
  |  |  724|     69|#define IP_DSCP_MASK 0xfc
  ------------------
  599|  1.01k|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (599:5): [True: 1.01k, False: 161k]
  ------------------
  600|  1.01k|        return !(value->u8 & (~IP_DSCP_MASK >> 2));
  ------------------
  |  |  724|  1.01k|#define IP_DSCP_MASK 0xfc
  ------------------
  601|    670|    case MFF_IP_ECN:
  ------------------
  |  Branch (601:5): [True: 670, False: 161k]
  ------------------
  602|    670|        return !(value->u8 & ~IP_ECN_MASK);
  ------------------
  |  |  722|    670|#define IP_ECN_MASK 0x03
  ------------------
  603|    874|    case MFF_IP_FRAG:
  ------------------
  |  Branch (603:5): [True: 874, False: 161k]
  ------------------
  604|    874|        return !(value->u8 & ~FLOW_NW_FRAG_MASK);
  ------------------
  |  |   56|    874|#define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   54|    874|#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|    874|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  |  |  ------------------
  ------------------
  605|    658|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (605:5): [True: 658, False: 161k]
  ------------------
  606|    658|        return !(value->be16 & ~htons(0x0fff));
  607|       |
  608|    680|    case MFF_ARP_OP:
  ------------------
  |  Branch (608:5): [True: 680, False: 161k]
  ------------------
  609|    680|        return !(value->be16 & htons(0xff00));
  610|       |
  611|      0|    case MFF_DL_VLAN:
  ------------------
  |  Branch (611:5): [True: 0, False: 162k]
  ------------------
  612|      0|        return !(value->be16 & htons(VLAN_CFI | VLAN_PCP_MASK));
  613|  1.44k|    case MFF_VLAN_VID:
  ------------------
  |  Branch (613:5): [True: 1.44k, False: 160k]
  ------------------
  614|  1.44k|        return !(value->be16 & htons(VLAN_PCP_MASK));
  615|       |
  616|      0|    case MFF_DL_VLAN_PCP:
  ------------------
  |  Branch (616:5): [True: 0, False: 162k]
  ------------------
  617|    436|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (617:5): [True: 436, False: 161k]
  ------------------
  618|    436|        return !(value->u8 & ~(VLAN_PCP_MASK >> VLAN_PCP_SHIFT));
  ------------------
  |  |  497|    436|#define VLAN_PCP_MASK 0xe000
  ------------------
                      return !(value->u8 & ~(VLAN_PCP_MASK >> VLAN_PCP_SHIFT));
  ------------------
  |  |  498|    436|#define VLAN_PCP_SHIFT 13
  ------------------
  619|       |
  620|    332|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (620:5): [True: 332, False: 161k]
  ------------------
  621|    332|        return !(value->be32 & ~htonl(IPV6_LABEL_MASK));
  622|       |
  623|  1.26k|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (623:5): [True: 1.26k, False: 160k]
  ------------------
  624|  1.26k|        return !(value->be32 & ~htonl(MPLS_LABEL_MASK >> MPLS_LABEL_SHIFT));
  625|       |
  626|    329|    case MFF_MPLS_TC:
  ------------------
  |  Branch (626:5): [True: 329, False: 161k]
  ------------------
  627|    329|        return !(value->u8 & ~(MPLS_TC_MASK >> MPLS_TC_SHIFT));
  ------------------
  |  |  551|    329|#define MPLS_TC_MASK        0x00000e00
  ------------------
                      return !(value->u8 & ~(MPLS_TC_MASK >> MPLS_TC_SHIFT));
  ------------------
  |  |  552|    329|#define MPLS_TC_SHIFT       9
  ------------------
  628|       |
  629|    299|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (629:5): [True: 299, False: 161k]
  ------------------
  630|    299|        return !(value->u8 & ~(MPLS_BOS_MASK >> MPLS_BOS_SHIFT));
  ------------------
  |  |  548|    299|#define MPLS_BOS_MASK       0x00000100
  ------------------
                      return !(value->u8 & ~(MPLS_BOS_MASK >> MPLS_BOS_SHIFT));
  ------------------
  |  |  549|    299|#define MPLS_BOS_SHIFT      8
  ------------------
  631|       |
  632|    305|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (632:5): [True: 305, False: 161k]
  ------------------
  633|    305|        return !(value->be16 & ~htons(FLOW_TNL_PUB_F_MASK));
  634|       |
  635|    751|    case MFF_CT_STATE:
  ------------------
  |  Branch (635:5): [True: 751, False: 161k]
  ------------------
  636|    751|        return !(value->be32 & ~htonl(CS_SUPPORTED_MASK));
  637|       |
  638|    793|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (638:5): [True: 793, False: 161k]
  ------------------
  639|    793|        return true;
  640|    621|    case MFF_NSH_TTL:
  ------------------
  |  Branch (640:5): [True: 621, False: 161k]
  ------------------
  641|    621|        return (value->u8 <= 63);
  642|    342|    case MFF_NSH_MDTYPE:
  ------------------
  |  Branch (642:5): [True: 342, False: 161k]
  ------------------
  643|    342|        return (value->u8 == 1 || value->u8 == 2);
  ------------------
  |  Branch (643:17): [True: 196, False: 146]
  |  Branch (643:35): [True: 63, False: 83]
  ------------------
  644|    832|    case MFF_NSH_NP:
  ------------------
  |  Branch (644:5): [True: 832, False: 161k]
  ------------------
  645|    832|        return true;
  646|    306|    case MFF_NSH_SPI:
  ------------------
  |  Branch (646:5): [True: 306, False: 161k]
  ------------------
  647|    306|        return !(value->be32 & htonl(0xFF000000));
  648|    387|    case MFF_NSH_SI:
  ------------------
  |  Branch (648:5): [True: 387, False: 161k]
  ------------------
  649|    879|    case MFF_NSH_C1:
  ------------------
  |  Branch (649:5): [True: 492, False: 161k]
  ------------------
  650|  2.76k|    case MFF_NSH_C2:
  ------------------
  |  Branch (650:5): [True: 1.88k, False: 160k]
  ------------------
  651|  2.91k|    case MFF_NSH_C3:
  ------------------
  |  Branch (651:5): [True: 153, False: 161k]
  ------------------
  652|  3.07k|    case MFF_NSH_C4:
  ------------------
  |  Branch (652:5): [True: 159, False: 161k]
  ------------------
  653|  3.07k|        return true;
  654|       |
  655|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (655:5): [True: 0, False: 162k]
  ------------------
  656|      0|    default:
  ------------------
  |  Branch (656:5): [True: 0, False: 162k]
  ------------------
  657|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  658|   162k|    }
  659|   162k|}
mf_get_value:
  666|  35.6k|{
  667|  35.6k|    switch (mf->id) {
  668|     74|    case MFF_DP_HASH:
  ------------------
  |  Branch (668:5): [True: 74, False: 35.5k]
  ------------------
  669|     74|        value->be32 = htonl(flow->dp_hash);
  670|     74|        break;
  671|    268|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (671:5): [True: 268, False: 35.3k]
  ------------------
  672|    268|        value->be32 = htonl(flow->recirc_id);
  673|    268|        break;
  674|    936|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (674:5): [True: 936, False: 34.7k]
  ------------------
  675|    936|        value->be32 = flow->packet_type;
  676|    936|        break;
  677|    248|    case MFF_CONJ_ID:
  ------------------
  |  Branch (677:5): [True: 248, False: 35.3k]
  ------------------
  678|    248|        value->be32 = htonl(flow->conj_id);
  679|    248|        break;
  680|    562|    case MFF_TUN_ID:
  ------------------
  |  Branch (680:5): [True: 562, False: 35.0k]
  ------------------
  681|    562|        value->be64 = flow->tunnel.tun_id;
  682|    562|        break;
  683|     14|    case MFF_TUN_SRC:
  ------------------
  |  Branch (683:5): [True: 14, False: 35.6k]
  ------------------
  684|     14|        value->be32 = flow->tunnel.ip_src;
  685|     14|        break;
  686|     26|    case MFF_TUN_DST:
  ------------------
  |  Branch (686:5): [True: 26, False: 35.6k]
  ------------------
  687|     26|        value->be32 = flow->tunnel.ip_dst;
  688|     26|        break;
  689|      6|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (689:5): [True: 6, False: 35.6k]
  ------------------
  690|      6|        value->ipv6 = flow->tunnel.ipv6_src;
  691|      6|        break;
  692|    258|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (692:5): [True: 258, False: 35.3k]
  ------------------
  693|    258|        value->ipv6 = flow->tunnel.ipv6_dst;
  694|    258|        break;
  695|    134|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (695:5): [True: 134, False: 35.5k]
  ------------------
  696|    134|        value->be16 = htons(flow->tunnel.flags & FLOW_TNL_PUB_F_MASK);
  697|    134|        break;
  698|     14|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (698:5): [True: 14, False: 35.6k]
  ------------------
  699|     14|        value->be16 = flow->tunnel.gbp_id;
  700|     14|        break;
  701|  1.48k|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (701:5): [True: 1.48k, False: 34.1k]
  ------------------
  702|  1.48k|        value->u8 = flow->tunnel.gbp_flags;
  703|  1.48k|        break;
  704|      0|    case MFF_TUN_TTL:
  ------------------
  |  Branch (704:5): [True: 0, False: 35.6k]
  ------------------
  705|      0|        value->u8 = flow->tunnel.ip_ttl;
  706|      0|        break;
  707|      0|    case MFF_TUN_TOS:
  ------------------
  |  Branch (707:5): [True: 0, False: 35.6k]
  ------------------
  708|      0|        value->u8 = flow->tunnel.ip_tos;
  709|      0|        break;
  710|      0|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (710:5): [True: 0, False: 35.6k]
  ------------------
  711|      0|        value->u8 = flow->tunnel.erspan_ver;
  712|      0|        break;
  713|      0|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (713:5): [True: 0, False: 35.6k]
  ------------------
  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: 35.6k]
  ------------------
  717|      0|        value->u8 = flow->tunnel.erspan_dir;
  718|      0|        break;
  719|      0|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (719:5): [True: 0, False: 35.6k]
  ------------------
  720|      0|        value->u8 = flow->tunnel.erspan_hwid;
  721|      0|        break;
  722|      0|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (722:5): [True: 0, False: 35.6k]
  ------------------
  723|      0|        value->u8 = flow->tunnel.gtpu_flags;
  724|      0|        break;
  725|      0|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (725:5): [True: 0, False: 35.6k]
  ------------------
  726|      0|        value->u8 = flow->tunnel.gtpu_msgtype;
  727|      0|        break;
  728|  17.7k|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2110|    432|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2110:5): [True: 14, False: 35.6k]
  |  |  |  Branch (2110:29): [True: 418, False: 35.2k]
  |  |  ------------------
  |  | 2111|  1.83k|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2111:5): [True: 100, False: 35.5k]
  |  |  |  Branch (2111:29): [True: 1.30k, False: 34.3k]
  |  |  ------------------
  |  | 2112|  2.07k|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2112:5): [True: 14, False: 35.6k]
  |  |  |  Branch (2112:29): [True: 228, False: 35.4k]
  |  |  ------------------
  |  | 2113|  2.71k|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2113:5): [True: 610, False: 35.0k]
  |  |  |  Branch (2113:29): [True: 28, False: 35.6k]
  |  |  ------------------
  |  | 2114|  2.78k|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2114:5): [True: 18, False: 35.6k]
  |  |  |  Branch (2114:29): [True: 58, False: 35.5k]
  |  |  ------------------
  |  | 2115|  3.09k|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2115:5): [True: 24, False: 35.6k]
  |  |  |  Branch (2115:30): [True: 286, False: 35.3k]
  |  |  ------------------
  |  | 2116|  3.29k|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2116:5): [True: 118, False: 35.5k]
  |  |  |  Branch (2116:30): [True: 76, False: 35.5k]
  |  |  ------------------
  |  | 2117|  3.45k|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2117:5): [True: 132, False: 35.5k]
  |  |  |  Branch (2117:30): [True: 30, False: 35.6k]
  |  |  ------------------
  |  | 2118|  4.06k|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2118:5): [True: 30, False: 35.6k]
  |  |  |  Branch (2118:30): [True: 580, False: 35.0k]
  |  |  ------------------
  |  | 2119|  4.44k|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2119:5): [True: 108, False: 35.5k]
  |  |  |  Branch (2119:30): [True: 270, False: 35.3k]
  |  |  ------------------
  |  | 2120|  4.77k|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2120:5): [True: 70, False: 35.5k]
  |  |  |  Branch (2120:30): [True: 262, False: 35.3k]
  |  |  ------------------
  |  | 2121|  6.05k|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2121:5): [True: 1.20k, False: 34.4k]
  |  |  |  Branch (2121:30): [True: 68, False: 35.5k]
  |  |  ------------------
  |  | 2122|  7.62k|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2122:5): [True: 286, False: 35.3k]
  |  |  |  Branch (2122:30): [True: 1.28k, False: 34.3k]
  |  |  ------------------
  |  | 2123|  8.42k|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2123:5): [True: 6, False: 35.6k]
  |  |  |  Branch (2123:30): [True: 796, False: 34.8k]
  |  |  ------------------
  |  | 2124|  9.23k|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2124:5): [True: 30, False: 35.6k]
  |  |  |  Branch (2124:30): [True: 782, False: 34.8k]
  |  |  ------------------
  |  | 2125|  9.81k|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2125:5): [True: 514, False: 35.1k]
  |  |  |  Branch (2125:30): [True: 66, False: 35.5k]
  |  |  ------------------
  |  | 2126|  9.87k|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2126:5): [True: 42, False: 35.6k]
  |  |  |  Branch (2126:30): [True: 14, False: 35.6k]
  |  |  ------------------
  |  | 2127|  9.93k|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2127:5): [True: 46, False: 35.5k]
  |  |  |  Branch (2127:30): [True: 20, False: 35.6k]
  |  |  ------------------
  |  | 2128|  10.0k|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2128:5): [True: 96, False: 35.5k]
  |  |  |  Branch (2128:30): [True: 12, False: 35.6k]
  |  |  ------------------
  |  | 2129|  10.0k|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2129:5): [True: 30, False: 35.6k]
  |  |  |  Branch (2129:30): [True: 16, False: 35.6k]
  |  |  ------------------
  |  | 2130|  10.3k|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2130:5): [True: 228, False: 35.4k]
  |  |  |  Branch (2130:30): [True: 14, False: 35.6k]
  |  |  ------------------
  |  | 2131|  11.3k|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2131:5): [True: 1.04k, False: 34.6k]
  |  |  |  Branch (2131:30): [True: 20, False: 35.6k]
  |  |  ------------------
  |  | 2132|  12.3k|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2132:5): [True: 738, False: 34.9k]
  |  |  |  Branch (2132:30): [True: 182, False: 35.4k]
  |  |  ------------------
  |  | 2133|  12.7k|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2133:5): [True: 148, False: 35.4k]
  |  |  |  Branch (2133:30): [True: 272, False: 35.3k]
  |  |  ------------------
  |  | 2134|  12.7k|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2134:5): [True: 14, False: 35.6k]
  |  |  |  Branch (2134:30): [True: 38, False: 35.6k]
  |  |  ------------------
  |  | 2135|  14.1k|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2135:5): [True: 952, False: 34.6k]
  |  |  |  Branch (2135:30): [True: 416, False: 35.2k]
  |  |  ------------------
  |  | 2136|  16.2k|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2136:5): [True: 916, False: 34.7k]
  |  |  |  Branch (2136:30): [True: 1.20k, False: 34.4k]
  |  |  ------------------
  |  | 2137|  16.3k|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2137:5): [True: 8, False: 35.6k]
  |  |  |  Branch (2137:30): [True: 14, False: 35.6k]
  |  |  ------------------
  |  | 2138|  17.1k|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2138:5): [True: 578, False: 35.0k]
  |  |  |  Branch (2138:30): [True: 254, False: 35.3k]
  |  |  ------------------
  |  | 2139|  17.1k|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2139:5): [True: 8, False: 35.6k]
  |  |  |  Branch (2139:30): [True: 10, False: 35.6k]
  |  |  ------------------
  |  | 2140|  17.5k|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2140:5): [True: 282, False: 35.3k]
  |  |  |  Branch (2140:30): [True: 160, False: 35.4k]
  |  |  ------------------
  |  | 2141|  17.7k|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2141:5): [True: 62, False: 35.5k]
  |  |  ------------------
  ------------------
  729|  17.7k|        tun_metadata_read(&flow->tunnel, mf, value);
  730|  17.7k|        break;
  731|       |
  732|     14|    case MFF_METADATA:
  ------------------
  |  Branch (732:5): [True: 14, False: 35.6k]
  ------------------
  733|     14|        value->be64 = flow->metadata;
  734|     14|        break;
  735|       |
  736|    198|    case MFF_IN_PORT:
  ------------------
  |  Branch (736:5): [True: 198, False: 35.4k]
  ------------------
  737|    198|        value->be16 = htons(ofp_to_u16(flow->in_port.ofp_port));
  738|    198|        break;
  739|    702|    case MFF_IN_PORT_OXM:
  ------------------
  |  Branch (739:5): [True: 702, False: 34.9k]
  ------------------
  740|    702|        value->be32 = ofputil_port_to_ofp11(flow->in_port.ofp_port);
  741|    702|        break;
  742|    594|    case MFF_ACTSET_OUTPUT:
  ------------------
  |  Branch (742:5): [True: 594, False: 35.0k]
  ------------------
  743|    594|        value->be32 = ofputil_port_to_ofp11(flow->actset_output);
  744|    594|        break;
  745|       |
  746|      0|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (746:5): [True: 0, False: 35.6k]
  ------------------
  747|      0|        value->be32 = htonl(flow->skb_priority);
  748|      0|        break;
  749|       |
  750|    518|    case MFF_PKT_MARK:
  ------------------
  |  Branch (750:5): [True: 518, False: 35.1k]
  ------------------
  751|    518|        value->be32 = htonl(flow->pkt_mark);
  752|    518|        break;
  753|       |
  754|  1.49k|    case MFF_CT_STATE:
  ------------------
  |  Branch (754:5): [True: 1.49k, False: 34.1k]
  ------------------
  755|  1.49k|        value->be32 = htonl(flow->ct_state);
  756|  1.49k|        break;
  757|       |
  758|     68|    case MFF_CT_ZONE:
  ------------------
  |  Branch (758:5): [True: 68, False: 35.5k]
  ------------------
  759|     68|        value->be16 = htons(flow->ct_zone);
  760|     68|        break;
  761|       |
  762|  2.11k|    case MFF_CT_MARK:
  ------------------
  |  Branch (762:5): [True: 2.11k, False: 33.5k]
  ------------------
  763|  2.11k|        value->be32 = htonl(flow->ct_mark);
  764|  2.11k|        break;
  765|       |
  766|     30|    case MFF_CT_LABEL:
  ------------------
  |  Branch (766:5): [True: 30, False: 35.6k]
  ------------------
  767|     30|        value->be128 = hton128(flow->ct_label);
  768|     30|        break;
  769|       |
  770|    596|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (770:5): [True: 596, False: 35.0k]
  ------------------
  771|    596|        value->u8 = flow->ct_nw_proto;
  772|    596|        break;
  773|       |
  774|      6|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (774:5): [True: 6, False: 35.6k]
  ------------------
  775|      6|        value->be32 = flow->ct_nw_src;
  776|      6|        break;
  777|       |
  778|      6|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (778:5): [True: 6, False: 35.6k]
  ------------------
  779|      6|        value->be32 = flow->ct_nw_dst;
  780|      6|        break;
  781|       |
  782|      6|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (782:5): [True: 6, False: 35.6k]
  ------------------
  783|      6|        value->ipv6 = flow->ct_ipv6_src;
  784|      6|        break;
  785|       |
  786|    206|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (786:5): [True: 206, False: 35.4k]
  ------------------
  787|    206|        value->ipv6 = flow->ct_ipv6_dst;
  788|    206|        break;
  789|       |
  790|     68|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (790:5): [True: 68, False: 35.5k]
  ------------------
  791|     68|        value->be16 = flow->ct_tp_src;
  792|     68|        break;
  793|       |
  794|    522|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (794:5): [True: 522, False: 35.1k]
  ------------------
  795|    522|        value->be16 = flow->ct_tp_dst;
  796|    522|        break;
  797|       |
  798|  4.30k|    CASE_MFF_REGS:
  ------------------
  |  | 2065|  2.28k|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:     \
  |  |  ------------------
  |  |  |  Branch (2065:5): [True: 1.15k, False: 34.4k]
  |  |  |  Branch (2065:20): [True: 576, False: 35.0k]
  |  |  |  Branch (2065:35): [True: 556, False: 35.0k]
  |  |  |  Branch (2065:50): [True: 6, False: 35.6k]
  |  |  ------------------
  |  | 2066|  2.48k|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:     \
  |  |  ------------------
  |  |  |  Branch (2066:5): [True: 8, False: 35.6k]
  |  |  |  Branch (2066:20): [True: 14, False: 35.6k]
  |  |  |  Branch (2066:35): [True: 144, False: 35.5k]
  |  |  |  Branch (2066:50): [True: 34, False: 35.6k]
  |  |  ------------------
  |  | 2067|  3.75k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11:   \
  |  |  ------------------
  |  |  |  Branch (2067:5): [True: 420, False: 35.2k]
  |  |  |  Branch (2067:20): [True: 708, False: 34.9k]
  |  |  |  Branch (2067:35): [True: 128, False: 35.5k]
  |  |  |  Branch (2067:51): [True: 14, False: 35.6k]
  |  |  ------------------
  |  | 2068|  4.30k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15: \
  |  |  ------------------
  |  |  |  Branch (2068:5): [True: 264, False: 35.3k]
  |  |  |  Branch (2068:21): [True: 224, False: 35.4k]
  |  |  |  Branch (2068:37): [True: 30, False: 35.6k]
  |  |  |  Branch (2068:53): [True: 32, False: 35.6k]
  |  |  ------------------
  |  | 2069|  4.30k|    case MFF_REG16: case MFF_REG17: case MFF_REG18: case MFF_REG19: \
  |  |  ------------------
  |  |  |  Branch (2069:5): [True: 0, False: 35.6k]
  |  |  |  Branch (2069:21): [True: 0, False: 35.6k]
  |  |  |  Branch (2069:37): [True: 0, False: 35.6k]
  |  |  |  Branch (2069:53): [True: 0, False: 35.6k]
  |  |  ------------------
  |  | 2070|  4.30k|    case MFF_REG20: case MFF_REG21: case MFF_REG22: case MFF_REG23: \
  |  |  ------------------
  |  |  |  Branch (2070:5): [True: 0, False: 35.6k]
  |  |  |  Branch (2070:21): [True: 0, False: 35.6k]
  |  |  |  Branch (2070:37): [True: 0, False: 35.6k]
  |  |  |  Branch (2070:53): [True: 0, False: 35.6k]
  |  |  ------------------
  |  | 2071|  4.30k|    case MFF_REG24: case MFF_REG25: case MFF_REG26: case MFF_REG27: \
  |  |  ------------------
  |  |  |  Branch (2071:5): [True: 0, False: 35.6k]
  |  |  |  Branch (2071:21): [True: 0, False: 35.6k]
  |  |  |  Branch (2071:37): [True: 0, False: 35.6k]
  |  |  |  Branch (2071:53): [True: 0, False: 35.6k]
  |  |  ------------------
  |  | 2072|  4.30k|    case MFF_REG28: case MFF_REG29: case MFF_REG30: case MFF_REG31
  |  |  ------------------
  |  |  |  Branch (2072:5): [True: 0, False: 35.6k]
  |  |  |  Branch (2072:21): [True: 0, False: 35.6k]
  |  |  |  Branch (2072:37): [True: 0, False: 35.6k]
  |  |  ------------------
  ------------------
  799|  4.30k|        value->be32 = htonl(flow->regs[mf->id - MFF_REG0]);
  800|  4.30k|        break;
  801|       |
  802|  2.05k|    CASE_MFF_XREGS:
  ------------------
  |  | 2081|    750|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3:    \
  |  |  ------------------
  |  |  |  Branch (2081:5): [True: 6, False: 35.6k]
  |  |  |  Branch (2081:21): [True: 734, False: 34.9k]
  |  |  |  Branch (2081:37): [True: 4, False: 35.6k]
  |  |  |  Branch (2081:53): [True: 6, False: 35.6k]
  |  |  ------------------
  |  | 2082|  1.90k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7:    \
  |  |  ------------------
  |  |  |  Branch (2082:5): [True: 510, False: 35.1k]
  |  |  |  Branch (2082:21): [True: 146, False: 35.4k]
  |  |  |  Branch (2082:37): [True: 496, False: 35.1k]
  |  |  |  Branch (2082:53): [True: 6, False: 35.6k]
  |  |  ------------------
  |  | 2083|  1.96k|    case MFF_XREG8: case MFF_XREG9: case MFF_XREG10: case MFF_XREG11:  \
  |  |  ------------------
  |  |  |  Branch (2083:5): [True: 2, False: 35.6k]
  |  |  |  Branch (2083:21): [True: 14, False: 35.6k]
  |  |  |  Branch (2083:37): [True: 22, False: 35.6k]
  |  |  |  Branch (2083:54): [True: 14, False: 35.6k]
  |  |  ------------------
  |  | 2084|  2.05k|    case MFF_XREG12: case MFF_XREG13: case MFF_XREG14: case MFF_XREG15
  |  |  ------------------
  |  |  |  Branch (2084:5): [True: 6, False: 35.6k]
  |  |  |  Branch (2084:22): [True: 14, False: 35.6k]
  |  |  |  Branch (2084:39): [True: 58, False: 35.5k]
  |  |  ------------------
  ------------------
  803|  2.05k|        value->be64 = htonll(flow_get_xreg(flow, mf->id - MFF_XREG0));
  804|  2.05k|        break;
  805|       |
  806|     60|    CASE_MFF_XXREGS:
  ------------------
  |  | 2093|     60|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3: \
  |  |  ------------------
  |  |  |  Branch (2093:5): [True: 6, False: 35.6k]
  |  |  |  Branch (2093:22): [True: 26, False: 35.6k]
  |  |  |  Branch (2093:39): [True: 14, False: 35.6k]
  |  |  |  Branch (2093:56): [True: 14, False: 35.6k]
  |  |  ------------------
  |  | 2094|     60|    case MFF_XXREG4: case MFF_XXREG5: case MFF_XXREG6: case MFF_XXREG7
  |  |  ------------------
  |  |  |  Branch (2094:5): [True: 0, False: 35.6k]
  |  |  |  Branch (2094:22): [True: 0, False: 35.6k]
  |  |  |  Branch (2094:39): [True: 0, False: 35.6k]
  |  |  ------------------
  ------------------
  807|     60|        value->be128 = hton128(flow_get_xxreg(flow, mf->id - MFF_XXREG0));
  808|     60|        break;
  809|       |
  810|      6|    case MFF_ETH_SRC:
  ------------------
  |  Branch (810:5): [True: 6, False: 35.6k]
  ------------------
  811|      6|        value->mac = flow->dl_src;
  812|      6|        break;
  813|       |
  814|      6|    case MFF_ETH_DST:
  ------------------
  |  Branch (814:5): [True: 6, False: 35.6k]
  ------------------
  815|      6|        value->mac = flow->dl_dst;
  816|      6|        break;
  817|       |
  818|    208|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (818:5): [True: 208, False: 35.4k]
  ------------------
  819|    208|        value->be16 = flow->dl_type;
  820|    208|        break;
  821|       |
  822|     36|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (822:5): [True: 36, False: 35.6k]
  ------------------
  823|     36|        value->be16 = flow->vlans[0].tci;
  824|     36|        break;
  825|       |
  826|      0|    case MFF_DL_VLAN:
  ------------------
  |  Branch (826:5): [True: 0, False: 35.6k]
  ------------------
  827|      0|        value->be16 = flow->vlans[0].tci & htons(VLAN_VID_MASK);
  828|      0|        break;
  829|      2|    case MFF_VLAN_VID:
  ------------------
  |  Branch (829:5): [True: 2, False: 35.6k]
  ------------------
  830|      2|        value->be16 = flow->vlans[0].tci & htons(VLAN_VID_MASK | VLAN_CFI);
  831|      2|        break;
  832|       |
  833|      0|    case MFF_DL_VLAN_PCP:
  ------------------
  |  Branch (833:5): [True: 0, False: 35.6k]
  ------------------
  834|      0|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (834:5): [True: 0, False: 35.6k]
  ------------------
  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: 35.6k]
  ------------------
  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: 35.6k]
  ------------------
  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: 35.6k]
  ------------------
  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: 35.6k]
  ------------------
  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: 35.6k]
  ------------------
  855|      0|        value->be32 = flow->nw_src;
  856|      0|        break;
  857|       |
  858|      0|    case MFF_IPV4_DST:
  ------------------
  |  Branch (858:5): [True: 0, False: 35.6k]
  ------------------
  859|      0|        value->be32 = flow->nw_dst;
  860|      0|        break;
  861|       |
  862|      0|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (862:5): [True: 0, False: 35.6k]
  ------------------
  863|      0|        value->ipv6 = flow->ipv6_src;
  864|      0|        break;
  865|       |
  866|      0|    case MFF_IPV6_DST:
  ------------------
  |  Branch (866:5): [True: 0, False: 35.6k]
  ------------------
  867|      0|        value->ipv6 = flow->ipv6_dst;
  868|      0|        break;
  869|       |
  870|      0|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (870:5): [True: 0, False: 35.6k]
  ------------------
  871|      0|        value->be32 = flow->ipv6_label;
  872|      0|        break;
  873|       |
  874|      0|    case MFF_IP_PROTO:
  ------------------
  |  Branch (874:5): [True: 0, False: 35.6k]
  ------------------
  875|      0|        value->u8 = flow->nw_proto;
  876|      0|        break;
  877|       |
  878|      0|    case MFF_IP_DSCP:
  ------------------
  |  Branch (878:5): [True: 0, False: 35.6k]
  ------------------
  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: 35.6k]
  ------------------
  883|      0|        value->u8 = flow->nw_tos >> 2;
  884|      0|        break;
  885|       |
  886|      0|    case MFF_IP_ECN:
  ------------------
  |  Branch (886:5): [True: 0, False: 35.6k]
  ------------------
  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: 35.6k]
  ------------------
  891|      0|        value->u8 = flow->nw_ttl;
  892|      0|        break;
  893|       |
  894|      0|    case MFF_IP_FRAG:
  ------------------
  |  Branch (894:5): [True: 0, False: 35.6k]
  ------------------
  895|      0|        value->u8 = flow->nw_frag;
  896|      0|        break;
  897|       |
  898|      0|    case MFF_ARP_OP:
  ------------------
  |  Branch (898:5): [True: 0, False: 35.6k]
  ------------------
  899|      0|        value->be16 = htons(flow->nw_proto);
  900|      0|        break;
  901|       |
  902|      0|    case MFF_ARP_SPA:
  ------------------
  |  Branch (902:5): [True: 0, False: 35.6k]
  ------------------
  903|      0|        value->be32 = flow->nw_src;
  904|      0|        break;
  905|       |
  906|      0|    case MFF_ARP_TPA:
  ------------------
  |  Branch (906:5): [True: 0, False: 35.6k]
  ------------------
  907|      0|        value->be32 = flow->nw_dst;
  908|      0|        break;
  909|       |
  910|      0|    case MFF_ARP_SHA:
  ------------------
  |  Branch (910:5): [True: 0, False: 35.6k]
  ------------------
  911|      0|    case MFF_ND_SLL:
  ------------------
  |  Branch (911:5): [True: 0, False: 35.6k]
  ------------------
  912|      0|        value->mac = flow->arp_sha;
  913|      0|        break;
  914|       |
  915|      0|    case MFF_ARP_THA:
  ------------------
  |  Branch (915:5): [True: 0, False: 35.6k]
  ------------------
  916|      0|    case MFF_ND_TLL:
  ------------------
  |  Branch (916:5): [True: 0, False: 35.6k]
  ------------------
  917|      0|        value->mac = flow->arp_tha;
  918|      0|        break;
  919|       |
  920|      0|    case MFF_TCP_SRC:
  ------------------
  |  Branch (920:5): [True: 0, False: 35.6k]
  ------------------
  921|      0|    case MFF_UDP_SRC:
  ------------------
  |  Branch (921:5): [True: 0, False: 35.6k]
  ------------------
  922|      0|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (922:5): [True: 0, False: 35.6k]
  ------------------
  923|      0|        value->be16 = flow->tp_src;
  924|      0|        break;
  925|       |
  926|      0|    case MFF_TCP_DST:
  ------------------
  |  Branch (926:5): [True: 0, False: 35.6k]
  ------------------
  927|      0|    case MFF_UDP_DST:
  ------------------
  |  Branch (927:5): [True: 0, False: 35.6k]
  ------------------
  928|      0|    case MFF_SCTP_DST:
  ------------------
  |  Branch (928:5): [True: 0, False: 35.6k]
  ------------------
  929|      0|        value->be16 = flow->tp_dst;
  930|      0|        break;
  931|       |
  932|      0|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (932:5): [True: 0, False: 35.6k]
  ------------------
  933|      0|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (933:5): [True: 0, False: 35.6k]
  ------------------
  934|      0|        value->be16 = flow->tcp_flags;
  935|      0|        break;
  936|       |
  937|      0|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (937:5): [True: 0, False: 35.6k]
  ------------------
  938|      0|        value->be32 = flow->igmp_group_ip4;
  939|      0|        break;
  940|       |
  941|      0|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (941:5): [True: 0, False: 35.6k]
  ------------------
  942|      0|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (942:5): [True: 0, False: 35.6k]
  ------------------
  943|      0|        value->u8 = ntohs(flow->tp_src);
  944|      0|        break;
  945|       |
  946|      0|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (946:5): [True: 0, False: 35.6k]
  ------------------
  947|      0|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (947:5): [True: 0, False: 35.6k]
  ------------------
  948|      0|        value->u8 = ntohs(flow->tp_dst);
  949|      0|        break;
  950|       |
  951|      0|    case MFF_ND_TARGET:
  ------------------
  |  Branch (951:5): [True: 0, False: 35.6k]
  ------------------
  952|      0|        value->ipv6 = flow->nd_target;
  953|      0|        break;
  954|       |
  955|      0|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (955:5): [True: 0, False: 35.6k]
  ------------------
  956|      0|        value->u8 = flow->nsh.flags;
  957|      0|        break;
  958|      0|    case MFF_NSH_TTL:
  ------------------
  |  Branch (958:5): [True: 0, False: 35.6k]
  ------------------
  959|      0|        value->u8 = flow->nsh.ttl;
  960|      0|        break;
  961|      0|    case MFF_NSH_MDTYPE:
  ------------------
  |  Branch (961:5): [True: 0, False: 35.6k]
  ------------------
  962|      0|        value->u8 = flow->nsh.mdtype;
  963|      0|        break;
  964|      0|    case MFF_NSH_NP:
  ------------------
  |  Branch (964:5): [True: 0, False: 35.6k]
  ------------------
  965|      0|        value->u8 = flow->nsh.np;
  966|      0|        break;
  967|      0|    case MFF_NSH_SPI:
  ------------------
  |  Branch (967:5): [True: 0, False: 35.6k]
  ------------------
  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: 35.6k]
  ------------------
  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: 35.6k]
  ------------------
  977|      0|    case MFF_NSH_C2:
  ------------------
  |  Branch (977:5): [True: 0, False: 35.6k]
  ------------------
  978|      0|    case MFF_NSH_C3:
  ------------------
  |  Branch (978:5): [True: 0, False: 35.6k]
  ------------------
  979|      0|    case MFF_NSH_C4:
  ------------------
  |  Branch (979:5): [True: 0, False: 35.6k]
  ------------------
  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: 35.6k]
  ------------------
  984|      0|    default:
  ------------------
  |  Branch (984:5): [True: 0, False: 35.6k]
  ------------------
  985|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  986|  35.6k|    }
  987|  35.6k|}
mf_set_value:
  999|  62.8k|{
 1000|  62.8k|    if (err_str) {
  ------------------
  |  Branch (1000:9): [True: 61.3k, False: 1.47k]
  ------------------
 1001|  61.3k|        *err_str = NULL;
 1002|  61.3k|    }
 1003|       |
 1004|  62.8k|    switch (mf->id) {
 1005|     23|    case MFF_DP_HASH:
  ------------------
  |  Branch (1005:5): [True: 23, False: 62.8k]
  ------------------
 1006|     23|        match_set_dp_hash(match, ntohl(value->be32));
 1007|     23|        break;
 1008|    122|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (1008:5): [True: 122, False: 62.7k]
  ------------------
 1009|    122|        match_set_recirc_id(match, ntohl(value->be32));
 1010|    122|        break;
 1011|  13.6k|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (1011:5): [True: 13.6k, False: 49.1k]
  ------------------
 1012|  13.6k|        match_set_packet_type(match, value->be32);
 1013|  13.6k|        break;
 1014|     37|    case MFF_CONJ_ID:
  ------------------
  |  Branch (1014:5): [True: 37, False: 62.8k]
  ------------------
 1015|     37|        match_set_conj_id(match, ntohl(value->be32));
 1016|     37|        break;
 1017|    107|    case MFF_TUN_ID:
  ------------------
  |  Branch (1017:5): [True: 107, False: 62.7k]
  ------------------
 1018|    107|        match_set_tun_id(match, value->be64);
 1019|    107|        break;
 1020|    206|    case MFF_TUN_SRC:
  ------------------
  |  Branch (1020:5): [True: 206, False: 62.6k]
  ------------------
 1021|    206|        match_set_tun_src(match, value->be32);
 1022|    206|        break;
 1023|     46|    case MFF_TUN_DST:
  ------------------
  |  Branch (1023:5): [True: 46, False: 62.8k]
  ------------------
 1024|     46|        match_set_tun_dst(match, value->be32);
 1025|     46|        break;
 1026|    231|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (1026:5): [True: 231, False: 62.6k]
  ------------------
 1027|    231|        match_set_tun_ipv6_src(match, &value->ipv6);
 1028|    231|        break;
 1029|     40|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (1029:5): [True: 40, False: 62.8k]
  ------------------
 1030|     40|        match_set_tun_ipv6_dst(match, &value->ipv6);
 1031|     40|        break;
 1032|     90|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (1032:5): [True: 90, False: 62.7k]
  ------------------
 1033|     90|        match_set_tun_flags(match, ntohs(value->be16));
 1034|     90|        break;
 1035|     17|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (1035:5): [True: 17, False: 62.8k]
  ------------------
 1036|     17|         match_set_tun_gbp_id(match, value->be16);
 1037|     17|         break;
 1038|     17|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (1038:5): [True: 17, False: 62.8k]
  ------------------
 1039|     17|         match_set_tun_gbp_flags(match, value->u8);
 1040|     17|         break;
 1041|      0|    case MFF_TUN_TOS:
  ------------------
  |  Branch (1041:5): [True: 0, False: 62.8k]
  ------------------
 1042|      0|        match_set_tun_tos(match, value->u8);
 1043|      0|        break;
 1044|      0|    case MFF_TUN_TTL:
  ------------------
  |  Branch (1044:5): [True: 0, False: 62.8k]
  ------------------
 1045|      0|        match_set_tun_ttl(match, value->u8);
 1046|      0|        break;
 1047|    181|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (1047:5): [True: 181, False: 62.6k]
  ------------------
 1048|    181|        match_set_tun_erspan_ver(match, value->u8);
 1049|    181|        break;
 1050|     66|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (1050:5): [True: 66, False: 62.7k]
  ------------------
 1051|     66|        match_set_tun_erspan_idx(match, ntohl(value->be32));
 1052|     66|        break;
 1053|    109|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (1053:5): [True: 109, False: 62.7k]
  ------------------
 1054|    109|        match_set_tun_erspan_dir(match, value->u8);
 1055|    109|        break;
 1056|    169|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (1056:5): [True: 169, False: 62.6k]
  ------------------
 1057|    169|        match_set_tun_erspan_hwid(match, value->u8);
 1058|    169|        break;
 1059|    199|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (1059:5): [True: 199, False: 62.6k]
  ------------------
 1060|    199|        match_set_tun_gtpu_flags(match, value->u8);
 1061|    199|        break;
 1062|     19|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (1062:5): [True: 19, False: 62.8k]
  ------------------
 1063|     19|        match_set_tun_gtpu_msgtype(match, value->u8);
 1064|     19|        break;
 1065|  28.9k|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2110|  1.15k|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2110:5): [True: 146, False: 62.7k]
  |  |  |  Branch (2110:29): [True: 1.01k, False: 61.8k]
  |  |  ------------------
  |  | 2111|  1.89k|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2111:5): [True: 400, False: 62.4k]
  |  |  |  Branch (2111:29): [True: 334, False: 62.5k]
  |  |  ------------------
  |  | 2112|  2.76k|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2112:5): [True: 429, False: 62.4k]
  |  |  |  Branch (2112:29): [True: 438, False: 62.4k]
  |  |  ------------------
  |  | 2113|  3.39k|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2113:5): [True: 538, False: 62.3k]
  |  |  |  Branch (2113:29): [True: 93, False: 62.7k]
  |  |  ------------------
  |  | 2114|  3.54k|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2114:5): [True: 80, False: 62.7k]
  |  |  |  Branch (2114:29): [True: 73, False: 62.7k]
  |  |  ------------------
  |  | 2115|  3.79k|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2115:5): [True: 167, False: 62.6k]
  |  |  |  Branch (2115:30): [True: 88, False: 62.7k]
  |  |  ------------------
  |  | 2116|  6.38k|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2116:5): [True: 2.20k, False: 60.6k]
  |  |  |  Branch (2116:30): [True: 384, False: 62.4k]
  |  |  ------------------
  |  | 2117|  7.80k|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2117:5): [True: 869, False: 61.9k]
  |  |  |  Branch (2117:30): [True: 549, False: 62.2k]
  |  |  ------------------
  |  | 2118|  8.68k|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2118:5): [True: 538, False: 62.3k]
  |  |  |  Branch (2118:30): [True: 347, False: 62.5k]
  |  |  ------------------
  |  | 2119|  11.0k|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2119:5): [True: 2.18k, False: 60.6k]
  |  |  |  Branch (2119:30): [True: 167, False: 62.6k]
  |  |  ------------------
  |  | 2120|  12.4k|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2120:5): [True: 590, False: 62.2k]
  |  |  |  Branch (2120:30): [True: 843, False: 62.0k]
  |  |  ------------------
  |  | 2121|  14.4k|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2121:5): [True: 1.44k, False: 61.3k]
  |  |  |  Branch (2121:30): [True: 480, False: 62.3k]
  |  |  ------------------
  |  | 2122|  14.9k|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2122:5): [True: 141, False: 62.7k]
  |  |  |  Branch (2122:30): [True: 376, False: 62.4k]
  |  |  ------------------
  |  | 2123|  15.5k|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2123:5): [True: 407, False: 62.4k]
  |  |  |  Branch (2123:30): [True: 174, False: 62.6k]
  |  |  ------------------
  |  | 2124|  16.1k|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2124:5): [True: 107, False: 62.7k]
  |  |  |  Branch (2124:30): [True: 510, False: 62.3k]
  |  |  ------------------
  |  | 2125|  17.7k|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2125:5): [True: 596, False: 62.2k]
  |  |  |  Branch (2125:30): [True: 993, False: 61.8k]
  |  |  ------------------
  |  | 2126|  18.3k|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2126:5): [True: 389, False: 62.4k]
  |  |  |  Branch (2126:30): [True: 300, False: 62.5k]
  |  |  ------------------
  |  | 2127|  19.3k|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2127:5): [True: 375, False: 62.4k]
  |  |  |  Branch (2127:30): [True: 536, False: 62.3k]
  |  |  ------------------
  |  | 2128|  19.8k|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2128:5): [True: 20, False: 62.8k]
  |  |  |  Branch (2128:30): [True: 547, False: 62.3k]
  |  |  ------------------
  |  | 2129|  20.3k|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2129:5): [True: 253, False: 62.5k]
  |  |  |  Branch (2129:30): [True: 190, False: 62.6k]
  |  |  ------------------
  |  | 2130|  21.1k|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2130:5): [True: 437, False: 62.4k]
  |  |  |  Branch (2130:30): [True: 416, False: 62.4k]
  |  |  ------------------
  |  | 2131|  21.6k|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2131:5): [True: 163, False: 62.6k]
  |  |  |  Branch (2131:30): [True: 329, False: 62.5k]
  |  |  ------------------
  |  | 2132|  22.0k|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2132:5): [True: 78, False: 62.7k]
  |  |  |  Branch (2132:30): [True: 289, False: 62.5k]
  |  |  ------------------
  |  | 2133|  23.0k|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2133:5): [True: 822, False: 62.0k]
  |  |  |  Branch (2133:30): [True: 232, False: 62.6k]
  |  |  ------------------
  |  | 2134|  23.6k|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2134:5): [True: 78, False: 62.7k]
  |  |  |  Branch (2134:30): [True: 478, False: 62.3k]
  |  |  ------------------
  |  | 2135|  24.5k|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2135:5): [True: 736, False: 62.1k]
  |  |  |  Branch (2135:30): [True: 170, False: 62.6k]
  |  |  ------------------
  |  | 2136|  26.1k|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2136:5): [True: 230, False: 62.6k]
  |  |  |  Branch (2136:30): [True: 1.36k, False: 61.4k]
  |  |  ------------------
  |  | 2137|  26.8k|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2137:5): [True: 97, False: 62.7k]
  |  |  |  Branch (2137:30): [True: 605, False: 62.2k]
  |  |  ------------------
  |  | 2138|  27.6k|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2138:5): [True: 212, False: 62.6k]
  |  |  |  Branch (2138:30): [True: 551, False: 62.2k]
  |  |  ------------------
  |  | 2139|  27.8k|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2139:5): [True: 172, False: 62.6k]
  |  |  |  Branch (2139:30): [True: 28, False: 62.8k]
  |  |  ------------------
  |  | 2140|  28.3k|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2140:5): [True: 188, False: 62.6k]
  |  |  |  Branch (2140:30): [True: 391, False: 62.4k]
  |  |  ------------------
  |  | 2141|  28.9k|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2141:5): [True: 413, False: 62.4k]
  |  |  ------------------
  ------------------
 1066|  28.9k|        tun_metadata_set_match(mf, value, NULL, match, err_str);
 1067|  28.9k|        break;
 1068|       |
 1069|    162|    case MFF_METADATA:
  ------------------
  |  Branch (1069:5): [True: 162, False: 62.6k]
  ------------------
 1070|    162|        match_set_metadata(match, value->be64);
 1071|    162|        break;
 1072|       |
 1073|  1.35k|    case MFF_IN_PORT:
  ------------------
  |  Branch (1073:5): [True: 1.35k, False: 61.4k]
  ------------------
 1074|  1.35k|        match_set_in_port(match, u16_to_ofp(ntohs(value->be16)));
 1075|  1.35k|        break;
 1076|       |
 1077|    647|    case MFF_IN_PORT_OXM: {
  ------------------
  |  Branch (1077:5): [True: 647, False: 62.2k]
  ------------------
 1078|    647|        ofp_port_t port;
 1079|    647|        ofputil_port_from_ofp11(value->be32, &port);
 1080|    647|        match_set_in_port(match, port);
 1081|    647|        break;
 1082|  1.00M|    }
 1083|    520|    case MFF_ACTSET_OUTPUT: {
  ------------------
  |  Branch (1083:5): [True: 520, False: 62.3k]
  ------------------
 1084|    520|        ofp_port_t port;
 1085|    520|        ofputil_port_from_ofp11(value->be32, &port);
 1086|    520|        match_set_actset_output(match, port);
 1087|    520|        break;
 1088|  1.00M|    }
 1089|       |
 1090|      0|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (1090:5): [True: 0, False: 62.8k]
  ------------------
 1091|      0|        match_set_skb_priority(match, ntohl(value->be32));
 1092|      0|        break;
 1093|       |
 1094|     46|    case MFF_PKT_MARK:
  ------------------
  |  Branch (1094:5): [True: 46, False: 62.8k]
  ------------------
 1095|     46|        match_set_pkt_mark(match, ntohl(value->be32));
 1096|     46|        break;
 1097|       |
 1098|    845|    case MFF_CT_STATE:
  ------------------
  |  Branch (1098:5): [True: 845, False: 62.0k]
  ------------------
 1099|    845|        match_set_ct_state(match, ntohl(value->be32));
 1100|    845|        break;
 1101|       |
 1102|    192|    case MFF_CT_ZONE:
  ------------------
  |  Branch (1102:5): [True: 192, False: 62.6k]
  ------------------
 1103|    192|        match_set_ct_zone(match, ntohs(value->be16));
 1104|    192|        break;
 1105|       |
 1106|     63|    case MFF_CT_MARK:
  ------------------
  |  Branch (1106:5): [True: 63, False: 62.7k]
  ------------------
 1107|     63|        match_set_ct_mark(match, ntohl(value->be32));
 1108|     63|        break;
 1109|       |
 1110|     86|    case MFF_CT_LABEL:
  ------------------
  |  Branch (1110:5): [True: 86, False: 62.7k]
  ------------------
 1111|     86|        match_set_ct_label(match, ntoh128(value->be128));
 1112|     86|        break;
 1113|       |
 1114|     81|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (1114:5): [True: 81, False: 62.7k]
  ------------------
 1115|     81|        match_set_ct_nw_proto(match, value->u8);
 1116|     81|        break;
 1117|       |
 1118|     32|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (1118:5): [True: 32, False: 62.8k]
  ------------------
 1119|     32|        match_set_ct_nw_src(match, value->be32);
 1120|     32|        break;
 1121|       |
 1122|    215|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (1122:5): [True: 215, False: 62.6k]
  ------------------
 1123|    215|        match_set_ct_nw_dst(match, value->be32);
 1124|    215|        break;
 1125|       |
 1126|      7|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (1126:5): [True: 7, False: 62.8k]
  ------------------
 1127|      7|        match_set_ct_ipv6_src(match, &value->ipv6);
 1128|      7|        break;
 1129|       |
 1130|     56|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (1130:5): [True: 56, False: 62.7k]
  ------------------
 1131|     56|        match_set_ct_ipv6_dst(match, &value->ipv6);
 1132|     56|        break;
 1133|       |
 1134|     34|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (1134:5): [True: 34, False: 62.8k]
  ------------------
 1135|     34|        match_set_ct_tp_src(match, value->be16);
 1136|     34|        break;
 1137|       |
 1138|     33|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (1138:5): [True: 33, False: 62.8k]
  ------------------
 1139|     33|        match_set_ct_tp_dst(match, value->be16);
 1140|     33|        break;
 1141|       |
 1142|  3.09k|    CASE_MFF_REGS:
  ------------------
  |  | 2065|    937|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:     \
  |  |  ------------------
  |  |  |  Branch (2065:5): [True: 205, False: 62.6k]
  |  |  |  Branch (2065:20): [True: 84, False: 62.7k]
  |  |  |  Branch (2065:35): [True: 451, False: 62.3k]
  |  |  |  Branch (2065:50): [True: 197, False: 62.6k]
  |  |  ------------------
  |  | 2066|  1.46k|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:     \
  |  |  ------------------
  |  |  |  Branch (2066:5): [True: 192, False: 62.6k]
  |  |  |  Branch (2066:20): [True: 124, False: 62.7k]
  |  |  |  Branch (2066:35): [True: 11, False: 62.8k]
  |  |  |  Branch (2066:50): [True: 204, False: 62.6k]
  |  |  ------------------
  |  | 2067|  2.06k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11:   \
  |  |  ------------------
  |  |  |  Branch (2067:5): [True: 118, False: 62.7k]
  |  |  |  Branch (2067:20): [True: 61, False: 62.7k]
  |  |  |  Branch (2067:35): [True: 215, False: 62.6k]
  |  |  |  Branch (2067:51): [True: 201, False: 62.6k]
  |  |  ------------------
  |  | 2068|  2.53k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15: \
  |  |  ------------------
  |  |  |  Branch (2068:5): [True: 91, False: 62.7k]
  |  |  |  Branch (2068:21): [True: 72, False: 62.7k]
  |  |  |  Branch (2068:37): [True: 214, False: 62.6k]
  |  |  |  Branch (2068:53): [True: 96, False: 62.7k]
  |  |  ------------------
  |  | 2069|  2.66k|    case MFF_REG16: case MFF_REG17: case MFF_REG18: case MFF_REG19: \
  |  |  ------------------
  |  |  |  Branch (2069:5): [True: 69, False: 62.7k]
  |  |  |  Branch (2069:21): [True: 18, False: 62.8k]
  |  |  |  Branch (2069:37): [True: 12, False: 62.8k]
  |  |  |  Branch (2069:53): [True: 32, False: 62.8k]
  |  |  ------------------
  |  | 2070|  2.87k|    case MFF_REG20: case MFF_REG21: case MFF_REG22: case MFF_REG23: \
  |  |  ------------------
  |  |  |  Branch (2070:5): [True: 19, False: 62.8k]
  |  |  |  Branch (2070:21): [True: 13, False: 62.8k]
  |  |  |  Branch (2070:37): [True: 91, False: 62.7k]
  |  |  |  Branch (2070:53): [True: 84, False: 62.7k]
  |  |  ------------------
  |  | 2071|  2.98k|    case MFF_REG24: case MFF_REG25: case MFF_REG26: case MFF_REG27: \
  |  |  ------------------
  |  |  |  Branch (2071:5): [True: 3, False: 62.8k]
  |  |  |  Branch (2071:21): [True: 77, False: 62.7k]
  |  |  |  Branch (2071:37): [True: 10, False: 62.8k]
  |  |  |  Branch (2071:53): [True: 24, False: 62.8k]
  |  |  ------------------
  |  | 2072|  3.09k|    case MFF_REG28: case MFF_REG29: case MFF_REG30: case MFF_REG31
  |  |  ------------------
  |  |  |  Branch (2072:5): [True: 26, False: 62.8k]
  |  |  |  Branch (2072:21): [True: 42, False: 62.8k]
  |  |  |  Branch (2072:37): [True: 18, False: 62.8k]
  |  |  ------------------
  ------------------
 1143|  3.09k|        match_set_reg(match, mf->id - MFF_REG0, ntohl(value->be32));
 1144|  3.09k|        break;
 1145|       |
 1146|  2.30k|    CASE_MFF_XREGS:
  ------------------
  |  | 2081|    903|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3:    \
  |  |  ------------------
  |  |  |  Branch (2081:5): [True: 107, False: 62.7k]
  |  |  |  Branch (2081:21): [True: 19, False: 62.8k]
  |  |  |  Branch (2081:37): [True: 367, False: 62.4k]
  |  |  |  Branch (2081:53): [True: 410, False: 62.4k]
  |  |  ------------------
  |  | 2082|  1.64k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7:    \
  |  |  ------------------
  |  |  |  Branch (2082:5): [True: 91, False: 62.7k]
  |  |  |  Branch (2082:21): [True: 475, False: 62.3k]
  |  |  |  Branch (2082:37): [True: 166, False: 62.6k]
  |  |  |  Branch (2082:53): [True: 10, False: 62.8k]
  |  |  ------------------
  |  | 2083|  2.00k|    case MFF_XREG8: case MFF_XREG9: case MFF_XREG10: case MFF_XREG11:  \
  |  |  ------------------
  |  |  |  Branch (2083:5): [True: 8, False: 62.8k]
  |  |  |  Branch (2083:21): [True: 194, False: 62.6k]
  |  |  |  Branch (2083:37): [True: 28, False: 62.8k]
  |  |  |  Branch (2083:54): [True: 133, False: 62.7k]
  |  |  ------------------
  |  | 2084|  2.30k|    case MFF_XREG12: case MFF_XREG13: case MFF_XREG14: case MFF_XREG15
  |  |  ------------------
  |  |  |  Branch (2084:5): [True: 64, False: 62.7k]
  |  |  |  Branch (2084:22): [True: 136, False: 62.7k]
  |  |  |  Branch (2084:39): [True: 27, False: 62.8k]
  |  |  ------------------
  ------------------
 1147|  2.30k|        match_set_xreg(match, mf->id - MFF_XREG0, ntohll(value->be64));
 1148|  2.30k|        break;
 1149|       |
 1150|    282|    CASE_MFF_XXREGS:
  ------------------
  |  | 2093|    195|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3: \
  |  |  ------------------
  |  |  |  Branch (2093:5): [True: 96, False: 62.7k]
  |  |  |  Branch (2093:22): [True: 53, False: 62.7k]
  |  |  |  Branch (2093:39): [True: 35, False: 62.8k]
  |  |  |  Branch (2093:56): [True: 11, False: 62.8k]
  |  |  ------------------
  |  | 2094|    282|    case MFF_XXREG4: case MFF_XXREG5: case MFF_XXREG6: case MFF_XXREG7
  |  |  ------------------
  |  |  |  Branch (2094:5): [True: 18, False: 62.8k]
  |  |  |  Branch (2094:22): [True: 40, False: 62.8k]
  |  |  |  Branch (2094:39): [True: 8, False: 62.8k]
  |  |  ------------------
  ------------------
 1151|    282|        match_set_xxreg(match, mf->id - MFF_XXREG0, ntoh128(value->be128));
 1152|    282|        break;
 1153|       |
 1154|     69|    case MFF_ETH_SRC:
  ------------------
  |  Branch (1154:5): [True: 69, False: 62.7k]
  ------------------
 1155|     69|        match_set_dl_src(match, value->mac);
 1156|     69|        break;
 1157|       |
 1158|     26|    case MFF_ETH_DST:
  ------------------
  |  Branch (1158:5): [True: 26, False: 62.8k]
  ------------------
 1159|     26|        match_set_dl_dst(match, value->mac);
 1160|     26|        break;
 1161|       |
 1162|    113|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (1162:5): [True: 113, False: 62.7k]
  ------------------
 1163|    113|        match_set_dl_type(match, value->be16);
 1164|    113|        break;
 1165|       |
 1166|    127|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (1166:5): [True: 127, False: 62.7k]
  ------------------
 1167|    127|        match_set_dl_tci(match, value->be16);
 1168|    127|        break;
 1169|       |
 1170|      0|    case MFF_DL_VLAN:
  ------------------
  |  Branch (1170:5): [True: 0, False: 62.8k]
  ------------------
 1171|      0|        match_set_dl_vlan(match, value->be16, 0);
 1172|      0|        break;
 1173|    168|    case MFF_VLAN_VID:
  ------------------
  |  Branch (1173:5): [True: 168, False: 62.6k]
  ------------------
 1174|    168|        match_set_vlan_vid(match, value->be16);
 1175|    168|        break;
 1176|       |
 1177|      0|    case MFF_DL_VLAN_PCP:
  ------------------
  |  Branch (1177:5): [True: 0, False: 62.8k]
  ------------------
 1178|    136|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (1178:5): [True: 136, False: 62.7k]
  ------------------
 1179|    136|        match_set_dl_vlan_pcp(match, value->u8, 0);
 1180|    136|        break;
 1181|       |
 1182|     15|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (1182:5): [True: 15, False: 62.8k]
  ------------------
 1183|     15|        match_set_mpls_label(match, 0, value->be32);
 1184|     15|        break;
 1185|       |
 1186|     94|    case MFF_MPLS_TC:
  ------------------
  |  Branch (1186:5): [True: 94, False: 62.7k]
  ------------------
 1187|     94|        match_set_mpls_tc(match, 0, value->u8);
 1188|     94|        break;
 1189|       |
 1190|     56|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (1190:5): [True: 56, False: 62.7k]
  ------------------
 1191|     56|        match_set_mpls_bos(match, 0, value->u8);
 1192|     56|        break;
 1193|       |
 1194|    195|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (1194:5): [True: 195, False: 62.6k]
  ------------------
 1195|    195|        match_set_mpls_ttl(match, 0, value->u8);
 1196|    195|        break;
 1197|       |
 1198|     21|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (1198:5): [True: 21, False: 62.8k]
  ------------------
 1199|     21|        match_set_nw_src(match, value->be32);
 1200|     21|        break;
 1201|       |
 1202|    657|    case MFF_IPV4_DST:
  ------------------
  |  Branch (1202:5): [True: 657, False: 62.1k]
  ------------------
 1203|    657|        match_set_nw_dst(match, value->be32);
 1204|    657|        break;
 1205|       |
 1206|     34|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (1206:5): [True: 34, False: 62.8k]
  ------------------
 1207|     34|        match_set_ipv6_src(match, &value->ipv6);
 1208|     34|        break;
 1209|       |
 1210|     19|    case MFF_IPV6_DST:
  ------------------
  |  Branch (1210:5): [True: 19, False: 62.8k]
  ------------------
 1211|     19|        match_set_ipv6_dst(match, &value->ipv6);
 1212|     19|        break;
 1213|       |
 1214|    202|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (1214:5): [True: 202, False: 62.6k]
  ------------------
 1215|    202|        match_set_ipv6_label(match, value->be32);
 1216|    202|        break;
 1217|       |
 1218|  1.38k|    case MFF_IP_PROTO:
  ------------------
  |  Branch (1218:5): [True: 1.38k, False: 61.4k]
  ------------------
 1219|  1.38k|        match_set_nw_proto(match, value->u8);
 1220|  1.38k|        break;
 1221|       |
 1222|      7|    case MFF_IP_DSCP:
  ------------------
  |  Branch (1222:5): [True: 7, False: 62.8k]
  ------------------
 1223|      7|        match_set_nw_dscp(match, value->u8);
 1224|      7|        break;
 1225|       |
 1226|     55|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (1226:5): [True: 55, False: 62.7k]
  ------------------
 1227|     55|        match_set_nw_dscp(match, value->u8 << 2);
 1228|     55|        break;
 1229|       |
 1230|     39|    case MFF_IP_ECN:
  ------------------
  |  Branch (1230:5): [True: 39, False: 62.8k]
  ------------------
 1231|     39|        match_set_nw_ecn(match, value->u8);
 1232|     39|        break;
 1233|       |
 1234|    275|    case MFF_IP_TTL:
  ------------------
  |  Branch (1234:5): [True: 275, False: 62.5k]
  ------------------
 1235|    275|        match_set_nw_ttl(match, value->u8);
 1236|    275|        break;
 1237|       |
 1238|     36|    case MFF_IP_FRAG:
  ------------------
  |  Branch (1238:5): [True: 36, False: 62.8k]
  ------------------
 1239|     36|        match_set_nw_frag(match, value->u8);
 1240|     36|        break;
 1241|       |
 1242|    251|    case MFF_ARP_OP:
  ------------------
  |  Branch (1242:5): [True: 251, False: 62.5k]
  ------------------
 1243|    251|        match_set_nw_proto(match, ntohs(value->be16));
 1244|    251|        break;
 1245|       |
 1246|    194|    case MFF_ARP_SPA:
  ------------------
  |  Branch (1246:5): [True: 194, False: 62.6k]
  ------------------
 1247|    194|        match_set_nw_src(match, value->be32);
 1248|    194|        break;
 1249|       |
 1250|     74|    case MFF_ARP_TPA:
  ------------------
  |  Branch (1250:5): [True: 74, False: 62.7k]
  ------------------
 1251|     74|        match_set_nw_dst(match, value->be32);
 1252|     74|        break;
 1253|       |
 1254|     11|    case MFF_ARP_SHA:
  ------------------
  |  Branch (1254:5): [True: 11, False: 62.8k]
  ------------------
 1255|     79|    case MFF_ND_SLL:
  ------------------
  |  Branch (1255:5): [True: 68, False: 62.7k]
  ------------------
 1256|     79|        match_set_arp_sha(match, value->mac);
 1257|     79|        break;
 1258|       |
 1259|    213|    case MFF_ARP_THA:
  ------------------
  |  Branch (1259:5): [True: 213, False: 62.6k]
  ------------------
 1260|    349|    case MFF_ND_TLL:
  ------------------
  |  Branch (1260:5): [True: 136, False: 62.7k]
  ------------------
 1261|    349|        match_set_arp_tha(match, value->mac);
 1262|    349|        break;
 1263|       |
 1264|    317|    case MFF_TCP_SRC:
  ------------------
  |  Branch (1264:5): [True: 317, False: 62.5k]
  ------------------
 1265|    494|    case MFF_UDP_SRC:
  ------------------
  |  Branch (1265:5): [True: 177, False: 62.6k]
  ------------------
 1266|    683|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (1266:5): [True: 189, False: 62.6k]
  ------------------
 1267|    683|        match_set_tp_src(match, value->be16);
 1268|    683|        break;
 1269|       |
 1270|     18|    case MFF_TCP_DST:
  ------------------
  |  Branch (1270:5): [True: 18, False: 62.8k]
  ------------------
 1271|    314|    case MFF_UDP_DST:
  ------------------
  |  Branch (1271:5): [True: 296, False: 62.5k]
  ------------------
 1272|    331|    case MFF_SCTP_DST:
  ------------------
  |  Branch (1272:5): [True: 17, False: 62.8k]
  ------------------
 1273|    331|        match_set_tp_dst(match, value->be16);
 1274|    331|        break;
 1275|       |
 1276|     72|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (1276:5): [True: 72, False: 62.7k]
  ------------------
 1277|     72|        match_set_tcp_flags(match, value->be16);
 1278|     72|        break;
 1279|       |
 1280|     67|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (1280:5): [True: 67, False: 62.7k]
  ------------------
 1281|    385|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (1281:5): [True: 318, False: 62.5k]
  ------------------
 1282|    385|        match_set_icmp_type(match, value->u8);
 1283|    385|        break;
 1284|       |
 1285|    168|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (1285:5): [True: 168, False: 62.6k]
  ------------------
 1286|    260|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (1286:5): [True: 92, False: 62.7k]
  ------------------
 1287|    260|        match_set_icmp_code(match, value->u8);
 1288|    260|        break;
 1289|       |
 1290|     38|    case MFF_ND_TARGET:
  ------------------
  |  Branch (1290:5): [True: 38, False: 62.8k]
  ------------------
 1291|     38|        match_set_nd_target(match, &value->ipv6);
 1292|     38|        break;
 1293|       |
 1294|    251|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (1294:5): [True: 251, False: 62.5k]
  ------------------
 1295|    251|        match_set_nd_reserved(match, value->be32);
 1296|    251|        break;
 1297|       |
 1298|    165|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (1298:5): [True: 165, False: 62.6k]
  ------------------
 1299|    165|        match_set_nd_options_type(match, value->u8);
 1300|    165|        break;
 1301|       |
 1302|    166|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (1302:5): [True: 166, False: 62.6k]
  ------------------
 1303|    166|        MATCH_SET_FIELD_UINT8(match, nsh.flags, value->u8);
  ------------------
  |  |   56|    166|    MATCH_SET_FIELD_MASKED(match, field, value, UINT8_MAX)
  |  |  ------------------
  |  |  |  |   50|    166|    do {                                                      \
  |  |  |  |   51|    166|        (match)->wc.masks.field = (msk);                      \
  |  |  |  |   52|    166|        (match)->flow.field = (value) & (msk);                \
  |  |  |  |   53|    166|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (53:14): [Folded, False: 166]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1304|    166|        break;
 1305|    237|    case MFF_NSH_TTL:
  ------------------
  |  Branch (1305:5): [True: 237, False: 62.6k]
  ------------------
 1306|    237|        MATCH_SET_FIELD_UINT8(match, nsh.ttl, value->u8);
  ------------------
  |  |   56|    237|    MATCH_SET_FIELD_MASKED(match, field, value, UINT8_MAX)
  |  |  ------------------
  |  |  |  |   50|    237|    do {                                                      \
  |  |  |  |   51|    237|        (match)->wc.masks.field = (msk);                      \
  |  |  |  |   52|    237|        (match)->flow.field = (value) & (msk);                \
  |  |  |  |   53|    237|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (53:14): [Folded, False: 237]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1307|    237|        break;
 1308|    196|    case MFF_NSH_MDTYPE:
  ------------------
  |  Branch (1308:5): [True: 196, False: 62.6k]
  ------------------
 1309|    196|        MATCH_SET_FIELD_UINT8(match, nsh.mdtype, value->u8);
  ------------------
  |  |   56|    196|    MATCH_SET_FIELD_MASKED(match, field, value, UINT8_MAX)
  |  |  ------------------
  |  |  |  |   50|    196|    do {                                                      \
  |  |  |  |   51|    196|        (match)->wc.masks.field = (msk);                      \
  |  |  |  |   52|    196|        (match)->flow.field = (value) & (msk);                \
  |  |  |  |   53|    196|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (53:14): [Folded, False: 196]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1310|    196|        break;
 1311|    581|    case MFF_NSH_NP:
  ------------------
  |  Branch (1311:5): [True: 581, False: 62.2k]
  ------------------
 1312|    581|        MATCH_SET_FIELD_UINT8(match, nsh.np, value->u8);
  ------------------
  |  |   56|    581|    MATCH_SET_FIELD_MASKED(match, field, value, UINT8_MAX)
  |  |  ------------------
  |  |  |  |   50|    581|    do {                                                      \
  |  |  |  |   51|    581|        (match)->wc.masks.field = (msk);                      \
  |  |  |  |   52|    581|        (match)->flow.field = (value) & (msk);                \
  |  |  |  |   53|    581|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (53:14): [Folded, False: 581]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1313|    581|        break;
 1314|     74|    case MFF_NSH_SPI:
  ------------------
  |  Branch (1314:5): [True: 74, False: 62.7k]
  ------------------
 1315|     74|        match->wc.masks.nsh.path_hdr |= htonl(NSH_SPI_MASK);
 1316|     74|        nsh_path_hdr_set_spi(&match->flow.nsh.path_hdr, value->be32);
 1317|     74|        break;
 1318|    287|    case MFF_NSH_SI:
  ------------------
  |  Branch (1318:5): [True: 287, False: 62.5k]
  ------------------
 1319|    287|        match->wc.masks.nsh.path_hdr |= htonl(NSH_SI_MASK);
 1320|    287|        nsh_path_hdr_set_si(&match->flow.nsh.path_hdr, value->u8);
 1321|    287|        break;
 1322|      9|    case MFF_NSH_C1:
  ------------------
  |  Branch (1322:5): [True: 9, False: 62.8k]
  ------------------
 1323|     59|    case MFF_NSH_C2:
  ------------------
  |  Branch (1323:5): [True: 50, False: 62.7k]
  ------------------
 1324|     77|    case MFF_NSH_C3:
  ------------------
  |  Branch (1324:5): [True: 18, False: 62.8k]
  ------------------
 1325|     87|    case MFF_NSH_C4:
  ------------------
  |  Branch (1325:5): [True: 10, False: 62.8k]
  ------------------
 1326|     87|        MATCH_SET_FIELD_BE32(match, nsh.context[mf->id - MFF_NSH_C1],
  ------------------
  |  |   59|     87|    MATCH_SET_FIELD_MASKED(match, field, value, OVS_BE32_MAX)
  |  |  ------------------
  |  |  |  |   50|     87|    do {                                                      \
  |  |  |  |   51|     87|        (match)->wc.masks.field = (msk);                      \
  |  |  |  |   52|     87|        (match)->flow.field = (value) & (msk);                \
  |  |  |  |   53|     87|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (53:14): [Folded, False: 87]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1327|     87|                             value->be32);
 1328|     87|        break;
 1329|       |
 1330|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (1330:5): [True: 0, False: 62.8k]
  ------------------
 1331|      0|    default:
  ------------------
  |  Branch (1331:5): [True: 0, False: 62.8k]
  ------------------
 1332|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1333|  62.8k|    }
 1334|  62.8k|}
mf_field_len:
 1403|  65.4k|{
 1404|  65.4k|    int len, mask_len;
 1405|  65.4k|    bool is_masked = mask && !is_all_ones(mask, mf->n_bytes);
  ------------------
  |  Branch (1405:22): [True: 36.5k, False: 28.9k]
  |  Branch (1405:30): [True: 36.5k, False: 0]
  ------------------
 1406|       |
 1407|  65.4k|    len = field_len(mf, value);
 1408|  65.4k|    if (is_masked) {
  ------------------
  |  Branch (1408:9): [True: 36.5k, False: 28.9k]
  ------------------
 1409|  36.5k|        mask_len = field_len(mf, mask);
 1410|  36.5k|        len = MAX(len, mask_len);
  ------------------
  |  |   95|  36.5k|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (95:20): [True: 0, False: 36.5k]
  |  |  ------------------
  ------------------
 1411|  36.5k|    }
 1412|       |
 1413|  65.4k|    if (is_masked_) {
  ------------------
  |  Branch (1413:9): [True: 65.4k, False: 0]
  ------------------
 1414|  65.4k|        *is_masked_ = is_masked;
 1415|  65.4k|    }
 1416|       |
 1417|  65.4k|    return len;
 1418|  65.4k|}
mf_is_tun_metadata:
 1897|  48.8k|{
 1898|  48.8k|    return mf->id >= MFF_TUN_METADATA0 &&
  ------------------
  |  Branch (1898:12): [True: 46.5k, False: 2.20k]
  ------------------
 1899|  46.5k|           mf->id < MFF_TUN_METADATA0 + TUN_METADATA_NUM_OPTS;
  ------------------
  |  |   26|  95.3k|#define TUN_METADATA_NUM_OPTS 64
  ------------------
  |  Branch (1899:12): [True: 25.1k, False: 21.4k]
  ------------------
 1900|  48.8k|}
mf_is_pipeline_field:
 2026|  73.1k|{
 2027|  73.1k|    switch (mf->id) {
 2028|     75|    case MFF_TUN_ID:
  ------------------
  |  Branch (2028:5): [True: 75, False: 73.0k]
  ------------------
 2029|    236|    case MFF_TUN_SRC:
  ------------------
  |  Branch (2029:5): [True: 161, False: 72.9k]
  ------------------
 2030|    284|    case MFF_TUN_DST:
  ------------------
  |  Branch (2030:5): [True: 48, False: 73.0k]
  ------------------
 2031|    787|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (2031:5): [True: 503, False: 72.6k]
  ------------------
 2032|  1.03k|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (2032:5): [True: 244, False: 72.8k]
  ------------------
 2033|  1.17k|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (2033:5): [True: 140, False: 72.9k]
  ------------------
 2034|  1.46k|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (2034:5): [True: 294, False: 72.8k]
  ------------------
 2035|  1.74k|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (2035:5): [True: 283, False: 72.8k]
  ------------------
 2036|  2.04k|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (2036:5): [True: 292, False: 72.8k]
  ------------------
 2037|  2.05k|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (2037:5): [True: 11, False: 73.1k]
  ------------------
 2038|  2.12k|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (2038:5): [True: 71, False: 73.0k]
  ------------------
 2039|  2.22k|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (2039:5): [True: 103, False: 73.0k]
  ------------------
 2040|  2.42k|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (2040:5): [True: 200, False: 72.9k]
  ------------------
 2041|  2.46k|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (2041:5): [True: 43, False: 73.0k]
  ------------------
 2042|  1.86M|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2110|  5.65k|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2110:5): [True: 835, False: 72.2k]
  |  |  |  Branch (2110:29): [True: 2.35k, False: 70.7k]
  |  |  ------------------
  |  | 2111|  6.82k|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2111:5): [True: 570, False: 72.5k]
  |  |  |  Branch (2111:29): [True: 602, False: 72.5k]
  |  |  ------------------
  |  | 2112|  8.57k|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2112:5): [True: 432, False: 72.6k]
  |  |  |  Branch (2112:29): [True: 1.31k, False: 71.8k]
  |  |  ------------------
  |  | 2113|  11.8k|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2113:5): [True: 3.13k, False: 69.9k]
  |  |  |  Branch (2113:29): [True: 147, False: 72.9k]
  |  |  ------------------
  |  | 2114|  11.9k|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2114:5): [True: 39, False: 73.0k]
  |  |  |  Branch (2114:29): [True: 72, False: 73.0k]
  |  |  ------------------
  |  | 2115|  12.2k|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2115:5): [True: 164, False: 72.9k]
  |  |  |  Branch (2115:30): [True: 108, False: 73.0k]
  |  |  ------------------
  |  | 2116|  15.7k|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2116:5): [True: 3.11k, False: 70.0k]
  |  |  |  Branch (2116:30): [True: 369, False: 72.7k]
  |  |  ------------------
  |  | 2117|  17.3k|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2117:5): [True: 648, False: 72.4k]
  |  |  |  Branch (2117:30): [True: 947, False: 72.1k]
  |  |  ------------------
  |  | 2118|  18.8k|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2118:5): [True: 880, False: 72.2k]
  |  |  |  Branch (2118:30): [True: 604, False: 72.5k]
  |  |  ------------------
  |  | 2119|  23.2k|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2119:5): [True: 3.88k, False: 69.2k]
  |  |  |  Branch (2119:30): [True: 542, False: 72.5k]
  |  |  ------------------
  |  | 2120|  25.4k|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2120:5): [True: 1.24k, False: 71.8k]
  |  |  |  Branch (2120:30): [True: 998, False: 72.1k]
  |  |  ------------------
  |  | 2121|  27.0k|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2121:5): [True: 1.43k, False: 71.6k]
  |  |  |  Branch (2121:30): [True: 158, False: 72.9k]
  |  |  ------------------
  |  | 2122|  27.9k|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2122:5): [True: 544, False: 72.5k]
  |  |  |  Branch (2122:30): [True: 374, False: 72.7k]
  |  |  ------------------
  |  | 2123|  29.0k|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2123:5): [True: 846, False: 72.2k]
  |  |  |  Branch (2123:30): [True: 216, False: 72.9k]
  |  |  ------------------
  |  | 2124|  29.7k|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2124:5): [True: 103, False: 73.0k]
  |  |  |  Branch (2124:30): [True: 577, False: 72.5k]
  |  |  ------------------
  |  | 2125|  31.3k|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2125:5): [True: 600, False: 72.5k]
  |  |  |  Branch (2125:30): [True: 1.04k, False: 72.0k]
  |  |  ------------------
  |  | 2126|  33.2k|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2126:5): [True: 874, False: 72.2k]
  |  |  |  Branch (2126:30): [True: 1.04k, False: 72.0k]
  |  |  ------------------
  |  | 2127|  34.7k|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2127:5): [True: 877, False: 72.2k]
  |  |  |  Branch (2127:30): [True: 623, False: 72.5k]
  |  |  ------------------
  |  | 2128|  35.2k|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2128:5): [True: 101, False: 73.0k]
  |  |  |  Branch (2128:30): [True: 374, False: 72.7k]
  |  |  ------------------
  |  | 2129|  36.3k|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2129:5): [True: 500, False: 72.6k]
  |  |  |  Branch (2129:30): [True: 558, False: 72.5k]
  |  |  ------------------
  |  | 2130|  37.2k|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2130:5): [True: 528, False: 72.5k]
  |  |  |  Branch (2130:30): [True: 390, False: 72.7k]
  |  |  ------------------
  |  | 2131|  38.0k|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2131:5): [True: 137, False: 72.9k]
  |  |  |  Branch (2131:30): [True: 660, False: 72.4k]
  |  |  ------------------
  |  | 2132|  38.4k|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2132:5): [True: 91, False: 73.0k]
  |  |  |  Branch (2132:30): [True: 352, False: 72.7k]
  |  |  ------------------
  |  | 2133|  39.3k|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2133:5): [True: 603, False: 72.5k]
  |  |  |  Branch (2133:30): [True: 311, False: 72.8k]
  |  |  ------------------
  |  | 2134|  40.5k|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2134:5): [True: 359, False: 72.7k]
  |  |  |  Branch (2134:30): [True: 817, False: 72.3k]
  |  |  ------------------
  |  | 2135|  41.3k|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2135:5): [True: 683, False: 72.4k]
  |  |  |  Branch (2135:30): [True: 101, False: 73.0k]
  |  |  ------------------
  |  | 2136|  41.5k|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2136:5): [True: 205, False: 72.9k]
  |  |  |  Branch (2136:30): [True: 23, False: 73.1k]
  |  |  ------------------
  |  | 2137|  42.5k|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2137:5): [True: 124, False: 73.0k]
  |  |  |  Branch (2137:30): [True: 823, False: 72.3k]
  |  |  ------------------
  |  | 2138|  43.5k|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2138:5): [True: 244, False: 72.8k]
  |  |  |  Branch (2138:30): [True: 743, False: 72.3k]
  |  |  ------------------
  |  | 2139|  44.0k|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2139:5): [True: 536, False: 72.5k]
  |  |  |  Branch (2139:30): [True: 20, False: 73.1k]
  |  |  ------------------
  |  | 2140|  44.8k|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2140:5): [True: 369, False: 72.7k]
  |  |  |  Branch (2140:30): [True: 396, False: 72.7k]
  |  |  ------------------
  |  | 2141|  45.6k|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2141:5): [True: 107, False: 73.0k]
  |  |  ------------------
  ------------------
 2043|  1.86M|    case MFF_METADATA:
  ------------------
  |  Branch (2043:5): [True: 114, False: 73.0k]
  ------------------
 2044|  47.0k|    case MFF_IN_PORT:
  ------------------
  |  Branch (2044:5): [True: 1.33k, False: 71.7k]
  ------------------
 2045|  47.2k|    case MFF_IN_PORT_OXM:
  ------------------
  |  Branch (2045:5): [True: 203, False: 72.9k]
  ------------------
 2046|  1.63M|    CASE_MFF_REGS:
  ------------------
  |  | 2065|  48.0k|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:     \
  |  |  ------------------
  |  |  |  Branch (2065:5): [True: 231, False: 72.8k]
  |  |  |  Branch (2065:20): [True: 57, False: 73.0k]
  |  |  |  Branch (2065:35): [True: 452, False: 72.6k]
  |  |  |  Branch (2065:50): [True: 95, False: 73.0k]
  |  |  ------------------
  |  | 2066|  49.1k|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:     \
  |  |  ------------------
  |  |  |  Branch (2066:5): [True: 133, False: 72.9k]
  |  |  |  Branch (2066:20): [True: 349, False: 72.7k]
  |  |  |  Branch (2066:35): [True: 531, False: 72.5k]
  |  |  |  Branch (2066:50): [True: 34, False: 73.0k]
  |  |  ------------------
  |  | 2067|  49.9k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11:   \
  |  |  ------------------
  |  |  |  Branch (2067:5): [True: 108, False: 73.0k]
  |  |  |  Branch (2067:20): [True: 253, False: 72.8k]
  |  |  |  Branch (2067:35): [True: 216, False: 72.9k]
  |  |  |  Branch (2067:51): [True: 185, False: 72.9k]
  |  |  ------------------
  |  | 2068|  52.1k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15: \
  |  |  ------------------
  |  |  |  Branch (2068:5): [True: 389, False: 72.7k]
  |  |  |  Branch (2068:21): [True: 269, False: 72.8k]
  |  |  |  Branch (2068:37): [True: 928, False: 72.1k]
  |  |  |  Branch (2068:53): [True: 688, False: 72.4k]
  |  |  ------------------
  |  | 2069|  52.4k|    case MFF_REG16: case MFF_REG17: case MFF_REG18: case MFF_REG19: \
  |  |  ------------------
  |  |  |  Branch (2069:5): [True: 22, False: 73.1k]
  |  |  |  Branch (2069:21): [True: 42, False: 73.0k]
  |  |  |  Branch (2069:37): [True: 16, False: 73.1k]
  |  |  |  Branch (2069:53): [True: 150, False: 72.9k]
  |  |  ------------------
  |  | 2070|  52.7k|    case MFF_REG20: case MFF_REG21: case MFF_REG22: case MFF_REG23: \
  |  |  ------------------
  |  |  |  Branch (2070:5): [True: 20, False: 73.1k]
  |  |  |  Branch (2070:21): [True: 235, False: 72.8k]
  |  |  |  Branch (2070:37): [True: 10, False: 73.1k]
  |  |  |  Branch (2070:53): [True: 51, False: 73.0k]
  |  |  ------------------
  |  | 2071|  53.0k|    case MFF_REG24: case MFF_REG25: case MFF_REG26: case MFF_REG27: \
  |  |  ------------------
  |  |  |  Branch (2071:5): [True: 71, False: 73.0k]
  |  |  |  Branch (2071:21): [True: 19, False: 73.1k]
  |  |  |  Branch (2071:37): [True: 15, False: 73.1k]
  |  |  |  Branch (2071:53): [True: 204, False: 72.9k]
  |  |  ------------------
  |  | 2072|  53.2k|    case MFF_REG28: case MFF_REG29: case MFF_REG30: case MFF_REG31
  |  |  ------------------
  |  |  |  Branch (2072:5): [True: 140, False: 72.9k]
  |  |  |  Branch (2072:21): [True: 20, False: 73.1k]
  |  |  |  Branch (2072:37): [True: 12, False: 73.1k]
  |  |  ------------------
  ------------------
 2047|  1.63M|    CASE_MFF_XREGS:
  ------------------
  |  | 2081|  54.7k|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3:    \
  |  |  ------------------
  |  |  |  Branch (2081:5): [True: 206, False: 72.9k]
  |  |  |  Branch (2081:21): [True: 72, False: 73.0k]
  |  |  |  Branch (2081:37): [True: 110, False: 73.0k]
  |  |  |  Branch (2081:53): [True: 1.15k, False: 71.9k]
  |  |  ------------------
  |  | 2082|  55.3k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7:    \
  |  |  ------------------
  |  |  |  Branch (2082:5): [True: 97, False: 73.0k]
  |  |  |  Branch (2082:21): [True: 82, False: 73.0k]
  |  |  |  Branch (2082:37): [True: 167, False: 72.9k]
  |  |  |  Branch (2082:53): [True: 237, False: 72.8k]
  |  |  ------------------
  |  | 2083|  55.7k|    case MFF_XREG8: case MFF_XREG9: case MFF_XREG10: case MFF_XREG11:  \
  |  |  ------------------
  |  |  |  Branch (2083:5): [True: 7, False: 73.1k]
  |  |  |  Branch (2083:21): [True: 195, False: 72.9k]
  |  |  |  Branch (2083:37): [True: 26, False: 73.0k]
  |  |  |  Branch (2083:54): [True: 203, False: 72.9k]
  |  |  ------------------
  |  | 2084|  56.3k|    case MFF_XREG12: case MFF_XREG13: case MFF_XREG14: case MFF_XREG15
  |  |  ------------------
  |  |  |  Branch (2084:5): [True: 292, False: 72.8k]
  |  |  |  Branch (2084:22): [True: 139, False: 72.9k]
  |  |  |  Branch (2084:39): [True: 27, False: 73.0k]
  |  |  ------------------
  ------------------
 2048|   882k|    CASE_MFF_XXREGS:
  ------------------
  |  | 2093|  62.5k|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3: \
  |  |  ------------------
  |  |  |  Branch (2093:5): [True: 113, False: 73.0k]
  |  |  |  Branch (2093:22): [True: 23, False: 73.1k]
  |  |  |  Branch (2093:39): [True: 4.62k, False: 68.5k]
  |  |  |  Branch (2093:56): [True: 1.45k, False: 71.6k]
  |  |  ------------------
  |  | 2094|  62.6k|    case MFF_XXREG4: case MFF_XXREG5: case MFF_XXREG6: case MFF_XXREG7
  |  |  ------------------
  |  |  |  Branch (2094:5): [True: 18, False: 73.1k]
  |  |  |  Branch (2094:22): [True: 40, False: 73.0k]
  |  |  |  Branch (2094:39): [True: 8, False: 73.1k]
  |  |  ------------------
  ------------------
 2049|   486k|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (2049:5): [True: 66, False: 73.0k]
  ------------------
 2050|  62.6k|        return true;
 2051|       |
 2052|     40|    case MFF_DP_HASH:
  ------------------
  |  Branch (2052:5): [True: 40, False: 73.0k]
  ------------------
 2053|    578|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (2053:5): [True: 538, False: 72.5k]
  ------------------
 2054|    772|    case MFF_CONJ_ID:
  ------------------
  |  Branch (2054:5): [True: 194, False: 72.9k]
  ------------------
 2055|    772|    case MFF_TUN_TTL:
  ------------------
  |  Branch (2055:5): [True: 0, False: 73.1k]
  ------------------
 2056|    772|    case MFF_TUN_TOS:
  ------------------
  |  Branch (2056:5): [True: 0, False: 73.1k]
  ------------------
 2057|    819|    case MFF_ACTSET_OUTPUT:
  ------------------
  |  Branch (2057:5): [True: 47, False: 73.0k]
  ------------------
 2058|    819|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (2058:5): [True: 0, False: 73.1k]
  ------------------
 2059|    881|    case MFF_PKT_MARK:
  ------------------
  |  Branch (2059:5): [True: 62, False: 73.0k]
  ------------------
 2060|  1.09k|    case MFF_CT_STATE:
  ------------------
  |  Branch (2060:5): [True: 215, False: 72.9k]
  ------------------
 2061|  1.17k|    case MFF_CT_ZONE:
  ------------------
  |  Branch (2061:5): [True: 74, False: 73.0k]
  ------------------
 2062|  1.20k|    case MFF_CT_MARK:
  ------------------
  |  Branch (2062:5): [True: 38, False: 73.0k]
  ------------------
 2063|  1.28k|    case MFF_CT_LABEL:
  ------------------
  |  Branch (2063:5): [True: 73, False: 73.0k]
  ------------------
 2064|  1.34k|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (2064:5): [True: 66, False: 73.0k]
  ------------------
 2065|  1.42k|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (2065:5): [True: 78, False: 73.0k]
  ------------------
 2066|  1.49k|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (2066:5): [True: 72, False: 73.0k]
  ------------------
 2067|  1.51k|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (2067:5): [True: 19, False: 73.1k]
  ------------------
 2068|  1.52k|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (2068:5): [True: 6, False: 73.1k]
  ------------------
 2069|  1.54k|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (2069:5): [True: 23, False: 73.1k]
  ------------------
 2070|  1.56k|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (2070:5): [True: 18, False: 73.1k]
  ------------------
 2071|  1.60k|    case MFF_ETH_SRC:
  ------------------
  |  Branch (2071:5): [True: 37, False: 73.0k]
  ------------------
 2072|  1.66k|    case MFF_ETH_DST:
  ------------------
  |  Branch (2072:5): [True: 66, False: 73.0k]
  ------------------
 2073|  1.70k|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (2073:5): [True: 41, False: 73.0k]
  ------------------
 2074|  1.94k|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (2074:5): [True: 239, False: 72.8k]
  ------------------
 2075|  1.94k|    case MFF_DL_VLAN:
  ------------------
  |  Branch (2075:5): [True: 0, False: 73.1k]
  ------------------
 2076|  2.21k|    case MFF_VLAN_VID:
  ------------------
  |  Branch (2076:5): [True: 268, False: 72.8k]
  ------------------
 2077|  2.21k|    case MFF_DL_VLAN_PCP:
  ------------------
  |  Branch (2077:5): [True: 0, False: 73.1k]
  ------------------
 2078|  2.24k|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (2078:5): [True: 34, False: 73.0k]
  ------------------
 2079|  2.31k|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (2079:5): [True: 62, False: 73.0k]
  ------------------
 2080|  2.45k|    case MFF_MPLS_TC:
  ------------------
  |  Branch (2080:5): [True: 140, False: 72.9k]
  ------------------
 2081|  2.60k|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (2081:5): [True: 154, False: 72.9k]
  ------------------
 2082|  4.35k|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (2082:5): [True: 1.75k, False: 71.3k]
  ------------------
 2083|  4.42k|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (2083:5): [True: 65, False: 73.0k]
  ------------------
 2084|  4.44k|    case MFF_IPV4_DST:
  ------------------
  |  Branch (2084:5): [True: 21, False: 73.1k]
  ------------------
 2085|  4.50k|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (2085:5): [True: 65, False: 73.0k]
  ------------------
 2086|  4.57k|    case MFF_IPV6_DST:
  ------------------
  |  Branch (2086:5): [True: 66, False: 73.0k]
  ------------------
 2087|  4.59k|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (2087:5): [True: 18, False: 73.1k]
  ------------------
 2088|  4.78k|    case MFF_IP_PROTO:
  ------------------
  |  Branch (2088:5): [True: 194, False: 72.9k]
  ------------------
 2089|  4.81k|    case MFF_IP_DSCP:
  ------------------
  |  Branch (2089:5): [True: 34, False: 73.0k]
  ------------------
 2090|  4.83k|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (2090:5): [True: 18, False: 73.1k]
  ------------------
 2091|  5.40k|    case MFF_IP_ECN:
  ------------------
  |  Branch (2091:5): [True: 572, False: 72.5k]
  ------------------
 2092|  5.60k|    case MFF_IP_TTL:
  ------------------
  |  Branch (2092:5): [True: 196, False: 72.9k]
  ------------------
 2093|  5.68k|    case MFF_IP_FRAG:
  ------------------
  |  Branch (2093:5): [True: 81, False: 73.0k]
  ------------------
 2094|  5.72k|    case MFF_ARP_OP:
  ------------------
  |  Branch (2094:5): [True: 36, False: 73.0k]
  ------------------
 2095|  5.91k|    case MFF_ARP_SPA:
  ------------------
  |  Branch (2095:5): [True: 195, False: 72.9k]
  ------------------
 2096|  6.31k|    case MFF_ARP_TPA:
  ------------------
  |  Branch (2096:5): [True: 395, False: 72.7k]
  ------------------
 2097|  6.31k|    case MFF_ARP_SHA:
  ------------------
  |  Branch (2097:5): [True: 6, False: 73.1k]
  ------------------
 2098|  6.33k|    case MFF_ARP_THA:
  ------------------
  |  Branch (2098:5): [True: 18, False: 73.1k]
  ------------------
 2099|  6.38k|    case MFF_TCP_SRC:
  ------------------
  |  Branch (2099:5): [True: 53, False: 73.0k]
  ------------------
 2100|  6.45k|    case MFF_TCP_DST:
  ------------------
  |  Branch (2100:5): [True: 69, False: 73.0k]
  ------------------
 2101|  6.46k|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (2101:5): [True: 10, False: 73.1k]
  ------------------
 2102|  6.66k|    case MFF_UDP_SRC:
  ------------------
  |  Branch (2102:5): [True: 194, False: 72.9k]
  ------------------
 2103|  6.96k|    case MFF_UDP_DST:
  ------------------
  |  Branch (2103:5): [True: 303, False: 72.8k]
  ------------------
 2104|  6.99k|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (2104:5): [True: 34, False: 73.0k]
  ------------------
 2105|  7.06k|    case MFF_SCTP_DST:
  ------------------
  |  Branch (2105:5): [True: 63, False: 73.0k]
  ------------------
 2106|  7.13k|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (2106:5): [True: 74, False: 73.0k]
  ------------------
 2107|  7.20k|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (2107:5): [True: 69, False: 73.0k]
  ------------------
 2108|  7.27k|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (2108:5): [True: 71, False: 73.0k]
  ------------------
 2109|  7.28k|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (2109:5): [True: 10, False: 73.1k]
  ------------------
 2110|  7.35k|    case MFF_ND_TARGET:
  ------------------
  |  Branch (2110:5): [True: 68, False: 73.0k]
  ------------------
 2111|  7.42k|    case MFF_ND_SLL:
  ------------------
  |  Branch (2111:5): [True: 66, False: 73.0k]
  ------------------
 2112|  7.48k|    case MFF_ND_TLL:
  ------------------
  |  Branch (2112:5): [True: 66, False: 73.0k]
  ------------------
 2113|  7.53k|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (2113:5): [True: 50, False: 73.0k]
  ------------------
 2114|  7.75k|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (2114:5): [True: 221, False: 72.9k]
  ------------------
 2115|  7.82k|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (2115:5): [True: 66, False: 73.0k]
  ------------------
 2116|  8.01k|    case MFF_NSH_TTL:
  ------------------
  |  Branch (2116:5): [True: 196, False: 72.9k]
  ------------------
 2117|  8.08k|    case MFF_NSH_MDTYPE:
  ------------------
  |  Branch (2117:5): [True: 63, False: 73.0k]
  ------------------
 2118|  8.14k|    case MFF_NSH_NP:
  ------------------
  |  Branch (2118:5): [True: 66, False: 73.0k]
  ------------------
 2119|  8.32k|    case MFF_NSH_SPI:
  ------------------
  |  Branch (2119:5): [True: 176, False: 72.9k]
  ------------------
 2120|  8.37k|    case MFF_NSH_SI:
  ------------------
  |  Branch (2120:5): [True: 47, False: 73.0k]
  ------------------
 2121|  8.57k|    case MFF_NSH_C1:
  ------------------
  |  Branch (2121:5): [True: 201, False: 72.9k]
  ------------------
 2122|  10.3k|    case MFF_NSH_C2:
  ------------------
  |  Branch (2122:5): [True: 1.76k, False: 71.3k]
  ------------------
 2123|  10.4k|    case MFF_NSH_C3:
  ------------------
  |  Branch (2123:5): [True: 65, False: 73.0k]
  ------------------
 2124|  10.4k|    case MFF_NSH_C4:
  ------------------
  |  Branch (2124:5): [True: 26, False: 73.0k]
  ------------------
 2125|  10.4k|        return false;
 2126|       |
 2127|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (2127:5): [True: 0, False: 73.1k]
  ------------------
 2128|      0|    default:
  ------------------
  |  Branch (2128:5): [True: 0, False: 73.1k]
  ------------------
 2129|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 2130|  73.1k|    }
 2131|  73.1k|}
mf_set_wild:
 2162|  23.6k|{
 2163|  23.6k|    if (err_str) {
  ------------------
  |  Branch (2163:9): [True: 23.6k, False: 0]
  ------------------
 2164|  23.6k|        *err_str = NULL;
 2165|  23.6k|    }
 2166|       |
 2167|  23.6k|    switch (mf->id) {
 2168|    878|    case MFF_DP_HASH:
  ------------------
  |  Branch (2168:5): [True: 878, False: 22.7k]
  ------------------
 2169|    878|        match->flow.dp_hash = 0;
 2170|    878|        match->wc.masks.dp_hash = 0;
 2171|    878|        break;
 2172|     67|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (2172:5): [True: 67, False: 23.6k]
  ------------------
 2173|     67|        match->flow.recirc_id = 0;
 2174|     67|        match->wc.masks.recirc_id = 0;
 2175|     67|        break;
 2176|     18|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (2176:5): [True: 18, False: 23.6k]
  ------------------
 2177|     18|        match->flow.packet_type = 0;
 2178|     18|        match->wc.masks.packet_type = 0;
 2179|     18|        break;
 2180|     18|    case MFF_CONJ_ID:
  ------------------
  |  Branch (2180:5): [True: 18, False: 23.6k]
  ------------------
 2181|     18|        match->flow.conj_id = 0;
 2182|     18|        match->wc.masks.conj_id = 0;
 2183|     18|        break;
 2184|     19|    case MFF_TUN_ID:
  ------------------
  |  Branch (2184:5): [True: 19, False: 23.6k]
  ------------------
 2185|     19|        match_set_tun_id_masked(match, htonll(0), htonll(0));
 2186|     19|        break;
 2187|     33|    case MFF_TUN_SRC:
  ------------------
  |  Branch (2187:5): [True: 33, False: 23.6k]
  ------------------
 2188|     33|        match_set_tun_src_masked(match, htonl(0), htonl(0));
 2189|     33|        break;
 2190|     43|    case MFF_TUN_DST:
  ------------------
  |  Branch (2190:5): [True: 43, False: 23.6k]
  ------------------
 2191|     43|        match_set_tun_dst_masked(match, htonl(0), htonl(0));
 2192|     43|        break;
 2193|     45|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (2193:5): [True: 45, False: 23.6k]
  ------------------
 2194|     45|        memset(&match->wc.masks.tunnel.ipv6_src, 0,
 2195|     45|               sizeof match->wc.masks.tunnel.ipv6_src);
 2196|     45|        memset(&match->flow.tunnel.ipv6_src, 0,
 2197|     45|               sizeof match->flow.tunnel.ipv6_src);
 2198|     45|        break;
 2199|     32|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (2199:5): [True: 32, False: 23.6k]
  ------------------
 2200|     32|        memset(&match->wc.masks.tunnel.ipv6_dst, 0,
 2201|     32|               sizeof match->wc.masks.tunnel.ipv6_dst);
 2202|     32|        memset(&match->flow.tunnel.ipv6_dst, 0,
 2203|     32|               sizeof match->flow.tunnel.ipv6_dst);
 2204|     32|        break;
 2205|     11|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (2205:5): [True: 11, False: 23.6k]
  ------------------
 2206|     11|        match_set_tun_flags_masked(match, 0, 0);
 2207|     11|        break;
 2208|     92|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (2208:5): [True: 92, False: 23.5k]
  ------------------
 2209|     92|        match_set_tun_gbp_id_masked(match, 0, 0);
 2210|     92|        break;
 2211|    257|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (2211:5): [True: 257, False: 23.4k]
  ------------------
 2212|    257|        match_set_tun_gbp_flags_masked(match, 0, 0);
 2213|    257|        break;
 2214|      0|    case MFF_TUN_TOS:
  ------------------
  |  Branch (2214:5): [True: 0, False: 23.6k]
  ------------------
 2215|      0|        match_set_tun_tos_masked(match, 0, 0);
 2216|      0|        break;
 2217|      0|    case MFF_TUN_TTL:
  ------------------
  |  Branch (2217:5): [True: 0, False: 23.6k]
  ------------------
 2218|      0|        match_set_tun_ttl_masked(match, 0, 0);
 2219|      0|        break;
 2220|    199|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (2220:5): [True: 199, False: 23.4k]
  ------------------
 2221|    199|        match_set_tun_erspan_ver_masked(match, 0, 0);
 2222|    199|        break;
 2223|     19|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (2223:5): [True: 19, False: 23.6k]
  ------------------
 2224|     19|        match_set_tun_erspan_idx_masked(match, 0, 0);
 2225|     19|        break;
 2226|     66|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (2226:5): [True: 66, False: 23.6k]
  ------------------
 2227|     66|        match_set_tun_erspan_dir_masked(match, 0, 0);
 2228|     66|        break;
 2229|     81|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (2229:5): [True: 81, False: 23.5k]
  ------------------
 2230|     81|        match_set_tun_erspan_hwid_masked(match, 0, 0);
 2231|     81|        break;
 2232|     99|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (2232:5): [True: 99, False: 23.5k]
  ------------------
 2233|     99|        match_set_tun_gtpu_flags_masked(match, 0, 0);
 2234|     99|        break;
 2235|    226|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (2235:5): [True: 226, False: 23.4k]
  ------------------
 2236|    226|        match_set_tun_gtpu_msgtype_masked(match, 0, 0);
 2237|    226|        break;
 2238|      0|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2110|      0|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2110:5): [True: 0, False: 23.6k]
  |  |  |  Branch (2110:29): [True: 0, False: 23.6k]
  |  |  ------------------
  |  | 2111|      0|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2111:5): [True: 0, False: 23.6k]
  |  |  |  Branch (2111:29): [True: 0, False: 23.6k]
  |  |  ------------------
  |  | 2112|      0|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2112:5): [True: 0, False: 23.6k]
  |  |  |  Branch (2112:29): [True: 0, False: 23.6k]
  |  |  ------------------
  |  | 2113|      0|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2113:5): [True: 0, False: 23.6k]
  |  |  |  Branch (2113:29): [True: 0, False: 23.6k]
  |  |  ------------------
  |  | 2114|      0|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2114:5): [True: 0, False: 23.6k]
  |  |  |  Branch (2114:29): [True: 0, False: 23.6k]
  |  |  ------------------
  |  | 2115|      0|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2115:5): [True: 0, False: 23.6k]
  |  |  |  Branch (2115:30): [True: 0, False: 23.6k]
  |  |  ------------------
  |  | 2116|      0|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2116:5): [True: 0, False: 23.6k]
  |  |  |  Branch (2116:30): [True: 0, False: 23.6k]
  |  |  ------------------
  |  | 2117|      0|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2117:5): [True: 0, False: 23.6k]
  |  |  |  Branch (2117:30): [True: 0, False: 23.6k]
  |  |  ------------------
  |  | 2118|      0|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2118:5): [True: 0, False: 23.6k]
  |  |  |  Branch (2118:30): [True: 0, False: 23.6k]
  |  |  ------------------
  |  | 2119|      0|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2119:5): [True: 0, False: 23.6k]
  |  |  |  Branch (2119:30): [True: 0, False: 23.6k]
  |  |  ------------------
  |  | 2120|      0|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2120:5): [True: 0, False: 23.6k]
  |  |  |  Branch (2120:30): [True: 0, False: 23.6k]
  |  |  ------------------
  |  | 2121|      0|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2121:5): [True: 0, False: 23.6k]
  |  |  |  Branch (2121:30): [True: 0, False: 23.6k]
  |  |  ------------------
  |  | 2122|      0|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2122:5): [True: 0, False: 23.6k]
  |  |  |  Branch (2122:30): [True: 0, False: 23.6k]
  |  |  ------------------
  |  | 2123|      0|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2123:5): [True: 0, False: 23.6k]
  |  |  |  Branch (2123:30): [True: 0, False: 23.6k]
  |  |  ------------------
  |  | 2124|      0|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2124:5): [True: 0, False: 23.6k]
  |  |  |  Branch (2124:30): [True: 0, False: 23.6k]
  |  |  ------------------
  |  | 2125|      0|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2125:5): [True: 0, False: 23.6k]
  |  |  |  Branch (2125:30): [True: 0, False: 23.6k]
  |  |  ------------------
  |  | 2126|      0|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2126:5): [True: 0, False: 23.6k]
  |  |  |  Branch (2126:30): [True: 0, False: 23.6k]
  |  |  ------------------
  |  | 2127|      0|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2127:5): [True: 0, False: 23.6k]
  |  |  |  Branch (2127:30): [True: 0, False: 23.6k]
  |  |  ------------------
  |  | 2128|      0|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2128:5): [True: 0, False: 23.6k]
  |  |  |  Branch (2128:30): [True: 0, False: 23.6k]
  |  |  ------------------
  |  | 2129|      0|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2129:5): [True: 0, False: 23.6k]
  |  |  |  Branch (2129:30): [True: 0, False: 23.6k]
  |  |  ------------------
  |  | 2130|      0|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2130:5): [True: 0, False: 23.6k]
  |  |  |  Branch (2130:30): [True: 0, False: 23.6k]
  |  |  ------------------
  |  | 2131|      0|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2131:5): [True: 0, False: 23.6k]
  |  |  |  Branch (2131:30): [True: 0, False: 23.6k]
  |  |  ------------------
  |  | 2132|      0|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2132:5): [True: 0, False: 23.6k]
  |  |  |  Branch (2132:30): [True: 0, False: 23.6k]
  |  |  ------------------
  |  | 2133|      0|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2133:5): [True: 0, False: 23.6k]
  |  |  |  Branch (2133:30): [True: 0, False: 23.6k]
  |  |  ------------------
  |  | 2134|      0|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2134:5): [True: 0, False: 23.6k]
  |  |  |  Branch (2134:30): [True: 0, False: 23.6k]
  |  |  ------------------
  |  | 2135|      0|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2135:5): [True: 0, False: 23.6k]
  |  |  |  Branch (2135:30): [True: 0, False: 23.6k]
  |  |  ------------------
  |  | 2136|      0|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2136:5): [True: 0, False: 23.6k]
  |  |  |  Branch (2136:30): [True: 0, False: 23.6k]
  |  |  ------------------
  |  | 2137|      0|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2137:5): [True: 0, False: 23.6k]
  |  |  |  Branch (2137:30): [True: 0, False: 23.6k]
  |  |  ------------------
  |  | 2138|      0|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2138:5): [True: 0, False: 23.6k]
  |  |  |  Branch (2138:30): [True: 0, False: 23.6k]
  |  |  ------------------
  |  | 2139|      0|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2139:5): [True: 0, False: 23.6k]
  |  |  |  Branch (2139:30): [True: 0, False: 23.6k]
  |  |  ------------------
  |  | 2140|      0|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2140:5): [True: 0, False: 23.6k]
  |  |  |  Branch (2140:30): [True: 0, False: 23.6k]
  |  |  ------------------
  |  | 2141|      0|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2141:5): [True: 0, False: 23.6k]
  |  |  ------------------
  ------------------
 2239|      0|        tun_metadata_set_match(mf, NULL, NULL, match, err_str);
 2240|      0|        break;
 2241|       |
 2242|     83|    case MFF_METADATA:
  ------------------
  |  Branch (2242:5): [True: 83, False: 23.5k]
  ------------------
 2243|     83|        match_set_metadata_masked(match, htonll(0), htonll(0));
 2244|     83|        break;
 2245|       |
 2246|     53|    case MFF_IN_PORT:
  ------------------
  |  Branch (2246:5): [True: 53, False: 23.6k]
  ------------------
 2247|    123|    case MFF_IN_PORT_OXM:
  ------------------
  |  Branch (2247:5): [True: 70, False: 23.6k]
  ------------------
 2248|    123|        match->flow.in_port.ofp_port = 0;
 2249|    123|        match->wc.masks.in_port.ofp_port = 0;
 2250|    123|        break;
 2251|     27|    case MFF_ACTSET_OUTPUT:
  ------------------
  |  Branch (2251:5): [True: 27, False: 23.6k]
  ------------------
 2252|     27|        match->flow.actset_output = 0;
 2253|     27|        match->wc.masks.actset_output = 0;
 2254|     27|        break;
 2255|       |
 2256|      0|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (2256:5): [True: 0, False: 23.6k]
  ------------------
 2257|      0|        match->flow.skb_priority = 0;
 2258|      0|        match->wc.masks.skb_priority = 0;
 2259|      0|        break;
 2260|       |
 2261|     22|    case MFF_PKT_MARK:
  ------------------
  |  Branch (2261:5): [True: 22, False: 23.6k]
  ------------------
 2262|     22|        match->flow.pkt_mark = 0;
 2263|     22|        match->wc.masks.pkt_mark = 0;
 2264|     22|        break;
 2265|       |
 2266|    213|    case MFF_CT_STATE:
  ------------------
  |  Branch (2266:5): [True: 213, False: 23.4k]
  ------------------
 2267|    213|        match->flow.ct_state = 0;
 2268|    213|        match->wc.masks.ct_state = 0;
 2269|    213|        break;
 2270|       |
 2271|      9|    case MFF_CT_ZONE:
  ------------------
  |  Branch (2271:5): [True: 9, False: 23.6k]
  ------------------
 2272|      9|        match->flow.ct_zone = 0;
 2273|      9|        match->wc.masks.ct_zone = 0;
 2274|      9|        break;
 2275|       |
 2276|     44|    case MFF_CT_MARK:
  ------------------
  |  Branch (2276:5): [True: 44, False: 23.6k]
  ------------------
 2277|     44|        match->flow.ct_mark = 0;
 2278|     44|        match->wc.masks.ct_mark = 0;
 2279|     44|        break;
 2280|       |
 2281|      6|    case MFF_CT_LABEL:
  ------------------
  |  Branch (2281:5): [True: 6, False: 23.6k]
  ------------------
 2282|      6|        memset(&match->flow.ct_label, 0, sizeof(match->flow.ct_label));
 2283|      6|        memset(&match->wc.masks.ct_label, 0, sizeof(match->wc.masks.ct_label));
 2284|      6|        break;
 2285|       |
 2286|     34|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (2286:5): [True: 34, False: 23.6k]
  ------------------
 2287|     34|        match->flow.ct_nw_proto = 0;
 2288|     34|        match->wc.masks.ct_nw_proto = 0;
 2289|     34|        break;
 2290|       |
 2291|     74|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (2291:5): [True: 74, False: 23.5k]
  ------------------
 2292|     74|        match->flow.ct_nw_src = 0;
 2293|     74|        match->wc.masks.ct_nw_src = 0;
 2294|     74|        break;
 2295|       |
 2296|     19|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (2296:5): [True: 19, False: 23.6k]
  ------------------
 2297|     19|        match->flow.ct_nw_dst = 0;
 2298|     19|        match->wc.masks.ct_nw_dst = 0;
 2299|     19|        break;
 2300|       |
 2301|     18|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (2301:5): [True: 18, False: 23.6k]
  ------------------
 2302|     18|        memset(&match->flow.ct_ipv6_src, 0, sizeof(match->flow.ct_ipv6_src));
 2303|     18|        WC_UNMASK_FIELD(&match->wc, ct_ipv6_src);
  ------------------
  |  |  205|     18|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 2304|     18|        break;
 2305|       |
 2306|     96|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (2306:5): [True: 96, False: 23.5k]
  ------------------
 2307|     96|        memset(&match->flow.ct_ipv6_dst, 0, sizeof(match->flow.ct_ipv6_dst));
 2308|     96|        WC_UNMASK_FIELD(&match->wc, ct_ipv6_dst);
  ------------------
  |  |  205|     96|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 2309|     96|        break;
 2310|       |
 2311|    509|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (2311:5): [True: 509, False: 23.1k]
  ------------------
 2312|    509|        match->flow.ct_tp_src = 0;
 2313|    509|        match->wc.masks.ct_tp_src = 0;
 2314|    509|        break;
 2315|       |
 2316|     21|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (2316:5): [True: 21, False: 23.6k]
  ------------------
 2317|     21|        match->flow.ct_tp_dst = 0;
 2318|     21|        match->wc.masks.ct_tp_dst = 0;
 2319|     21|        break;
 2320|       |
 2321|  3.55k|    CASE_MFF_REGS:
  ------------------
  |  | 2065|    308|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:     \
  |  |  ------------------
  |  |  |  Branch (2065:5): [True: 120, False: 23.5k]
  |  |  |  Branch (2065:20): [True: 67, False: 23.6k]
  |  |  |  Branch (2065:35): [True: 10, False: 23.6k]
  |  |  |  Branch (2065:50): [True: 111, False: 23.5k]
  |  |  ------------------
  |  | 2066|    821|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:     \
  |  |  ------------------
  |  |  |  Branch (2066:5): [True: 10, False: 23.6k]
  |  |  |  Branch (2066:20): [True: 102, False: 23.5k]
  |  |  |  Branch (2066:35): [True: 383, False: 23.2k]
  |  |  |  Branch (2066:50): [True: 18, False: 23.6k]
  |  |  ------------------
  |  | 2067|  1.83k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11:   \
  |  |  ------------------
  |  |  |  Branch (2067:5): [True: 395, False: 23.2k]
  |  |  |  Branch (2067:20): [True: 284, False: 23.3k]
  |  |  |  Branch (2067:35): [True: 311, False: 23.3k]
  |  |  |  Branch (2067:51): [True: 20, False: 23.6k]
  |  |  ------------------
  |  | 2068|  2.97k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15: \
  |  |  ------------------
  |  |  |  Branch (2068:5): [True: 135, False: 23.5k]
  |  |  |  Branch (2068:21): [True: 124, False: 23.5k]
  |  |  |  Branch (2068:37): [True: 486, False: 23.1k]
  |  |  |  Branch (2068:53): [True: 400, False: 23.2k]
  |  |  ------------------
  |  | 2069|  3.16k|    case MFF_REG16: case MFF_REG17: case MFF_REG18: case MFF_REG19: \
  |  |  ------------------
  |  |  |  Branch (2069:5): [True: 17, False: 23.6k]
  |  |  |  Branch (2069:21): [True: 25, False: 23.6k]
  |  |  |  Branch (2069:37): [True: 10, False: 23.6k]
  |  |  |  Branch (2069:53): [True: 137, False: 23.5k]
  |  |  ------------------
  |  | 2070|  3.32k|    case MFF_REG20: case MFF_REG21: case MFF_REG22: case MFF_REG23: \
  |  |  ------------------
  |  |  |  Branch (2070:5): [True: 9, False: 23.6k]
  |  |  |  Branch (2070:21): [True: 98, False: 23.5k]
  |  |  |  Branch (2070:37): [True: 10, False: 23.6k]
  |  |  |  Branch (2070:53): [True: 41, False: 23.6k]
  |  |  ------------------
  |  | 2071|  3.46k|    case MFF_REG24: case MFF_REG25: case MFF_REG26: case MFF_REG27: \
  |  |  ------------------
  |  |  |  Branch (2071:5): [True: 18, False: 23.6k]
  |  |  |  Branch (2071:21): [True: 7, False: 23.6k]
  |  |  |  Branch (2071:37): [True: 11, False: 23.6k]
  |  |  |  Branch (2071:53): [True: 108, False: 23.5k]
  |  |  ------------------
  |  | 2072|  3.55k|    case MFF_REG28: case MFF_REG29: case MFF_REG30: case MFF_REG31
  |  |  ------------------
  |  |  |  Branch (2072:5): [True: 64, False: 23.6k]
  |  |  |  Branch (2072:21): [True: 9, False: 23.6k]
  |  |  |  Branch (2072:37): [True: 6, False: 23.6k]
  |  |  ------------------
  ------------------
 2322|  3.55k|        match_set_reg_masked(match, mf->id - MFF_REG0, 0, 0);
 2323|  3.55k|        break;
 2324|       |
 2325|  1.39k|    CASE_MFF_XREGS:
  ------------------
  |  | 2081|    747|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3:    \
  |  |  ------------------
  |  |  |  Branch (2081:5): [True: 19, False: 23.6k]
  |  |  |  Branch (2081:21): [True: 52, False: 23.6k]
  |  |  |  Branch (2081:37): [True: 11, False: 23.6k]
  |  |  |  Branch (2081:53): [True: 665, False: 23.0k]
  |  |  ------------------
  |  | 2082|  1.02k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7:    \
  |  |  ------------------
  |  |  |  Branch (2082:5): [True: 65, False: 23.6k]
  |  |  |  Branch (2082:21): [True: 51, False: 23.6k]
  |  |  |  Branch (2082:37): [True: 125, False: 23.5k]
  |  |  |  Branch (2082:53): [True: 35, False: 23.6k]
  |  |  ------------------
  |  | 2083|  1.18k|    case MFF_XREG8: case MFF_XREG9: case MFF_XREG10: case MFF_XREG11:  \
  |  |  ------------------
  |  |  |  Branch (2083:5): [True: 66, False: 23.6k]
  |  |  |  Branch (2083:21): [True: 10, False: 23.6k]
  |  |  |  Branch (2083:37): [True: 10, False: 23.6k]
  |  |  |  Branch (2083:54): [True: 71, False: 23.6k]
  |  |  ------------------
  |  | 2084|  1.39k|    case MFF_XREG12: case MFF_XREG13: case MFF_XREG14: case MFF_XREG15
  |  |  ------------------
  |  |  |  Branch (2084:5): [True: 116, False: 23.5k]
  |  |  |  Branch (2084:22): [True: 6, False: 23.6k]
  |  |  |  Branch (2084:39): [True: 74, False: 23.5k]
  |  |  ------------------
  ------------------
 2326|  1.39k|        match_set_xreg_masked(match, mf->id - MFF_XREG0, 0, 0);
 2327|  1.39k|        break;
 2328|       |
 2329|  4.97k|    CASE_MFF_XXREGS: {
  ------------------
  |  | 2093|  4.97k|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3: \
  |  |  ------------------
  |  |  |  Branch (2093:5): [True: 35, False: 23.6k]
  |  |  |  Branch (2093:22): [True: 24, False: 23.6k]
  |  |  |  Branch (2093:39): [True: 3.47k, False: 20.1k]
  |  |  |  Branch (2093:56): [True: 1.44k, False: 22.2k]
  |  |  ------------------
  |  | 2094|  4.97k|    case MFF_XXREG4: case MFF_XXREG5: case MFF_XXREG6: case MFF_XXREG7
  |  |  ------------------
  |  |  |  Branch (2094:5): [True: 0, False: 23.6k]
  |  |  |  Branch (2094:22): [True: 0, False: 23.6k]
  |  |  |  Branch (2094:39): [True: 0, False: 23.6k]
  |  |  ------------------
  ------------------
 2330|  4.97k|        match_set_xxreg_masked(match, mf->id - MFF_XXREG0, OVS_U128_ZERO,
  ------------------
  |  |  130|  4.97k|#define OVS_U128_ZERO OVS_U128_MIN
  ------------------
 2331|  4.97k|                               OVS_U128_ZERO);
  ------------------
  |  |  130|  4.97k|#define OVS_U128_ZERO OVS_U128_MIN
  ------------------
 2332|  4.97k|        break;
 2333|  23.5k|    }
 2334|       |
 2335|     83|    case MFF_ETH_SRC:
  ------------------
  |  Branch (2335:5): [True: 83, False: 23.5k]
  ------------------
 2336|     83|        match->flow.dl_src = eth_addr_zero;
 2337|     83|        match->wc.masks.dl_src = eth_addr_zero;
 2338|     83|        break;
 2339|       |
 2340|     34|    case MFF_ETH_DST:
  ------------------
  |  Branch (2340:5): [True: 34, False: 23.6k]
  ------------------
 2341|     34|        match->flow.dl_dst = eth_addr_zero;
 2342|     34|        match->wc.masks.dl_dst = eth_addr_zero;
 2343|     34|        break;
 2344|       |
 2345|     67|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (2345:5): [True: 67, False: 23.6k]
  ------------------
 2346|     67|        match->flow.dl_type = htons(0);
 2347|     67|        match->wc.masks.dl_type = htons(0);
 2348|     67|        break;
 2349|       |
 2350|     17|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (2350:5): [True: 17, False: 23.6k]
  ------------------
 2351|     17|        match_set_dl_tci_masked(match, htons(0), htons(0));
 2352|     17|        break;
 2353|       |
 2354|      0|    case MFF_DL_VLAN:
  ------------------
  |  Branch (2354:5): [True: 0, False: 23.6k]
  ------------------
 2355|    307|    case MFF_VLAN_VID:
  ------------------
  |  Branch (2355:5): [True: 307, False: 23.3k]
  ------------------
 2356|    307|        match_set_any_vid(match);
 2357|    307|        break;
 2358|       |
 2359|      0|    case MFF_DL_VLAN_PCP:
  ------------------
  |  Branch (2359:5): [True: 0, False: 23.6k]
  ------------------
 2360|    160|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (2360:5): [True: 160, False: 23.5k]
  ------------------
 2361|    160|        match_set_any_pcp(match);
 2362|    160|        break;
 2363|       |
 2364|  1.17k|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (2364:5): [True: 1.17k, False: 22.4k]
  ------------------
 2365|  1.17k|        match_set_any_mpls_label(match, 0);
 2366|  1.17k|        break;
 2367|       |
 2368|     18|    case MFF_MPLS_TC:
  ------------------
  |  Branch (2368:5): [True: 18, False: 23.6k]
  ------------------
 2369|     18|        match_set_any_mpls_tc(match, 0);
 2370|     18|        break;
 2371|       |
 2372|     69|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (2372:5): [True: 69, False: 23.6k]
  ------------------
 2373|     69|        match_set_any_mpls_bos(match, 0);
 2374|     69|        break;
 2375|       |
 2376|     37|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (2376:5): [True: 37, False: 23.6k]
  ------------------
 2377|     37|        match_set_any_mpls_ttl(match, 0);
 2378|     37|        break;
 2379|       |
 2380|     19|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (2380:5): [True: 19, False: 23.6k]
  ------------------
 2381|     52|    case MFF_ARP_SPA:
  ------------------
  |  Branch (2381:5): [True: 33, False: 23.6k]
  ------------------
 2382|     52|        match_set_nw_src_masked(match, htonl(0), htonl(0));
 2383|     52|        break;
 2384|       |
 2385|     51|    case MFF_IPV4_DST:
  ------------------
  |  Branch (2385:5): [True: 51, False: 23.6k]
  ------------------
 2386|    566|    case MFF_ARP_TPA:
  ------------------
  |  Branch (2386:5): [True: 515, False: 23.1k]
  ------------------
 2387|    566|        match_set_nw_dst_masked(match, htonl(0), htonl(0));
 2388|    566|        break;
 2389|       |
 2390|     34|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (2390:5): [True: 34, False: 23.6k]
  ------------------
 2391|     34|        memset(&match->wc.masks.ipv6_src, 0, sizeof match->wc.masks.ipv6_src);
 2392|     34|        memset(&match->flow.ipv6_src, 0, sizeof match->flow.ipv6_src);
 2393|     34|        break;
 2394|       |
 2395|     70|    case MFF_IPV6_DST:
  ------------------
  |  Branch (2395:5): [True: 70, False: 23.6k]
  ------------------
 2396|     70|        memset(&match->wc.masks.ipv6_dst, 0, sizeof match->wc.masks.ipv6_dst);
 2397|     70|        memset(&match->flow.ipv6_dst, 0, sizeof match->flow.ipv6_dst);
 2398|     70|        break;
 2399|       |
 2400|     66|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (2400:5): [True: 66, False: 23.6k]
  ------------------
 2401|     66|        match->wc.masks.ipv6_label = htonl(0);
 2402|     66|        match->flow.ipv6_label = htonl(0);
 2403|     66|        break;
 2404|       |
 2405|    107|    case MFF_IP_PROTO:
  ------------------
  |  Branch (2405:5): [True: 107, False: 23.5k]
  ------------------
 2406|    107|        match->wc.masks.nw_proto = 0;
 2407|    107|        match->flow.nw_proto = 0;
 2408|    107|        break;
 2409|       |
 2410|     14|    case MFF_IP_DSCP:
  ------------------
  |  Branch (2410:5): [True: 14, False: 23.6k]
  ------------------
 2411|    866|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (2411:5): [True: 852, False: 22.8k]
  ------------------
 2412|    866|        match->wc.masks.nw_tos &= ~IP_DSCP_MASK;
  ------------------
  |  |  724|    866|#define IP_DSCP_MASK 0xfc
  ------------------
 2413|    866|        match->flow.nw_tos &= ~IP_DSCP_MASK;
  ------------------
  |  |  724|    866|#define IP_DSCP_MASK 0xfc
  ------------------
 2414|    866|        break;
 2415|       |
 2416|     26|    case MFF_IP_ECN:
  ------------------
  |  Branch (2416:5): [True: 26, False: 23.6k]
  ------------------
 2417|     26|        match->wc.masks.nw_tos &= ~IP_ECN_MASK;
  ------------------
  |  |  722|     26|#define IP_ECN_MASK 0x03
  ------------------
 2418|     26|        match->flow.nw_tos &= ~IP_ECN_MASK;
  ------------------
  |  |  722|     26|#define IP_ECN_MASK 0x03
  ------------------
 2419|     26|        break;
 2420|       |
 2421|     74|    case MFF_IP_TTL:
  ------------------
  |  Branch (2421:5): [True: 74, False: 23.5k]
  ------------------
 2422|     74|        match->wc.masks.nw_ttl = 0;
 2423|     74|        match->flow.nw_ttl = 0;
 2424|     74|        break;
 2425|       |
 2426|     35|    case MFF_IP_FRAG:
  ------------------
  |  Branch (2426:5): [True: 35, False: 23.6k]
  ------------------
 2427|     35|        match->wc.masks.nw_frag &= ~FLOW_NW_FRAG_MASK;
  ------------------
  |  |   56|     35|#define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   54|     35|#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|     35|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  |  |  ------------------
  ------------------
 2428|     35|        match->flow.nw_frag &= ~FLOW_NW_FRAG_MASK;
  ------------------
  |  |   56|     35|#define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   54|     35|#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|     35|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  |  |  ------------------
  ------------------
 2429|     35|        break;
 2430|       |
 2431|    135|    case MFF_ARP_OP:
  ------------------
  |  Branch (2431:5): [True: 135, False: 23.5k]
  ------------------
 2432|    135|        match->wc.masks.nw_proto = 0;
 2433|    135|        match->flow.nw_proto = 0;
 2434|    135|        break;
 2435|       |
 2436|     10|    case MFF_ARP_SHA:
  ------------------
  |  Branch (2436:5): [True: 10, False: 23.6k]
  ------------------
 2437|    196|    case MFF_ND_SLL:
  ------------------
  |  Branch (2437:5): [True: 186, False: 23.4k]
  ------------------
 2438|    196|        match->flow.arp_sha = eth_addr_zero;
 2439|    196|        match->wc.masks.arp_sha = eth_addr_zero;
 2440|    196|        break;
 2441|       |
 2442|    192|    case MFF_ARP_THA:
  ------------------
  |  Branch (2442:5): [True: 192, False: 23.4k]
  ------------------
 2443|  2.76k|    case MFF_ND_TLL:
  ------------------
  |  Branch (2443:5): [True: 2.57k, False: 21.1k]
  ------------------
 2444|  2.76k|        match->flow.arp_tha = eth_addr_zero;
 2445|  2.76k|        match->wc.masks.arp_tha = eth_addr_zero;
 2446|  2.76k|        break;
 2447|       |
 2448|    490|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (2448:5): [True: 490, False: 23.1k]
  ------------------
 2449|    490|        match->wc.masks.igmp_group_ip4 = htonl(0);
 2450|    490|        match->flow.igmp_group_ip4 = htonl(0);
 2451|    490|        break;
 2452|       |
 2453|     13|    case MFF_TCP_SRC:
  ------------------
  |  Branch (2453:5): [True: 13, False: 23.6k]
  ------------------
 2454|     52|    case MFF_UDP_SRC:
  ------------------
  |  Branch (2454:5): [True: 39, False: 23.6k]
  ------------------
 2455|     83|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (2455:5): [True: 31, False: 23.6k]
  ------------------
 2456|    139|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (2456:5): [True: 56, False: 23.6k]
  ------------------
 2457|    394|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (2457:5): [True: 255, False: 23.4k]
  ------------------
 2458|    394|        match->wc.masks.tp_src = htons(0);
 2459|    394|        match->flow.tp_src = htons(0);
 2460|    394|        break;
 2461|       |
 2462|     33|    case MFF_TCP_DST:
  ------------------
  |  Branch (2462:5): [True: 33, False: 23.6k]
  ------------------
 2463|     53|    case MFF_UDP_DST:
  ------------------
  |  Branch (2463:5): [True: 20, False: 23.6k]
  ------------------
 2464|    301|    case MFF_SCTP_DST:
  ------------------
  |  Branch (2464:5): [True: 248, False: 23.4k]
  ------------------
 2465|    494|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (2465:5): [True: 193, False: 23.4k]
  ------------------
 2466|    516|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (2466:5): [True: 22, False: 23.6k]
  ------------------
 2467|    516|        match->wc.masks.tp_dst = htons(0);
 2468|    516|        match->flow.tp_dst = htons(0);
 2469|    516|        break;
 2470|       |
 2471|    343|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (2471:5): [True: 343, False: 23.3k]
  ------------------
 2472|    398|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (2472:5): [True: 55, False: 23.6k]
  ------------------
 2473|    398|        match->wc.masks.tcp_flags = htons(0);
 2474|    398|        match->flow.tcp_flags = htons(0);
 2475|    398|        break;
 2476|       |
 2477|    547|    case MFF_ND_TARGET:
  ------------------
  |  Branch (2477:5): [True: 547, False: 23.1k]
  ------------------
 2478|    547|        memset(&match->wc.masks.nd_target, 0,
 2479|    547|               sizeof match->wc.masks.nd_target);
 2480|    547|        memset(&match->flow.nd_target, 0, sizeof match->flow.nd_target);
 2481|    547|        break;
 2482|       |
 2483|    407|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (2483:5): [True: 407, False: 23.2k]
  ------------------
 2484|    407|        MATCH_SET_FIELD_MASKED(match, nsh.flags, 0, 0);
  ------------------
  |  |   50|    407|    do {                                                      \
  |  |   51|    407|        (match)->wc.masks.field = (msk);                      \
  |  |   52|    407|        (match)->flow.field = (value) & (msk);                \
  |  |   53|    407|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded, False: 407]
  |  |  ------------------
  ------------------
 2485|    407|        break;
 2486|     61|    case MFF_NSH_TTL:
  ------------------
  |  Branch (2486:5): [True: 61, False: 23.6k]
  ------------------
 2487|     61|        MATCH_SET_FIELD_MASKED(match, nsh.ttl, 0, 0);
  ------------------
  |  |   50|     61|    do {                                                      \
  |  |   51|     61|        (match)->wc.masks.field = (msk);                      \
  |  |   52|     61|        (match)->flow.field = (value) & (msk);                \
  |  |   53|     61|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded, False: 61]
  |  |  ------------------
  ------------------
 2488|     61|        break;
 2489|      0|    case MFF_NSH_MDTYPE:
  ------------------
  |  Branch (2489:5): [True: 0, False: 23.6k]
  ------------------
 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|    131|    case MFF_NSH_NP:
  ------------------
  |  Branch (2492:5): [True: 131, False: 23.5k]
  ------------------
 2493|    131|        MATCH_SET_FIELD_MASKED(match, nsh.np, 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]
  |  |  ------------------
  ------------------
 2494|    131|        break;
 2495|     10|    case MFF_NSH_SPI:
  ------------------
  |  Branch (2495:5): [True: 10, False: 23.6k]
  ------------------
 2496|     10|        match->wc.masks.nsh.path_hdr &= ~htonl(NSH_SPI_MASK);
 2497|     10|        nsh_path_hdr_set_spi(&match->flow.nsh.path_hdr, htonl(0));
 2498|     10|        break;
 2499|     45|    case MFF_NSH_SI:
  ------------------
  |  Branch (2499:5): [True: 45, False: 23.6k]
  ------------------
 2500|     45|        match->wc.masks.nsh.path_hdr &= ~htonl(NSH_SI_MASK);
 2501|     45|        nsh_path_hdr_set_si(&match->flow.nsh.path_hdr, 0);
 2502|     45|        break;
 2503|    144|    case MFF_NSH_C1:
  ------------------
  |  Branch (2503:5): [True: 144, False: 23.5k]
  ------------------
 2504|    180|    case MFF_NSH_C2:
  ------------------
  |  Branch (2504:5): [True: 36, False: 23.6k]
  ------------------
 2505|    214|    case MFF_NSH_C3:
  ------------------
  |  Branch (2505:5): [True: 34, False: 23.6k]
  ------------------
 2506|    296|    case MFF_NSH_C4:
  ------------------
  |  Branch (2506:5): [True: 82, False: 23.5k]
  ------------------
 2507|    296|        MATCH_SET_FIELD_MASKED(match, nsh.context[mf->id - MFF_NSH_C1],
  ------------------
  |  |   50|    296|    do {                                                      \
  |  |   51|    296|        (match)->wc.masks.field = (msk);                      \
  |  |   52|    296|        (match)->flow.field = (value) & (msk);                \
  |  |   53|    296|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded, False: 296]
  |  |  ------------------
  ------------------
 2508|    296|                               htonl(0), htonl(0));
 2509|    296|        break;
 2510|       |
 2511|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (2511:5): [True: 0, False: 23.6k]
  ------------------
 2512|      0|    default:
  ------------------
  |  Branch (2512:5): [True: 0, False: 23.6k]
  ------------------
 2513|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 2514|  23.6k|    }
 2515|  23.6k|}
mf_set:
 2540|   145k|{
 2541|   145k|    if (!mask || is_all_ones(mask, mf->n_bytes)) {
  ------------------
  |  Branch (2541:9): [True: 0, False: 145k]
  |  Branch (2541:18): [True: 62.6k, False: 83.1k]
  ------------------
 2542|  62.6k|        mf_set_value(mf, value, match, err_str);
 2543|  62.6k|        return mf->usable_protocols_exact;
 2544|  83.1k|    } else if (is_all_zeros(mask, mf->n_bytes) && !mf_is_tun_metadata(mf)) {
  ------------------
  |  Branch (2544:16): [True: 48.8k, False: 34.3k]
  |  Branch (2544:51): [True: 23.6k, False: 25.1k]
  ------------------
 2545|       |        /* Tunnel metadata matches on the existence of the field itself, so
 2546|       |         * it still needs to be encoded even if the value is wildcarded. */
 2547|  23.6k|        mf_set_wild(mf, match, err_str);
 2548|  23.6k|        return OFPUTIL_P_ANY;
  ------------------
  |  |  100|  23.6k|#define OFPUTIL_P_ANY ((1 << 9) - 1)
  ------------------
 2549|  23.6k|    }
 2550|       |
 2551|  59.5k|    if (err_str) {
  ------------------
  |  Branch (2551:9): [True: 43.1k, False: 16.3k]
  ------------------
 2552|  43.1k|        *err_str = NULL;
 2553|  43.1k|    }
 2554|       |
 2555|       |    /* The cases where 'mask' is all-1-bits or all-0-bits were already handled
 2556|       |     * above[*], so the code below only needs to work for the remaining cases
 2557|       |     * of a nontrivial mask.
 2558|       |     *
 2559|       |     * [*] Except where the field is a tunnel metadata field and 'mask' is
 2560|       |     *     all-0-bits; see above. */
 2561|  59.5k|    switch (mf->id) {
 2562|     34|    case MFF_CT_ZONE:
  ------------------
  |  Branch (2562:5): [True: 34, False: 59.4k]
  ------------------
 2563|    332|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (2563:5): [True: 298, False: 59.2k]
  ------------------
 2564|    465|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (2564:5): [True: 133, False: 59.3k]
  ------------------
 2565|    592|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (2565:5): [True: 127, False: 59.3k]
  ------------------
 2566|    713|    case MFF_CONJ_ID:
  ------------------
  |  Branch (2566:5): [True: 121, False: 59.3k]
  ------------------
 2567|    812|    case MFF_IN_PORT:
  ------------------
  |  Branch (2567:5): [True: 99, False: 59.4k]
  ------------------
 2568|    992|    case MFF_IN_PORT_OXM:
  ------------------
  |  Branch (2568:5): [True: 180, False: 59.3k]
  ------------------
 2569|  1.15k|    case MFF_ACTSET_OUTPUT:
  ------------------
  |  Branch (2569:5): [True: 165, False: 59.3k]
  ------------------
 2570|  1.15k|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (2570:5): [True: 0, False: 59.5k]
  ------------------
 2571|  1.26k|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (2571:5): [True: 104, False: 59.4k]
  ------------------
 2572|  1.26k|    case MFF_DL_VLAN:
  ------------------
  |  Branch (2572:5): [True: 0, False: 59.5k]
  ------------------
 2573|  1.26k|    case MFF_DL_VLAN_PCP:
  ------------------
  |  Branch (2573:5): [True: 0, False: 59.5k]
  ------------------
 2574|  1.26k|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (2574:5): [True: 0, False: 59.5k]
  ------------------
 2575|  1.26k|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (2575:5): [True: 0, False: 59.5k]
  ------------------
 2576|  1.26k|    case MFF_MPLS_TC:
  ------------------
  |  Branch (2576:5): [True: 0, False: 59.5k]
  ------------------
 2577|  1.26k|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (2577:5): [True: 0, False: 59.5k]
  ------------------
 2578|  1.26k|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (2578:5): [True: 0, False: 59.5k]
  ------------------
 2579|  1.26k|    case MFF_IP_PROTO:
  ------------------
  |  Branch (2579:5): [True: 0, False: 59.5k]
  ------------------
 2580|  1.26k|    case MFF_IP_TTL:
  ------------------
  |  Branch (2580:5): [True: 0, False: 59.5k]
  ------------------
 2581|  1.26k|    case MFF_IP_DSCP:
  ------------------
  |  Branch (2581:5): [True: 0, False: 59.5k]
  ------------------
 2582|  1.26k|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (2582:5): [True: 0, False: 59.5k]
  ------------------
 2583|  1.26k|    case MFF_IP_ECN:
  ------------------
  |  Branch (2583:5): [True: 0, False: 59.5k]
  ------------------
 2584|  1.26k|    case MFF_ARP_OP:
  ------------------
  |  Branch (2584:5): [True: 0, False: 59.5k]
  ------------------
 2585|  1.26k|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (2585:5): [True: 0, False: 59.5k]
  ------------------
 2586|  1.26k|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (2586:5): [True: 0, False: 59.5k]
  ------------------
 2587|  1.26k|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (2587:5): [True: 0, False: 59.5k]
  ------------------
 2588|  1.26k|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (2588:5): [True: 0, False: 59.5k]
  ------------------
 2589|  1.26k|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (2589:5): [True: 0, False: 59.5k]
  ------------------
 2590|  1.26k|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (2590:5): [True: 0, False: 59.5k]
  ------------------
 2591|  1.26k|        return OFPUTIL_P_NONE;
  ------------------
  |  |   53|  1.26k|#define OFPUTIL_P_NONE 0
  ------------------
 2592|       |
 2593|    344|    case MFF_DP_HASH:
  ------------------
  |  Branch (2593:5): [True: 344, False: 59.1k]
  ------------------
 2594|    344|        match_set_dp_hash_masked(match, ntohl(value->be32), ntohl(mask->be32));
 2595|    344|        break;
 2596|    407|    case MFF_TUN_ID:
  ------------------
  |  Branch (2596:5): [True: 407, False: 59.0k]
  ------------------
 2597|    407|        match_set_tun_id_masked(match, value->be64, mask->be64);
 2598|    407|        break;
 2599|    210|    case MFF_TUN_SRC:
  ------------------
  |  Branch (2599:5): [True: 210, False: 59.2k]
  ------------------
 2600|    210|        match_set_tun_src_masked(match, value->be32, mask->be32);
 2601|    210|        break;
 2602|     67|    case MFF_TUN_DST:
  ------------------
  |  Branch (2602:5): [True: 67, False: 59.4k]
  ------------------
 2603|     67|        match_set_tun_dst_masked(match, value->be32, mask->be32);
 2604|     67|        break;
 2605|    669|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (2605:5): [True: 669, False: 58.8k]
  ------------------
 2606|    669|        match_set_tun_ipv6_src_masked(match, &value->ipv6, &mask->ipv6);
 2607|    669|        break;
 2608|    684|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (2608:5): [True: 684, False: 58.8k]
  ------------------
 2609|    684|        match_set_tun_ipv6_dst_masked(match, &value->ipv6, &mask->ipv6);
 2610|    684|        break;
 2611|    260|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (2611:5): [True: 260, False: 59.2k]
  ------------------
 2612|    260|        match_set_tun_flags_masked(match, ntohs(value->be16), ntohs(mask->be16));
 2613|    260|        break;
 2614|    224|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (2614:5): [True: 224, False: 59.2k]
  ------------------
 2615|    224|        match_set_tun_gbp_id_masked(match, value->be16, mask->be16);
 2616|    224|        break;
 2617|    880|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (2617:5): [True: 880, False: 58.6k]
  ------------------
 2618|    880|        match_set_tun_gbp_flags_masked(match, value->u8, mask->u8);
 2619|    880|        break;
 2620|      0|    case MFF_TUN_TTL:
  ------------------
  |  Branch (2620:5): [True: 0, False: 59.5k]
  ------------------
 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: 59.5k]
  ------------------
 2624|      0|        match_set_tun_tos_masked(match, value->u8, mask->u8);
 2625|      0|        break;
 2626|     90|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (2626:5): [True: 90, False: 59.4k]
  ------------------
 2627|     90|        match_set_tun_erspan_ver_masked(match, value->u8, mask->u8);
 2628|     90|        break;
 2629|    110|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (2629:5): [True: 110, False: 59.3k]
  ------------------
 2630|    110|        match_set_tun_erspan_idx_masked(match, ntohl(value->be32),
 2631|    110|                                        ntohl(mask->be32));
 2632|    110|        break;
 2633|     21|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (2633:5): [True: 21, False: 59.4k]
  ------------------
 2634|     21|        match_set_tun_erspan_dir_masked(match, value->u8, mask->u8);
 2635|     21|        break;
 2636|    181|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (2636:5): [True: 181, False: 59.3k]
  ------------------
 2637|    181|        match_set_tun_erspan_hwid_masked(match, value->u8, mask->u8);
 2638|    181|        break;
 2639|    100|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (2639:5): [True: 100, False: 59.4k]
  ------------------
 2640|    100|        match_set_tun_gtpu_flags_masked(match, value->u8, mask->u8);
 2641|    100|        break;
 2642|     49|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (2642:5): [True: 49, False: 59.4k]
  ------------------
 2643|     49|        match_set_tun_gtpu_msgtype_masked(match, value->u8, mask->u8);
 2644|     49|        break;
 2645|  36.5k|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2110|  2.29k|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2110:5): [True: 719, False: 58.7k]
  |  |  |  Branch (2110:29): [True: 1.57k, False: 57.9k]
  |  |  ------------------
  |  | 2111|  3.57k|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2111:5): [True: 287, False: 59.2k]
  |  |  |  Branch (2111:29): [True: 999, False: 58.5k]
  |  |  ------------------
  |  | 2112|  4.72k|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2112:5): [True: 121, False: 59.3k]
  |  |  |  Branch (2112:29): [True: 1.02k, False: 58.4k]
  |  |  ------------------
  |  | 2113|  7.78k|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2113:5): [True: 2.92k, False: 56.5k]
  |  |  |  Branch (2113:29): [True: 136, False: 59.3k]
  |  |  ------------------
  |  | 2114|  9.40k|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2114:5): [True: 1.48k, False: 58.0k]
  |  |  |  Branch (2114:29): [True: 128, False: 59.3k]
  |  |  ------------------
  |  | 2115|  10.6k|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2115:5): [True: 1.00k, False: 58.5k]
  |  |  |  Branch (2115:30): [True: 236, False: 59.2k]
  |  |  ------------------
  |  | 2116|  11.7k|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2116:5): [True: 970, False: 58.5k]
  |  |  |  Branch (2116:30): [True: 112, False: 59.3k]
  |  |  ------------------
  |  | 2117|  12.5k|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2117:5): [True: 388, False: 59.1k]
  |  |  |  Branch (2117:30): [True: 437, False: 59.0k]
  |  |  ------------------
  |  | 2118|  14.0k|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2118:5): [True: 881, False: 58.6k]
  |  |  |  Branch (2118:30): [True: 585, False: 58.9k]
  |  |  ------------------
  |  | 2119|  16.4k|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2119:5): [True: 1.78k, False: 57.7k]
  |  |  |  Branch (2119:30): [True: 681, False: 58.8k]
  |  |  ------------------
  |  | 2120|  17.4k|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2120:5): [True: 702, False: 58.8k]
  |  |  |  Branch (2120:30): [True: 288, False: 59.2k]
  |  |  ------------------
  |  | 2121|  18.2k|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2121:5): [True: 661, False: 58.8k]
  |  |  |  Branch (2121:30): [True: 133, False: 59.3k]
  |  |  ------------------
  |  | 2122|  20.3k|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2122:5): [True: 767, False: 58.7k]
  |  |  |  Branch (2122:30): [True: 1.28k, False: 58.2k]
  |  |  ------------------
  |  | 2123|  21.2k|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2123:5): [True: 449, False: 59.0k]
  |  |  |  Branch (2123:30): [True: 483, False: 59.0k]
  |  |  ------------------
  |  | 2124|  21.9k|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2124:5): [True: 113, False: 59.3k]
  |  |  |  Branch (2124:30): [True: 542, False: 58.9k]
  |  |  ------------------
  |  | 2125|  22.5k|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2125:5): [True: 268, False: 59.2k]
  |  |  |  Branch (2125:30): [True: 382, False: 59.1k]
  |  |  ------------------
  |  | 2126|  24.5k|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2126:5): [True: 910, False: 58.5k]
  |  |  |  Branch (2126:30): [True: 1.05k, False: 58.4k]
  |  |  ------------------
  |  | 2127|  25.2k|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2127:5): [True: 623, False: 58.8k]
  |  |  |  Branch (2127:30): [True: 128, False: 59.3k]
  |  |  ------------------
  |  | 2128|  25.9k|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2128:5): [True: 176, False: 59.3k]
  |  |  |  Branch (2128:30): [True: 505, False: 59.0k]
  |  |  ------------------
  |  | 2129|  26.6k|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2129:5): [True: 337, False: 59.1k]
  |  |  |  Branch (2129:30): [True: 399, False: 59.1k]
  |  |  ------------------
  |  | 2130|  27.3k|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2130:5): [True: 220, False: 59.2k]
  |  |  |  Branch (2130:30): [True: 421, False: 59.0k]
  |  |  ------------------
  |  | 2131|  28.2k|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2131:5): [True: 596, False: 58.9k]
  |  |  |  Branch (2131:30): [True: 353, False: 59.1k]
  |  |  ------------------
  |  | 2132|  28.8k|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2132:5): [True: 386, False: 59.1k]
  |  |  |  Branch (2132:30): [True: 186, False: 59.3k]
  |  |  ------------------
  |  | 2133|  29.6k|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2133:5): [True: 243, False: 59.2k]
  |  |  |  Branch (2133:30): [True: 545, False: 58.9k]
  |  |  ------------------
  |  | 2134|  30.3k|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2134:5): [True: 353, False: 59.1k]
  |  |  |  Branch (2134:30): [True: 363, False: 59.1k]
  |  |  ------------------
  |  | 2135|  31.1k|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2135:5): [True: 569, False: 58.9k]
  |  |  |  Branch (2135:30): [True: 272, False: 59.2k]
  |  |  ------------------
  |  | 2136|  32.3k|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2136:5): [True: 538, False: 58.9k]
  |  |  |  Branch (2136:30): [True: 628, False: 58.8k]
  |  |  ------------------
  |  | 2137|  33.4k|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2137:5): [True: 42, False: 59.4k]
  |  |  |  Branch (2137:30): [True: 1.09k, False: 58.4k]
  |  |  ------------------
  |  | 2138|  34.1k|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2138:5): [True: 324, False: 59.1k]
  |  |  |  Branch (2138:30): [True: 373, False: 59.1k]
  |  |  ------------------
  |  | 2139|  35.1k|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2139:5): [True: 403, False: 59.1k]
  |  |  |  Branch (2139:30): [True: 531, False: 58.9k]
  |  |  ------------------
  |  | 2140|  35.7k|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2140:5): [True: 493, False: 59.0k]
  |  |  |  Branch (2140:30): [True: 87, False: 59.4k]
  |  |  ------------------
  |  | 2141|  36.5k|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2141:5): [True: 97, False: 59.4k]
  |  |  ------------------
  ------------------
 2646|  36.5k|        tun_metadata_set_match(mf, value, mask, match, err_str);
 2647|  36.5k|        break;
 2648|       |
 2649|    300|    case MFF_METADATA:
  ------------------
  |  Branch (2649:5): [True: 300, False: 59.2k]
  ------------------
 2650|    300|        match_set_metadata_masked(match, value->be64, mask->be64);
 2651|    300|        break;
 2652|       |
 2653|  5.08k|    CASE_MFF_REGS:
  ------------------
  |  | 2065|  1.59k|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:     \
  |  |  ------------------
  |  |  |  Branch (2065:5): [True: 730, False: 58.7k]
  |  |  |  Branch (2065:20): [True: 478, False: 59.0k]
  |  |  |  Branch (2065:35): [True: 346, False: 59.1k]
  |  |  |  Branch (2065:50): [True: 37, False: 59.4k]
  |  |  ------------------
  |  | 2066|  2.07k|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:     \
  |  |  ------------------
  |  |  |  Branch (2066:5): [True: 77, False: 59.4k]
  |  |  |  Branch (2066:20): [True: 134, False: 59.3k]
  |  |  |  Branch (2066:35): [True: 225, False: 59.2k]
  |  |  |  Branch (2066:50): [True: 46, False: 59.4k]
  |  |  ------------------
  |  | 2067|  3.46k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11:   \
  |  |  ------------------
  |  |  |  Branch (2067:5): [True: 232, False: 59.2k]
  |  |  |  Branch (2067:20): [True: 514, False: 58.9k]
  |  |  |  Branch (2067:35): [True: 416, False: 59.0k]
  |  |  |  Branch (2067:51): [True: 226, False: 59.2k]
  |  |  ------------------
  |  | 2068|  4.47k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15: \
  |  |  ------------------
  |  |  |  Branch (2068:5): [True: 343, False: 59.1k]
  |  |  |  Branch (2068:21): [True: 210, False: 59.2k]
  |  |  |  Branch (2068:37): [True: 250, False: 59.2k]
  |  |  |  Branch (2068:53): [True: 215, False: 59.2k]
  |  |  ------------------
  |  | 2069|  4.56k|    case MFF_REG16: case MFF_REG17: case MFF_REG18: case MFF_REG19: \
  |  |  ------------------
  |  |  |  Branch (2069:5): [True: 17, False: 59.4k]
  |  |  |  Branch (2069:21): [True: 33, False: 59.4k]
  |  |  |  Branch (2069:37): [True: 6, False: 59.5k]
  |  |  |  Branch (2069:53): [True: 32, False: 59.4k]
  |  |  ------------------
  |  | 2070|  4.77k|    case MFF_REG20: case MFF_REG21: case MFF_REG22: case MFF_REG23: \
  |  |  ------------------
  |  |  |  Branch (2070:5): [True: 10, False: 59.4k]
  |  |  |  Branch (2070:21): [True: 144, False: 59.3k]
  |  |  |  Branch (2070:37): [True: 39, False: 59.4k]
  |  |  |  Branch (2070:53): [True: 10, False: 59.4k]
  |  |  ------------------
  |  | 2071|  4.98k|    case MFF_REG24: case MFF_REG25: case MFF_REG26: case MFF_REG27: \
  |  |  ------------------
  |  |  |  Branch (2071:5): [True: 54, False: 59.4k]
  |  |  |  Branch (2071:21): [True: 24, False: 59.4k]
  |  |  |  Branch (2071:37): [True: 33, False: 59.4k]
  |  |  |  Branch (2071:53): [True: 99, False: 59.4k]
  |  |  ------------------
  |  | 2072|  5.08k|    case MFF_REG28: case MFF_REG29: case MFF_REG30: case MFF_REG31
  |  |  ------------------
  |  |  |  Branch (2072:5): [True: 75, False: 59.4k]
  |  |  |  Branch (2072:21): [True: 10, False: 59.4k]
  |  |  |  Branch (2072:37): [True: 8, False: 59.4k]
  |  |  ------------------
  ------------------
 2654|  5.08k|        match_set_reg_masked(match, mf->id - MFF_REG0,
 2655|  5.08k|                             ntohl(value->be32), ntohl(mask->be32));
 2656|  5.08k|        break;
 2657|       |
 2658|  2.12k|    CASE_MFF_XREGS:
  ------------------
  |  | 2081|    656|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3:    \
  |  |  ------------------
  |  |  |  Branch (2081:5): [True: 109, False: 59.3k]
  |  |  |  Branch (2081:21): [True: 370, False: 59.1k]
  |  |  |  Branch (2081:37): [True: 87, False: 59.4k]
  |  |  |  Branch (2081:53): [True: 90, False: 59.4k]
  |  |  ------------------
  |  | 2082|  1.58k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7:    \
  |  |  ------------------
  |  |  |  Branch (2082:5): [True: 265, False: 59.2k]
  |  |  |  Branch (2082:21): [True: 169, False: 59.3k]
  |  |  |  Branch (2082:37): [True: 252, False: 59.2k]
  |  |  |  Branch (2082:53): [True: 241, False: 59.2k]
  |  |  ------------------
  |  | 2083|  1.89k|    case MFF_XREG8: case MFF_XREG9: case MFF_XREG10: case MFF_XREG11:  \
  |  |  ------------------
  |  |  |  Branch (2083:5): [True: 198, False: 59.3k]
  |  |  |  Branch (2083:21): [True: 13, False: 59.4k]
  |  |  |  Branch (2083:37): [True: 90, False: 59.4k]
  |  |  |  Branch (2083:54): [True: 13, False: 59.4k]
  |  |  ------------------
  |  | 2084|  2.12k|    case MFF_XREG12: case MFF_XREG13: case MFF_XREG14: case MFF_XREG15
  |  |  ------------------
  |  |  |  Branch (2084:5): [True: 118, False: 59.3k]
  |  |  |  Branch (2084:22): [True: 17, False: 59.4k]
  |  |  |  Branch (2084:39): [True: 52, False: 59.4k]
  |  |  ------------------
  ------------------
 2659|  2.12k|        match_set_xreg_masked(match, mf->id - MFF_XREG0,
 2660|  2.12k|                              ntohll(value->be64), ntohll(mask->be64));
 2661|  2.12k|        break;
 2662|       |
 2663|  1.48k|    CASE_MFF_XXREGS: {
  ------------------
  |  | 2093|  1.48k|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3: \
  |  |  ------------------
  |  |  |  Branch (2093:5): [True: 83, False: 59.4k]
  |  |  |  Branch (2093:22): [True: 59, False: 59.4k]
  |  |  |  Branch (2093:39): [True: 1.24k, False: 58.2k]
  |  |  |  Branch (2093:56): [True: 96, False: 59.4k]
  |  |  ------------------
  |  | 2094|  1.48k|    case MFF_XXREG4: case MFF_XXREG5: case MFF_XXREG6: case MFF_XXREG7
  |  |  ------------------
  |  |  |  Branch (2094:5): [True: 0, False: 59.5k]
  |  |  |  Branch (2094:22): [True: 0, False: 59.5k]
  |  |  |  Branch (2094:39): [True: 0, False: 59.5k]
  |  |  ------------------
  ------------------
 2664|  1.48k|        match_set_xxreg_masked(match, mf->id - MFF_XXREG0,
 2665|  1.48k|                ntoh128(value->be128), ntoh128(mask->be128));
 2666|  1.48k|        break;
 2667|  7.53k|    }
 2668|       |
 2669|    308|    case MFF_PKT_MARK:
  ------------------
  |  Branch (2669:5): [True: 308, False: 59.1k]
  ------------------
 2670|    308|        match_set_pkt_mark_masked(match, ntohl(value->be32),
 2671|    308|                                  ntohl(mask->be32));
 2672|    308|        break;
 2673|       |
 2674|    213|    case MFF_CT_STATE:
  ------------------
  |  Branch (2674:5): [True: 213, False: 59.2k]
  ------------------
 2675|    213|        match_set_ct_state_masked(match, ntohl(value->be32), ntohl(mask->be32));
 2676|    213|        break;
 2677|       |
 2678|  1.18k|    case MFF_CT_MARK:
  ------------------
  |  Branch (2678:5): [True: 1.18k, False: 58.3k]
  ------------------
 2679|  1.18k|        match_set_ct_mark_masked(match, ntohl(value->be32), ntohl(mask->be32));
 2680|  1.18k|        break;
 2681|       |
 2682|    483|    case MFF_CT_LABEL:
  ------------------
  |  Branch (2682:5): [True: 483, False: 59.0k]
  ------------------
 2683|    483|        match_set_ct_label_masked(match, ntoh128(value->be128),
 2684|    483|                                  ntoh128(mask->be128));
 2685|    483|        break;
 2686|       |
 2687|     54|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (2687:5): [True: 54, False: 59.4k]
  ------------------
 2688|     54|        match_set_ct_nw_src_masked(match, value->be32, mask->be32);
 2689|     54|        break;
 2690|       |
 2691|     31|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (2691:5): [True: 31, False: 59.4k]
  ------------------
 2692|     31|        match_set_ct_nw_dst_masked(match, value->be32, mask->be32);
 2693|     31|        break;
 2694|       |
 2695|    247|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (2695:5): [True: 247, False: 59.2k]
  ------------------
 2696|    247|        match_set_ct_ipv6_src_masked(match, &value->ipv6, &mask->ipv6);
 2697|    247|        break;
 2698|       |
 2699|    842|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (2699:5): [True: 842, False: 58.6k]
  ------------------
 2700|    842|        match_set_ct_ipv6_dst_masked(match, &value->ipv6, &mask->ipv6);
 2701|    842|        break;
 2702|       |
 2703|    206|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (2703:5): [True: 206, False: 59.3k]
  ------------------
 2704|    206|        match_set_ct_tp_src_masked(match, value->be16, mask->be16);
 2705|    206|        break;
 2706|       |
 2707|    328|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (2707:5): [True: 328, False: 59.1k]
  ------------------
 2708|    328|        match_set_ct_tp_dst_masked(match, value->be16, mask->be16);
 2709|    328|        break;
 2710|       |
 2711|     14|    case MFF_ETH_DST:
  ------------------
  |  Branch (2711:5): [True: 14, False: 59.4k]
  ------------------
 2712|     14|        match_set_dl_dst_masked(match, value->mac, mask->mac);
 2713|     14|        break;
 2714|       |
 2715|    117|    case MFF_ETH_SRC:
  ------------------
  |  Branch (2715:5): [True: 117, False: 59.3k]
  ------------------
 2716|    117|        match_set_dl_src_masked(match, value->mac, mask->mac);
 2717|    117|        break;
 2718|       |
 2719|     67|    case MFF_ARP_SHA:
  ------------------
  |  Branch (2719:5): [True: 67, False: 59.4k]
  ------------------
 2720|    133|    case MFF_ND_SLL:
  ------------------
  |  Branch (2720:5): [True: 66, False: 59.4k]
  ------------------
 2721|    133|        match_set_arp_sha_masked(match, value->mac, mask->mac);
 2722|    133|        break;
 2723|       |
 2724|     68|    case MFF_ARP_THA:
  ------------------
  |  Branch (2724:5): [True: 68, False: 59.4k]
  ------------------
 2725|    285|    case MFF_ND_TLL:
  ------------------
  |  Branch (2725:5): [True: 217, False: 59.2k]
  ------------------
 2726|    285|        match_set_arp_tha_masked(match, value->mac, mask->mac);
 2727|    285|        break;
 2728|       |
 2729|    477|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (2729:5): [True: 477, False: 59.0k]
  ------------------
 2730|    477|        match_set_dl_tci_masked(match, value->be16, mask->be16);
 2731|    477|        break;
 2732|       |
 2733|     77|    case MFF_VLAN_VID:
  ------------------
  |  Branch (2733:5): [True: 77, False: 59.4k]
  ------------------
 2734|     77|        match_set_vlan_vid_masked(match, value->be16, mask->be16);
 2735|     77|        break;
 2736|       |
 2737|    100|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (2737:5): [True: 100, False: 59.4k]
  ------------------
 2738|    100|        match_set_nw_src_masked(match, value->be32, mask->be32);
 2739|    100|        break;
 2740|       |
 2741|     53|    case MFF_IPV4_DST:
  ------------------
  |  Branch (2741:5): [True: 53, False: 59.4k]
  ------------------
 2742|     53|        match_set_nw_dst_masked(match, value->be32, mask->be32);
 2743|     53|        break;
 2744|       |
 2745|    214|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (2745:5): [True: 214, False: 59.2k]
  ------------------
 2746|    214|        match_set_ipv6_src_masked(match, &value->ipv6, &mask->ipv6);
 2747|    214|        break;
 2748|       |
 2749|    393|    case MFF_IPV6_DST:
  ------------------
  |  Branch (2749:5): [True: 393, False: 59.1k]
  ------------------
 2750|    393|        match_set_ipv6_dst_masked(match, &value->ipv6, &mask->ipv6);
 2751|    393|        break;
 2752|       |
 2753|    218|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (2753:5): [True: 218, False: 59.2k]
  ------------------
 2754|    218|        if ((mask->be32 & htonl(IPV6_LABEL_MASK)) == htonl(IPV6_LABEL_MASK)) {
  ------------------
  |  Branch (2754:13): [True: 194, False: 24]
  ------------------
 2755|    194|            mf_set_value(mf, value, match, err_str);
 2756|    194|        } else {
 2757|     24|            match_set_ipv6_label_masked(match, value->be32, mask->be32);
 2758|     24|        }
 2759|    218|        break;
 2760|       |
 2761|    563|    case MFF_ND_TARGET:
  ------------------
  |  Branch (2761:5): [True: 563, False: 58.9k]
  ------------------
 2762|    563|        match_set_nd_target_masked(match, &value->ipv6, &mask->ipv6);
 2763|    563|        break;
 2764|       |
 2765|    707|    case MFF_IP_FRAG:
  ------------------
  |  Branch (2765:5): [True: 707, False: 58.7k]
  ------------------
 2766|    707|        match_set_nw_frag_masked(match, value->u8,
 2767|    707|                                 mask->u8 & FLOW_NW_FRAG_MASK);
  ------------------
  |  |   56|    707|#define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   54|    707|#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|    707|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  |  |  ------------------
  ------------------
 2768|    707|        break;
 2769|       |
 2770|     50|    case MFF_ARP_SPA:
  ------------------
  |  Branch (2770:5): [True: 50, False: 59.4k]
  ------------------
 2771|     50|        match_set_nw_src_masked(match, value->be32, mask->be32);
 2772|     50|        break;
 2773|       |
 2774|    141|    case MFF_ARP_TPA:
  ------------------
  |  Branch (2774:5): [True: 141, False: 59.3k]
  ------------------
 2775|    141|        match_set_nw_dst_masked(match, value->be32, mask->be32);
 2776|    141|        break;
 2777|       |
 2778|    198|    case MFF_TCP_SRC:
  ------------------
  |  Branch (2778:5): [True: 198, False: 59.3k]
  ------------------
 2779|    235|    case MFF_UDP_SRC:
  ------------------
  |  Branch (2779:5): [True: 37, False: 59.4k]
  ------------------
 2780|    360|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (2780:5): [True: 125, False: 59.3k]
  ------------------
 2781|    360|        match_set_tp_src_masked(match, value->be16, mask->be16);
 2782|    360|        break;
 2783|       |
 2784|     29|    case MFF_TCP_DST:
  ------------------
  |  Branch (2784:5): [True: 29, False: 59.4k]
  ------------------
 2785|     45|    case MFF_UDP_DST:
  ------------------
  |  Branch (2785:5): [True: 16, False: 59.4k]
  ------------------
 2786|    172|    case MFF_SCTP_DST:
  ------------------
  |  Branch (2786:5): [True: 127, False: 59.3k]
  ------------------
 2787|    172|        match_set_tp_dst_masked(match, value->be16, mask->be16);
 2788|    172|        break;
 2789|       |
 2790|    166|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (2790:5): [True: 166, False: 59.3k]
  ------------------
 2791|    166|        match_set_tcp_flags_masked(match, value->be16, mask->be16);
 2792|    166|        break;
 2793|       |
 2794|     37|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (2794:5): [True: 37, False: 59.4k]
  ------------------
 2795|     37|        MATCH_SET_FIELD_MASKED(match, nsh.flags, value->u8, mask->u8);
  ------------------
  |  |   50|     37|    do {                                                      \
  |  |   51|     37|        (match)->wc.masks.field = (msk);                      \
  |  |   52|     37|        (match)->flow.field = (value) & (msk);                \
  |  |   53|     37|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded, False: 37]
  |  |  ------------------
  ------------------
 2796|     37|        break;
 2797|      0|    case MFF_NSH_TTL:
  ------------------
  |  Branch (2797:5): [True: 0, False: 59.5k]
  ------------------
 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: 59.5k]
  ------------------
 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: 59.5k]
  ------------------
 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: 59.5k]
  ------------------
 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: 59.5k]
  ------------------
 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|    138|    case MFF_NSH_C1:
  ------------------
  |  Branch (2816:5): [True: 138, False: 59.3k]
  ------------------
 2817|    171|    case MFF_NSH_C2:
  ------------------
  |  Branch (2817:5): [True: 33, False: 59.4k]
  ------------------
 2818|    206|    case MFF_NSH_C3:
  ------------------
  |  Branch (2818:5): [True: 35, False: 59.4k]
  ------------------
 2819|    245|    case MFF_NSH_C4:
  ------------------
  |  Branch (2819:5): [True: 39, False: 59.4k]
  ------------------
 2820|    245|        MATCH_SET_FIELD_MASKED(match, nsh.context[mf->id - MFF_NSH_C1],
  ------------------
  |  |   50|    245|    do {                                                      \
  |  |   51|    245|        (match)->wc.masks.field = (msk);                      \
  |  |   52|    245|        (match)->flow.field = (value) & (msk);                \
  |  |   53|    245|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded, False: 245]
  |  |  ------------------
  ------------------
 2821|    245|                               value->be32, mask->be32);
 2822|    245|        break;
 2823|       |
 2824|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (2824:5): [True: 0, False: 59.5k]
  ------------------
 2825|      0|    default:
  ------------------
  |  Branch (2825:5): [True: 0, False: 59.5k]
  ------------------
 2826|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 2827|  59.5k|    }
 2828|       |
 2829|  58.2k|    return ((mf->usable_protocols_bitwise == mf->usable_protocols_cidr
  ------------------
  |  Branch (2829:14): [True: 57.9k, False: 344]
  ------------------
 2830|    344|             || ip_is_cidr(mask->be32))
  ------------------
  |  Branch (2830:17): [True: 14, False: 330]
  ------------------
 2831|  58.2k|            ? mf->usable_protocols_cidr
 2832|  58.2k|            : mf->usable_protocols_bitwise);
 2833|  59.5k|}
mf_check_src:
 2948|  31.7k|{
 2949|  31.7k|    return mf_check__(sf, match, "source");
 2950|  31.7k|}
mf_check_dst:
 2957|  7.60k|{
 2958|  7.60k|    int error = mf_check__(sf, match, "destination");
 2959|  7.60k|    if (!error && !sf->field->writable) {
  ------------------
  |  Branch (2959:9): [True: 7.03k, False: 572]
  |  Branch (2959:19): [True: 40, False: 6.99k]
  ------------------
 2960|     40|        VLOG_WARN_RL(&rl, "destination field %s is not writable",
  ------------------
  |  |  224|     40|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     40|    do {                                                                \
  |  |  |  |  288|     40|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     40|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 40]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     40|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 40]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2961|     40|                     sf->field->name);
 2962|     40|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2963|     40|    }
 2964|  7.56k|    return error;
 2965|  7.60k|}
mf_get:
 2972|  17.8k|{
 2973|  17.8k|    mf_get_value(mf, &match->flow, value);
 2974|  17.8k|    mf_get_mask(mf, &match->wc, mask);
 2975|  17.8k|}
mf_format:
 3401|  13.7k|{
 3402|  13.7k|    if (mask) {
  ------------------
  |  Branch (3402:9): [True: 4.78k, False: 8.92k]
  ------------------
 3403|  4.78k|        if (is_all_zeros(mask, mf->n_bytes)) {
  ------------------
  |  Branch (3403:13): [True: 1.66k, False: 3.11k]
  ------------------
 3404|  1.66k|            ds_put_cstr(s, "ANY");
 3405|  1.66k|            return;
 3406|  3.11k|        } else if (is_all_ones(mask, mf->n_bytes)) {
  ------------------
  |  Branch (3406:20): [True: 2.59k, False: 527]
  ------------------
 3407|  2.59k|            mask = NULL;
 3408|  2.59k|        }
 3409|  4.78k|    }
 3410|       |
 3411|  12.0k|    switch (mf->string) {
 3412|    379|    case MFS_OFP_PORT_OXM:
  ------------------
  |  Branch (3412:5): [True: 379, False: 11.6k]
  ------------------
 3413|    379|        if (!mask) {
  ------------------
  |  Branch (3413:13): [True: 297, False: 82]
  ------------------
 3414|    297|            ofp_port_t port;
 3415|    297|            ofputil_port_from_ofp11(value->be32, &port);
 3416|    297|            ofputil_format_port(port, port_map, s);
 3417|    297|            break;
 3418|    297|        }
 3419|       |        /* fall through */
 3420|    117|    case MFS_OFP_PORT:
  ------------------
  |  Branch (3420:5): [True: 35, False: 12.0k]
  ------------------
 3421|    117|        if (!mask) {
  ------------------
  |  Branch (3421:13): [True: 35, False: 82]
  ------------------
 3422|     35|            ofputil_format_port(u16_to_ofp(ntohs(value->be16)), port_map, s);
 3423|     35|            break;
 3424|     35|        }
 3425|       |        /* fall through */
 3426|  1.63k|    case MFS_DECIMAL:
  ------------------
  |  Branch (3426:5): [True: 1.55k, False: 10.4k]
  ------------------
 3427|  8.57k|    case MFS_HEXADECIMAL:
  ------------------
  |  Branch (3427:5): [True: 6.93k, False: 5.10k]
  ------------------
 3428|  8.57k|        mf_format_integer_string(mf, (uint8_t *) value, (uint8_t *) mask, s);
 3429|  8.57k|        break;
 3430|       |
 3431|    707|    case MFS_CT_STATE:
  ------------------
  |  Branch (3431:5): [True: 707, False: 11.3k]
  ------------------
 3432|    707|        mf_format_ct_state_string(value->be32,
 3433|    707|                                  mask ? mask->be32 : OVS_BE32_MAX, s);
  ------------------
  |  |   43|    707|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  |  Branch (3433:35): [True: 0, False: 707]
  ------------------
 3434|    707|        break;
 3435|       |
 3436|     50|    case MFS_ETHERNET:
  ------------------
  |  Branch (3436:5): [True: 50, False: 11.9k]
  ------------------
 3437|     50|        eth_format_masked(value->mac, mask ? &mask->mac : NULL, s);
  ------------------
  |  Branch (3437:39): [True: 0, False: 50]
  ------------------
 3438|     50|        break;
 3439|       |
 3440|     68|    case MFS_IPV4:
  ------------------
  |  Branch (3440:5): [True: 68, False: 11.9k]
  ------------------
 3441|     68|        ip_format_masked(value->be32, mask ? mask->be32 : OVS_BE32_MAX, s);
  ------------------
  |  |   43|     23|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  |  Branch (3441:39): [True: 45, False: 23]
  ------------------
 3442|     68|        break;
 3443|       |
 3444|     64|    case MFS_IPV6:
  ------------------
  |  Branch (3444:5): [True: 64, False: 11.9k]
  ------------------
 3445|     64|        ipv6_format_masked(&value->ipv6, mask ? &mask->ipv6 : NULL, s);
  ------------------
  |  Branch (3445:42): [True: 24, False: 40]
  ------------------
 3446|     64|        break;
 3447|       |
 3448|     83|    case MFS_FRAG:
  ------------------
  |  Branch (3448:5): [True: 83, False: 11.9k]
  ------------------
 3449|     83|        mf_format_frag_string(value->u8, mask ? mask->u8 : UINT8_MAX, s);
  ------------------
  |  Branch (3449:42): [True: 0, False: 83]
  ------------------
 3450|     83|        break;
 3451|       |
 3452|    217|    case MFS_TNL_FLAGS:
  ------------------
  |  Branch (3452:5): [True: 217, False: 11.8k]
  ------------------
 3453|    217|        mf_format_tnl_flags_string(value->be16,
 3454|    217|                                   mask ? mask->be16 : OVS_BE16_MAX, s);
  ------------------
  |  |   42|    400|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  |  Branch (3454:36): [True: 34, False: 183]
  ------------------
 3455|    217|        break;
 3456|       |
 3457|  1.60k|    case MFS_TCP_FLAGS:
  ------------------
  |  Branch (3457:5): [True: 1.60k, False: 10.4k]
  ------------------
 3458|  1.60k|        mf_format_tcp_flags_string(value->be16,
 3459|  1.60k|                                   mask ? mask->be16 : OVS_BE16_MAX, s);
  ------------------
  |  |   42|  3.21k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  |  Branch (3459:36): [True: 0, False: 1.60k]
  ------------------
 3460|  1.60k|        break;
 3461|       |
 3462|    341|    case MFS_PACKET_TYPE:
  ------------------
  |  Branch (3462:5): [True: 341, False: 11.6k]
  ------------------
 3463|    341|        mf_format_packet_type_string(value->be32,
 3464|    341|                                     mask ? mask->be32 : OVS_BE32_MAX, s);
  ------------------
  |  |   43|    341|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  |  Branch (3464:38): [True: 0, False: 341]
  ------------------
 3465|    341|        break;
 3466|       |
 3467|      0|    default:
  ------------------
  |  Branch (3467:5): [True: 0, False: 12.0k]
  ------------------
 3468|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 3469|  12.0k|    }
 3470|  12.0k|}
mf_write_subfield_value:
 3507|  17.8k|{
 3508|  17.8k|    const struct mf_field *field = sf->field;
 3509|  17.8k|    union mf_value value, mask;
 3510|  17.8k|    unsigned int size = DIV_ROUND_UP(sf->n_bits, 8);
  ------------------
  |  |  300|  17.8k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  ------------------
 3511|       |
 3512|  17.8k|    mf_get(field, match, &value, &mask);
 3513|  17.8k|    bitwise_copy(src, size, 0, &value, field->n_bytes, sf->ofs, sf->n_bits);
 3514|  17.8k|    bitwise_one (              &mask,  field->n_bytes, sf->ofs, sf->n_bits);
 3515|       |    mf_set(field, &value, &mask, match, NULL);
 3516|  17.8k|}
field_array_set:
 3571|  7.70k|{
 3572|  7.70k|    size_t i, offset = 0;
 3573|       |
 3574|  7.70k|    ovs_assert(id < MFF_N_IDS);
  ------------------
  |  |   62|  7.70k|#define ovs_assert ovs_ignore
  ------------------
 3575|       |
 3576|       |    /* Find the spot for 'id'. */
 3577|  7.70k|    BITMAP_FOR_EACH_1 (i, id, fa->used.bm) {
  ------------------
  |  |  281|  7.70k|    BITMAP_FOR_EACH_1_RANGE(IDX, 0, SIZE, BITMAP)
  |  |  ------------------
  |  |  |  |  278|  12.1k|    for ((IDX) = bitmap_scan(BITMAP, true, BEGIN, END); (IDX) < (END);   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (278:57): [True: 4.49k, False: 7.70k]
  |  |  |  |  ------------------
  |  |  |  |  279|  7.70k|         (IDX) = bitmap_scan(BITMAP, true, (IDX) + 1, END))
  |  |  ------------------
  ------------------
 3578|  4.49k|        offset += mf_from_id(i)->n_bytes;
 3579|  4.49k|    }
 3580|       |
 3581|  7.70k|    size_t value_size = mf_from_id(id)->n_bytes;
 3582|       |
 3583|       |    /* make room if necessary. */
 3584|  7.70k|    if (!bitmap_is_set(fa->used.bm, id)) {
  ------------------
  |  Branch (3584:9): [True: 7.70k, False: 0]
  ------------------
 3585|  7.70k|        fa->values = xrealloc(fa->values, fa->values_size + value_size);
 3586|       |        /* Move remainder forward, if any. */
 3587|  7.70k|        if (offset < fa->values_size) {
  ------------------
  |  Branch (3587:13): [True: 2.47k, False: 5.23k]
  ------------------
 3588|  2.47k|            memmove(fa->values + offset + value_size, fa->values + offset,
 3589|  2.47k|                    fa->values_size - offset);
 3590|  2.47k|        }
 3591|  7.70k|        fa->values_size += value_size;
 3592|  7.70k|    }
 3593|  7.70k|    bitmap_set1(fa->used.bm, id);
 3594|       |
 3595|  7.70k|    memcpy(fa->values + offset, value, value_size);
 3596|  7.70k|}
mf_get_vl_mff:
 3670|   229k|{
 3671|   229k|    if (mff && mff->variable_len && vl_mff_map) {
  ------------------
  |  Branch (3671:9): [True: 229k, False: 0]
  |  Branch (3671:16): [True: 98.4k, False: 131k]
  |  Branch (3671:37): [True: 0, False: 98.4k]
  ------------------
 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|   229k|    return NULL;
 3678|   229k|}
mf_vl_mff_invalid:
 3781|   229k|{
 3782|   229k|    return map && mff && mff->variable_len && !mff->mapped;
  ------------------
  |  Branch (3782:12): [True: 0, False: 229k]
  |  Branch (3782:19): [True: 0, False: 0]
  |  Branch (3782:26): [True: 0, False: 0]
  |  Branch (3782:47): [True: 0, False: 0]
  ------------------
 3783|   229k|}
mf_vl_mff_set_tlv_bitmap:
 3787|  62.9k|{
 3788|  62.9k|    if (mff && mff->mapped) {
  ------------------
  |  Branch (3788:9): [True: 62.9k, False: 0]
  |  Branch (3788:16): [True: 0, False: 62.9k]
  ------------------
 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|  62.9k|}
mf_vl_mff_nx_pull_header:
 3833|  18.7k|{
 3834|  18.7k|    enum ofperr error = nx_pull_header(b, vl_mff_map, field, masked);
 3835|  18.7k|    if (error) {
  ------------------
  |  Branch (3835:9): [True: 2.26k, False: 16.4k]
  ------------------
 3836|  2.26k|        return error;
 3837|  2.26k|    }
 3838|       |
 3839|  16.4k|    mf_vl_mff_set_tlv_bitmap(*field, tlv_bitmap);
 3840|  16.4k|    return 0;
 3841|  18.7k|}
mf_vl_mff_nx_pull_entry:
 3847|  15.5k|{
 3848|  15.5k|    enum ofperr error = nx_pull_entry(b, vl_mff_map, field, value, mask, true);
 3849|  15.5k|    if (error) {
  ------------------
  |  Branch (3849:9): [True: 1.24k, False: 14.2k]
  ------------------
 3850|  1.24k|        return error;
 3851|  1.24k|    }
 3852|       |
 3853|  14.2k|    mf_vl_mff_set_tlv_bitmap(*field, tlv_bitmap);
 3854|  14.2k|    return 0;
 3855|  15.5k|}
mf_vl_mff_mf_from_nxm_header:
 3862|  35.0k|{
 3863|  35.0k|    *field = mf_from_nxm_header(header, vl_mff_map);
 3864|  35.0k|    if (!*field) {
  ------------------
  |  Branch (3864:9): [True: 2.91k, False: 32.1k]
  ------------------
 3865|  2.91k|        return OFPERR_OFPBAC_BAD_SET_TYPE;
 3866|  32.1k|    } else if (mf_vl_mff_invalid(*field, vl_mff_map)) {
  ------------------
  |  Branch (3866:16): [True: 0, False: 32.1k]
  ------------------
 3867|      0|        return OFPERR_NXFMFC_INVALID_TLV_FIELD;
 3868|      0|    }
 3869|       |
 3870|  32.1k|    mf_vl_mff_set_tlv_bitmap(*field, tlv_bitmap);
 3871|  32.1k|    return 0;
 3872|  35.0k|}
mf_bitmap_and:
 3886|   122k|{
 3887|   122k|    bitmap_and(a.bm, b.bm, MFF_N_IDS);
 3888|   122k|    return a;
 3889|   122k|}
mf_bitmap_not:
 3902|  61.0k|{
 3903|  61.0k|    bitmap_not(x.bm, MFF_N_IDS);
 3904|  61.0k|    return x;
 3905|  61.0k|}
meta-flow.c:mf_are_prereqs_ok__:
  444|  40.1k|{
  445|  40.1k|    ovs_be16 dl_type = get_dl_type(flow);
  446|       |
  447|  40.1k|    switch (mf->prereqs) {
  ------------------
  |  Branch (447:13): [True: 40.1k, False: 0]
  ------------------
  448|  29.8k|    case MFP_NONE:
  ------------------
  |  Branch (448:5): [True: 29.8k, False: 10.2k]
  ------------------
  449|  29.8k|        return true;
  450|    375|    case MFP_ETHERNET:
  ------------------
  |  Branch (450:5): [True: 375, False: 39.7k]
  ------------------
  451|    375|        return is_ethernet(flow, wc);
  452|    578|    case MFP_ARP:
  ------------------
  |  Branch (452:5): [True: 578, False: 39.5k]
  ------------------
  453|    578|        return (dl_type == htons(ETH_TYPE_ARP) ||
  ------------------
  |  Branch (453:17): [True: 291, False: 287]
  ------------------
  454|    287|                dl_type == htons(ETH_TYPE_RARP));
  ------------------
  |  Branch (454:17): [True: 27, False: 260]
  ------------------
  455|     10|    case MFP_IPV4:
  ------------------
  |  Branch (455:5): [True: 10, False: 40.0k]
  ------------------
  456|     10|        return dl_type == htons(ETH_TYPE_IP);
  457|     35|    case MFP_IPV6:
  ------------------
  |  Branch (457:5): [True: 35, False: 40.0k]
  ------------------
  458|     35|        return dl_type == htons(ETH_TYPE_IPV6);
  459|    423|    case MFP_VLAN_VID:
  ------------------
  |  Branch (459:5): [True: 423, False: 39.6k]
  ------------------
  460|    423|        return is_vlan(flow, wc);
  461|    114|    case MFP_MPLS:
  ------------------
  |  Branch (461:5): [True: 114, False: 39.9k]
  ------------------
  462|    114|        return eth_type_mpls(dl_type);
  463|  3.23k|    case MFP_IP_ANY:
  ------------------
  |  Branch (463:5): [True: 3.23k, False: 36.8k]
  ------------------
  464|  3.23k|        return is_ip_any(flow);
  465|     97|    case MFP_NSH:
  ------------------
  |  Branch (465:5): [True: 97, False: 40.0k]
  ------------------
  466|     97|        return dl_type == htons(ETH_TYPE_NSH);
  467|    967|    case MFP_CT_VALID:
  ------------------
  |  Branch (467:5): [True: 967, False: 39.1k]
  ------------------
  468|    967|        return is_ct_valid(flow, mask, wc);
  469|    384|    case MFP_TCP:
  ------------------
  |  Branch (469:5): [True: 384, False: 39.7k]
  ------------------
  470|       |        /* Matching !FRAG_LATER is not enforced (mask is not checked). */
  471|    384|        return is_tcp(flow, wc) && !(flow->nw_frag & FLOW_NW_FRAG_LATER);
  ------------------
  |  |   55|    133|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  |  Branch (471:16): [True: 133, False: 251]
  |  Branch (471:36): [True: 133, False: 0]
  ------------------
  472|    465|    case MFP_UDP:
  ------------------
  |  Branch (472:5): [True: 465, False: 39.6k]
  ------------------
  473|    465|        return is_udp(flow, wc) && !(flow->nw_frag & FLOW_NW_FRAG_LATER);
  ------------------
  |  |   55|    240|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  |  Branch (473:16): [True: 240, False: 225]
  |  Branch (473:36): [True: 240, False: 0]
  ------------------
  474|    289|    case MFP_SCTP:
  ------------------
  |  Branch (474:5): [True: 289, False: 39.8k]
  ------------------
  475|    289|        return is_sctp(flow, wc) && !(flow->nw_frag & FLOW_NW_FRAG_LATER);
  ------------------
  |  |   55|     94|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  |  Branch (475:16): [True: 94, False: 195]
  |  Branch (475:37): [True: 94, False: 0]
  ------------------
  476|    709|    case MFP_ICMPV4:
  ------------------
  |  Branch (476:5): [True: 709, False: 39.3k]
  ------------------
  477|    709|        return is_icmpv4(flow, wc);
  478|    703|    case MFP_ICMPV6:
  ------------------
  |  Branch (478:5): [True: 703, False: 39.3k]
  ------------------
  479|    703|        return is_icmpv6(flow, wc);
  480|    129|    case MFP_ND:
  ------------------
  |  Branch (480:5): [True: 129, False: 39.9k]
  ------------------
  481|    129|        return is_nd(flow, wc);
  482|    925|    case MFP_ND_SOLICIT:
  ------------------
  |  Branch (482:5): [True: 925, False: 39.1k]
  ------------------
  483|    925|        return is_nd(flow, wc) && flow->tp_src == htons(ND_NEIGHBOR_SOLICIT);
  ------------------
  |  Branch (483:16): [True: 123, False: 802]
  |  Branch (483:35): [True: 94, False: 29]
  ------------------
  484|    822|    case MFP_ND_ADVERT:
  ------------------
  |  Branch (484:5): [True: 822, False: 39.2k]
  ------------------
  485|    822|        return is_nd(flow, wc) && flow->tp_src == htons(ND_NEIGHBOR_ADVERT);
  ------------------
  |  Branch (485:16): [True: 230, False: 592]
  |  Branch (485:35): [True: 195, False: 35]
  ------------------
  486|  40.1k|    }
  487|       |
  488|      0|    OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  489|  40.1k|}
meta-flow.c:field_len:
 1371|   102k|{
 1372|   102k|    const uint8_t *value = &value_->u8;
 1373|   102k|    int i;
 1374|       |
 1375|   102k|    if (!mf->variable_len) {
  ------------------
  |  Branch (1375:9): [True: 0, False: 102k]
  ------------------
 1376|      0|        return mf->n_bytes;
 1377|      0|    }
 1378|       |
 1379|   102k|    if (!value) {
  ------------------
  |  Branch (1379:9): [True: 0, False: 102k]
  ------------------
 1380|      0|        return 0;
 1381|      0|    }
 1382|       |
 1383|  12.0M|    for (i = 0; i < mf->n_bytes; i++) {
  ------------------
  |  Branch (1383:17): [True: 11.9M, False: 77.6k]
  ------------------
 1384|  11.9M|        if (value[i] != 0) {
  ------------------
  |  Branch (1384:13): [True: 24.3k, False: 11.9M]
  ------------------
 1385|  24.3k|            break;
 1386|  24.3k|        }
 1387|  11.9M|    }
 1388|       |
 1389|   102k|    return mf->n_bytes - i;
 1390|   102k|}
meta-flow.c:mf_check__:
 2838|  39.3k|{
 2839|  39.3k|    if (!sf->field) {
  ------------------
  |  Branch (2839:9): [True: 0, False: 39.3k]
  ------------------
 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|  39.3k|    } else if (!sf->n_bits) {
  ------------------
  |  Branch (2842:16): [True: 5.31k, False: 34.0k]
  ------------------
 2843|  5.31k|        VLOG_WARN_RL(&rl, "zero bit %s field %s", type, sf->field->name);
  ------------------
  |  |  224|  5.31k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  5.31k|    do {                                                                \
  |  |  |  |  288|  5.31k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  5.31k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 5.31k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  5.31k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 5.31k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2844|  5.31k|        return OFPERR_OFPBAC_BAD_SET_LEN;
 2845|  34.0k|    } else if (sf->ofs >= sf->field->n_bits) {
  ------------------
  |  Branch (2845:16): [True: 1.93k, False: 32.0k]
  ------------------
 2846|  1.93k|        VLOG_WARN_RL(&rl, "bit offset %d exceeds %d-bit width of %s field %s",
  ------------------
  |  |  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]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2847|  1.93k|                     sf->ofs, sf->field->n_bits, type, sf->field->name);
 2848|  1.93k|        return OFPERR_OFPBAC_BAD_SET_LEN;
 2849|  32.0k|    } else if (sf->ofs + sf->n_bits > sf->field->n_bits) {
  ------------------
  |  Branch (2849:16): [True: 437, False: 31.6k]
  ------------------
 2850|    437|        VLOG_WARN_RL(&rl, "bit offset %d and width %d exceeds %d-bit width "
  ------------------
  |  |  224|    437|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    437|    do {                                                                \
  |  |  |  |  288|    437|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    437|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 437]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    437|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 437]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2851|    437|                     "of %s field %s", sf->ofs, sf->n_bits,
 2852|    437|                     sf->field->n_bits, type, sf->field->name);
 2853|    437|        return OFPERR_OFPBAC_BAD_SET_LEN;
 2854|  31.6k|    } else if (match && !mf_are_match_prereqs_ok(sf->field, match)) {
  ------------------
  |  Branch (2854:16): [True: 23.4k, False: 8.14k]
  |  Branch (2854:25): [True: 556, False: 22.9k]
  ------------------
 2855|    556|        VLOG_WARN_RL(&rl, "%s field %s lacks correct prerequisites",
  ------------------
  |  |  224|    556|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    556|    do {                                                                \
  |  |  |  |  288|    556|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    556|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 556]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    556|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 556]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2856|    556|                     type, sf->field->name);
 2857|    556|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 2858|  31.0k|    } else {
 2859|  31.0k|        return 0;
 2860|  31.0k|    }
 2861|  39.3k|}
meta-flow.c:mf_format_integer_string:
 3327|  8.57k|{
 3328|  8.57k|    if (mf->string == MFS_HEXADECIMAL) {
  ------------------
  |  Branch (3328:9): [True: 6.93k, False: 1.63k]
  ------------------
 3329|  6.93k|        ds_put_hex(s, valuep, mf->n_bytes);
 3330|  6.93k|    } else {
 3331|  1.63k|        unsigned long long int integer = 0;
 3332|  1.63k|        int i;
 3333|       |
 3334|  1.63k|        ovs_assert(mf->n_bytes <= 8);
  ------------------
  |  |   62|  1.63k|#define ovs_assert ovs_ignore
  ------------------
 3335|  4.57k|        for (i = 0; i < mf->n_bytes; i++) {
  ------------------
  |  Branch (3335:21): [True: 2.93k, False: 1.63k]
  ------------------
 3336|  2.93k|            integer = (integer << 8) | valuep[i];
 3337|  2.93k|        }
 3338|  1.63k|        ds_put_format(s, "%lld", integer);
 3339|  1.63k|    }
 3340|       |
 3341|  8.57k|    if (maskp) {
  ------------------
  |  Branch (3341:9): [True: 424, False: 8.14k]
  ------------------
 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|    424|        ds_put_char(s, '/');
 3346|    424|        ds_put_hex(s, maskp, mf->n_bytes);
 3347|    424|    }
 3348|  8.57k|}
meta-flow.c:mf_format_ct_state_string:
 3383|    707|{
 3384|    707|    format_flags_masked(s, NULL, ct_state_to_string, ntohl(value),
 3385|    707|                        ntohl(mask), UINT16_MAX);
 3386|    707|}
meta-flow.c:mf_format_frag_string:
 3352|     83|{
 3353|     83|    const struct frag_handling *h;
 3354|       |
 3355|     83|    mask &= FLOW_NW_FRAG_MASK;
  ------------------
  |  |   56|     83|#define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   54|     83|#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|     83|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  |  |  ------------------
  ------------------
 3356|     83|    value &= mask;
 3357|       |
 3358|    557|    for (h = all_frags; h < &all_frags[ARRAY_SIZE(all_frags)]; h++) {
  ------------------
  |  |  297|    557|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   46|    557|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|    557|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   47|    557|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    557|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|    557|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3358:25): [True: 491, False: 66]
  ------------------
 3359|    491|        if (value == h->value && mask == h->mask) {
  ------------------
  |  Branch (3359:13): [True: 83, False: 408]
  |  Branch (3359:34): [True: 17, False: 66]
  ------------------
 3360|     17|            ds_put_cstr(s, h->name);
 3361|     17|            return;
 3362|     17|        }
 3363|    491|    }
 3364|     66|    ds_put_cstr(s, "<error>");
 3365|     66|}
meta-flow.c:mf_format_tnl_flags_string:
 3369|    217|{
 3370|    217|    format_flags_masked(s, NULL, flow_tun_flag_to_string, ntohs(value),
 3371|    217|                        ntohs(mask) & FLOW_TNL_PUB_F_MASK, FLOW_TNL_PUB_F_MASK);
  ------------------
  |  |   58|    217|#define FLOW_TNL_PUB_F_MASK ((1 << 1) - 1)
  ------------------
                                      ntohs(mask) & FLOW_TNL_PUB_F_MASK, FLOW_TNL_PUB_F_MASK);
  ------------------
  |  |   58|    217|#define FLOW_TNL_PUB_F_MASK ((1 << 1) - 1)
  ------------------
 3372|    217|}
meta-flow.c:mf_format_tcp_flags_string:
 3376|  1.60k|{
 3377|  1.60k|    format_flags_masked(s, NULL, packet_tcp_flag_to_string, ntohs(value),
 3378|  1.60k|                        TCP_FLAGS(mask), TCP_FLAGS(OVS_BE16_MAX));
  ------------------
  |  |  904|  1.60k|#define TCP_FLAGS(tcp_ctl) (ntohs(tcp_ctl) & 0x0fff)
  ------------------
                                      TCP_FLAGS(mask), TCP_FLAGS(OVS_BE16_MAX));
  ------------------
  |  |  904|  1.60k|#define TCP_FLAGS(tcp_ctl) (ntohs(tcp_ctl) & 0x0fff)
  ------------------
 3379|  1.60k|}
meta-flow.c:mf_format_packet_type_string:
 3390|    341|{
 3391|    341|    format_packet_type_masked(s, value, mask);
 3392|    341|}

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

netdev_features_to_bps:
 1180|  45.5k|{
 1181|  45.5k|    enum {
 1182|  45.5k|        F_1000000MB = NETDEV_F_1TB_FD,
 1183|  45.5k|        F_100000MB = NETDEV_F_100GB_FD,
 1184|  45.5k|        F_40000MB = NETDEV_F_40GB_FD,
 1185|  45.5k|        F_10000MB = NETDEV_F_10GB_FD,
 1186|  45.5k|        F_1000MB = NETDEV_F_1GB_HD | NETDEV_F_1GB_FD,
 1187|  45.5k|        F_100MB = NETDEV_F_100MB_HD | NETDEV_F_100MB_FD,
 1188|  45.5k|        F_10MB = NETDEV_F_10MB_HD | NETDEV_F_10MB_FD
 1189|  45.5k|    };
 1190|       |
 1191|  45.5k|    return (  features & F_1000000MB ? UINT64_C(1000000000000)
  ------------------
  |  Branch (1191:15): [True: 0, False: 45.5k]
  ------------------
 1192|  45.5k|            : features & F_100000MB  ? UINT64_C(100000000000)
  ------------------
  |  Branch (1192:15): [True: 0, False: 45.5k]
  ------------------
 1193|  45.5k|            : features & F_40000MB   ? UINT64_C(40000000000)
  ------------------
  |  Branch (1193:15): [True: 0, False: 45.5k]
  ------------------
 1194|  45.5k|            : features & F_10000MB   ? UINT64_C(10000000000)
  ------------------
  |  Branch (1194:15): [True: 14.9k, False: 30.5k]
  ------------------
 1195|  45.5k|            : features & F_1000MB    ? UINT64_C(1000000000)
  ------------------
  |  Branch (1195:15): [True: 5.71k, False: 24.7k]
  ------------------
 1196|  30.5k|            : features & F_100MB     ? UINT64_C(100000000)
  ------------------
  |  Branch (1196:15): [True: 5.05k, False: 19.7k]
  ------------------
 1197|  24.7k|            : features & F_10MB      ? UINT64_C(10000000)
  ------------------
  |  Branch (1197:15): [True: 3.26k, False: 16.4k]
  ------------------
 1198|  19.7k|                                     : default_bps);
 1199|  45.5k|}
netdev_features_format:
 1273|  75.3k|{
 1274|  75.3k|    ofp_print_bit_names(s, features, netdev_feature_to_name, ' ');
 1275|  75.3k|    ds_put_char(s, '\n');
 1276|  75.3k|}
netdev_free_custom_stats_counters:
 2350|  25.1k|{
 2351|  25.1k|    if (custom_stats) {
  ------------------
  |  Branch (2351:9): [True: 25.1k, False: 0]
  ------------------
 2352|  25.1k|        if (custom_stats->counters) {
  ------------------
  |  Branch (2352:13): [True: 4.52k, False: 20.5k]
  ------------------
 2353|  4.52k|            free(custom_stats->counters);
 2354|  4.52k|            custom_stats->counters = NULL;
 2355|  4.52k|            custom_stats->size = 0;
 2356|  4.52k|        }
 2357|  25.1k|        free(custom_stats->label);
 2358|       |        custom_stats->label = NULL;
 2359|  25.1k|    }
 2360|  25.1k|}
netdev.c:netdev_feature_to_name:
 1246|   406k|{
 1247|   406k|    enum netdev_features f = bit;
 1248|       |
 1249|   406k|    switch (f) {
  ------------------
  |  Branch (1249:13): [True: 406k, False: 0]
  ------------------
 1250|  35.2k|    case NETDEV_F_10MB_HD:    return "10MB-HD";
  ------------------
  |  Branch (1250:5): [True: 35.2k, False: 371k]
  ------------------
 1251|  33.0k|    case NETDEV_F_10MB_FD:    return "10MB-FD";
  ------------------
  |  Branch (1251:5): [True: 33.0k, False: 373k]
  ------------------
 1252|  33.2k|    case NETDEV_F_100MB_HD:   return "100MB-HD";
  ------------------
  |  Branch (1252:5): [True: 33.2k, False: 373k]
  ------------------
 1253|  38.5k|    case NETDEV_F_100MB_FD:   return "100MB-FD";
  ------------------
  |  Branch (1253:5): [True: 38.5k, False: 368k]
  ------------------
 1254|  29.0k|    case NETDEV_F_1GB_HD:     return "1GB-HD";
  ------------------
  |  Branch (1254:5): [True: 29.0k, False: 377k]
  ------------------
 1255|  30.7k|    case NETDEV_F_1GB_FD:     return "1GB-FD";
  ------------------
  |  Branch (1255:5): [True: 30.7k, False: 375k]
  ------------------
 1256|  32.8k|    case NETDEV_F_10GB_FD:    return "10GB-FD";
  ------------------
  |  Branch (1256:5): [True: 32.8k, False: 373k]
  ------------------
 1257|  2.01k|    case NETDEV_F_40GB_FD:    return "40GB-FD";
  ------------------
  |  Branch (1257:5): [True: 2.01k, False: 404k]
  ------------------
 1258|  2.19k|    case NETDEV_F_100GB_FD:   return "100GB-FD";
  ------------------
  |  Branch (1258:5): [True: 2.19k, False: 404k]
  ------------------
 1259|  2.21k|    case NETDEV_F_1TB_FD:     return "1TB-FD";
  ------------------
  |  Branch (1259:5): [True: 2.21k, False: 404k]
  ------------------
 1260|  2.29k|    case NETDEV_F_OTHER:      return "OTHER";
  ------------------
  |  Branch (1260:5): [True: 2.29k, False: 404k]
  ------------------
 1261|  26.2k|    case NETDEV_F_COPPER:     return "COPPER";
  ------------------
  |  Branch (1261:5): [True: 26.2k, False: 380k]
  ------------------
 1262|  35.6k|    case NETDEV_F_FIBER:      return "FIBER";
  ------------------
  |  Branch (1262:5): [True: 35.6k, False: 371k]
  ------------------
 1263|  32.6k|    case NETDEV_F_AUTONEG:    return "AUTO_NEG";
  ------------------
  |  Branch (1263:5): [True: 32.6k, False: 374k]
  ------------------
 1264|  33.4k|    case NETDEV_F_PAUSE:      return "AUTO_PAUSE";
  ------------------
  |  Branch (1264:5): [True: 33.4k, False: 373k]
  ------------------
 1265|  37.3k|    case NETDEV_F_PAUSE_ASYM: return "AUTO_PAUSE_ASYM";
  ------------------
  |  Branch (1265:5): [True: 37.3k, False: 369k]
  ------------------
 1266|   406k|    }
 1267|       |
 1268|      0|    return NULL;
 1269|   406k|}

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

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

ofpact_put_set_field:
 3385|  14.5k|{
 3386|       |    /* Ensure there's enough space for:
 3387|       |     * - value (8-byte aligned)
 3388|       |     * - mask  (8-byte aligned)
 3389|       |     * - padding (to make the whole ofpact_set_field 8-byte aligned)
 3390|       |     */
 3391|  14.5k|    size_t total_size = 2 * ROUND_UP(field->n_bytes, OFPACT_ALIGNTO);
  ------------------
  |  |  303|  14.5k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|  14.5k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
 3392|  14.5k|    struct ofpact_set_field *sf = ofpact_put_SET_FIELD(ofpacts);
 3393|  14.5k|    sf->field = field;
 3394|       |
 3395|       |    /* Fill with all zeroes to make sure the padding is initialized. */
 3396|  14.5k|    ofpbuf_put_zeros(ofpacts, total_size);
 3397|  14.5k|    sf = ofpacts->header;
 3398|       |
 3399|       |    /* Fill in the value and mask if given, otherwise keep the zeroes
 3400|       |     * so that the caller may fill in the value and mask itself. */
 3401|  14.5k|    if (value) {
  ------------------
  |  Branch (3401:9): [True: 12.6k, False: 1.95k]
  ------------------
 3402|  12.6k|        memcpy(sf->value, value, field->n_bytes);
 3403|  12.6k|        if (mask) {
  ------------------
  |  Branch (3403:13): [True: 12.6k, False: 0]
  ------------------
 3404|  12.6k|            memcpy(ofpact_set_field_mask(sf), mask, field->n_bytes);
  ------------------
  |  |  563|  12.6k|    ALIGNED_CAST(union mf_value *,                                          \
  |  |  ------------------
  |  |  |  |  434|  12.6k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  ------------------
  |  |  564|  12.6k|                 (uint8_t *)(SF)->value +                                   \
  |  |  565|  12.6k|                            ROUND_UP((SF)->field->n_bytes, OFPACT_ALIGNTO))
  ------------------
 3405|  12.6k|        } else {
 3406|      0|            memset(ofpact_set_field_mask(sf), 0xff, field->n_bytes);
  ------------------
  |  |  563|      0|    ALIGNED_CAST(union mf_value *,                                          \
  |  |  ------------------
  |  |  |  |  434|      0|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  ------------------
  |  |  564|      0|                 (uint8_t *)(SF)->value +                                   \
  |  |  565|      0|                            ROUND_UP((SF)->field->n_bytes, OFPACT_ALIGNTO))
  ------------------
 3407|      0|        }
 3408|  12.6k|    }
 3409|       |
 3410|       |    /* Update length. */
 3411|  14.5k|    ofpact_finish_SET_FIELD(ofpacts, &sf);
 3412|       |
 3413|  14.5k|    return sf;
 3414|  14.5k|}
ofpact_put_reg_load:
 3424|  1.95k|{
 3425|  1.95k|    struct ofpact_set_field *sf = ofpact_put_set_field(ofpacts, field, value,
 3426|  1.95k|                                                       mask);
 3427|  1.95k|    sf->ofpact.raw = NXAST_RAW_REG_LOAD;
 3428|       |
 3429|  1.95k|    return sf;
 3430|  1.95k|}
ofpact_put_reg_load2:
 3435|  1.66k|{
 3436|  1.66k|    struct ofpact_set_field *sf = ofpact_put_set_field(ofpacts, field, value,
 3437|  1.66k|                                                       mask);
 3438|  1.66k|    sf->ofpact.raw = NXAST_RAW_REG_LOAD2;
 3439|       |
 3440|  1.66k|    return sf;
 3441|  1.66k|}
ofpacts_pull_openflow_actions:
 8121|  96.0k|{
 8122|  96.0k|    return ofpacts_pull_openflow_actions__(
 8123|  96.0k|        openflow, actions_len, version,
 8124|  96.0k|        (1u << OVSINST_OFPIT11_APPLY_ACTIONS) | (1u << OVSINST_OFPIT13_METER),
 8125|  96.0k|        ofpacts, 0, vl_mff_map, ofpacts_tlv_bitmap);
 8126|  96.0k|}
ovs_instruction_name_from_type:
 8363|  28.8k|{
 8364|  28.8k|    return type < ARRAY_SIZE(inst_info) ? inst_info[type].name : NULL;
  ------------------
  |  |  297|  28.8k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   46|  28.8k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|  28.8k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   47|  28.8k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  28.8k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|  28.8k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (8364:12): [True: 28.8k, False: 0]
  ------------------
 8365|  28.8k|}
ovs_instruction_type_from_ofpact_type:
 8382|  94.1k|{
 8383|  94.1k|    switch (type) {
 8384|    160|    case OFPACT_METER:
  ------------------
  |  Branch (8384:5): [True: 160, False: 94.0k]
  ------------------
 8385|    160|        return (version >= OFP15_VERSION
  ------------------
  |  Branch (8385:17): [True: 3, False: 157]
  ------------------
 8386|    160|                ? OVSINST_OFPIT11_APPLY_ACTIONS
 8387|    160|                : OVSINST_OFPIT13_METER);
 8388|    143|    case OFPACT_CLEAR_ACTIONS:
  ------------------
  |  Branch (8388:5): [True: 143, False: 94.0k]
  ------------------
 8389|    143|        return OVSINST_OFPIT11_CLEAR_ACTIONS;
 8390|  7.57k|    case OFPACT_WRITE_ACTIONS:
  ------------------
  |  Branch (8390:5): [True: 7.57k, False: 86.5k]
  ------------------
 8391|  7.57k|        return OVSINST_OFPIT11_WRITE_ACTIONS;
 8392|    265|    case OFPACT_WRITE_METADATA:
  ------------------
  |  Branch (8392:5): [True: 265, False: 93.8k]
  ------------------
 8393|    265|        return OVSINST_OFPIT11_WRITE_METADATA;
 8394|    234|    case OFPACT_GOTO_TABLE:
  ------------------
  |  Branch (8394:5): [True: 234, False: 93.9k]
  ------------------
 8395|    234|        return OVSINST_OFPIT11_GOTO_TABLE;
 8396|  9.19k|    case OFPACT_OUTPUT:
  ------------------
  |  Branch (8396:5): [True: 9.19k, False: 84.9k]
  ------------------
 8397|  9.29k|    case OFPACT_GROUP:
  ------------------
  |  Branch (8397:5): [True: 101, False: 94.0k]
  ------------------
 8398|  10.2k|    case OFPACT_CLONE:
  ------------------
  |  Branch (8398:5): [True: 965, False: 93.1k]
  ------------------
 8399|  13.5k|    case OFPACT_CONTROLLER:
  ------------------
  |  Branch (8399:5): [True: 3.24k, False: 90.9k]
  ------------------
 8400|  13.6k|    case OFPACT_ENQUEUE:
  ------------------
  |  Branch (8400:5): [True: 158, False: 94.0k]
  ------------------
 8401|  13.8k|    case OFPACT_OUTPUT_REG:
  ------------------
  |  Branch (8401:5): [True: 138, False: 94.0k]
  ------------------
 8402|  14.7k|    case OFPACT_OUTPUT_TRUNC:
  ------------------
  |  Branch (8402:5): [True: 998, False: 93.1k]
  ------------------
 8403|  15.8k|    case OFPACT_BUNDLE:
  ------------------
  |  Branch (8403:5): [True: 1.04k, False: 93.1k]
  ------------------
 8404|  19.7k|    case OFPACT_SET_VLAN_VID:
  ------------------
  |  Branch (8404:5): [True: 3.94k, False: 90.2k]
  ------------------
 8405|  20.7k|    case OFPACT_SET_VLAN_PCP:
  ------------------
  |  Branch (8405:5): [True: 983, False: 93.1k]
  ------------------
 8406|  21.8k|    case OFPACT_STRIP_VLAN:
  ------------------
  |  Branch (8406:5): [True: 1.12k, False: 93.0k]
  ------------------
 8407|  22.0k|    case OFPACT_PUSH_VLAN:
  ------------------
  |  Branch (8407:5): [True: 141, False: 94.0k]
  ------------------
 8408|  22.0k|    case OFPACT_SET_ETH_SRC:
  ------------------
  |  Branch (8408:5): [True: 9, False: 94.1k]
  ------------------
 8409|  22.1k|    case OFPACT_SET_ETH_DST:
  ------------------
  |  Branch (8409:5): [True: 111, False: 94.0k]
  ------------------
 8410|  23.6k|    case OFPACT_SET_IPV4_SRC:
  ------------------
  |  Branch (8410:5): [True: 1.52k, False: 92.6k]
  ------------------
 8411|  25.4k|    case OFPACT_SET_IPV4_DST:
  ------------------
  |  Branch (8411:5): [True: 1.74k, False: 92.4k]
  ------------------
 8412|  26.9k|    case OFPACT_SET_IP_DSCP:
  ------------------
  |  Branch (8412:5): [True: 1.55k, False: 92.6k]
  ------------------
 8413|  27.1k|    case OFPACT_SET_IP_ECN:
  ------------------
  |  Branch (8413:5): [True: 202, False: 93.9k]
  ------------------
 8414|  27.1k|    case OFPACT_SET_IP_TTL:
  ------------------
  |  Branch (8414:5): [True: 15, False: 94.1k]
  ------------------
 8415|  29.8k|    case OFPACT_SET_L4_SRC_PORT:
  ------------------
  |  Branch (8415:5): [True: 2.66k, False: 91.4k]
  ------------------
 8416|  32.6k|    case OFPACT_SET_L4_DST_PORT:
  ------------------
  |  Branch (8416:5): [True: 2.75k, False: 91.4k]
  ------------------
 8417|  32.8k|    case OFPACT_REG_MOVE:
  ------------------
  |  Branch (8417:5): [True: 265, False: 93.8k]
  ------------------
 8418|  43.0k|    case OFPACT_SET_FIELD:
  ------------------
  |  Branch (8418:5): [True: 10.1k, False: 83.9k]
  ------------------
 8419|  43.3k|    case OFPACT_STACK_PUSH:
  ------------------
  |  Branch (8419:5): [True: 260, False: 93.9k]
  ------------------
 8420|  43.7k|    case OFPACT_STACK_POP:
  ------------------
  |  Branch (8420:5): [True: 480, False: 93.6k]
  ------------------
 8421|  44.1k|    case OFPACT_DEC_TTL:
  ------------------
  |  Branch (8421:5): [True: 339, False: 93.8k]
  ------------------
 8422|  45.7k|    case OFPACT_SET_MPLS_LABEL:
  ------------------
  |  Branch (8422:5): [True: 1.62k, False: 92.5k]
  ------------------
 8423|  45.7k|    case OFPACT_SET_MPLS_TC:
  ------------------
  |  Branch (8423:5): [True: 24, False: 94.1k]
  ------------------
 8424|  46.7k|    case OFPACT_SET_MPLS_TTL:
  ------------------
  |  Branch (8424:5): [True: 929, False: 93.2k]
  ------------------
 8425|  46.7k|    case OFPACT_DEC_MPLS_TTL:
  ------------------
  |  Branch (8425:5): [True: 27, False: 94.1k]
  ------------------
 8426|  46.7k|    case OFPACT_PUSH_MPLS:
  ------------------
  |  Branch (8426:5): [True: 0, False: 94.1k]
  ------------------
 8427|  46.7k|    case OFPACT_POP_MPLS:
  ------------------
  |  Branch (8427:5): [True: 30, False: 94.1k]
  ------------------
 8428|  47.5k|    case OFPACT_SET_TUNNEL:
  ------------------
  |  Branch (8428:5): [True: 744, False: 93.4k]
  ------------------
 8429|  47.6k|    case OFPACT_SET_QUEUE:
  ------------------
  |  Branch (8429:5): [True: 176, False: 93.9k]
  ------------------
 8430|  49.2k|    case OFPACT_POP_QUEUE:
  ------------------
  |  Branch (8430:5): [True: 1.60k, False: 92.5k]
  ------------------
 8431|  49.6k|    case OFPACT_FIN_TIMEOUT:
  ------------------
  |  Branch (8431:5): [True: 409, False: 93.7k]
  ------------------
 8432|  51.5k|    case OFPACT_RESUBMIT:
  ------------------
  |  Branch (8432:5): [True: 1.85k, False: 92.3k]
  ------------------
 8433|  62.8k|    case OFPACT_LEARN:
  ------------------
  |  Branch (8433:5): [True: 11.2k, False: 82.8k]
  ------------------
 8434|  62.8k|    case OFPACT_CONJUNCTION:
  ------------------
  |  Branch (8434:5): [True: 0, False: 94.1k]
  ------------------
 8435|  63.6k|    case OFPACT_MULTIPATH:
  ------------------
  |  Branch (8435:5): [True: 810, False: 93.3k]
  ------------------
 8436|  68.7k|    case OFPACT_NOTE:
  ------------------
  |  Branch (8436:5): [True: 5.14k, False: 89.0k]
  ------------------
 8437|  70.5k|    case OFPACT_EXIT:
  ------------------
  |  Branch (8437:5): [True: 1.70k, False: 92.4k]
  ------------------
 8438|  72.5k|    case OFPACT_UNROLL_XLATE:
  ------------------
  |  Branch (8438:5): [True: 2.03k, False: 92.1k]
  ------------------
 8439|  73.6k|    case OFPACT_SAMPLE:
  ------------------
  |  Branch (8439:5): [True: 1.14k, False: 93.0k]
  ------------------
 8440|  73.6k|    case OFPACT_DEBUG_RECIRC:
  ------------------
  |  Branch (8440:5): [True: 0, False: 94.1k]
  ------------------
 8441|  73.6k|    case OFPACT_DEBUG_SLOW:
  ------------------
  |  Branch (8441:5): [True: 0, False: 94.1k]
  ------------------
 8442|  78.6k|    case OFPACT_CT:
  ------------------
  |  Branch (8442:5): [True: 4.93k, False: 89.2k]
  ------------------
 8443|  78.6k|    case OFPACT_CT_CLEAR:
  ------------------
  |  Branch (8443:5): [True: 37, False: 94.1k]
  ------------------
 8444|  81.8k|    case OFPACT_NAT:
  ------------------
  |  Branch (8444:5): [True: 3.25k, False: 90.9k]
  ------------------
 8445|  82.2k|    case OFPACT_ENCAP:
  ------------------
  |  Branch (8445:5): [True: 333, False: 93.8k]
  ------------------
 8446|  85.4k|    case OFPACT_DECAP:
  ------------------
  |  Branch (8446:5): [True: 3.24k, False: 90.9k]
  ------------------
 8447|  85.4k|    case OFPACT_DEC_NSH_TTL:
  ------------------
  |  Branch (8447:5): [True: 6, False: 94.1k]
  ------------------
 8448|  85.7k|    case OFPACT_CHECK_PKT_LARGER:
  ------------------
  |  Branch (8448:5): [True: 284, False: 93.8k]
  ------------------
 8449|  85.7k|    case OFPACT_DELETE_FIELD:
  ------------------
  |  Branch (8449:5): [True: 24, False: 94.1k]
  ------------------
 8450|  85.7k|    default:
  ------------------
  |  Branch (8450:5): [True: 0, False: 94.1k]
  ------------------
 8451|  85.7k|        return OVSINST_OFPIT11_APPLY_ACTIONS;
 8452|  94.1k|    }
 8453|  94.1k|}
ovs_instruction_type_from_inst_type:
 8458|  1.29k|{
 8459|  1.29k|    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|      2|    DEFINE_INST(OFPIT13_METER,                              \
  |  |  ------------------
  |  |  |  | 8462|      2|    case ENUM:                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8462:5): [True: 2, False: 1.29k]
  |  |  |  |  ------------------
  |  |  |  | 8463|      2|        *instruction_type = OVSINST_##ENUM;         \
  |  |  |  | 8464|      2|        return 0;
  |  |  ------------------
  |  | 1345|      2|                ofp13_instruction_meter,          false,    \
  |  | 1346|      2|                "meter")                                    \
  |  | 1347|      2|                                                            \
  |  | 1348|      2|    DEFINE_INST(OFPIT11_APPLY_ACTIONS,                      \
  |  |  ------------------
  |  |  |  | 8462|      0|    case ENUM:                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8462:5): [True: 0, False: 1.29k]
  |  |  |  |  ------------------
  |  |  |  | 8463|      0|        *instruction_type = OVSINST_##ENUM;         \
  |  |  |  | 8464|      0|        return 0;
  |  |  ------------------
  |  | 1349|      0|                ofp11_instruction_actions,        true,     \
  |  | 1350|      0|                "apply_actions")                            \
  |  | 1351|      0|                                                            \
  |  | 1352|      6|    DEFINE_INST(OFPIT11_CLEAR_ACTIONS,                      \
  |  |  ------------------
  |  |  |  | 8462|      6|    case ENUM:                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8462:5): [True: 6, False: 1.28k]
  |  |  |  |  ------------------
  |  |  |  | 8463|      6|        *instruction_type = OVSINST_##ENUM;         \
  |  |  |  | 8464|      6|        return 0;
  |  |  ------------------
  |  | 1353|      6|                ofp11_instruction,                false,    \
  |  | 1354|      6|                "clear_actions")                            \
  |  | 1355|      6|                                                            \
  |  | 1356|      6|    DEFINE_INST(OFPIT11_WRITE_ACTIONS,                      \
  |  |  ------------------
  |  |  |  | 8462|      5|    case ENUM:                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8462:5): [True: 5, False: 1.28k]
  |  |  |  |  ------------------
  |  |  |  | 8463|      5|        *instruction_type = OVSINST_##ENUM;         \
  |  |  |  | 8464|      5|        return 0;
  |  |  ------------------
  |  | 1357|      5|                ofp11_instruction_actions,        true,     \
  |  | 1358|      5|                "write_actions")                            \
  |  | 1359|      5|                                                            \
  |  | 1360|      5|    DEFINE_INST(OFPIT11_WRITE_METADATA,                     \
  |  |  ------------------
  |  |  |  | 8462|      0|    case ENUM:                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8462:5): [True: 0, False: 1.29k]
  |  |  |  |  ------------------
  |  |  |  | 8463|      0|        *instruction_type = OVSINST_##ENUM;         \
  |  |  |  | 8464|      0|        return 0;
  |  |  ------------------
  |  | 1361|      0|                ofp11_instruction_write_metadata, false,    \
  |  | 1362|      0|                "write_metadata")                           \
  |  | 1363|      0|                                                            \
  |  | 1364|    234|    DEFINE_INST(OFPIT11_GOTO_TABLE,                         \
  |  |  ------------------
  |  |  |  | 8462|    234|    case ENUM:                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8462:5): [True: 234, False: 1.06k]
  |  |  |  |  ------------------
  |  |  |  | 8463|    234|        *instruction_type = OVSINST_##ENUM;         \
  |  |  |  | 8464|    234|        return 0;
  |  |  ------------------
  |  | 1365|    234|                ofp11_instruction_goto_table,     false,    \
  |  | 1366|    234|                "goto_table")
  ------------------
 8466|      0|#undef DEFINE_INST
 8467|       |
 8468|  1.04k|    default:
  ------------------
  |  Branch (8468:5): [True: 1.04k, False: 247]
  ------------------
 8469|  1.04k|        return OFPERR_OFPBIC_UNKNOWN_INST;
 8470|  1.29k|    }
 8471|  1.29k|}
ovsinst_bitmap_from_openflow:
 8529|  24.3k|{
 8530|  24.3k|    uint32_t ovsinst_bitmap = 0;
 8531|  24.3k|    const struct ovsinst_map *x;
 8532|       |
 8533|   145k|    for (x = get_ovsinst_map(version); x->ofpit >= 0; x++) {
  ------------------
  |  Branch (8533:40): [True: 121k, False: 24.3k]
  ------------------
 8534|   121k|        if (ofpit_bitmap & htonl(1u << x->ofpit)) {
  ------------------
  |  Branch (8534:13): [True: 41.6k, False: 79.8k]
  ------------------
 8535|  41.6k|            ovsinst_bitmap |= 1u << x->ovsinst;
 8536|  41.6k|        }
 8537|   121k|    }
 8538|  24.3k|    return ovsinst_bitmap;
 8539|  24.3k|}
ofpacts_pull_openflow_instructions:
 8647|  57.9k|{
 8648|  57.9k|    const struct ofp11_instruction *instructions;
 8649|  57.9k|    const struct ofp11_instruction *insts[N_OVS_INSTRUCTIONS];
 8650|  57.9k|    enum ofperr error;
 8651|       |
 8652|  57.9k|    ofpbuf_clear(ofpacts);
 8653|  57.9k|    if (version == OFP10_VERSION) {
  ------------------
  |  Branch (8653:9): [True: 31.7k, False: 26.1k]
  ------------------
 8654|  31.7k|        return ofpacts_pull_openflow_actions__(openflow, instructions_len,
 8655|  31.7k|                                               version,
 8656|  31.7k|                                               (1u << N_OVS_INSTRUCTIONS) - 1,
 8657|  31.7k|                                               ofpacts, 0, vl_mff_map,
 8658|  31.7k|                                               ofpacts_tlv_bitmap);
 8659|  31.7k|    }
 8660|       |
 8661|  26.1k|    if (instructions_len % OFP11_INSTRUCTION_ALIGN != 0) {
  ------------------
  |  |  262|  26.1k|#define OFP11_INSTRUCTION_ALIGN 8
  ------------------
  |  Branch (8661:9): [True: 428, False: 25.7k]
  ------------------
 8662|    428|        VLOG_WARN_RL(&rl, "OpenFlow message instructions length %u is not a "
  ------------------
  |  |  224|    428|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    428|    do {                                                                \
  |  |  |  |  288|    428|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    428|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 428]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    428|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 428]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8663|    428|                     "multiple of %d",
 8664|    428|                     instructions_len, OFP11_INSTRUCTION_ALIGN);
 8665|    428|        error = OFPERR_OFPBIC_BAD_LEN;
 8666|    428|        goto exit;
 8667|    428|    }
 8668|       |
 8669|  25.7k|    instructions = ofpbuf_try_pull(openflow, instructions_len);
 8670|  25.7k|    if (instructions == NULL) {
  ------------------
  |  Branch (8670:9): [True: 153, False: 25.5k]
  ------------------
 8671|    153|        VLOG_WARN_RL(&rl, "OpenFlow message instructions length %u exceeds "
  ------------------
  |  |  224|    153|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    153|    do {                                                                \
  |  |  |  |  288|    153|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    153|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 153]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    153|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 153]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8672|    153|                     "remaining message length (%"PRIu32")",
 8673|    153|                     instructions_len, openflow->size);
 8674|    153|        error = OFPERR_OFPBIC_BAD_LEN;
 8675|    153|        goto exit;
 8676|    153|    }
 8677|       |
 8678|  25.5k|    error = decode_openflow11_instructions(
 8679|  25.5k|        instructions, instructions_len / OFP11_INSTRUCTION_ALIGN, version,
  ------------------
  |  |  262|  25.5k|#define OFP11_INSTRUCTION_ALIGN 8
  ------------------
 8680|  25.5k|        insts);
 8681|  25.5k|    if (error) {
  ------------------
  |  Branch (8681:9): [True: 4.67k, False: 20.9k]
  ------------------
 8682|  4.67k|        goto exit;
 8683|  4.67k|    }
 8684|       |
 8685|  20.9k|    if (insts[OVSINST_OFPIT13_METER]) {
  ------------------
  |  Branch (8685:9): [True: 163, False: 20.7k]
  ------------------
 8686|    163|        const struct ofp13_instruction_meter *oim;
 8687|    163|        struct ofpact_meter *om;
 8688|       |
 8689|    163|        oim = ALIGNED_CAST(const struct ofp13_instruction_meter *,
  ------------------
  |  |  434|    163|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 8690|    163|                           insts[OVSINST_OFPIT13_METER]);
 8691|       |
 8692|    163|        om = ofpact_put_METER(ofpacts);
 8693|    163|        om->meter_id = ntohl(oim->meter_id);
 8694|    163|        om->provider_meter_id = UINT32_MAX; /* No provider meter ID. */
 8695|    163|    }
 8696|  20.9k|    if (insts[OVSINST_OFPIT11_APPLY_ACTIONS]) {
  ------------------
  |  Branch (8696:9): [True: 3.08k, False: 17.8k]
  ------------------
 8697|  3.08k|        const struct ofp_action_header *actions;
 8698|  3.08k|        size_t actions_len;
 8699|       |
 8700|  3.08k|        get_actions_from_instruction(insts[OVSINST_OFPIT11_APPLY_ACTIONS],
 8701|  3.08k|                                     &actions, &actions_len);
 8702|  3.08k|        error = ofpacts_decode(actions, actions_len, version, vl_mff_map,
 8703|  3.08k|                               ofpacts_tlv_bitmap, ofpacts);
 8704|  3.08k|        if (error) {
  ------------------
  |  Branch (8704:13): [True: 404, False: 2.68k]
  ------------------
 8705|    404|            goto exit;
 8706|    404|        }
 8707|  3.08k|    }
 8708|  20.5k|    if (insts[OVSINST_OFPIT11_CLEAR_ACTIONS]) {
  ------------------
  |  Branch (8708:9): [True: 143, False: 20.3k]
  ------------------
 8709|    143|        instruction_get_OFPIT11_CLEAR_ACTIONS(
 8710|    143|            insts[OVSINST_OFPIT11_CLEAR_ACTIONS]);
 8711|    143|        ofpact_put_CLEAR_ACTIONS(ofpacts);
 8712|    143|    }
 8713|  20.5k|    if (insts[OVSINST_OFPIT11_WRITE_ACTIONS]) {
  ------------------
  |  Branch (8713:9): [True: 10.6k, False: 9.88k]
  ------------------
 8714|  10.6k|        struct ofpact_nest *on;
 8715|  10.6k|        const struct ofp_action_header *actions;
 8716|  10.6k|        size_t actions_len;
 8717|  10.6k|        size_t start = ofpacts->size;
 8718|  10.6k|        ofpact_put(ofpacts, OFPACT_WRITE_ACTIONS,
 8719|  10.6k|                   offsetof(struct ofpact_nest, actions));
 8720|  10.6k|        get_actions_from_instruction(insts[OVSINST_OFPIT11_WRITE_ACTIONS],
 8721|  10.6k|                                     &actions, &actions_len);
 8722|  10.6k|        error = ofpacts_decode_for_action_set(actions, actions_len,
 8723|  10.6k|                                              version, vl_mff_map,
 8724|  10.6k|                                              ofpacts_tlv_bitmap, ofpacts);
 8725|  10.6k|        if (error) {
  ------------------
  |  Branch (8725:13): [True: 3.05k, False: 7.57k]
  ------------------
 8726|  3.05k|            goto exit;
 8727|  3.05k|        }
 8728|  7.57k|        on = ofpbuf_at_assert(ofpacts, start, sizeof *on);
 8729|  7.57k|        on->ofpact.len = ofpacts->size - start;
 8730|  7.57k|    }
 8731|  17.4k|    if (insts[OVSINST_OFPIT11_WRITE_METADATA]) {
  ------------------
  |  Branch (8731:9): [True: 141, False: 17.3k]
  ------------------
 8732|    141|        const struct ofp11_instruction_write_metadata *oiwm;
 8733|    141|        struct ofpact_metadata *om;
 8734|       |
 8735|    141|        oiwm = ALIGNED_CAST(const struct ofp11_instruction_write_metadata *,
  ------------------
  |  |  434|    141|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 8736|    141|                            insts[OVSINST_OFPIT11_WRITE_METADATA]);
 8737|       |
 8738|    141|        om = ofpact_put_WRITE_METADATA(ofpacts);
 8739|    141|        om->metadata = oiwm->metadata;
 8740|    141|        om->mask = oiwm->metadata_mask;
 8741|    141|    }
 8742|  17.4k|    if (insts[OVSINST_OFPIT11_GOTO_TABLE]) {
  ------------------
  |  Branch (8742:9): [True: 234, False: 17.2k]
  ------------------
 8743|    234|        const struct ofp11_instruction_goto_table *oigt;
 8744|    234|        struct ofpact_goto_table *ogt;
 8745|       |
 8746|    234|        oigt = instruction_get_OFPIT11_GOTO_TABLE(
 8747|    234|            insts[OVSINST_OFPIT11_GOTO_TABLE]);
 8748|    234|        ogt = ofpact_put_GOTO_TABLE(ofpacts);
 8749|    234|        ogt->table_id = oigt->table_id;
 8750|    234|    }
 8751|       |
 8752|  17.4k|    error = ofpacts_verify(ofpacts->data, ofpacts->size, version,
 8753|  17.4k|                           (1u << N_OVS_INSTRUCTIONS) - 1, 0, NULL);
 8754|  26.1k|exit:
 8755|  26.1k|    if (error) {
  ------------------
  |  Branch (8755:9): [True: 8.71k, False: 17.4k]
  ------------------
 8756|  8.71k|        ofpbuf_clear(ofpacts);
 8757|  8.71k|    }
 8758|  26.1k|    return error;
 8759|  17.4k|}
ofpact_check_output_port:
 8782|  22.8k|{
 8783|  22.8k|    switch (port) {
 8784|  1.24k|    case OFPP_IN_PORT:
  ------------------
  |  |   39|  1.24k|#define OFPP_IN_PORT    OFP_PORT_C(0xfff8) /* Where the packet came in. */
  |  |  ------------------
  |  |  |  |  157|  1.24k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8784:5): [True: 1.24k, False: 21.6k]
  ------------------
 8785|  2.38k|    case OFPP_TABLE:
  ------------------
  |  |   40|  2.38k|#define OFPP_TABLE      OFP_PORT_C(0xfff9) /* Perform actions in flow table. */
  |  |  ------------------
  |  |  |  |  157|  2.38k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8785:5): [True: 1.13k, False: 21.7k]
  ------------------
 8786|  3.41k|    case OFPP_NORMAL:
  ------------------
  |  |   41|  3.41k|#define OFPP_NORMAL     OFP_PORT_C(0xfffa) /* Process with normal L2/L3. */
  |  |  ------------------
  |  |  |  |  157|  3.41k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8786:5): [True: 1.03k, False: 21.8k]
  ------------------
 8787|  4.39k|    case OFPP_FLOOD:
  ------------------
  |  |   42|  4.39k|#define OFPP_FLOOD      OFP_PORT_C(0xfffb) /* All ports except input port and
  |  |  ------------------
  |  |  |  |  157|  4.39k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8787:5): [True: 980, False: 21.9k]
  ------------------
 8788|  5.13k|    case OFPP_ALL:
  ------------------
  |  |   44|  5.13k|#define OFPP_ALL        OFP_PORT_C(0xfffc) /* All ports except input port. */
  |  |  ------------------
  |  |  |  |  157|  5.13k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8788:5): [True: 742, False: 22.1k]
  ------------------
 8789|  11.5k|    case OFPP_CONTROLLER:
  ------------------
  |  |   45|  11.5k|#define OFPP_CONTROLLER OFP_PORT_C(0xfffd) /* Send to controller. */
  |  |  ------------------
  |  |  |  |  157|  11.5k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8789:5): [True: 6.38k, False: 16.4k]
  ------------------
 8790|  11.8k|    case OFPP_LOCAL:
  ------------------
  |  |   46|  11.8k|#define OFPP_LOCAL      OFP_PORT_C(0xfffe) /* Local openflow "port". */
  |  |  ------------------
  |  |  |  |  157|  11.8k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8790:5): [True: 326, False: 22.5k]
  ------------------
 8791|  11.8k|        return 0;
 8792|       |
 8793|      6|    case OFPP_NONE:
  ------------------
  |  |   47|      6|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|      6|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8793:5): [True: 6, False: 22.8k]
  ------------------
 8794|      6|        return OFPERR_OFPBAC_BAD_OUT_PORT;
 8795|       |
 8796|  11.0k|    default:
  ------------------
  |  Branch (8796:5): [True: 11.0k, False: 11.8k]
  ------------------
 8797|  11.0k|        if (ofp_to_u16(port) < ofp_to_u16(max_ports)) {
  ------------------
  |  Branch (8797:13): [True: 10.5k, False: 445]
  ------------------
 8798|  10.5k|            return 0;
 8799|  10.5k|        }
 8800|    445|        return OFPERR_OFPBAC_BAD_OUT_PORT;
 8801|  22.8k|    }
 8802|  22.8k|}
ofpacts_check:
 8851|  40.9k|{
 8852|       |    /* Save fields that might temporarily be modified. */
 8853|  40.9k|    struct flow *flow = &cp->match->flow;
 8854|  40.9k|    ovs_be32 packet_type = flow->packet_type;
 8855|  40.9k|    ovs_be16 dl_type = flow->dl_type;
 8856|  40.9k|    uint8_t nw_proto = flow->nw_proto;
 8857|  40.9k|    union flow_vlan_hdr vlans[FLOW_MAX_VLAN_HEADERS];
 8858|  40.9k|    memcpy(vlans, flow->vlans, sizeof vlans);
 8859|       |
 8860|       |    /* Check all the actions. */
 8861|  40.9k|    cp->usable_protocols = OFPUTIL_P_ANY;
  ------------------
  |  |  100|  40.9k|#define OFPUTIL_P_ANY ((1 << 9) - 1)
  ------------------
 8862|  40.9k|    enum ofperr error = 0;
 8863|  40.9k|    struct ofpact *a;
 8864|  78.5k|    OFPACT_FOR_EACH (a, ofpacts, ofpacts_len) {
  ------------------
  |  |  261|   116k|    for ((POS) = (OFPACTS); (POS) < ofpact_end(OFPACTS, OFPACTS_LEN);  \
  |  |  ------------------
  |  |  |  Branch (261:29): [True: 78.5k, False: 37.9k]
  |  |  ------------------
  |  |  262|  75.5k|         (POS) = ofpact_next(POS))
  ------------------
 8865|  78.5k|        error = ofpact_check__(a, cp);
 8866|  78.5k|        if (error) {
  ------------------
  |  Branch (8866:13): [True: 2.96k, False: 75.5k]
  ------------------
 8867|  2.96k|            break;
 8868|  2.96k|        }
 8869|  78.5k|    }
 8870|       |
 8871|       |    /* Restore fields that may have been modified. */
 8872|  40.9k|    flow->packet_type = packet_type;
 8873|  40.9k|    flow->dl_type = dl_type;
 8874|  40.9k|    memcpy(flow->vlans, vlans, sizeof vlans);
 8875|  40.9k|    flow->nw_proto = nw_proto;
 8876|       |
 8877|  40.9k|    return error;
 8878|  40.9k|}
ofpacts_check_consistency:
 8886|  30.4k|{
 8887|  30.4k|    enum ofperr error = ofpacts_check(ofpacts, ofpacts_len, cp);
 8888|  30.4k|    if (!error && needed_protocols & ~cp->usable_protocols) {
  ------------------
  |  Branch (8888:9): [True: 28.1k, False: 2.23k]
  |  Branch (8888:19): [True: 1.66k, False: 26.5k]
  ------------------
 8889|  1.66k|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 8890|  1.66k|    }
 8891|  28.7k|    return error;
 8892|  30.4k|}
ofpact_get_mf_dst:
 8898|  97.2k|{
 8899|  97.2k|    if (ofpact->type == OFPACT_SET_FIELD) {
  ------------------
  |  Branch (8899:9): [True: 10.2k, False: 87.0k]
  ------------------
 8900|  10.2k|        const struct ofpact_set_field *orl;
 8901|       |
 8902|  10.2k|        orl = CONTAINER_OF(ofpact, struct ofpact_set_field, ofpact);
  ------------------
  |  |  124|  10.2k|        ((STRUCT *) (void *) ((char *) (POINTER) - offsetof (STRUCT, MEMBER)))
  ------------------
 8903|  10.2k|        return orl->field;
 8904|  87.0k|    } else if (ofpact->type == OFPACT_REG_MOVE) {
  ------------------
  |  Branch (8904:16): [True: 265, False: 86.7k]
  ------------------
 8905|    265|        const struct ofpact_reg_move *orm;
 8906|       |
 8907|    265|        orm = CONTAINER_OF(ofpact, struct ofpact_reg_move, ofpact);
  ------------------
  |  |  124|    265|        ((STRUCT *) (void *) ((char *) (POINTER) - offsetof (STRUCT, MEMBER)))
  ------------------
 8908|    265|        return orm->dst.field;
 8909|    265|    }
 8910|       |
 8911|  86.7k|    return NULL;
 8912|  97.2k|}
ofpact_bitmap_from_openflow:
 9265|  52.5k|{
 9266|  52.5k|    uint64_t ofpact_bitmap = 0;
 9267|  52.5k|    const struct ofpact_map *x;
 9268|       |
 9269|   809k|    for (x = get_ofpact_map(version); x->ofpat >= 0; x++) {
  ------------------
  |  Branch (9269:39): [True: 756k, False: 52.5k]
  ------------------
 9270|   756k|        if (ofpat_bitmap & htonl(1u << x->ofpat)) {
  ------------------
  |  Branch (9270:13): [True: 271k, False: 485k]
  ------------------
 9271|       |            ofpact_bitmap |= UINT64_C(1) << x->ofpact;
 9272|   271k|        }
 9273|   756k|    }
 9274|  52.5k|    return ofpact_bitmap;
 9275|  52.5k|}
ofpact_bitmap_format:
 9281|  29.4k|{
 9282|  29.4k|    if (!ofpacts_bitmap) {
  ------------------
  |  Branch (9282:9): [True: 329, False: 29.1k]
  ------------------
 9283|    329|        ds_put_cstr(s, "<none>");
 9284|  29.1k|    } else {
 9285|   188k|        while (ofpacts_bitmap) {
  ------------------
  |  Branch (9285:16): [True: 159k, False: 29.1k]
  ------------------
 9286|   159k|            ds_put_format(s, "%s ",
 9287|   159k|                          ofpact_name(rightmost_1bit_idx(ofpacts_bitmap)));
 9288|   159k|            ofpacts_bitmap = zero_rightmost_1bit(ofpacts_bitmap);
 9289|   159k|        }
 9290|  29.1k|        ds_chomp(s, ' ');
 9291|  29.1k|    }
 9292|  29.4k|}
ofpacts_format:
 9484|  66.0k|{
 9485|  66.0k|    if (!ofpacts_len) {
  ------------------
  |  Branch (9485:9): [True: 14.4k, False: 51.6k]
  ------------------
 9486|  14.4k|        ds_put_format(fp->s, "%sdrop%s", colors.drop, colors.end);
 9487|  51.6k|    } else {
 9488|  51.6k|        const struct ofpact *a;
 9489|       |
 9490|  99.7k|        OFPACT_FOR_EACH (a, ofpacts, ofpacts_len) {
  ------------------
  |  |  261|   151k|    for ((POS) = (OFPACTS); (POS) < ofpact_end(OFPACTS, OFPACTS_LEN);  \
  |  |  ------------------
  |  |  |  Branch (261:29): [True: 99.7k, False: 51.6k]
  |  |  ------------------
  |  |  262|  99.7k|         (POS) = ofpact_next(POS))
  ------------------
 9491|  99.7k|            if (a != ofpacts) {
  ------------------
  |  Branch (9491:17): [True: 48.1k, False: 51.6k]
  ------------------
 9492|  48.1k|                ds_put_char(fp->s, ',');
 9493|  48.1k|            }
 9494|       |
 9495|  99.7k|            ofpact_format(a, fp);
 9496|  99.7k|        }
 9497|  51.6k|    }
 9498|  66.0k|}
ofpact_put:
 9505|   191k|{
 9506|   191k|    struct ofpact *ofpact;
 9507|       |
 9508|   191k|    ofpacts->header = ofpbuf_put_uninit(ofpacts, len);
 9509|   191k|    ofpact = ofpacts->header;
 9510|   191k|    ofpact_init(ofpact, type, len);
 9511|   191k|    return ofpact;
 9512|   191k|}
ofpact_init:
 9517|   191k|{
 9518|   191k|    memset(ofpact, 0, len);
 9519|   191k|    ofpact->type = type;
 9520|   191k|    ofpact->raw = -1;
 9521|   191k|    ofpact->len = len;
 9522|   191k|}
ofpact_finish:
 9535|  53.8k|{
 9536|  53.8k|    ptrdiff_t len;
 9537|       |
 9538|  53.8k|    ovs_assert(ofpact == ofpacts->header);
  ------------------
  |  |   62|  53.8k|#define ovs_assert ovs_ignore
  ------------------
 9539|  53.8k|    len = (char *) ofpbuf_tail(ofpacts) - (char *) ofpact;
 9540|  53.8k|    ovs_assert(len > 0 && len <= UINT16_MAX);
  ------------------
  |  |   62|  53.8k|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (9540:16): [True: 53.8k, False: 0]
  |  Branch (9540:27): [True: 53.8k, False: 0]
  ------------------
 9541|  53.8k|    ofpact->len = len;
 9542|  53.8k|    ofpbuf_padto(ofpacts, OFPACT_ALIGN(ofpacts->size));
  ------------------
  |  |  205|  53.8k|#define OFPACT_ALIGN(SIZE) ROUND_UP(SIZE, OFPACT_ALIGNTO)
  |  |  ------------------
  |  |  |  |  303|  53.8k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|  53.8k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9543|       |
 9544|  53.8k|    return ofpacts->header;
 9545|  53.8k|}
ofpact_name:
 9713|   161k|{
 9714|   161k|    switch (type) {
  ------------------
  |  Branch (9714:13): [True: 161k, False: 0]
  ------------------
 9715|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
 9716|   161k|        OFPACTS
  ------------------
  |  |   64|  12.8k|    OFPACT(OUTPUT,          ofpact_output,      ofpact, "output")       \
  |  |  ------------------
  |  |  |  | 9715|  12.8k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 12.8k, False: 148k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   65|  12.8k|    OFPACT(GROUP,           ofpact_group,       ofpact, "group")        \
  |  |  ------------------
  |  |  |  | 9715|  10.3k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 10.3k, False: 151k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   66|  10.3k|    OFPACT(CONTROLLER,      ofpact_controller,  userdata, "controller") \
  |  |  ------------------
  |  |  |  | 9715|     40|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 40, False: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   67|     94|    OFPACT(ENQUEUE,         ofpact_enqueue,     ofpact, "enqueue")      \
  |  |  ------------------
  |  |  |  | 9715|     94|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 94, False: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   68|     94|    OFPACT(OUTPUT_REG,      ofpact_output_reg,  ofpact, "output_reg")   \
  |  |  ------------------
  |  |  |  | 9715|      5|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 5, False: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   69|      5|    OFPACT(BUNDLE,          ofpact_bundle,      members, "bundle")      \
  |  |  ------------------
  |  |  |  | 9715|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 0, False: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   70|      0|                                                                        \
  |  |   71|      0|    /* Header changes. */                                               \
  |  |   72|  8.04k|    OFPACT(SET_FIELD,       ofpact_set_field,   ofpact, "set_field")    \
  |  |  ------------------
  |  |  |  | 9715|  8.04k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 8.04k, False: 153k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   73|  8.04k|    OFPACT(SET_VLAN_VID,    ofpact_vlan_vid,    ofpact, "set_vlan_vid") \
  |  |  ------------------
  |  |  |  | 9715|  3.80k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 3.80k, False: 157k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   74|  3.80k|    OFPACT(SET_VLAN_PCP,    ofpact_vlan_pcp,    ofpact, "set_vlan_pcp") \
  |  |  ------------------
  |  |  |  | 9715|  2.93k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 2.93k, False: 158k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   75|  10.8k|    OFPACT(STRIP_VLAN,      ofpact_null,        ofpact, "strip_vlan")   \
  |  |  ------------------
  |  |  |  | 9715|  10.8k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 10.8k, False: 150k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   76|  10.8k|    OFPACT(PUSH_VLAN,       ofpact_push_vlan,   ofpact, "push_vlan")    \
  |  |  ------------------
  |  |  |  | 9715|  10.3k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 10.3k, False: 151k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|  10.3k|    OFPACT(SET_ETH_SRC,     ofpact_mac,         ofpact, "mod_dl_src")   \
  |  |  ------------------
  |  |  |  | 9715|  2.86k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 2.86k, False: 158k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   78|  2.86k|    OFPACT(SET_ETH_DST,     ofpact_mac,         ofpact, "mod_dl_dst")   \
  |  |  ------------------
  |  |  |  | 9715|  2.57k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 2.57k, False: 159k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   79|  2.69k|    OFPACT(SET_IPV4_SRC,    ofpact_ipv4,        ofpact, "mod_nw_src")   \
  |  |  ------------------
  |  |  |  | 9715|  2.69k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 2.69k, False: 159k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   80|  2.76k|    OFPACT(SET_IPV4_DST,    ofpact_ipv4,        ofpact, "mod_nw_dst")   \
  |  |  ------------------
  |  |  |  | 9715|  2.76k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 2.76k, False: 158k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   81|  2.76k|    OFPACT(SET_IP_DSCP,     ofpact_dscp,        ofpact, "mod_nw_tos")   \
  |  |  ------------------
  |  |  |  | 9715|  2.70k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 2.70k, False: 159k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|  2.95k|    OFPACT(SET_IP_ECN,      ofpact_ecn,         ofpact, "mod_nw_ecn")   \
  |  |  ------------------
  |  |  |  | 9715|  2.95k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 2.95k, False: 158k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|  8.74k|    OFPACT(SET_IP_TTL,      ofpact_ip_ttl,      ofpact, "mod_nw_ttl")   \
  |  |  ------------------
  |  |  |  | 9715|  8.74k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 8.74k, False: 152k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   84|  8.74k|    OFPACT(SET_L4_SRC_PORT, ofpact_l4_port,     ofpact, "mod_tp_src")   \
  |  |  ------------------
  |  |  |  | 9715|  3.02k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 3.02k, False: 158k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   85|  3.02k|    OFPACT(SET_L4_DST_PORT, ofpact_l4_port,     ofpact, "mod_tp_dst")   \
  |  |  ------------------
  |  |  |  | 9715|  3.00k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 3.00k, False: 158k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   86|  3.00k|    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: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   87|     17|    OFPACT(STACK_PUSH,      ofpact_stack,       ofpact, "push")         \
  |  |  ------------------
  |  |  |  | 9715|     17|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 17, False: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   88|     17|    OFPACT(STACK_POP,       ofpact_stack,       ofpact, "pop")          \
  |  |  ------------------
  |  |  |  | 9715|      6|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 6, False: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|  12.5k|    OFPACT(DEC_TTL,         ofpact_cnt_ids,     cnt_ids, "dec_ttl")     \
  |  |  ------------------
  |  |  |  | 9715|  12.5k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 12.5k, False: 149k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|  12.5k|    OFPACT(SET_MPLS_LABEL,  ofpact_mpls_label,  ofpact, "set_mpls_label") \
  |  |  ------------------
  |  |  |  | 9715|  2.61k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 2.61k, False: 159k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   91|  2.74k|    OFPACT(SET_MPLS_TC,     ofpact_mpls_tc,     ofpact, "set_mpls_tc")  \
  |  |  ------------------
  |  |  |  | 9715|  2.74k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 2.74k, False: 158k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   92|  8.49k|    OFPACT(SET_MPLS_TTL,    ofpact_mpls_ttl,    ofpact, "set_mpls_ttl") \
  |  |  ------------------
  |  |  |  | 9715|  8.49k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 8.49k, False: 153k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   93|  12.0k|    OFPACT(DEC_MPLS_TTL,    ofpact_null,        ofpact, "dec_mpls_ttl") \
  |  |  ------------------
  |  |  |  | 9715|  12.0k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 12.0k, False: 149k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   94|  12.0k|    OFPACT(PUSH_MPLS,       ofpact_push_mpls,   ofpact, "push_mpls")    \
  |  |  ------------------
  |  |  |  | 9715|  11.3k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 11.3k, False: 150k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   95|  11.3k|    OFPACT(POP_MPLS,        ofpact_pop_mpls,    ofpact, "pop_mpls")     \
  |  |  ------------------
  |  |  |  | 9715|  9.08k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 9.08k, False: 152k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   96|  9.08k|    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: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   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: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   98|      0|                                                                        \
  |  |   99|      0|    /* Generic encap & decap */                                         \
  |  |  100|     14|    OFPACT(ENCAP,           ofpact_encap,       props, "encap")         \
  |  |  ------------------
  |  |  |  | 9715|     14|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 14, False: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  101|     14|    OFPACT(DECAP,           ofpact_decap,       ofpact, "decap")        \
  |  |  ------------------
  |  |  |  | 9715|      4|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 4, False: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  102|      4|                                                                        \
  |  |  103|      4|    /* Metadata. */                                                     \
  |  |  104|    547|    OFPACT(SET_TUNNEL,      ofpact_tunnel,      ofpact, "set_tunnel")   \
  |  |  ------------------
  |  |  |  | 9715|    547|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 547, False: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  105|  10.0k|    OFPACT(SET_QUEUE,       ofpact_queue,       ofpact, "set_queue")    \
  |  |  ------------------
  |  |  |  | 9715|  10.0k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 10.0k, False: 151k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  106|  10.0k|    OFPACT(POP_QUEUE,       ofpact_null,        ofpact, "pop_queue")    \
  |  |  ------------------
  |  |  |  | 9715|  1.10k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 1.10k, False: 160k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  107|  1.10k|    OFPACT(FIN_TIMEOUT,     ofpact_fin_timeout, ofpact, "fin_timeout")  \
  |  |  ------------------
  |  |  |  | 9715|      3|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 3, False: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  108|      3|                                                                        \
  |  |  109|      3|    /* Flow table interaction. */                                       \
  |  |  110|     64|    OFPACT(RESUBMIT,        ofpact_resubmit,    ofpact, "resubmit")     \
  |  |  ------------------
  |  |  |  | 9715|     64|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 64, False: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  111|     64|    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: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  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: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  113|      0|                                                                        \
  |  |  114|      0|    /* Arithmetic. */                                                   \
  |  |  115|      0|    OFPACT(MULTIPATH,       ofpact_multipath,   ofpact, "multipath")    \
  |  |  ------------------
  |  |  |  | 9715|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 0, False: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  116|      0|                                                                        \
  |  |  117|      0|    /* Other. */                                                        \
  |  |  118|     22|    OFPACT(NOTE,            ofpact_note,        data, "note")           \
  |  |  ------------------
  |  |  |  | 9715|     22|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 22, False: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|     22|    OFPACT(EXIT,            ofpact_null,        ofpact, "exit")         \
  |  |  ------------------
  |  |  |  | 9715|      7|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 7, False: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  120|     20|    OFPACT(SAMPLE,          ofpact_sample,      ofpact, "sample")       \
  |  |  ------------------
  |  |  |  | 9715|     20|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 20, False: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|     20|    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: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  122|    124|    OFPACT(CT,              ofpact_conntrack,   ofpact, "ct")           \
  |  |  ------------------
  |  |  |  | 9715|    124|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 124, False: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  123|    124|    OFPACT(CT_CLEAR,        ofpact_null,        ofpact, "ct_clear")     \
  |  |  ------------------
  |  |  |  | 9715|      7|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 7, False: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  124|      7|    OFPACT(NAT,             ofpact_nat,         ofpact, "nat")          \
  |  |  ------------------
  |  |  |  | 9715|      6|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 6, False: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  125|      6|    OFPACT(OUTPUT_TRUNC,    ofpact_output_trunc,ofpact, "output_trunc") \
  |  |  ------------------
  |  |  |  | 9715|      6|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 6, False: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  126|      6|    OFPACT(CLONE,           ofpact_nest,        actions, "clone")       \
  |  |  ------------------
  |  |  |  | 9715|      1|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 1, False: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  127|      1|    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: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  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: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  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: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  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: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  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: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  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: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  141|      7|    OFPACT(WRITE_METADATA,  ofpact_metadata,    ofpact, "write_metadata") \
  |  |  ------------------
  |  |  |  | 9715|      7|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 7, False: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  142|      7|    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: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9717|   161k|#undef OFPACT
 9718|   161k|    }
 9719|      0|    return "<unknown>";
 9720|   161k|}
ofp-actions.c:ofpacts_pull_openflow_actions__:
 8060|   135k|{
 8061|   135k|    const struct ofp_action_header *actions;
 8062|   135k|    enum ofperr error;
 8063|       |
 8064|   135k|    if (actions_len % OFP_ACTION_ALIGN != 0) {
  ------------------
  |  |  384|   135k|#define OFP_ACTION_ALIGN 8
  ------------------
  |  Branch (8064:9): [True: 5.04k, False: 130k]
  ------------------
 8065|  5.04k|        VLOG_WARN_RL(&rl, "OpenFlow message actions length %u is not a "
  ------------------
  |  |  224|  5.04k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  5.04k|    do {                                                                \
  |  |  |  |  288|  5.04k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  5.04k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 5.04k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  5.04k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 5.04k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8066|  5.04k|                     "multiple of %d", actions_len, OFP_ACTION_ALIGN);
 8067|  5.04k|        return OFPERR_OFPBRC_BAD_LEN;
 8068|  5.04k|    }
 8069|       |
 8070|   130k|    actions = ofpbuf_try_pull(openflow, actions_len);
 8071|   130k|    if (actions == NULL) {
  ------------------
  |  Branch (8071:9): [True: 1.32k, False: 129k]
  ------------------
 8072|  1.32k|        VLOG_WARN_RL(&rl, "OpenFlow message actions length %u exceeds "
  ------------------
  |  |  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__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.32k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.32k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8073|  1.32k|                     "remaining message length (%"PRIu32")",
 8074|  1.32k|                     actions_len, openflow->size);
 8075|  1.32k|        return OFPERR_OFPBRC_BAD_LEN;
 8076|  1.32k|    }
 8077|       |
 8078|   129k|    error = ofpacts_decode(actions, actions_len, version, vl_mff_map,
 8079|   129k|                           ofpacts_tlv_bitmap, ofpacts);
 8080|   129k|    if (!error) {
  ------------------
  |  Branch (8080:9): [True: 68.7k, False: 60.6k]
  ------------------
 8081|  68.7k|        error = ofpacts_verify(ofpacts->data, ofpacts->size, version,
 8082|  68.7k|                               allowed_ovsinsts, outer_action, NULL);
 8083|  68.7k|    }
 8084|   129k|    if (error) {
  ------------------
  |  Branch (8084:9): [True: 65.7k, False: 63.6k]
  ------------------
 8085|  65.7k|        ofpbuf_clear(ofpacts);
 8086|  65.7k|    }
 8087|   129k|    return error;
 8088|   130k|}
ofp-actions.c:action_set_classify:
 8189|  30.4k|{
 8190|  30.4k|    switch (a->type) {
 8191|      0|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
 8192|      0|        ACTION_SET_ORDER
  ------------------
  |  | 8140|  2.17k|    SLOT(OFPACT_STRIP_VLAN)                     \
  |  |  ------------------
  |  |  |  | 8191|  2.17k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 2.17k, False: 28.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8141|  3.08k|    SLOT(OFPACT_POP_MPLS)                       \
  |  |  ------------------
  |  |  |  | 8191|  3.08k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 3.08k, False: 27.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8142|  5.76k|    SLOT(OFPACT_DECAP)                          \
  |  |  ------------------
  |  |  |  | 8191|  5.76k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 5.76k, False: 24.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8143|  5.76k|    SLOT(OFPACT_ENCAP)                          \
  |  |  ------------------
  |  |  |  | 8191|  1.52k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 1.52k, False: 28.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8144|  2.61k|    SLOT(OFPACT_PUSH_MPLS)                      \
  |  |  ------------------
  |  |  |  | 8191|  2.61k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 2.61k, False: 27.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8145|  2.61k|    SLOT(OFPACT_PUSH_VLAN)                      \
  |  |  ------------------
  |  |  |  | 8191|  1.64k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 1.64k, False: 28.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8146|  1.64k|    SLOT(OFPACT_DEC_TTL)                        \
  |  |  ------------------
  |  |  |  | 8191|  1.11k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 1.11k, False: 29.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8147|  3.19k|    SLOT(OFPACT_DEC_MPLS_TTL)                   \
  |  |  ------------------
  |  |  |  | 8191|  3.19k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 3.19k, False: 27.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8148|  3.19k|    SLOT(OFPACT_DEC_NSH_TTL)
  |  |  ------------------
  |  |  |  | 8191|  1.18k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 1.18k, False: 29.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8193|      0|#undef SLOT
 8194|       |
 8195|      0|#define FINAL(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
 8196|  1.18k|        ACTION_SET_FINAL_PRIORITY
  ------------------
  |  | 8155|     66|    FINAL(OFPACT_CT)                            \
  |  |  ------------------
  |  |  |  | 8195|     66|#define FINAL(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8195:23): [True: 66, False: 30.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8156|    118|    FINAL(OFPACT_CT_CLEAR)                      \
  |  |  ------------------
  |  |  |  | 8195|    118|#define FINAL(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8195:23): [True: 118, False: 30.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8157|    222|    FINAL(OFPACT_RESUBMIT)                      \
  |  |  ------------------
  |  |  |  | 8195|    222|#define FINAL(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8195:23): [True: 222, False: 30.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8158|    222|    FINAL(OFPACT_OUTPUT)                        \
  |  |  ------------------
  |  |  |  | 8195|    190|#define FINAL(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8195:23): [True: 190, False: 30.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8159|    514|    FINAL(OFPACT_GROUP)
  |  |  ------------------
  |  |  |  | 8195|    514|#define FINAL(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8195:23): [True: 514, False: 29.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8197|      0|#undef FINAL
 8198|       |
 8199|     68|    case OFPACT_SET_FIELD:
  ------------------
  |  Branch (8199:5): [True: 68, False: 30.3k]
  ------------------
 8200|    118|    case OFPACT_REG_MOVE:
  ------------------
  |  Branch (8200:5): [True: 50, False: 30.3k]
  ------------------
 8201|    130|    case OFPACT_SET_ETH_DST:
  ------------------
  |  Branch (8201:5): [True: 12, False: 30.3k]
  ------------------
 8202|    169|    case OFPACT_SET_ETH_SRC:
  ------------------
  |  Branch (8202:5): [True: 39, False: 30.3k]
  ------------------
 8203|    622|    case OFPACT_SET_IP_DSCP:
  ------------------
  |  Branch (8203:5): [True: 453, False: 29.9k]
  ------------------
 8204|  1.74k|    case OFPACT_SET_IP_ECN:
  ------------------
  |  Branch (8204:5): [True: 1.12k, False: 29.2k]
  ------------------
 8205|  2.14k|    case OFPACT_SET_IP_TTL:
  ------------------
  |  Branch (8205:5): [True: 402, False: 30.0k]
  ------------------
 8206|  2.22k|    case OFPACT_SET_IPV4_DST:
  ------------------
  |  Branch (8206:5): [True: 76, False: 30.3k]
  ------------------
 8207|  2.37k|    case OFPACT_SET_IPV4_SRC:
  ------------------
  |  Branch (8207:5): [True: 152, False: 30.2k]
  ------------------
 8208|  3.10k|    case OFPACT_SET_L4_DST_PORT:
  ------------------
  |  Branch (8208:5): [True: 729, False: 29.6k]
  ------------------
 8209|  3.21k|    case OFPACT_SET_L4_SRC_PORT:
  ------------------
  |  Branch (8209:5): [True: 112, False: 30.2k]
  ------------------
 8210|  3.83k|    case OFPACT_SET_MPLS_LABEL:
  ------------------
  |  Branch (8210:5): [True: 617, False: 29.7k]
  ------------------
 8211|  4.52k|    case OFPACT_SET_MPLS_TC:
  ------------------
  |  Branch (8211:5): [True: 685, False: 29.7k]
  ------------------
 8212|  5.48k|    case OFPACT_SET_MPLS_TTL:
  ------------------
  |  Branch (8212:5): [True: 962, False: 29.4k]
  ------------------
 8213|  5.57k|    case OFPACT_SET_QUEUE:
  ------------------
  |  Branch (8213:5): [True: 94, False: 30.3k]
  ------------------
 8214|  5.57k|    case OFPACT_SET_TUNNEL:
  ------------------
  |  Branch (8214:5): [True: 1, False: 30.4k]
  ------------------
 8215|  6.40k|    case OFPACT_SET_VLAN_PCP:
  ------------------
  |  Branch (8215:5): [True: 826, False: 29.5k]
  ------------------
 8216|  6.50k|    case OFPACT_SET_VLAN_VID:
  ------------------
  |  Branch (8216:5): [True: 103, False: 30.2k]
  ------------------
 8217|  6.50k|        return ACTION_SLOT_SET_OR_MOVE;
 8218|       |
 8219|      0|    case OFPACT_BUNDLE:
  ------------------
  |  Branch (8219:5): [True: 0, False: 30.4k]
  ------------------
 8220|      0|    case OFPACT_CLEAR_ACTIONS:
  ------------------
  |  Branch (8220:5): [True: 0, False: 30.4k]
  ------------------
 8221|      1|    case OFPACT_CLONE:
  ------------------
  |  Branch (8221:5): [True: 1, False: 30.4k]
  ------------------
 8222|      5|    case OFPACT_NAT:
  ------------------
  |  Branch (8222:5): [True: 4, False: 30.3k]
  ------------------
 8223|     10|    case OFPACT_CONTROLLER:
  ------------------
  |  Branch (8223:5): [True: 5, False: 30.3k]
  ------------------
 8224|     10|    case OFPACT_ENQUEUE:
  ------------------
  |  Branch (8224:5): [True: 0, False: 30.4k]
  ------------------
 8225|    118|    case OFPACT_EXIT:
  ------------------
  |  Branch (8225:5): [True: 108, False: 30.2k]
  ------------------
 8226|    118|    case OFPACT_UNROLL_XLATE:
  ------------------
  |  Branch (8226:5): [True: 0, False: 30.4k]
  ------------------
 8227|    143|    case OFPACT_FIN_TIMEOUT:
  ------------------
  |  Branch (8227:5): [True: 25, False: 30.3k]
  ------------------
 8228|    143|    case OFPACT_GOTO_TABLE:
  ------------------
  |  Branch (8228:5): [True: 0, False: 30.4k]
  ------------------
 8229|    160|    case OFPACT_LEARN:
  ------------------
  |  Branch (8229:5): [True: 17, False: 30.3k]
  ------------------
 8230|    160|    case OFPACT_CONJUNCTION:
  ------------------
  |  Branch (8230:5): [True: 0, False: 30.4k]
  ------------------
 8231|    395|    case OFPACT_METER:
  ------------------
  |  Branch (8231:5): [True: 235, False: 30.1k]
  ------------------
 8232|    395|    case OFPACT_MULTIPATH:
  ------------------
  |  Branch (8232:5): [True: 0, False: 30.4k]
  ------------------
 8233|    396|    case OFPACT_NOTE:
  ------------------
  |  Branch (8233:5): [True: 1, False: 30.4k]
  ------------------
 8234|    398|    case OFPACT_OUTPUT_REG:
  ------------------
  |  Branch (8234:5): [True: 2, False: 30.4k]
  ------------------
 8235|    485|    case OFPACT_OUTPUT_TRUNC:
  ------------------
  |  Branch (8235:5): [True: 87, False: 30.3k]
  ------------------
 8236|    486|    case OFPACT_POP_QUEUE:
  ------------------
  |  Branch (8236:5): [True: 1, False: 30.4k]
  ------------------
 8237|    487|    case OFPACT_SAMPLE:
  ------------------
  |  Branch (8237:5): [True: 1, False: 30.4k]
  ------------------
 8238|    487|    case OFPACT_STACK_POP:
  ------------------
  |  Branch (8238:5): [True: 0, False: 30.4k]
  ------------------
 8239|    488|    case OFPACT_STACK_PUSH:
  ------------------
  |  Branch (8239:5): [True: 1, False: 30.4k]
  ------------------
 8240|    488|    case OFPACT_WRITE_ACTIONS:
  ------------------
  |  Branch (8240:5): [True: 0, False: 30.4k]
  ------------------
 8241|    489|    case OFPACT_WRITE_METADATA:
  ------------------
  |  Branch (8241:5): [True: 1, False: 30.4k]
  ------------------
 8242|    489|    case OFPACT_DEBUG_RECIRC:
  ------------------
  |  Branch (8242:5): [True: 0, False: 30.4k]
  ------------------
 8243|    489|    case OFPACT_DEBUG_SLOW:
  ------------------
  |  Branch (8243:5): [True: 0, False: 30.4k]
  ------------------
 8244|    489|    case OFPACT_CHECK_PKT_LARGER:
  ------------------
  |  Branch (8244:5): [True: 0, False: 30.4k]
  ------------------
 8245|    489|    case OFPACT_DELETE_FIELD:
  ------------------
  |  Branch (8245:5): [True: 0, False: 30.4k]
  ------------------
 8246|    489|        return ACTION_SLOT_INVALID;
 8247|       |
 8248|      0|    default:
  ------------------
  |  Branch (8248:5): [True: 0, False: 30.4k]
  ------------------
 8249|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 8250|  30.4k|    }
 8251|  30.4k|}
ofp-actions.c:get_ovsinst_map:
 8482|  24.3k|{
 8483|       |    /* OpenFlow 1.1, 1.2, and 1.5 instructions. */
 8484|  24.3k|    static const struct ovsinst_map of11[] = {
 8485|  24.3k|        { OVSINST_OFPIT11_GOTO_TABLE, 1 },
 8486|  24.3k|        { OVSINST_OFPIT11_WRITE_METADATA, 2 },
 8487|  24.3k|        { OVSINST_OFPIT11_WRITE_ACTIONS, 3 },
 8488|  24.3k|        { OVSINST_OFPIT11_APPLY_ACTIONS, 4 },
 8489|  24.3k|        { OVSINST_OFPIT11_CLEAR_ACTIONS, 5 },
 8490|  24.3k|        { 0, -1 },
 8491|  24.3k|    };
 8492|       |
 8493|       |    /* OpenFlow 1.3 and 1.4 instructions. */
 8494|  24.3k|    static const struct ovsinst_map of13[] = {
 8495|  24.3k|        { OVSINST_OFPIT11_GOTO_TABLE, 1 },
 8496|  24.3k|        { OVSINST_OFPIT11_WRITE_METADATA, 2 },
 8497|  24.3k|        { OVSINST_OFPIT11_WRITE_ACTIONS, 3 },
 8498|  24.3k|        { OVSINST_OFPIT11_APPLY_ACTIONS, 4 },
 8499|  24.3k|        { OVSINST_OFPIT11_CLEAR_ACTIONS, 5 },
 8500|  24.3k|        { OVSINST_OFPIT13_METER, 6 },
 8501|  24.3k|        { 0, -1 },
 8502|  24.3k|    };
 8503|       |
 8504|  24.3k|    return version == OFP13_VERSION || version == OFP14_VERSION ? of13 : of11;
  ------------------
  |  Branch (8504:12): [True: 0, False: 24.3k]
  |  Branch (8504:40): [True: 0, False: 24.3k]
  ------------------
 8505|  24.3k|}
ofp-actions.c:decode_openflow11_instructions:
 8598|  25.5k|{
 8599|  25.5k|    const struct ofp11_instruction *inst;
 8600|  25.5k|    size_t left;
 8601|       |
 8602|  25.5k|    memset(out, 0, N_OVS_INSTRUCTIONS * sizeof *out);
 8603|  25.5k|    INSTRUCTION_FOR_EACH (inst, left, insts, n_insts) {
  ------------------
  |  | 8560|  25.5k|    for ((ITER) = (INSTRUCTIONS), (LEFT) = (N_INSTRUCTIONS);            \
  |  | 8561|  40.2k|         (LEFT) > 0 && instruction_is_valid(ITER, LEFT);                \
  |  |  ------------------
  |  |  |  Branch (8561:10): [True: 19.3k, False: 20.9k]
  |  |  |  Branch (8561:24): [True: 16.9k, False: 2.39k]
  |  |  ------------------
  |  | 8562|  25.5k|         ((LEFT) -= (ntohs((ITER)->len)                                 \
  |  | 8563|  14.6k|                     / sizeof(struct ofp11_instruction)),               \
  |  | 8564|  14.6k|          (ITER) = instruction_next(ITER)))
  ------------------
 8604|  16.9k|        enum ovs_instruction_type type;
 8605|  16.9k|        enum ofperr error;
 8606|       |
 8607|  16.9k|        error = decode_openflow11_instruction(inst, &type);
 8608|  16.9k|        if (error) {
  ------------------
  |  Branch (8608:13): [True: 1.76k, False: 15.1k]
  ------------------
 8609|  1.76k|            return error;
 8610|  1.76k|        }
 8611|       |
 8612|  15.1k|        if (type == OVSINST_OFPIT13_METER && version >= OFP15_VERSION) {
  ------------------
  |  Branch (8612:13): [True: 620, False: 14.5k]
  |  Branch (8612:46): [True: 444, False: 176]
  ------------------
 8613|       |            /* "meter" is an action, not an instruction, in OpenFlow 1.5. */
 8614|    444|            return OFPERR_OFPBIC_UNKNOWN_INST;
 8615|    444|        }
 8616|       |
 8617|  14.7k|        if (out[type]) {
  ------------------
  |  Branch (8617:13): [True: 74, False: 14.6k]
  ------------------
 8618|     74|            return OFPERR_OFPBIC_DUP_INST;
 8619|     74|        }
 8620|  14.6k|        out[type] = inst;
 8621|  14.6k|    }
 8622|       |
 8623|  23.3k|    if (left) {
  ------------------
  |  Branch (8623:9): [True: 2.39k, False: 20.9k]
  ------------------
 8624|  2.39k|        VLOG_WARN_RL(&rl, "bad instruction format at offset %"PRIuSIZE,
  ------------------
  |  |  224|  2.39k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  2.39k|    do {                                                                \
  |  |  |  |  288|  2.39k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  2.39k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 2.39k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  2.39k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 2.39k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8625|  2.39k|                     (n_insts - left) * sizeof *inst);
 8626|  2.39k|        return OFPERR_OFPBIC_BAD_LEN;
 8627|  2.39k|    }
 8628|  20.9k|    return 0;
 8629|  23.3k|}
ofp-actions.c:instruction_is_valid:
 8551|  19.3k|{
 8552|  19.3k|    uint16_t len = ntohs(inst->len);
 8553|  19.3k|    return (!(len % OFP11_INSTRUCTION_ALIGN)
  ------------------
  |  |  262|  19.3k|#define OFP11_INSTRUCTION_ALIGN 8
  ------------------
  |  Branch (8553:13): [True: 17.2k, False: 2.13k]
  ------------------
 8554|  17.2k|            && len >= sizeof *inst
  ------------------
  |  Branch (8554:16): [True: 17.0k, False: 121]
  ------------------
 8555|  17.0k|            && len / sizeof *inst <= n_instructions);
  ------------------
  |  Branch (8555:16): [True: 16.9k, False: 136]
  ------------------
 8556|  19.3k|}
ofp-actions.c:decode_openflow11_instruction:
 8569|  16.9k|{
 8570|  16.9k|    uint16_t len = ntohs(inst->len);
 8571|       |
 8572|  16.9k|    switch (inst->type) {
 8573|     27|    case CONSTANT_HTONS(OFPIT11_EXPERIMENTER):
  ------------------
  |  |   84|     27|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |   85|     27|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  ------------------
  |  Branch (8573:5): [True: 27, False: 16.9k]
  ------------------
 8574|     27|        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|     27|OVS_INSTRUCTIONS
  ------------------
  |  | 1344|    655|    DEFINE_INST(OFPIT13_METER,                              \
  |  |  ------------------
  |  |  |  | 8577|    655|        case CONSTANT_HTONS(ENUM):                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |   84|    655|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |  |  |  |  |   85|    655|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8577:9): [True: 655, False: 16.2k]
  |  |  |  |  ------------------
  |  |  |  | 8578|    655|            if (EXTENSIBLE                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8578:17): [Folded, False: 655]
  |  |  |  |  |  Branch (8578:17): [True: 620, False: 35]
  |  |  |  |  ------------------
  |  |  |  | 8579|    655|                ? len >= sizeof(struct STRUCT)          \
  |  |  |  | 8580|    655|                : len == sizeof(struct STRUCT)) {       \
  |  |  |  | 8581|    620|                *type = OVSINST_##ENUM;                 \
  |  |  |  | 8582|    620|                return 0;                               \
  |  |  |  | 8583|    620|            } else {                                    \
  |  |  |  | 8584|     35|                return OFPERR_OFPBIC_BAD_LEN;           \
  |  |  |  | 8585|     35|            }
  |  |  ------------------
  |  | 1345|    655|                ofp13_instruction_meter,          false,    \
  |  | 1346|    655|                "meter")                                    \
  |  | 1347|    655|                                                            \
  |  | 1348|  3.09k|    DEFINE_INST(OFPIT11_APPLY_ACTIONS,                      \
  |  |  ------------------
  |  |  |  | 8577|  3.09k|        case CONSTANT_HTONS(ENUM):                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |   84|  3.09k|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |  |  |  |  |   85|  3.09k|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8577:9): [True: 3.09k, False: 13.8k]
  |  |  |  |  ------------------
  |  |  |  | 8578|  3.09k|            if (EXTENSIBLE                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8578:17): [True: 3.09k, Folded]
  |  |  |  |  |  Branch (8578:17): [True: 3.09k, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 8579|  3.09k|                ? len >= sizeof(struct STRUCT)          \
  |  |  |  | 8580|  3.09k|                : len == sizeof(struct STRUCT)) {       \
  |  |  |  | 8581|  3.09k|                *type = OVSINST_##ENUM;                 \
  |  |  |  | 8582|  3.09k|                return 0;                               \
  |  |  |  | 8583|  3.09k|            } else {                                    \
  |  |  |  | 8584|      0|                return OFPERR_OFPBIC_BAD_LEN;           \
  |  |  |  | 8585|      0|            }
  |  |  ------------------
  |  | 1349|  3.09k|                ofp11_instruction_actions,        true,     \
  |  | 1350|  3.09k|                "apply_actions")                            \
  |  | 1351|  3.09k|                                                            \
  |  | 1352|  3.09k|    DEFINE_INST(OFPIT11_CLEAR_ACTIONS,                      \
  |  |  ------------------
  |  |  |  | 8577|    276|        case CONSTANT_HTONS(ENUM):                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |   84|    276|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |  |  |  |  |   85|    276|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8577:9): [True: 276, False: 16.6k]
  |  |  |  |  ------------------
  |  |  |  | 8578|    276|            if (EXTENSIBLE                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8578:17): [Folded, False: 276]
  |  |  |  |  |  Branch (8578:17): [True: 266, False: 10]
  |  |  |  |  ------------------
  |  |  |  | 8579|    276|                ? len >= sizeof(struct STRUCT)          \
  |  |  |  | 8580|    276|                : len == sizeof(struct STRUCT)) {       \
  |  |  |  | 8581|    266|                *type = OVSINST_##ENUM;                 \
  |  |  |  | 8582|    266|                return 0;                               \
  |  |  |  | 8583|    266|            } else {                                    \
  |  |  |  | 8584|     10|                return OFPERR_OFPBIC_BAD_LEN;           \
  |  |  |  | 8585|     10|            }
  |  |  ------------------
  |  | 1353|    276|                ofp11_instruction,                false,    \
  |  | 1354|    276|                "clear_actions")                            \
  |  | 1355|    276|                                                            \
  |  | 1356|  10.8k|    DEFINE_INST(OFPIT11_WRITE_ACTIONS,                      \
  |  |  ------------------
  |  |  |  | 8577|  10.8k|        case CONSTANT_HTONS(ENUM):                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |   84|  10.8k|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |  |  |  |  |   85|  10.8k|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8577:9): [True: 10.8k, False: 6.14k]
  |  |  |  |  ------------------
  |  |  |  | 8578|  10.8k|            if (EXTENSIBLE                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8578:17): [True: 10.8k, Folded]
  |  |  |  |  |  Branch (8578:17): [True: 10.8k, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 8579|  10.8k|                ? len >= sizeof(struct STRUCT)          \
  |  |  |  | 8580|  10.8k|                : len == sizeof(struct STRUCT)) {       \
  |  |  |  | 8581|  10.8k|                *type = OVSINST_##ENUM;                 \
  |  |  |  | 8582|  10.8k|                return 0;                               \
  |  |  |  | 8583|  10.8k|            } else {                                    \
  |  |  |  | 8584|      0|                return OFPERR_OFPBIC_BAD_LEN;           \
  |  |  |  | 8585|      0|            }
  |  |  ------------------
  |  | 1357|  10.8k|                ofp11_instruction_actions,        true,     \
  |  | 1358|  10.8k|                "write_actions")                            \
  |  | 1359|  10.8k|                                                            \
  |  | 1360|  10.8k|    DEFINE_INST(OFPIT11_WRITE_METADATA,                     \
  |  |  ------------------
  |  |  |  | 8577|    158|        case CONSTANT_HTONS(ENUM):                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |   84|    158|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |  |  |  |  |   85|    158|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8577:9): [True: 158, False: 16.7k]
  |  |  |  |  ------------------
  |  |  |  | 8578|    158|            if (EXTENSIBLE                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8578:17): [Folded, False: 158]
  |  |  |  |  |  Branch (8578:17): [True: 141, False: 17]
  |  |  |  |  ------------------
  |  |  |  | 8579|    158|                ? len >= sizeof(struct STRUCT)          \
  |  |  |  | 8580|    158|                : len == sizeof(struct STRUCT)) {       \
  |  |  |  | 8581|    141|                *type = OVSINST_##ENUM;                 \
  |  |  |  | 8582|    141|                return 0;                               \
  |  |  |  | 8583|    141|            } else {                                    \
  |  |  |  | 8584|     17|                return OFPERR_OFPBIC_BAD_LEN;           \
  |  |  |  | 8585|     17|            }
  |  |  ------------------
  |  | 1361|    158|                ofp11_instruction_write_metadata, false,    \
  |  | 1362|    158|                "write_metadata")                           \
  |  | 1363|    158|                                                            \
  |  | 1364|    286|    DEFINE_INST(OFPIT11_GOTO_TABLE,                         \
  |  |  ------------------
  |  |  |  | 8577|    286|        case CONSTANT_HTONS(ENUM):                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |   84|    286|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |  |  |  |  |   85|    286|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8577:9): [True: 286, False: 16.6k]
  |  |  |  |  ------------------
  |  |  |  | 8578|    286|            if (EXTENSIBLE                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8578:17): [Folded, False: 286]
  |  |  |  |  |  Branch (8578:17): [True: 257, False: 29]
  |  |  |  |  ------------------
  |  |  |  | 8579|    286|                ? len >= sizeof(struct STRUCT)          \
  |  |  |  | 8580|    286|                : len == sizeof(struct STRUCT)) {       \
  |  |  |  | 8581|    257|                *type = OVSINST_##ENUM;                 \
  |  |  |  | 8582|    257|                return 0;                               \
  |  |  |  | 8583|    257|            } else {                                    \
  |  |  |  | 8584|     29|                return OFPERR_OFPBIC_BAD_LEN;           \
  |  |  |  | 8585|     29|            }
  |  |  ------------------
  |  | 1365|    286|                ofp11_instruction_goto_table,     false,    \
  |  | 1366|    286|                "goto_table")
  ------------------
 8587|      0|#undef DEFINE_INST
 8588|       |
 8589|  1.64k|    default:
  ------------------
  |  Branch (8589:5): [True: 1.64k, False: 15.3k]
  ------------------
 8590|  1.64k|        return OFPERR_OFPBIC_UNKNOWN_INST;
 8591|  16.9k|    }
 8592|  16.9k|}
ofp-actions.c:instruction_next:
 8543|  14.6k|{
 8544|  14.6k|    return ((struct ofp11_instruction *) (void *)
 8545|       |            ((uint8_t *) inst + ntohs(inst->len)));
 8546|  14.6k|}
ofp-actions.c:get_actions_from_instruction:
 8635|  13.7k|{
 8636|  13.7k|    *actions = ALIGNED_CAST(const struct ofp_action_header *, inst + 1);
  ------------------
  |  |  434|  13.7k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 8637|       |    *actions_len = ntohs(inst->len) - sizeof *inst;
 8638|  13.7k|}
ofp-actions.c:ofpacts_decode:
 8029|   143k|{
 8030|   143k|    size_t bad_action_offset = 0;
 8031|   143k|    struct ofpbuf aligned_buf;
 8032|       |
 8033|   143k|    if (!OFPACT_IS_ALIGNED(actions)) {
  ------------------
  |  |  206|   143k|#define OFPACT_IS_ALIGNED(ADDR) ((uintptr_t) (ADDR) % OFPACT_ALIGNTO == 0)
  |  |  ------------------
  |  |  |  |  204|   143k|#define OFPACT_ALIGNTO 8
  |  |  ------------------
  ------------------
  |  Branch (8033:9): [True: 71.7k, False: 71.3k]
  ------------------
 8034|  71.7k|        ofpbuf_init(&aligned_buf, actions_len);
 8035|  71.7k|        ofpbuf_put(&aligned_buf, actions, actions_len);
 8036|  71.7k|    } else {
 8037|  71.3k|        ofpbuf_use_data(&aligned_buf, actions, actions_len);
 8038|  71.3k|    }
 8039|       |
 8040|   143k|    enum ofperr error
 8041|   143k|        = ofpacts_decode_aligned(&aligned_buf, ofp_version, vl_mff_map,
 8042|   143k|                                 ofpacts_tlv_bitmap, ofpacts,
 8043|   143k|                                 &bad_action_offset);
 8044|   143k|    if (error) {
  ------------------
  |  Branch (8044:9): [True: 63.6k, False: 79.4k]
  ------------------
 8045|  63.6k|        log_bad_action(actions, actions_len, bad_action_offset, error);
 8046|  63.6k|    }
 8047|   143k|    ofpbuf_uninit(&aligned_buf);
 8048|   143k|    return error;
 8049|   143k|}
ofp-actions.c:ofpacts_decode_aligned:
 7986|   143k|{
 7987|   143k|    size_t decoded_len = 0;
 7988|   143k|    enum ofperr error = 0;
 7989|       |
 7990|   143k|    ovs_assert(OFPACT_IS_ALIGNED(openflow->data));
  ------------------
  |  |   62|   143k|#define ovs_assert ovs_ignore
  ------------------
                  ovs_assert(OFPACT_IS_ALIGNED(openflow->data));
  ------------------
  |  |  206|   143k|#define OFPACT_IS_ALIGNED(ADDR) ((uintptr_t) (ADDR) % OFPACT_ALIGNTO == 0)
  |  |  ------------------
  |  |  |  |  204|   143k|#define OFPACT_ALIGNTO 8
  |  |  ------------------
  ------------------
 7991|   287k|    while (openflow->size) {
  ------------------
  |  Branch (7991:12): [True: 207k, False: 79.4k]
  ------------------
 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|   207k|        if (!OFPACT_IS_ALIGNED(openflow->data)) {
  ------------------
  |  |  206|   207k|#define OFPACT_IS_ALIGNED(ADDR) ((uintptr_t) (ADDR) % OFPACT_ALIGNTO == 0)
  |  |  ------------------
  |  |  |  |  204|   207k|#define OFPACT_ALIGNTO 8
  |  |  ------------------
  ------------------
  |  Branch (7998:13): [True: 0, False: 207k]
  ------------------
 7999|      0|            ofpbuf_align(openflow);
 8000|      0|        }
 8001|       |
 8002|   207k|        const struct ofp_action_header *action = openflow->data;
 8003|   207k|        enum ofp_raw_action_type raw;
 8004|   207k|        size_t act_len = 0;
 8005|   207k|        uint64_t arg;
 8006|       |
 8007|   207k|        error = ofpact_pull_raw(openflow, ofp_version, &raw, &arg, &act_len);
 8008|   207k|        if (!error) {
  ------------------
  |  Branch (8008:13): [True: 186k, False: 21.2k]
  ------------------
 8009|   186k|            error = ofpact_decode(action, raw, ofp_version, arg, vl_mff_map,
 8010|   186k|                                  ofpacts_tlv_bitmap, ofpacts);
 8011|   186k|        }
 8012|       |
 8013|   207k|        if (error) {
  ------------------
  |  Branch (8013:13): [True: 63.6k, False: 143k]
  ------------------
 8014|  63.6k|            *bad_action_offset = decoded_len;
 8015|  63.6k|            goto done;
 8016|  63.6k|        }
 8017|   143k|        decoded_len += act_len;
 8018|   143k|    }
 8019|       |
 8020|   143k|done:
 8021|   143k|    return error;
 8022|   143k|}
ofp-actions.c:ofpact_pull_raw:
 9903|   207k|{
 9904|   207k|    const struct ofp_action_header *oah = buf->data;
 9905|   207k|    const struct ofpact_raw_instance *action;
 9906|   207k|    unsigned int length;
 9907|   207k|    enum ofperr error;
 9908|       |
 9909|   207k|    *raw = *arg = *raw_len = 0;
 9910|   207k|    error = ofpact_decode_raw(ofp_version, oah, buf->size, &action);
 9911|   207k|    if (error) {
  ------------------
  |  Branch (9911:9): [True: 14.6k, False: 192k]
  ------------------
 9912|  14.6k|        return error;
 9913|  14.6k|    }
 9914|       |
 9915|   192k|    if (action->deprecation) {
  ------------------
  |  Branch (9915:9): [True: 12.1k, False: 180k]
  ------------------
 9916|  12.1k|        VLOG_INFO_RL(&rl, "%s is deprecated in %s (%s)",
  ------------------
  |  |  225|  12.1k|#define VLOG_INFO_RL(RL, ...) VLOG_RL(RL, VLL_INFO, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  12.1k|    do {                                                                \
  |  |  |  |  288|  12.1k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  12.1k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 12.1k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  12.1k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 12.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9917|  12.1k|                     action->name, ofputil_version_to_string(ofp_version),
 9918|  12.1k|                     action->deprecation);
 9919|  12.1k|    }
 9920|       |
 9921|   192k|    length = ntohs(oah->len);
 9922|   192k|    if (length > buf->size) {
  ------------------
  |  Branch (9922:9): [True: 3.12k, False: 189k]
  ------------------
 9923|  3.12k|        VLOG_WARN_RL(&rl, "OpenFlow action %s length %u exceeds action buffer "
  ------------------
  |  |  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]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9924|  3.12k|                     "length %"PRIu32, action->name, length, buf->size);
 9925|  3.12k|        return OFPERR_OFPBAC_BAD_LEN;
 9926|  3.12k|    }
 9927|   189k|    if (length < action->min_length || length > action->max_length) {
  ------------------
  |  Branch (9927:9): [True: 1.74k, False: 188k]
  |  Branch (9927:40): [True: 644, False: 187k]
  ------------------
 9928|  2.38k|        VLOG_WARN_RL(&rl, "OpenFlow action %s length %u not in valid range "
  ------------------
  |  |  224|  2.38k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  2.38k|    do {                                                                \
  |  |  |  |  288|  2.38k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  2.38k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 2.38k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  2.38k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 2.38k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9929|  2.38k|                     "[%hu,%hu]", action->name, length,
 9930|  2.38k|                     action->min_length, action->max_length);
 9931|  2.38k|        return OFPERR_OFPBAC_BAD_LEN;
 9932|  2.38k|    }
 9933|   187k|    if (length % 8) {
  ------------------
  |  Branch (9933:9): [True: 1.14k, False: 186k]
  ------------------
 9934|  1.14k|        VLOG_WARN_RL(&rl, "OpenFlow action %s length %u is not a multiple "
  ------------------
  |  |  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]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9935|  1.14k|                     "of 8", action->name, length);
 9936|  1.14k|        return OFPERR_OFPBAC_BAD_LEN;
 9937|  1.14k|    }
 9938|       |
 9939|   186k|    *raw = action->raw;
 9940|   186k|    *arg = 0;
 9941|   186k|    if (action->arg_len) {
  ------------------
  |  Branch (9941:9): [True: 42.4k, False: 143k]
  ------------------
 9942|  42.4k|        const uint8_t *p;
 9943|  42.4k|        int i;
 9944|       |
 9945|  42.4k|        p = ofpbuf_at_assert(buf, action->arg_ofs, action->arg_len);
 9946|   136k|        for (i = 0; i < action->arg_len; i++) {
  ------------------
  |  Branch (9946:21): [True: 94.2k, False: 42.4k]
  ------------------
 9947|  94.2k|            *arg = (*arg << 8) | p[i];
 9948|  94.2k|        }
 9949|  42.4k|    }
 9950|       |
 9951|   186k|    ofpbuf_pull(buf, length);
 9952|   186k|    *raw_len = length;
 9953|       |
 9954|   186k|    return 0;
 9955|   187k|}
ofp-actions.c:ofpact_decode_raw:
 9850|   207k|{
 9851|   207k|    const struct ofpact_raw_instance *inst;
 9852|   207k|    struct ofpact_hdrs hdrs;
 9853|       |
 9854|   207k|    *instp = NULL;
 9855|   207k|    if (length < sizeof *oah) {
  ------------------
  |  Branch (9855:9): [True: 0, False: 207k]
  ------------------
 9856|      0|        return OFPERR_OFPBAC_BAD_LEN;
 9857|      0|    }
 9858|       |
 9859|       |    /* Get base action type. */
 9860|   207k|    if (oah->type == htons(OFPAT_VENDOR)) {
  ------------------
  |  Branch (9860:9): [True: 119k, False: 87.7k]
  ------------------
 9861|       |        /* Get vendor. */
 9862|   119k|        hdrs.vendor = ntohl(oah->vendor);
 9863|   119k|        if (hdrs.vendor == NX_VENDOR_ID || hdrs.vendor == ONF_VENDOR_ID) {
  ------------------
  |  |  110|   239k|#define NX_VENDOR_ID    0x00002320 /* Nicira. */
  ------------------
                      if (hdrs.vendor == NX_VENDOR_ID || hdrs.vendor == ONF_VENDOR_ID) {
  ------------------
  |  |  111|  5.50k|#define ONF_VENDOR_ID   0x4f4e4600 /* Open Networking Foundation. */
  ------------------
  |  Branch (9863:13): [True: 114k, False: 5.50k]
  |  Branch (9863:44): [True: 55, False: 5.44k]
  ------------------
 9864|       |            /* Get extension subtype. */
 9865|   114k|            const struct ext_action_header *nah;
 9866|       |
 9867|   114k|            nah = ALIGNED_CAST(const struct ext_action_header *, oah);
  ------------------
  |  |  434|   114k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 9868|   114k|            if (length < sizeof *nah) {
  ------------------
  |  Branch (9868:17): [True: 96, False: 114k]
  ------------------
 9869|     96|                return OFPERR_OFPBAC_BAD_LEN;
 9870|     96|            }
 9871|   114k|            hdrs.type = ntohs(nah->subtype);
 9872|   114k|        } else {
 9873|  5.44k|            VLOG_WARN_RL(&rl, "OpenFlow action has unknown vendor %#"PRIx32,
  ------------------
  |  |  224|  5.44k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  5.44k|    do {                                                                \
  |  |  |  |  288|  5.44k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  5.44k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 5.44k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  5.44k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 5.44k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9874|  5.44k|                         hdrs.vendor);
 9875|  5.44k|            return OFPERR_OFPBAC_BAD_VENDOR;
 9876|  5.44k|        }
 9877|   119k|    } else {
 9878|  87.7k|        hdrs.vendor = 0;
 9879|  87.7k|        hdrs.type = ntohs(oah->type);
 9880|  87.7k|    }
 9881|       |
 9882|   202k|    hdrs.ofp_version = ofp_version;
 9883|   202k|    HMAP_FOR_EACH_WITH_HASH (inst, decode_node, ofpact_hdrs_hash(&hdrs),
  ------------------
  |  |  138|   202k|    for (INIT_MULTIVAR(NODE, MEMBER, hmap_first_with_hash(HMAP, HASH),        \
  |  |  ------------------
  |  |  |  |  171|   202k|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|   202k|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  139|   202k|                       struct hmap_node);                                     \
  |  |  140|   202k|         CONDITION_MULTIVAR(NODE, MEMBER, ITER_VAR(NODE) != NULL);            \
  |  |  ------------------
  |  |  |  |  185|   202k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 192k, False: 9.10k]
  |  |  |  |  |  Branch (185:6): [True: 192k, False: 9.10k]
  |  |  |  |  ------------------
  |  |  |  |  186|   202k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|   192k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|   192k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|   192k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|   202k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |  141|   202k|         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|   202k|                             ofpact_decode_hmap()) {
 9885|   192k|        if (ofpact_hdrs_equal(&hdrs, &inst->hdrs)) {
  ------------------
  |  Branch (9885:13): [True: 192k, False: 0]
  ------------------
 9886|   192k|            *instp = inst;
 9887|   192k|            return 0;
 9888|   192k|        }
 9889|   192k|    }
 9890|       |
 9891|  9.10k|    VLOG_WARN_RL(&rl, "unknown %s action for vendor %#"PRIx32" and "
  ------------------
  |  |  224|  9.10k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  9.10k|    do {                                                                \
  |  |  |  |  288|  9.10k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  9.10k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 9.10k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  9.10k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 9.10k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9892|  9.10k|                 "type %"PRIu16, ofputil_version_to_string(ofp_version),
 9893|  9.10k|                 hdrs.vendor, hdrs.type);
 9894|  9.10k|    return (hdrs.vendor
  ------------------
  |  Branch (9894:13): [True: 1.06k, False: 8.04k]
  ------------------
 9895|  9.10k|            ? OFPERR_OFPBAC_BAD_VENDOR_TYPE
 9896|  9.10k|            : OFPERR_OFPBAC_BAD_TYPE);
 9897|   202k|}
ofp-actions.c:ofpact_decode_hmap:
 9806|   202k|{
 9807|   202k|    static struct ovsthread_once once = OVSTHREAD_ONCE_INITIALIZER;
  ------------------
  |  |  134|   202k|    {                                           \
  |  |  135|   202k|        false,                                  \
  |  |  136|   202k|        OVS_MUTEX_INITIALIZER,                  \
  |  |  ------------------
  |  |  |  |   45|   202k|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|   202k|                                "<unlocked>" }
  |  |  ------------------
  |  |  137|   202k|    }
  ------------------
 9808|   202k|    static struct hmap hmap;
 9809|       |
 9810|   202k|    if (ovsthread_once_start(&once)) {
  ------------------
  |  Branch (9810:9): [True: 1, False: 202k]
  ------------------
 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|   202k|    return &hmap;
 9823|   202k|}
ofp-actions.c:ofpact_hdrs_hash:
 9797|   202k|{
 9798|   202k|    return hash_2words(hdrs->vendor,
 9799|   202k|                       ((uint32_t) hdrs->type << 16) | hdrs->ofp_version);
 9800|   202k|}
ofp-actions.c:ofpact_hdrs_equal:
 9789|   192k|{
 9790|   192k|    return (a->vendor == b->vendor
  ------------------
  |  Branch (9790:13): [True: 192k, False: 0]
  ------------------
 9791|   192k|            && a->type == b->type
  ------------------
  |  Branch (9791:16): [True: 192k, False: 0]
  ------------------
 9792|   192k|            && a->ofp_version == b->ofp_version);
  ------------------
  |  Branch (9792:16): [True: 192k, False: 0]
  ------------------
 9793|   192k|}
ofp-actions.c:decode_OFPAT_RAW10_OUTPUT:
  578|  9.94k|{
  579|  9.94k|    struct ofpact_output *output;
  580|       |
  581|  9.94k|    output = ofpact_put_OUTPUT(out);
  582|  9.94k|    output->port = u16_to_ofp(ntohs(oao->port));
  583|  9.94k|    output->max_len = ntohs(oao->max_len);
  584|       |
  585|  9.94k|    return ofpact_check_output_port(output->port, OFPP_MAX);
  ------------------
  |  |   33|  9.94k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|  9.94k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  586|  9.94k|}
ofp-actions.c:decode_OFPAT_RAW11_OUTPUT:
  592|    870|{
  593|    870|    struct ofpact_output *output;
  594|    870|    enum ofperr error;
  595|       |
  596|    870|    output = ofpact_put_OUTPUT(out);
  597|    870|    output->max_len = ntohs(oao->max_len);
  598|       |
  599|    870|    error = ofputil_port_from_ofp11(oao->port, &output->port);
  600|    870|    if (error) {
  ------------------
  |  Branch (600:9): [True: 196, False: 674]
  ------------------
  601|    196|        return error;
  602|    196|    }
  603|       |
  604|    674|    return ofpact_check_output_port(output->port, OFPP_MAX);
  ------------------
  |  |   33|    674|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|    674|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  605|    870|}
ofp-actions.c:decode_OFPAT_RAW10_SET_VLAN_VID:
 1575|  5.35k|{
 1576|       |    return decode_set_vlan_vid(vid, true, out);
 1577|  5.35k|}
ofp-actions.c:decode_set_vlan_vid:
 1560|  6.36k|{
 1561|  6.36k|    if (vid & ~0xfff) {
  ------------------
  |  Branch (1561:9): [True: 164, False: 6.19k]
  ------------------
 1562|    164|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 1563|  6.19k|    } else {
 1564|  6.19k|        struct ofpact_vlan_vid *vlan_vid = ofpact_put_SET_VLAN_VID(out);
 1565|  6.19k|        vlan_vid->vlan_vid = vid;
 1566|  6.19k|        vlan_vid->push_vlan_if_needed = push_vlan_if_needed;
 1567|  6.19k|        return 0;
 1568|  6.19k|    }
 1569|  6.36k|}
ofp-actions.c:decode_OFPAT_RAW10_SET_VLAN_PCP:
 1683|    772|{
 1684|       |    return decode_set_vlan_pcp(pcp, true, out);
 1685|    772|}
ofp-actions.c:decode_set_vlan_pcp:
 1668|  2.27k|{
 1669|  2.27k|    if (pcp & ~7) {
  ------------------
  |  Branch (1669:9): [True: 130, False: 2.14k]
  ------------------
 1670|    130|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 1671|  2.14k|    } else {
 1672|  2.14k|        struct ofpact_vlan_pcp *vlan_pcp = ofpact_put_SET_VLAN_PCP(out);
 1673|  2.14k|        vlan_pcp->vlan_pcp = pcp;
 1674|  2.14k|        vlan_pcp->push_vlan_if_needed = push_vlan_if_needed;
 1675|  2.14k|        return 0;
 1676|  2.14k|    }
 1677|  2.27k|}
ofp-actions.c:decode_OFPAT_RAW11_SET_VLAN_VID:
 1583|  1.00k|{
 1584|       |    return decode_set_vlan_vid(vid, false, out);
 1585|  1.00k|}
ofp-actions.c:decode_OFPAT_RAW11_SET_VLAN_PCP:
 1691|  1.50k|{
 1692|       |    return decode_set_vlan_pcp(pcp, false, out);
 1693|  1.50k|}
ofp-actions.c:decode_OFPAT_RAW11_PUSH_VLAN:
 1840|  2.19k|{
 1841|  2.19k|    struct ofpact_push_vlan *push_vlan;
 1842|  2.19k|    if (!eth_type_vlan(eth_type)) {
  ------------------
  |  Branch (1842:9): [True: 271, False: 1.92k]
  ------------------
 1843|    271|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 1844|    271|    }
 1845|  1.92k|    push_vlan = ofpact_put_PUSH_VLAN(out);
 1846|  1.92k|    push_vlan->ethertype = eth_type;
 1847|  1.92k|    return 0;
 1848|  2.19k|}
ofp-actions.c:decode_OFPAT_RAW10_STRIP_VLAN:
 1776|  1.59k|{
 1777|  1.59k|    ofpact_put_STRIP_VLAN(out)->ofpact.raw = OFPAT_RAW10_STRIP_VLAN;
 1778|  1.59k|    return 0;
 1779|  1.59k|}
ofp-actions.c:decode_OFPAT_RAW11_POP_VLAN:
 1783|  2.44k|{
 1784|  2.44k|    ofpact_put_STRIP_VLAN(out)->ofpact.raw = OFPAT_RAW11_POP_VLAN;
 1785|  2.44k|    return 0;
 1786|  2.44k|}
ofp-actions.c:decode_OFPAT_RAW_SET_DL_SRC:
 1919|     48|{
 1920|     48|    ofpact_put_SET_ETH_SRC(out)->mac = a->dl_addr;
 1921|     48|    return 0;
 1922|     48|}
ofp-actions.c:decode_OFPAT_RAW_SET_DL_DST:
 1928|    129|{
 1929|    129|    ofpact_put_SET_ETH_DST(out)->mac = a->dl_addr;
 1930|    129|    return 0;
 1931|    129|}
ofp-actions.c:decode_OFPAT_RAW_SET_NW_SRC:
 2015|  2.26k|{
 2016|  2.26k|    ofpact_put_SET_IPV4_SRC(out)->ipv4 = ipv4;
 2017|  2.26k|    return 0;
 2018|  2.26k|}
ofp-actions.c:decode_OFPAT_RAW_SET_NW_DST:
 2024|  2.14k|{
 2025|  2.14k|    ofpact_put_SET_IPV4_DST(out)->ipv4 = ipv4;
 2026|  2.14k|    return 0;
 2027|  2.14k|}
ofp-actions.c:decode_OFPAT_RAW_SET_NW_TOS:
 2117|  2.66k|{
 2118|  2.66k|    if (dscp & ~IP_DSCP_MASK) {
  ------------------
  |  |  724|  2.66k|#define IP_DSCP_MASK 0xfc
  ------------------
  |  Branch (2118:9): [True: 59, False: 2.60k]
  ------------------
 2119|     59|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 2120|  2.60k|    } else {
 2121|  2.60k|        ofpact_put_SET_IP_DSCP(out)->dscp = dscp;
 2122|  2.60k|        return 0;
 2123|  2.60k|    }
 2124|  2.66k|}
ofp-actions.c:decode_OFPAT_RAW11_SET_NW_ECN:
 2186|  1.84k|{
 2187|  1.84k|    if (ecn & ~IP_ECN_MASK) {
  ------------------
  |  |  722|  1.84k|#define IP_ECN_MASK 0x03
  ------------------
  |  Branch (2187:9): [True: 365, False: 1.48k]
  ------------------
 2188|    365|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 2189|  1.48k|    } else {
 2190|  1.48k|        ofpact_put_SET_IP_ECN(out)->ecn = ecn;
 2191|  1.48k|        return 0;
 2192|  1.48k|    }
 2193|  1.84k|}
ofp-actions.c:decode_OFPAT_RAW_SET_TP_SRC:
 2305|  3.01k|{
 2306|       |    ofpact_put_SET_L4_SRC_PORT(out)->port = ntohs(port);
 2307|  3.01k|    return 0;
 2308|  3.01k|}
ofp-actions.c:decode_OFPAT_RAW_SET_TP_DST:
 2314|  4.28k|{
 2315|       |    ofpact_put_SET_L4_DST_PORT(out)->port = ntohs(port);
 2316|  4.28k|    return 0;
 2317|  4.28k|}
ofp-actions.c:decode_OFPAT_RAW10_ENQUEUE:
 1094|    169|{
 1095|    169|    struct ofpact_enqueue *enqueue;
 1096|       |
 1097|    169|    enqueue = ofpact_put_ENQUEUE(out);
 1098|    169|    enqueue->port = u16_to_ofp(ntohs(oae->port));
 1099|    169|    enqueue->queue = ntohl(oae->queue_id);
 1100|    169|    if (ofp_to_u16(enqueue->port) >= ofp_to_u16(OFPP_MAX)
  ------------------
  |  |   33|    169|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|    169|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1100:9): [True: 98, False: 71]
  ------------------
 1101|    169|        && enqueue->port != OFPP_IN_PORT
  ------------------
  |  |   39|     98|#define OFPP_IN_PORT    OFP_PORT_C(0xfff8) /* Where the packet came in. */
  |  |  ------------------
  |  |  |  |  157|    267|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1101:12): [True: 24, False: 74]
  ------------------
 1102|     24|        && enqueue->port != OFPP_LOCAL) {
  ------------------
  |  |   46|     24|#define OFPP_LOCAL      OFP_PORT_C(0xfffe) /* Local openflow "port". */
  |  |  ------------------
  |  |  |  |  157|     24|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1102:12): [True: 11, False: 13]
  ------------------
 1103|     11|        return OFPERR_OFPBAC_BAD_OUT_PORT;
 1104|     11|    }
 1105|    158|    return 0;
 1106|    169|}
ofp-actions.c:decode_OFPAT_RAW_SET_MPLS_LABEL:
 3765|  2.25k|{
 3766|  2.25k|    ofpact_put_SET_MPLS_LABEL(out)->label = label;
 3767|  2.25k|    return 0;
 3768|  2.25k|}
ofp-actions.c:decode_OFPAT_RAW_SET_MPLS_TC:
 3838|    711|{
 3839|    711|    ofpact_put_SET_MPLS_TC(out)->tc = tc;
 3840|    711|    return 0;
 3841|    711|}
ofp-actions.c:decode_OFPAT_RAW_SET_MPLS_TTL:
 3899|  1.96k|{
 3900|  1.96k|    ofpact_put_SET_MPLS_TTL(out)->ttl = ttl;
 3901|  1.96k|    return 0;
 3902|  1.96k|}
ofp-actions.c:decode_OFPAT_RAW_DEC_MPLS_TTL:
 3955|  3.49k|{
 3956|  3.49k|    ofpact_put_DEC_MPLS_TTL(out);
 3957|  3.49k|    return 0;
 3958|  3.49k|}
ofp-actions.c:decode_OFPAT_RAW_PUSH_MPLS:
 3994|  2.84k|{
 3995|  2.84k|    struct ofpact_push_mpls *oam;
 3996|       |
 3997|  2.84k|    if (!eth_type_mpls(ethertype)) {
  ------------------
  |  Branch (3997:9): [True: 117, False: 2.72k]
  ------------------
 3998|    117|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 3999|    117|    }
 4000|  2.72k|    oam = ofpact_put_PUSH_MPLS(out);
 4001|  2.72k|    oam->ethertype = ethertype;
 4002|       |
 4003|  2.72k|    return 0;
 4004|  2.84k|}
ofp-actions.c:decode_OFPAT_RAW_POP_MPLS:
 4059|  3.67k|{
 4060|  3.67k|    ofpact_put_POP_MPLS(out)->ethertype = ethertype;
 4061|  3.67k|    return 0;
 4062|  3.67k|}
ofp-actions.c:decode_OFPAT_RAW_SET_QUEUE:
 4270|    274|{
 4271|    274|    ofpact_put_SET_QUEUE(out)->queue_id = queue_id;
 4272|    274|    return 0;
 4273|    274|}
ofp-actions.c:decode_OFPAT_RAW_GROUP:
  727|    706|{
  728|    706|    ofpact_put_GROUP(out)->group_id = group_id;
  729|    706|    return 0;
  730|    706|}
ofp-actions.c:decode_OFPAT_RAW11_SET_NW_TTL:
 2250|    439|{
 2251|    439|    ofpact_put_SET_IP_TTL(out)->ttl = ttl;
 2252|    439|    return 0;
 2253|    439|}
ofp-actions.c:decode_OFPAT_RAW_DEC_NW_TTL:
 3612|  1.47k|{
 3613|  1.47k|    uint16_t id = 0;
 3614|  1.47k|    struct ofpact_cnt_ids *ids;
 3615|  1.47k|    enum ofperr error = 0;
 3616|       |
 3617|  1.47k|    ids = ofpact_put_DEC_TTL(out);
 3618|  1.47k|    ids->n_controllers = 1;
 3619|  1.47k|    ofpbuf_put(out, &id, sizeof id);
 3620|  1.47k|    ids = out->header;
 3621|  1.47k|    ofpact_finish_DEC_TTL(out, &ids);
 3622|  1.47k|    return error;
 3623|  1.47k|}
ofp-actions.c:decode_NXAST_RAW_DEC_TTL_CNT_IDS:
 3629|    776|{
 3630|    776|    struct ofpact_cnt_ids *ids;
 3631|    776|    size_t ids_size;
 3632|    776|    int i;
 3633|       |
 3634|    776|    ids = ofpact_put_DEC_TTL(out);
 3635|    776|    ids->ofpact.raw = NXAST_RAW_DEC_TTL_CNT_IDS;
 3636|    776|    ids->n_controllers = ntohs(nac_ids->n_controllers);
 3637|    776|    ids_size = ntohs(nac_ids->len) - sizeof *nac_ids;
 3638|       |
 3639|    776|    if (!is_all_zeros(nac_ids->zeros, sizeof nac_ids->zeros)) {
  ------------------
  |  Branch (3639:9): [True: 104, False: 672]
  ------------------
 3640|    104|        return OFPERR_NXBRC_MUST_BE_ZERO;
 3641|    104|    }
 3642|       |
 3643|    672|    if (ids_size < ids->n_controllers * sizeof(ovs_be16)) {
  ------------------
  |  Branch (3643:9): [True: 42, False: 630]
  ------------------
 3644|     42|        VLOG_WARN_RL(&rl, "Nicira action dec_ttl_cnt_ids only has %"PRIuSIZE" "
  ------------------
  |  |  224|     42|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     42|    do {                                                                \
  |  |  |  |  288|     42|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     42|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 42]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     42|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 42]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3645|     42|                     "bytes allocated for controller ids.  %"PRIuSIZE" bytes "
 3646|     42|                     "are required for %u controllers.",
 3647|     42|                     ids_size, ids->n_controllers * sizeof(ovs_be16),
 3648|     42|                     ids->n_controllers);
 3649|     42|        return OFPERR_OFPBAC_BAD_LEN;
 3650|     42|    }
 3651|       |
 3652|  2.05k|    for (i = 0; i < ids->n_controllers; i++) {
  ------------------
  |  Branch (3652:17): [True: 1.42k, False: 630]
  ------------------
 3653|  1.42k|        uint16_t id = ntohs(((ovs_be16 *)(nac_ids + 1))[i]);
 3654|  1.42k|        ofpbuf_put(out, &id, sizeof id);
 3655|  1.42k|        ids = out->header;
 3656|  1.42k|    }
 3657|       |
 3658|    630|    ofpact_finish_DEC_TTL(out, &ids);
 3659|       |
 3660|    630|    return 0;
 3661|    672|}
ofp-actions.c:decode_OFPAT_RAW12_SET_FIELD:
 2850|  4.14k|{
 2851|       |    return decode_ofpat_set_field(oasf, false, vl_mff_map, tlv_bitmap,
 2852|  4.14k|                                  ofpacts);
 2853|  4.14k|}
ofp-actions.c:decode_ofpat_set_field:
 2789|  13.1k|{
 2790|  13.1k|    struct ofpbuf b = ofpbuf_const_initializer(oasf, ntohs(oasf->len));
 2791|  13.1k|    ofpbuf_pull(&b, OBJECT_OFFSETOF(oasf, pad));
  ------------------
  |  |  108|  13.1k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 2792|       |
 2793|  13.1k|    union mf_value value, mask;
 2794|  13.1k|    const struct mf_field *field;
 2795|  13.1k|    enum ofperr error;
 2796|  13.1k|    error  = mf_vl_mff_nx_pull_entry(&b, vl_mff_map, &field, &value,
 2797|  13.1k|                                     may_mask ? &mask : NULL, tlv_bitmap);
  ------------------
  |  Branch (2797:38): [True: 8.95k, False: 4.14k]
  ------------------
 2798|  13.1k|    if (error) {
  ------------------
  |  Branch (2798:9): [True: 1.16k, False: 11.9k]
  ------------------
 2799|  1.16k|        return (error == OFPERR_OFPBMC_BAD_MASK
  ------------------
  |  Branch (2799:17): [True: 399, False: 766]
  ------------------
 2800|  1.16k|                ? OFPERR_OFPBAC_BAD_SET_MASK
 2801|  1.16k|                : error);
 2802|  1.16k|    }
 2803|       |
 2804|  11.9k|    if (!may_mask) {
  ------------------
  |  Branch (2804:9): [True: 3.42k, False: 8.50k]
  ------------------
 2805|  3.42k|        memset(&mask, 0xff, field->n_bytes);
 2806|  3.42k|    }
 2807|       |
 2808|  11.9k|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (2808:9): [True: 332, False: 11.6k]
  ------------------
 2809|    332|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2810|    332|    }
 2811|       |
 2812|       |    /* OpenFlow says specifically that one may not set OXM_OF_IN_PORT via
 2813|       |     * Set-Field. */
 2814|  11.6k|    if (field->id == MFF_IN_PORT_OXM) {
  ------------------
  |  Branch (2814:9): [True: 40, False: 11.5k]
  ------------------
 2815|     40|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2816|     40|    }
 2817|       |
 2818|       |    /* oxm_length is now validated to be compatible with mf_value. */
 2819|  11.5k|    if (!field->writable) {
  ------------------
  |  Branch (2819:9): [True: 62, False: 11.5k]
  ------------------
 2820|     62|        VLOG_WARN_RL(&rl, "destination field %s is not writable",
  ------------------
  |  |  224|     62|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     62|    do {                                                                \
  |  |  |  |  288|     62|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     62|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 62]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     62|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 62]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2821|     62|                     field->name);
 2822|     62|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2823|     62|    }
 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|  11.5k|    if (!mf_is_value_valid(field, &value)
  ------------------
  |  Branch (2828:9): [True: 44, False: 11.4k]
  ------------------
 2829|  11.4k|        || (field->id == MFF_VLAN_VID
  ------------------
  |  Branch (2829:13): [True: 580, False: 10.8k]
  ------------------
 2830|    580|            && (!(mask.be16 & htons(OFPVID12_PRESENT))
  ------------------
  |  Branch (2830:17): [True: 71, False: 509]
  ------------------
 2831|    558|                || !(value.be16 & htons(OFPVID12_PRESENT))))) {
  ------------------
  |  Branch (2831:20): [True: 443, False: 66]
  ------------------
 2832|    558|        struct ds ds = DS_EMPTY_INITIALIZER;
  ------------------
  |  |   46|    558|#define DS_EMPTY_INITIALIZER { NULL, 0, 0 }
  ------------------
 2833|    558|        mf_format(field, &value, NULL, NULL, &ds);
 2834|    558|        VLOG_WARN_RL(&rl, "Invalid value for set field %s: %s",
  ------------------
  |  |  224|    558|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    558|    do {                                                                \
  |  |  |  |  288|    558|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    558|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 558]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    558|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 558]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2835|    558|                     field->name, ds_cstr(&ds));
 2836|    558|        ds_destroy(&ds);
 2837|       |
 2838|    558|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2839|    558|    }
 2840|       |
 2841|  10.9k|    ofpact_put_set_field(ofpacts, field, &value, &mask);
 2842|  10.9k|    return 0;
 2843|  11.5k|}
ofp-actions.c:decode_OFPAT_RAW15_SET_FIELD:
 2860|  8.95k|{
 2861|       |    return decode_ofpat_set_field(oasf, true, vl_mff_map, tlv_bitmap, ofpacts);
 2862|  8.95k|}
ofp-actions.c:decode_NXAST_RAW_REG_LOAD:
 2869|  2.45k|{
 2870|  2.45k|    struct mf_subfield dst;
 2871|  2.45k|    enum ofperr error;
 2872|       |
 2873|  2.45k|    dst.ofs = nxm_decode_ofs(narl->ofs_nbits);
 2874|  2.45k|    dst.n_bits = nxm_decode_n_bits(narl->ofs_nbits);
 2875|  2.45k|    error = mf_vl_mff_mf_from_nxm_header(ntohl(narl->dst), vl_mff_map,
 2876|  2.45k|                                         &dst.field, tlv_bitmap);
 2877|  2.45k|    if (error) {
  ------------------
  |  Branch (2877:9): [True: 128, False: 2.32k]
  ------------------
 2878|    128|        return error;
 2879|    128|    }
 2880|       |
 2881|  2.32k|    error = mf_check_dst(&dst, NULL);
 2882|  2.32k|    if (error) {
  ------------------
  |  Branch (2882:9): [True: 207, False: 2.11k]
  ------------------
 2883|    207|        return error;
 2884|    207|    }
 2885|       |
 2886|       |    /* Reject 'narl' if a bit numbered 'n_bits' or higher is set to 1 in
 2887|       |     * narl->value. */
 2888|  2.11k|    if (dst.n_bits < 64 && ntohll(narl->value) >> dst.n_bits) {
  ------------------
  |  Branch (2888:9): [True: 1.72k, False: 395]
  |  Branch (2888:28): [True: 158, False: 1.56k]
  ------------------
 2889|    158|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 2890|    158|    }
 2891|       |
 2892|  1.95k|    struct ofpact_set_field *sf = ofpact_put_reg_load(out, dst.field, NULL,
 2893|  1.95k|                                                      NULL);
 2894|  1.95k|    bitwise_put(ntohll(narl->value),
 2895|  1.95k|                sf->value, dst.field->n_bytes, dst.ofs,
 2896|  1.95k|                dst.n_bits);
 2897|  1.95k|    bitwise_put(UINT64_MAX,
 2898|  1.95k|                ofpact_set_field_mask(sf), dst.field->n_bytes, dst.ofs,
  ------------------
  |  |  563|  1.95k|    ALIGNED_CAST(union mf_value *,                                          \
  |  |  ------------------
  |  |  |  |  434|  1.95k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  ------------------
  |  |  564|  1.95k|                 (uint8_t *)(SF)->value +                                   \
  |  |  565|  1.95k|                            ROUND_UP((SF)->field->n_bytes, OFPACT_ALIGNTO))
  ------------------
 2899|  1.95k|                dst.n_bits);
 2900|  1.95k|    return 0;
 2901|  2.11k|}
ofp-actions.c:decode_NXAST_RAW_REG_LOAD2:
 2908|  2.41k|{
 2909|  2.41k|    struct ofpbuf b = ofpbuf_const_initializer(eah, ntohs(eah->len));
 2910|  2.41k|    ofpbuf_pull(&b, OBJECT_OFFSETOF(eah, pad));
  ------------------
  |  |  108|  2.41k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 2911|       |
 2912|  2.41k|    union mf_value value, mask;
 2913|  2.41k|    const struct mf_field *field;
 2914|  2.41k|    enum ofperr error;
 2915|  2.41k|    error = mf_vl_mff_nx_pull_entry(&b, vl_mff_map, &field, &value, &mask,
 2916|  2.41k|                                    tlv_bitmap);
 2917|  2.41k|    if (error) {
  ------------------
  |  Branch (2917:9): [True: 78, False: 2.33k]
  ------------------
 2918|     78|        return error;
 2919|     78|    }
 2920|       |
 2921|  2.33k|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (2921:9): [True: 59, False: 2.27k]
  ------------------
 2922|     59|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2923|     59|    }
 2924|       |
 2925|  2.27k|    if (!field->writable) {
  ------------------
  |  Branch (2925:9): [True: 617, False: 1.66k]
  ------------------
 2926|    617|        VLOG_WARN_RL(&rl, "destination field %s is not writable", field->name);
  ------------------
  |  |  224|    617|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    617|    do {                                                                \
  |  |  |  |  288|    617|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    617|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 617]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    617|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 617]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2927|    617|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2928|    617|    }
 2929|       |
 2930|       |    /* Put value and mask. */
 2931|  1.66k|    ofpact_put_reg_load2(out, field, &value, &mask);
 2932|  1.66k|    return 0;
 2933|  2.27k|}
ofp-actions.c:decode_OFPAT_RAW15_COPY_FIELD:
 2610|  1.84k|{
 2611|  1.84k|    return decode_copy_field__(oacf->src_offset, oacf->dst_offset,
 2612|  1.84k|                               oacf->n_bits, oacf, oacf->len,
 2613|       |                               OBJECT_OFFSETOF(oacf, pad2), vl_mff_map,
  ------------------
  |  |  108|  1.84k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 2614|  1.84k|                               tlv_bitmap, ofpacts);
 2615|  1.84k|}
ofp-actions.c:decode_copy_field__:
 2574|  1.87k|{
 2575|  1.87k|    struct ofpact_reg_move *move = ofpact_put_REG_MOVE(ofpacts);
 2576|  1.87k|    enum ofperr error;
 2577|       |
 2578|  1.87k|    move->ofpact.raw = ONFACT_RAW13_COPY_FIELD;
 2579|  1.87k|    move->src.ofs = ntohs(src_offset);
 2580|  1.87k|    move->src.n_bits = ntohs(n_bits);
 2581|  1.87k|    move->dst.ofs = ntohs(dst_offset);
 2582|  1.87k|    move->dst.n_bits = ntohs(n_bits);
 2583|       |
 2584|  1.87k|    struct ofpbuf b = ofpbuf_const_initializer(action, ntohs(action_len));
 2585|  1.87k|    ofpbuf_pull(&b, oxm_offset);
 2586|       |
 2587|  1.87k|    error = mf_vl_mff_nx_pull_header(&b, vl_mff_map, &move->src.field, NULL,
 2588|  1.87k|                                     tlv_bitmap);
 2589|  1.87k|    if (error) {
  ------------------
  |  Branch (2589:9): [True: 365, False: 1.50k]
  ------------------
 2590|    365|        return error;
 2591|    365|    }
 2592|  1.50k|    error = mf_vl_mff_nx_pull_header(&b, vl_mff_map, &move->dst.field, NULL,
 2593|  1.50k|                                     tlv_bitmap);
 2594|  1.50k|    if (error) {
  ------------------
  |  Branch (2594:9): [True: 174, False: 1.33k]
  ------------------
 2595|    174|        return error;
 2596|    174|    }
 2597|       |
 2598|  1.33k|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (2598:9): [True: 345, False: 990]
  ------------------
 2599|    345|        return OFPERR_NXBRC_MUST_BE_ZERO;
 2600|    345|    }
 2601|       |
 2602|    990|    return nxm_reg_move_check(move, NULL);
 2603|  1.33k|}
ofp-actions.c:decode_ONFACT_RAW13_COPY_FIELD:
 2622|     31|{
 2623|     31|    return decode_copy_field__(oacf->src_offset, oacf->dst_offset,
 2624|     31|                               oacf->n_bits, oacf, oacf->len,
 2625|       |                               OBJECT_OFFSETOF(oacf, pad3), vl_mff_map,
  ------------------
  |  |  108|     31|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 2626|     31|                               tlv_bitmap, ofpacts);
 2627|     31|}
ofp-actions.c:decode_NXAST_RAW_REG_MOVE:
 2634|  6.53k|{
 2635|  6.53k|    struct ofpact_reg_move *move = ofpact_put_REG_MOVE(ofpacts);
 2636|  6.53k|    enum ofperr error;
 2637|       |
 2638|  6.53k|    move->ofpact.raw = NXAST_RAW_REG_MOVE;
 2639|  6.53k|    move->src.ofs = ntohs(narm->src_ofs);
 2640|  6.53k|    move->src.n_bits = ntohs(narm->n_bits);
 2641|  6.53k|    move->dst.ofs = ntohs(narm->dst_ofs);
 2642|  6.53k|    move->dst.n_bits = ntohs(narm->n_bits);
 2643|       |
 2644|  6.53k|    struct ofpbuf b = ofpbuf_const_initializer(narm, ntohs(narm->len));
 2645|  6.53k|    ofpbuf_pull(&b, sizeof *narm);
 2646|       |
 2647|  6.53k|    error = mf_vl_mff_nx_pull_header(&b, vl_mff_map, &move->src.field, NULL,
 2648|  6.53k|                                     tlv_bitmap);
 2649|  6.53k|    if (error) {
  ------------------
  |  Branch (2649:9): [True: 605, False: 5.93k]
  ------------------
 2650|    605|        return error;
 2651|    605|    }
 2652|       |
 2653|  5.93k|    error = mf_vl_mff_nx_pull_header(&b, vl_mff_map, &move->dst.field, NULL,
 2654|  5.93k|                                     tlv_bitmap);
 2655|  5.93k|    if (error) {
  ------------------
  |  Branch (2655:9): [True: 282, False: 5.65k]
  ------------------
 2656|    282|        return error;
 2657|    282|    }
 2658|       |
 2659|  5.65k|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (2659:9): [True: 10, False: 5.64k]
  ------------------
 2660|     10|        return OFPERR_NXBRC_MUST_BE_ZERO;
 2661|     10|    }
 2662|       |
 2663|  5.64k|    return nxm_reg_move_check(move, NULL);
 2664|  5.65k|}
ofp-actions.c:decode_OFPAT_RAW15_METER:
 7565|    499|{
 7566|    499|    struct ofpact_meter *om = ofpact_put_METER(out);
 7567|    499|    om->meter_id = meter_id;
 7568|       |    om->provider_meter_id = UINT32_MAX; /* No provider meter ID. */
 7569|    499|    return 0;
 7570|    499|}
ofp-actions.c:decode_NXAST_RAW_RESUBMIT:
 4919|    768|{
 4920|    768|    struct ofpact_resubmit *resubmit;
 4921|       |
 4922|    768|    resubmit = ofpact_put_RESUBMIT(out);
 4923|    768|    resubmit->ofpact.raw = NXAST_RAW_RESUBMIT;
 4924|    768|    resubmit->in_port = u16_to_ofp(port);
 4925|    768|    resubmit->table_id = 0xff;
 4926|    768|    return 0;
 4927|    768|}
ofp-actions.c:decode_NXAST_RAW_RESUBMIT_TABLE:
 4933|  2.82k|{
 4934|  2.82k|    struct ofpact_resubmit *resubmit;
 4935|       |
 4936|  2.82k|    if (nar->pad[0] || nar->pad[1] || nar->pad[2]) {
  ------------------
  |  Branch (4936:9): [True: 222, False: 2.60k]
  |  Branch (4936:24): [True: 72, False: 2.52k]
  |  Branch (4936:39): [True: 759, False: 1.77k]
  ------------------
 4937|  1.05k|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 4938|  1.05k|    }
 4939|       |
 4940|  1.77k|    resubmit = ofpact_put_RESUBMIT(out);
 4941|  1.77k|    resubmit->ofpact.raw = NXAST_RAW_RESUBMIT_TABLE;
 4942|       |    resubmit->in_port = u16_to_ofp(ntohs(nar->in_port));
 4943|  1.77k|    resubmit->table_id = nar->table;
 4944|  1.77k|    return 0;
 4945|  2.82k|}
ofp-actions.c:decode_NXAST_RAW_RESUBMIT_TABLE_CT:
 4951|  2.44k|{
 4952|  2.44k|    enum ofperr error = decode_NXAST_RAW_RESUBMIT_TABLE(nar, ofp_version, out);
 4953|  2.44k|    if (error) {
  ------------------
  |  Branch (4953:9): [True: 749, False: 1.69k]
  ------------------
 4954|    749|        return error;
 4955|    749|    }
 4956|  1.69k|    struct ofpact_resubmit *resubmit = out->header;
 4957|  1.69k|    resubmit->ofpact.raw = NXAST_RAW_RESUBMIT_TABLE_CT;
 4958|       |    resubmit->with_ct_orig = true;
 4959|  1.69k|    return 0;
 4960|  2.44k|}
ofp-actions.c:decode_NXAST_RAW_SET_TUNNEL:
 4111|  1.03k|{
 4112|  1.03k|    struct ofpact_tunnel *tunnel = ofpact_put_SET_TUNNEL(out);
 4113|  1.03k|    tunnel->ofpact.raw = NXAST_RAW_SET_TUNNEL;
 4114|  1.03k|    tunnel->tun_id = tun_id;
 4115|  1.03k|    return 0;
 4116|  1.03k|}
ofp-actions.c:decode_NXAST_RAW_SET_TUNNEL64:
 4122|    173|{
 4123|    173|    struct ofpact_tunnel *tunnel = ofpact_put_SET_TUNNEL(out);
 4124|    173|    tunnel->ofpact.raw = NXAST_RAW_SET_TUNNEL64;
 4125|    173|    tunnel->tun_id = tun_id;
 4126|    173|    return 0;
 4127|    173|}
ofp-actions.c:decode_NXAST_RAW_POP_QUEUE:
 4307|  1.89k|{
 4308|  1.89k|    ofpact_put_POP_QUEUE(out);
 4309|  1.89k|    return 0;
 4310|  1.89k|}
ofp-actions.c:decode_NXAST_RAW_NOTE:
 5899|  10.4k|{
 5900|  10.4k|    struct ofpact_note *note;
 5901|  10.4k|    unsigned int length;
 5902|       |
 5903|  10.4k|    length = ntohs(nan->len) - offsetof(struct nx_action_note, note);
 5904|  10.4k|    note = ofpact_put_NOTE(out);
 5905|  10.4k|    note->length = length;
 5906|  10.4k|    ofpbuf_put(out, nan->note, length);
 5907|  10.4k|    note = out->header;
 5908|  10.4k|    ofpact_finish_NOTE(out, &note);
 5909|       |
 5910|  10.4k|    return 0;
 5911|  10.4k|}
ofp-actions.c:decode_NXAST_RAW_MULTIPATH:
 5804|  1.22k|{
 5805|  1.22k|    uint32_t n_links = ntohs(nam->max_link) + 1;
 5806|  1.22k|    size_t min_n_bits = log_2_ceil(n_links);
 5807|  1.22k|    struct ofpact_multipath *mp;
 5808|  1.22k|    enum ofperr error;
 5809|       |
 5810|  1.22k|    mp = ofpact_put_MULTIPATH(out);
 5811|  1.22k|    mp->fields = ntohs(nam->fields);
 5812|  1.22k|    mp->basis = ntohs(nam->basis);
 5813|  1.22k|    mp->algorithm = ntohs(nam->algorithm);
 5814|  1.22k|    mp->max_link = ntohs(nam->max_link);
 5815|  1.22k|    mp->arg = ntohl(nam->arg);
 5816|  1.22k|    mp->dst.ofs = nxm_decode_ofs(nam->ofs_nbits);
 5817|  1.22k|    mp->dst.n_bits = nxm_decode_n_bits(nam->ofs_nbits);
 5818|  1.22k|    error = mf_vl_mff_mf_from_nxm_header(ntohl(nam->dst), vl_mff_map,
 5819|  1.22k|                                         &mp->dst.field, tlv_bitmap);
 5820|  1.22k|    if (error) {
  ------------------
  |  Branch (5820:9): [True: 58, False: 1.17k]
  ------------------
 5821|     58|        return error;
 5822|     58|    }
 5823|       |
 5824|  1.17k|    if (!flow_hash_fields_valid(mp->fields)) {
  ------------------
  |  Branch (5824:9): [True: 43, False: 1.12k]
  ------------------
 5825|     43|        VLOG_WARN_RL(&rl, "unsupported fields %d", (int) mp->fields);
  ------------------
  |  |  224|     43|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     43|    do {                                                                \
  |  |  |  |  288|     43|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     43|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 43]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     43|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 43]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5826|     43|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5827|  1.12k|    } else if (mp->algorithm != NX_MP_ALG_MODULO_N
  ------------------
  |  Branch (5827:16): [True: 1.03k, False: 91]
  ------------------
 5828|  1.03k|               && mp->algorithm != NX_MP_ALG_HASH_THRESHOLD
  ------------------
  |  Branch (5828:19): [True: 1.02k, False: 11]
  ------------------
 5829|  1.02k|               && mp->algorithm != NX_MP_ALG_HRW
  ------------------
  |  Branch (5829:19): [True: 936, False: 89]
  ------------------
 5830|    936|               && mp->algorithm != NX_MP_ALG_ITER_HASH) {
  ------------------
  |  Branch (5830:19): [True: 171, False: 765]
  ------------------
 5831|    171|        VLOG_WARN_RL(&rl, "unsupported algorithm %d", (int) mp->algorithm);
  ------------------
  |  |  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]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5832|    171|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5833|    956|    } else if (mp->dst.n_bits < min_n_bits) {
  ------------------
  |  Branch (5833:16): [True: 36, False: 920]
  ------------------
 5834|     36|        VLOG_WARN_RL(&rl, "multipath action requires at least %"PRIuSIZE" bits for "
  ------------------
  |  |  224|     36|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     36|    do {                                                                \
  |  |  |  |  288|     36|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     36|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 36]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     36|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 36]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5835|     36|                     "%"PRIu32" links", min_n_bits, n_links);
 5836|     36|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5837|     36|    }
 5838|       |
 5839|    920|    return multipath_check(mp, NULL);
 5840|  1.17k|}
ofp-actions.c:decode_NXAST_RAW_BUNDLE:
 1486|    795|{
 1487|    795|    return decode_bundle(false, nab, NULL, NULL, out);
 1488|    795|}
ofp-actions.c:decode_bundle:
 1403|  3.26k|{
 1404|  3.26k|    static struct vlog_rate_limit rll = VLOG_RATE_LIMIT_INIT(1, 5);
  ------------------
  |  |  110|  3.26k|        {                                                                 \
  |  |  111|  3.26k|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|  13.0k|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [True: 0, Folded]
  |  |  |  |  |  Branch (37:48): [Folded, False: 3.26k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  3.26k|            0,                              /* first_dropped */           \
  |  |  113|  3.26k|            0,                              /* last_dropped */            \
  |  |  114|  3.26k|            0,                              /* n_dropped */               \
  |  |  115|  3.26k|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  3.26k|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  3.26k|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  3.26k|        }
  ------------------
 1405|  3.26k|    struct ofpact_bundle *bundle;
 1406|  3.26k|    uint32_t member_type;
 1407|  3.26k|    size_t members_size, i;
 1408|  3.26k|    enum ofperr error;
 1409|       |
 1410|  3.26k|    bundle = ofpact_put_BUNDLE(ofpacts);
 1411|       |
 1412|  3.26k|    bundle->n_members = ntohs(nab->n_members);
 1413|  3.26k|    bundle->basis = ntohs(nab->basis);
 1414|  3.26k|    bundle->fields = ntohs(nab->fields);
 1415|  3.26k|    bundle->algorithm = ntohs(nab->algorithm);
 1416|  3.26k|    member_type = ntohl(nab->member_type);
 1417|  3.26k|    members_size = ntohs(nab->len) - sizeof *nab;
 1418|       |
 1419|  3.26k|    error = OFPERR_OFPBAC_BAD_ARGUMENT;
 1420|  3.26k|    if (!flow_hash_fields_valid(bundle->fields)) {
  ------------------
  |  Branch (1420:9): [True: 2.21k, False: 1.05k]
  ------------------
 1421|  2.21k|        VLOG_WARN_RL(&rll, "unsupported fields %d", (int) bundle->fields);
  ------------------
  |  |  224|  2.21k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  2.21k|    do {                                                                \
  |  |  |  |  288|  2.21k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  2.21k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 2.21k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  2.21k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 2.21k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1422|  2.21k|    } else if (bundle->n_members > BUNDLE_MAX_MEMBERS) {
  ------------------
  |  |   43|  1.05k|#define BUNDLE_MAX_MEMBERS 2048
  ------------------
  |  Branch (1422:16): [True: 75, False: 980]
  ------------------
 1423|     75|        VLOG_WARN_RL(&rll, "too many members");
  ------------------
  |  |  224|     75|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     75|    do {                                                                \
  |  |  |  |  288|     75|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     75|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 75]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     75|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 75]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1424|    980|    } else if (bundle->algorithm != NX_BD_ALG_HRW
  ------------------
  |  Branch (1424:16): [True: 596, False: 384]
  ------------------
 1425|    596|               && bundle->algorithm != NX_BD_ALG_ACTIVE_BACKUP) {
  ------------------
  |  Branch (1425:19): [True: 154, False: 442]
  ------------------
 1426|    154|        VLOG_WARN_RL(&rll, "unsupported algorithm %d", (int) bundle->algorithm);
  ------------------
  |  |  224|    154|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    154|    do {                                                                \
  |  |  |  |  288|    154|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    154|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 154]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    154|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 154]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1427|    826|    } else if (member_type != mf_nxm_header(MFF_IN_PORT)) {
  ------------------
  |  Branch (1427:16): [True: 281, False: 545]
  ------------------
 1428|    281|        VLOG_WARN_RL(&rll, "unsupported member type %"PRIu32, member_type);
  ------------------
  |  |  224|    281|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    281|    do {                                                                \
  |  |  |  |  288|    281|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    281|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 281]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    281|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 281]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1429|    545|    } else {
 1430|    545|        error = 0;
 1431|    545|    }
 1432|       |
 1433|  3.26k|    if (!is_all_zeros(nab->zero, sizeof nab->zero)) {
  ------------------
  |  Branch (1433:9): [True: 1.91k, False: 1.35k]
  ------------------
 1434|  1.91k|        VLOG_WARN_RL(&rll, "reserved field is nonzero");
  ------------------
  |  |  224|  1.91k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.91k|    do {                                                                \
  |  |  |  |  288|  1.91k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.91k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.91k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.91k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.91k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1435|  1.91k|        error = OFPERR_OFPBAC_BAD_ARGUMENT;
 1436|  1.91k|    }
 1437|       |
 1438|  3.26k|    if (load) {
  ------------------
  |  Branch (1438:9): [True: 2.47k, False: 795]
  ------------------
 1439|  2.47k|        bundle->dst.ofs = nxm_decode_ofs(nab->ofs_nbits);
 1440|  2.47k|        bundle->dst.n_bits = nxm_decode_n_bits(nab->ofs_nbits);
 1441|  2.47k|        error = mf_vl_mff_mf_from_nxm_header(ntohl(nab->dst), vl_mff_map,
 1442|  2.47k|                                             &bundle->dst.field, tlv_bitmap);
 1443|  2.47k|        if (error) {
  ------------------
  |  Branch (1443:13): [True: 374, False: 2.09k]
  ------------------
 1444|    374|            return error;
 1445|    374|        }
 1446|       |
 1447|  2.09k|        if (bundle->dst.n_bits < 16) {
  ------------------
  |  Branch (1447:13): [True: 680, False: 1.41k]
  ------------------
 1448|    680|            VLOG_WARN_RL(&rll, "bundle_load action requires at least 16 bit "
  ------------------
  |  |  224|    680|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    680|    do {                                                                \
  |  |  |  |  288|    680|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    680|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 680]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    680|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 680]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1449|    680|                         "destination.");
 1450|    680|            error = OFPERR_OFPBAC_BAD_ARGUMENT;
 1451|    680|        }
 1452|  2.09k|    } else {
 1453|    795|        if (nab->ofs_nbits || nab->dst) {
  ------------------
  |  Branch (1453:13): [True: 120, False: 675]
  |  Branch (1453:31): [True: 61, False: 614]
  ------------------
 1454|    181|            VLOG_WARN_RL(&rll, "bundle action has nonzero reserved fields");
  ------------------
  |  |  224|    181|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    181|    do {                                                                \
  |  |  |  |  288|    181|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    181|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 181]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    181|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 181]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1455|    181|            error = OFPERR_OFPBAC_BAD_ARGUMENT;
 1456|    181|        }
 1457|    795|    }
 1458|       |
 1459|  2.89k|    if (members_size < bundle->n_members * sizeof(ovs_be16)) {
  ------------------
  |  Branch (1459:9): [True: 158, False: 2.73k]
  ------------------
 1460|    158|        VLOG_WARN_RL(&rll, "Nicira action %s only has %"PRIuSIZE" bytes "
  ------------------
  |  |  224|    158|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    158|    do {                                                                \
  |  |  |  |  288|    158|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    158|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 158]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (290:56): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    158|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 158]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1461|    158|                     "allocated for members.  %"PRIuSIZE" bytes are "
 1462|    158|                     "required for %u members.",
 1463|    158|                     load ? "bundle_load" : "bundle", members_size,
 1464|    158|                     bundle->n_members * sizeof(ovs_be16), bundle->n_members);
 1465|    158|        error = OFPERR_OFPBAC_BAD_LEN;
 1466|  2.73k|    } else {
 1467|  11.9k|        for (i = 0; i < bundle->n_members; i++) {
  ------------------
  |  Branch (1467:21): [True: 9.21k, False: 2.73k]
  ------------------
 1468|  9.21k|            ofp_port_t ofp_port
 1469|  9.21k|                = u16_to_ofp(ntohs(((ovs_be16 *)(nab + 1))[i]));
 1470|  9.21k|            ofpbuf_put(ofpacts, &ofp_port, sizeof ofp_port);
 1471|  9.21k|            bundle = ofpacts->header;
 1472|  9.21k|        }
 1473|  2.73k|    }
 1474|       |
 1475|  2.89k|    ofpact_finish_BUNDLE(ofpacts, &bundle);
 1476|  2.89k|    if (!error) {
  ------------------
  |  Branch (1476:9): [True: 1.93k, False: 962]
  ------------------
 1477|  1.93k|        error = bundle_check(bundle, OFPP_MAX, NULL);
  ------------------
  |  |   33|  1.93k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|  1.93k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
 1478|  1.93k|    }
 1479|  2.89k|    return error;
 1480|  3.26k|}
ofp-actions.c:decode_NXAST_RAW_BUNDLE_LOAD:
 1495|  2.47k|{
 1496|       |    return decode_bundle(true, nab, vl_mff_map, tlv_bitmap, out);
 1497|  2.47k|}
ofp-actions.c:decode_NXAST_RAW_OUTPUT_REG:
 1226|    344|{
 1227|    344|    struct ofpact_output_reg *output_reg;
 1228|    344|    enum ofperr error;
 1229|       |
 1230|    344|    if (!is_all_zeros(naor->zero, sizeof naor->zero)) {
  ------------------
  |  Branch (1230:9): [True: 147, False: 197]
  ------------------
 1231|    147|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 1232|    147|    }
 1233|       |
 1234|    197|    output_reg = ofpact_put_OUTPUT_REG(out);
 1235|    197|    output_reg->ofpact.raw = NXAST_RAW_OUTPUT_REG;
 1236|    197|    output_reg->src.ofs = nxm_decode_ofs(naor->ofs_nbits);
 1237|    197|    output_reg->src.n_bits = nxm_decode_n_bits(naor->ofs_nbits);
 1238|    197|    output_reg->max_len = ntohs(naor->max_len);
 1239|    197|    error = mf_vl_mff_mf_from_nxm_header(ntohl(naor->src), vl_mff_map,
 1240|    197|                                         &output_reg->src.field, tlv_bitmap);
 1241|    197|    if (error) {
  ------------------
  |  Branch (1241:9): [True: 61, False: 136]
  ------------------
 1242|     61|        return error;
 1243|     61|    }
 1244|       |
 1245|    136|    return mf_check_src(&output_reg->src, NULL);
 1246|    197|}
ofp-actions.c:decode_NXAST_RAW_OUTPUT_REG2:
 1253|    169|{
 1254|    169|    struct ofpact_output_reg *output_reg;
 1255|    169|    enum ofperr error;
 1256|       |
 1257|    169|    output_reg = ofpact_put_OUTPUT_REG(out);
 1258|    169|    output_reg->ofpact.raw = NXAST_RAW_OUTPUT_REG2;
 1259|    169|    output_reg->src.ofs = nxm_decode_ofs(naor->ofs_nbits);
 1260|    169|    output_reg->src.n_bits = nxm_decode_n_bits(naor->ofs_nbits);
 1261|    169|    output_reg->max_len = ntohs(naor->max_len);
 1262|       |
 1263|    169|    struct ofpbuf b = ofpbuf_const_initializer(naor, ntohs(naor->len));
 1264|    169|    ofpbuf_pull(&b, OBJECT_OFFSETOF(naor, pad));
  ------------------
  |  |  108|    169|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 1265|       |
 1266|    169|    error = mf_vl_mff_nx_pull_header(&b, vl_mff_map, &output_reg->src.field,
 1267|    169|                                     NULL, tlv_bitmap);
 1268|    169|    if (error) {
  ------------------
  |  Branch (1268:9): [True: 65, False: 104]
  ------------------
 1269|     65|        return error;
 1270|     65|    }
 1271|       |
 1272|    104|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (1272:9): [True: 83, False: 21]
  ------------------
 1273|     83|        return OFPERR_NXBRC_MUST_BE_ZERO;
 1274|     83|    }
 1275|       |
 1276|     21|    return mf_check_src(&output_reg->src, NULL);
 1277|    104|}
ofp-actions.c:decode_NXAST_RAW_LEARN:
 5476|  13.7k|{
 5477|  13.7k|    struct ofpact_learn *learn;
 5478|  13.7k|    enum ofperr error;
 5479|       |
 5480|  13.7k|    learn = ofpact_put_LEARN(ofpacts);
 5481|       |
 5482|  13.7k|    error = decode_LEARN_common(nal, NXAST_RAW_LEARN, learn);
 5483|  13.7k|    if (error) {
  ------------------
  |  Branch (5483:9): [True: 800, False: 12.9k]
  ------------------
 5484|    800|        return error;
 5485|    800|    }
 5486|       |
 5487|  12.9k|    if (learn->flags & ~(NX_LEARN_F_SEND_FLOW_REM |
  ------------------
  |  Branch (5487:9): [True: 93, False: 12.8k]
  ------------------
 5488|  12.9k|                         NX_LEARN_F_DELETE_LEARNED)) {
 5489|     93|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5490|     93|    }
 5491|       |
 5492|  12.8k|    return decode_LEARN_specs(nal + 1, (char *) nal + ntohs(nal->len),
 5493|  12.8k|                              vl_mff_map, tlv_bitmap, ofpacts);
 5494|  12.9k|}
ofp-actions.c:decode_LEARN_common:
 5365|  14.8k|{
 5366|  14.8k|    if (nal->pad) {
  ------------------
  |  Branch (5366:9): [True: 1.29k, False: 13.5k]
  ------------------
 5367|  1.29k|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5368|  1.29k|    }
 5369|       |
 5370|  13.5k|    learn->ofpact.raw = raw;
 5371|  13.5k|    learn->idle_timeout = ntohs(nal->idle_timeout);
 5372|  13.5k|    learn->hard_timeout = ntohs(nal->hard_timeout);
 5373|  13.5k|    learn->priority = ntohs(nal->priority);
 5374|  13.5k|    learn->cookie = nal->cookie;
 5375|  13.5k|    learn->table_id = nal->table_id;
 5376|  13.5k|    learn->fin_idle_timeout = ntohs(nal->fin_idle_timeout);
 5377|  13.5k|    learn->fin_hard_timeout = ntohs(nal->fin_hard_timeout);
 5378|  13.5k|    learn->flags = ntohs(nal->flags);
 5379|       |
 5380|  13.5k|    if (learn->table_id == 0xff) {
  ------------------
  |  Branch (5380:9): [True: 142, False: 13.3k]
  ------------------
 5381|    142|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5382|    142|    }
 5383|       |
 5384|  13.3k|    return 0;
 5385|  13.5k|}
ofp-actions.c:decode_LEARN_specs:
 5391|  13.0k|{
 5392|  13.0k|    struct ofpact_learn *learn = ofpacts->header;
 5393|       |
 5394|  37.0k|    while (p != end) {
  ------------------
  |  Branch (5394:12): [True: 32.6k, False: 4.34k]
  ------------------
 5395|  32.6k|        struct ofpact_learn_spec *spec;
 5396|  32.6k|        uint16_t header = ntohs(get_be16(&p));
 5397|       |
 5398|  32.6k|        if (!header) {
  ------------------
  |  Branch (5398:13): [True: 7.02k, False: 25.6k]
  ------------------
 5399|  7.02k|            break;
 5400|  7.02k|        }
 5401|       |
 5402|  25.6k|        spec = ofpbuf_put_zeros(ofpacts, sizeof *spec);
 5403|  25.6k|        learn = ofpacts->header;
 5404|       |
 5405|  25.6k|        spec->src_type = header & NX_LEARN_SRC_MASK;
  ------------------
  |  |  823|  25.6k|#define NX_LEARN_SRC_MASK      (1 << 13)
  ------------------
 5406|  25.6k|        spec->dst_type = header & NX_LEARN_DST_MASK;
  ------------------
  |  |  829|  25.6k|#define NX_LEARN_DST_MASK      (3 << 11)
  ------------------
 5407|  25.6k|        spec->n_bits = header & NX_LEARN_N_BITS_MASK;
  ------------------
  |  |  819|  25.6k|#define NX_LEARN_N_BITS_MASK    0x3ff
  ------------------
 5408|       |
 5409|       |        /* Check for valid src and dst type combination. */
 5410|  25.6k|        if (spec->dst_type == NX_LEARN_DST_MATCH ||
  ------------------
  |  |  825|  51.3k|#define NX_LEARN_DST_MATCH     (0 << 11) /* Add match criterion. */
  ------------------
  |  Branch (5410:13): [True: 20.5k, False: 5.15k]
  ------------------
 5411|  5.15k|            spec->dst_type == NX_LEARN_DST_LOAD ||
  ------------------
  |  |  826|  30.8k|#define NX_LEARN_DST_LOAD      (1 << 11) /* Add NXAST_REG_LOAD action. */
  ------------------
  |  Branch (5411:13): [True: 1.12k, False: 4.03k]
  ------------------
 5412|  4.03k|            (spec->dst_type == NX_LEARN_DST_OUTPUT &&
  ------------------
  |  |  827|  8.06k|#define NX_LEARN_DST_OUTPUT    (2 << 11) /* Add OFPAT_OUTPUT action. */
  ------------------
  |  Branch (5412:14): [True: 3.80k, False: 224]
  ------------------
 5413|  25.4k|             spec->src_type == NX_LEARN_SRC_FIELD)) {
  ------------------
  |  |  821|  3.80k|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
  |  Branch (5413:14): [True: 3.77k, False: 38]
  ------------------
 5414|       |            /* OK. */
 5415|  25.4k|        } else {
 5416|    262|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 5417|    262|        }
 5418|       |
 5419|       |        /* Check that the arguments don't overrun the end of the action. */
 5420|  25.4k|        if ((char *) end - (char *) p < learn_min_len(header)) {
  ------------------
  |  Branch (5420:13): [True: 324, False: 25.0k]
  ------------------
 5421|    324|            return OFPERR_OFPBAC_BAD_LEN;
 5422|    324|        }
 5423|       |
 5424|       |        /* Get the source. */
 5425|  25.0k|        const uint8_t *imm = NULL;
 5426|  25.0k|        unsigned int imm_bytes = 0;
 5427|  25.0k|        enum ofperr error;
 5428|  25.0k|        if (spec->src_type == NX_LEARN_SRC_FIELD) {
  ------------------
  |  |  821|  25.0k|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
  |  Branch (5428:13): [True: 4.14k, False: 20.9k]
  ------------------
 5429|  4.14k|            error = get_subfield(spec->n_bits, &p, &spec->src, vl_mff_map,
 5430|  4.14k|                                 tlv_bitmap);
 5431|  4.14k|            if (error) {
  ------------------
  |  Branch (5431:17): [True: 405, False: 3.73k]
  ------------------
 5432|    405|                return error;
 5433|    405|            }
 5434|  20.9k|        } else {
 5435|  20.9k|            int p_bytes = 2 * DIV_ROUND_UP(spec->n_bits, 16);
  ------------------
  |  |  300|  20.9k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  ------------------
 5436|  20.9k|            p = (const uint8_t *) p + p_bytes;
 5437|       |
 5438|  20.9k|            imm_bytes = DIV_ROUND_UP(spec->n_bits, 8);
  ------------------
  |  |  300|  20.9k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  ------------------
 5439|  20.9k|            imm = (const uint8_t *) p - imm_bytes;
 5440|  20.9k|        }
 5441|       |
 5442|       |        /* Get the destination. */
 5443|  24.6k|        if (spec->dst_type == NX_LEARN_DST_MATCH ||
  ------------------
  |  |  825|  49.3k|#define NX_LEARN_DST_MATCH     (0 << 11) /* Add match criterion. */
  ------------------
  |  Branch (5443:13): [True: 20.1k, False: 4.53k]
  ------------------
 5444|  21.1k|            spec->dst_type == NX_LEARN_DST_LOAD) {
  ------------------
  |  |  826|  4.53k|#define NX_LEARN_DST_LOAD      (1 << 11) /* Add NXAST_REG_LOAD action. */
  ------------------
  |  Branch (5444:13): [True: 961, False: 3.57k]
  ------------------
 5445|  21.1k|            error = get_subfield(spec->n_bits, &p, &spec->dst, vl_mff_map,
 5446|  21.1k|                                 tlv_bitmap);
 5447|  21.1k|            if (error) {
  ------------------
  |  Branch (5447:17): [True: 702, False: 20.4k]
  ------------------
 5448|    702|                return error;
 5449|    702|            }
 5450|  21.1k|        }
 5451|       |
 5452|  23.9k|        if (imm) {
  ------------------
  |  Branch (5452:13): [True: 20.2k, False: 3.73k]
  ------------------
 5453|  20.2k|            uint8_t *src_imm = ofpbuf_put_zeros(ofpacts,
 5454|  20.2k|                                                OFPACT_ALIGN(imm_bytes));
  ------------------
  |  |  205|  20.2k|#define OFPACT_ALIGN(SIZE) ROUND_UP(SIZE, OFPACT_ALIGNTO)
  |  |  ------------------
  |  |  |  |  303|  20.2k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|  20.2k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5455|  20.2k|            memcpy(src_imm, imm, imm_bytes);
 5456|       |
 5457|  20.2k|            learn = ofpacts->header;
 5458|  20.2k|        }
 5459|  23.9k|    }
 5460|  11.3k|    ofpact_finish_LEARN(ofpacts, &learn);
 5461|       |
 5462|  11.3k|    if (!is_all_zeros(p, (char *) end - (char *) p)) {
  ------------------
  |  Branch (5462:9): [True: 55, False: 11.3k]
  ------------------
 5463|     55|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5464|     55|    }
 5465|       |
 5466|  11.3k|    return 0;
 5467|  11.3k|}
ofp-actions.c:get_be16:
 5309|  57.9k|{
 5310|  57.9k|    const ovs_be16 *p = *pp;
 5311|  57.9k|    ovs_be16 value = *p;
 5312|  57.9k|    *pp = p + 1;
 5313|  57.9k|    return value;
 5314|  57.9k|}
ofp-actions.c:learn_min_len:
 5340|  25.4k|{
 5341|  25.4k|    int n_bits = header & NX_LEARN_N_BITS_MASK;
  ------------------
  |  |  819|  25.4k|#define NX_LEARN_N_BITS_MASK    0x3ff
  ------------------
 5342|  25.4k|    int src_type = header & NX_LEARN_SRC_MASK;
  ------------------
  |  |  823|  25.4k|#define NX_LEARN_SRC_MASK      (1 << 13)
  ------------------
 5343|  25.4k|    int dst_type = header & NX_LEARN_DST_MASK;
  ------------------
  |  |  829|  25.4k|#define NX_LEARN_DST_MASK      (3 << 11)
  ------------------
 5344|  25.4k|    unsigned int min_len;
 5345|       |
 5346|  25.4k|    min_len = 0;
 5347|  25.4k|    if (src_type == NX_LEARN_SRC_FIELD) {
  ------------------
  |  |  821|  25.4k|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
  |  Branch (5347:9): [True: 4.27k, False: 21.1k]
  ------------------
 5348|  4.27k|        min_len += sizeof(ovs_be32); /* src_field */
 5349|  4.27k|        min_len += sizeof(ovs_be16); /* src_ofs */
 5350|  21.1k|    } else {
 5351|  21.1k|        min_len += 2 * DIV_ROUND_UP(n_bits, 16);
  ------------------
  |  |  300|  21.1k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  ------------------
 5352|  21.1k|    }
 5353|  25.4k|    if (dst_type == NX_LEARN_DST_MATCH ||
  ------------------
  |  |  825|  50.8k|#define NX_LEARN_DST_MATCH     (0 << 11) /* Add match criterion. */
  ------------------
  |  Branch (5353:9): [True: 20.5k, False: 4.89k]
  ------------------
 5354|  21.6k|        dst_type == NX_LEARN_DST_LOAD) {
  ------------------
  |  |  826|  4.89k|#define NX_LEARN_DST_LOAD      (1 << 11) /* Add NXAST_REG_LOAD action. */
  ------------------
  |  Branch (5354:9): [True: 1.12k, False: 3.77k]
  ------------------
 5355|  21.6k|        min_len += sizeof(ovs_be32); /* dst_field */
 5356|  21.6k|        min_len += sizeof(ovs_be16); /* dst_ofs */
 5357|  21.6k|    }
 5358|  25.4k|    return min_len;
 5359|  25.4k|}
ofp-actions.c:get_subfield:
 5328|  25.2k|{
 5329|  25.2k|    enum ofperr error;
 5330|       |
 5331|  25.2k|    error = mf_vl_mff_mf_from_nxm_header(ntohl(get_be32(p)), vl_mff_map,
 5332|  25.2k|                                         &sf->field, tlv_bitmap);
 5333|       |    sf->ofs = ntohs(get_be16(p));
 5334|  25.2k|    sf->n_bits = n_bits;
 5335|  25.2k|    return error;
 5336|  25.2k|}
ofp-actions.c:get_be32:
 5318|  25.2k|{
 5319|  25.2k|    const ovs_be32 *p = *pp;
 5320|  25.2k|    ovs_be32 value = get_unaligned_be32(p);
 5321|  25.2k|    *pp = p + 1;
 5322|  25.2k|    return value;
 5323|  25.2k|}
ofp-actions.c:decode_NXAST_RAW_LEARN2:
 5503|  1.40k|{
 5504|  1.40k|    struct ofpbuf b = ofpbuf_const_initializer(nal, ntohs(nal->up.len));
 5505|  1.40k|    struct ofpact_learn *learn;
 5506|  1.40k|    enum ofperr error;
 5507|       |
 5508|  1.40k|    if (nal->pad2) {
  ------------------
  |  Branch (5508:9): [True: 319, False: 1.08k]
  ------------------
 5509|    319|        return OFPERR_NXBAC_MUST_BE_ZERO;
 5510|    319|    }
 5511|       |
 5512|  1.08k|    learn = ofpact_put_LEARN(ofpacts);
 5513|  1.08k|    error = decode_LEARN_common(&nal->up, NXAST_RAW_LEARN2, learn);
 5514|  1.08k|    if (error) {
  ------------------
  |  Branch (5514:9): [True: 640, False: 446]
  ------------------
 5515|    640|        return error;
 5516|    640|    }
 5517|       |
 5518|    446|    learn->limit = ntohl(nal->limit);
 5519|       |
 5520|    446|    if (learn->flags & ~(NX_LEARN_F_SEND_FLOW_REM |
  ------------------
  |  Branch (5520:9): [True: 29, False: 417]
  ------------------
 5521|    446|                         NX_LEARN_F_DELETE_LEARNED |
 5522|    446|                         NX_LEARN_F_WRITE_RESULT)) {
 5523|     29|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5524|     29|    }
 5525|       |
 5526|    417|    ofpbuf_pull(&b, sizeof *nal);
 5527|       |
 5528|    417|    if (learn->flags & NX_LEARN_F_WRITE_RESULT) {
  ------------------
  |  Branch (5528:9): [True: 313, False: 104]
  ------------------
 5529|    313|        error = nx_pull_header(&b, vl_mff_map, &learn->result_dst.field, NULL);
 5530|    313|        if (error) {
  ------------------
  |  Branch (5530:13): [True: 70, False: 243]
  ------------------
 5531|     70|            return error;
 5532|     70|        }
 5533|    243|        if (!learn->result_dst.field->writable) {
  ------------------
  |  Branch (5533:13): [True: 101, False: 142]
  ------------------
 5534|    101|            return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 5535|    101|        }
 5536|    142|        learn->result_dst.ofs = ntohs(nal->result_dst_ofs);
 5537|    142|        learn->result_dst.n_bits = 1;
 5538|    142|    } else if (nal->result_dst_ofs) {
  ------------------
  |  Branch (5538:16): [True: 11, False: 93]
  ------------------
 5539|     11|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5540|     11|    }
 5541|       |
 5542|    235|    return decode_LEARN_specs(b.data, (char *) nal + ntohs(nal->up.len),
 5543|    235|                              vl_mff_map, tlv_bitmap, ofpacts);
 5544|    417|}
ofp-actions.c:decode_NXAST_RAW_EXIT:
 5967|  1.82k|{
 5968|  1.82k|    ofpact_put_EXIT(out);
 5969|  1.82k|    return 0;
 5970|  1.82k|}
ofp-actions.c:decode_NXAST_RAW_FIN_TIMEOUT:
 4379|    440|{
 4380|    440|    struct ofpact_fin_timeout *oft;
 4381|       |
 4382|    440|    oft = ofpact_put_FIN_TIMEOUT(out);
 4383|    440|    oft->fin_idle_timeout = ntohs(naft->fin_idle_timeout);
 4384|       |    oft->fin_hard_timeout = ntohs(naft->fin_hard_timeout);
 4385|    440|    return 0;
 4386|    440|}
ofp-actions.c:decode_NXAST_RAW_CONTROLLER:
  804|  1.92k|{
  805|  1.92k|    struct ofpact_controller *oc;
  806|       |
  807|  1.92k|    oc = ofpact_put_CONTROLLER(out);
  808|  1.92k|    oc->ofpact.raw = NXAST_RAW_CONTROLLER;
  809|  1.92k|    oc->max_len = ntohs(nac->max_len);
  810|  1.92k|    oc->controller_id = ntohs(nac->controller_id);
  811|  1.92k|    oc->reason = nac->reason;
  812|  1.92k|    oc->meter_id = NX_CTLR_NO_METER;
  ------------------
  |  |  307|  1.92k|#define NX_CTLR_NO_METER 0
  ------------------
  813|  1.92k|    ofpact_finish_CONTROLLER(out, &oc);
  814|       |
  815|  1.92k|    return 0;
  816|  1.92k|}
ofp-actions.c:decode_NXAST_RAW_CONTROLLER2:
  822|  2.17k|{
  823|  2.17k|    if (!is_all_zeros(eah->pad, sizeof eah->pad)) {
  ------------------
  |  Branch (823:9): [True: 50, False: 2.12k]
  ------------------
  824|     50|        return OFPERR_NXBRC_MUST_BE_ZERO;
  825|     50|    }
  826|       |
  827|  2.12k|    size_t start_ofs = out->size;
  828|  2.12k|    struct ofpact_controller *oc = ofpact_put_CONTROLLER(out);
  829|  2.12k|    oc->ofpact.raw = NXAST_RAW_CONTROLLER2;
  830|  2.12k|    oc->max_len = UINT16_MAX;
  831|  2.12k|    oc->reason = OFPR_ACTION;
  832|  2.12k|    oc->meter_id = NX_CTLR_NO_METER;
  ------------------
  |  |  307|  2.12k|#define NX_CTLR_NO_METER 0
  ------------------
  833|       |
  834|  2.12k|    struct ofpbuf properties;
  835|  2.12k|    ofpbuf_use_const(&properties, eah, ntohs(eah->len));
  836|  2.12k|    ofpbuf_pull(&properties, sizeof *eah);
  837|       |
  838|  4.48k|    while (properties.size > 0) {
  ------------------
  |  Branch (838:12): [True: 2.95k, False: 1.52k]
  ------------------
  839|  2.95k|        struct ofpbuf payload;
  840|  2.95k|        uint64_t type;
  841|       |
  842|  2.95k|        enum ofperr error = ofpprop_pull(&properties, &payload, &type);
  843|  2.95k|        if (error) {
  ------------------
  |  Branch (843:13): [True: 71, False: 2.88k]
  ------------------
  844|     71|            return error;
  845|     71|        }
  846|       |
  847|  2.88k|        switch (type) {
  848|    526|        case NXAC2PT_MAX_LEN:
  ------------------
  |  Branch (848:9): [True: 526, False: 2.35k]
  ------------------
  849|    526|            error = ofpprop_parse_u16(&payload, &oc->max_len);
  850|    526|            break;
  851|       |
  852|     69|        case NXAC2PT_CONTROLLER_ID:
  ------------------
  |  Branch (852:9): [True: 69, False: 2.81k]
  ------------------
  853|     69|            error = ofpprop_parse_u16(&payload, &oc->controller_id);
  854|     69|            break;
  855|       |
  856|    486|        case NXAC2PT_REASON: {
  ------------------
  |  Branch (856:9): [True: 486, False: 2.39k]
  ------------------
  857|    486|            uint8_t u8;
  858|    486|            error = ofpprop_parse_u8(&payload, &u8);
  859|    486|            if (!error) {
  ------------------
  |  Branch (859:17): [True: 213, False: 273]
  ------------------
  860|    213|                oc->reason = u8;
  861|    213|            }
  862|    486|            break;
  863|      0|        }
  864|       |
  865|     48|        case NXAC2PT_USERDATA:
  ------------------
  |  Branch (865:9): [True: 48, False: 2.83k]
  ------------------
  866|     48|            out->size = start_ofs + sizeof(struct ofpact_controller);
  867|     48|            ofpbuf_put(out, payload.msg, ofpbuf_msgsize(&payload));
  868|     48|            oc = ofpbuf_at_assert(out, start_ofs, sizeof *oc);
  869|     48|            oc->userdata_len = ofpbuf_msgsize(&payload);
  870|     48|            break;
  871|       |
  872|    526|        case NXAC2PT_PAUSE:
  ------------------
  |  Branch (872:9): [True: 526, False: 2.35k]
  ------------------
  873|    526|            oc->pause = true;
  874|    526|            break;
  875|       |
  876|  1.01k|        case NXAC2PT_METER_ID:
  ------------------
  |  Branch (876:9): [True: 1.01k, False: 1.87k]
  ------------------
  877|  1.01k|            error = ofpprop_parse_u32(&payload, &oc->meter_id);
  878|  1.01k|            break;
  879|       |
  880|    216|        default:
  ------------------
  |  Branch (880:9): [True: 216, False: 2.66k]
  ------------------
  881|    216|            error = OFPPROP_UNKNOWN(false, "NXAST_RAW_CONTROLLER2", type);
  ------------------
  |  |  144|    216|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  882|    216|            break;
  883|  2.88k|        }
  884|  2.88k|        if (error) {
  ------------------
  |  Branch (884:13): [True: 530, False: 2.35k]
  ------------------
  885|    530|            return error;
  886|    530|        }
  887|  2.88k|    }
  888|       |
  889|  1.52k|    ofpact_finish_CONTROLLER(out, &oc);
  890|       |
  891|  1.52k|    return 0;
  892|  2.12k|}
ofp-actions.c:decode_NXAST_RAW_WRITE_METADATA:
 7723|    441|{
 7724|    441|    struct ofpact_metadata *om;
 7725|       |
 7726|    441|    if (!is_all_zeros(nawm->zeros, sizeof nawm->zeros)) {
  ------------------
  |  Branch (7726:9): [True: 15, False: 426]
  ------------------
 7727|     15|        return OFPERR_NXBRC_MUST_BE_ZERO;
 7728|     15|    }
 7729|       |
 7730|    426|    om = ofpact_put_WRITE_METADATA(out);
 7731|    426|    om->metadata = nawm->metadata;
 7732|    426|    om->mask = nawm->mask;
 7733|       |
 7734|    426|    return 0;
 7735|    441|}
ofp-actions.c:decode_NXAST_RAW_STACK_PUSH:
 3494|    417|{
 3495|    417|    struct ofpact_stack *push = ofpact_put_STACK_PUSH(ofpacts);
 3496|    417|    enum ofperr error = decode_stack_action(nasp, vl_mff_map, tlv_bitmap,
 3497|    417|                                            push);
 3498|    417|    return error ? error : nxm_stack_push_check(push, NULL);
  ------------------
  |  Branch (3498:12): [True: 54, False: 363]
  ------------------
 3499|    417|}
ofp-actions.c:decode_stack_action:
 3467|  1.15k|{
 3468|  1.15k|    enum ofperr error;
 3469|  1.15k|    stack_action->subfield.ofs = ntohs(nasp->offset);
 3470|       |
 3471|  1.15k|    struct ofpbuf b = ofpbuf_const_initializer(nasp, sizeof *nasp);
 3472|  1.15k|    ofpbuf_pull(&b, OBJECT_OFFSETOF(nasp, pad));
  ------------------
  |  |  108|  1.15k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 3473|  1.15k|    error  = mf_vl_mff_nx_pull_header(&b, vl_mff_map,
 3474|  1.15k|                                      &stack_action->subfield.field, NULL,
 3475|  1.15k|                                      tlv_bitmap);
 3476|  1.15k|    if (error) {
  ------------------
  |  Branch (3476:9): [True: 103, False: 1.04k]
  ------------------
 3477|    103|        return error;
 3478|    103|    }
 3479|       |
 3480|  1.04k|    stack_action->subfield.n_bits = ntohs(*(const ovs_be16 *) b.data);
 3481|  1.04k|    ofpbuf_pull(&b, 2);
 3482|  1.04k|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (3482:9): [True: 109, False: 939]
  ------------------
 3483|    109|        return OFPERR_NXBRC_MUST_BE_ZERO;
 3484|    109|    }
 3485|       |
 3486|    939|    return 0;
 3487|  1.04k|}
ofp-actions.c:decode_NXAST_RAW_STACK_POP:
 3506|    734|{
 3507|    734|    struct ofpact_stack *pop = ofpact_put_STACK_POP(ofpacts);
 3508|    734|    enum ofperr error = decode_stack_action(nasp, vl_mff_map, tlv_bitmap,
 3509|    734|                                            pop);
 3510|    734|    return error ? error : nxm_stack_pop_check(pop, NULL);
  ------------------
  |  Branch (3510:12): [True: 158, False: 576]
  ------------------
 3511|    734|}
ofp-actions.c:decode_NXAST_RAW_SAMPLE:
 6215|    127|{
 6216|    127|    struct ofpact_sample *sample;
 6217|       |
 6218|    127|    sample = ofpact_put_SAMPLE(out);
 6219|    127|    sample->ofpact.raw = NXAST_RAW_SAMPLE;
 6220|    127|    sample->probability = ntohs(nas->probability);
 6221|    127|    sample->collector_set_id = ntohl(nas->collector_set_id);
 6222|    127|    sample->obs_domain_imm = ntohl(nas->obs_domain_id);
 6223|    127|    sample->obs_domain_src.field = NULL;
 6224|    127|    sample->obs_point_imm = ntohl(nas->obs_point_id);
 6225|    127|    sample->obs_point_src.field = NULL;
 6226|    127|    sample->sampling_port = OFPP_NONE;
  ------------------
  |  |   47|    127|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|    127|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
 6227|    127|    sample->direction = NX_ACTION_SAMPLE_DEFAULT;
 6228|    127|    sample->obs_domain_src.field = NULL;
 6229|    127|    sample->obs_point_src.field = NULL;
 6230|    127|    if (sample->probability == 0) {
  ------------------
  |  Branch (6230:9): [True: 15, False: 112]
  ------------------
 6231|     15|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 6232|     15|    }
 6233|       |
 6234|    112|    return 0;
 6235|    127|}
ofp-actions.c:decode_NXAST_RAW_SAMPLE2:
 6264|    215|{
 6265|    215|    return decode_SAMPLE2(nas, NXAST_RAW_SAMPLE2, NX_ACTION_SAMPLE_DEFAULT,
 6266|    215|                          ofpact_put_SAMPLE(out));
 6267|    215|}
ofp-actions.c:decode_SAMPLE2:
 6242|  1.02k|{
 6243|  1.02k|    sample->ofpact.raw = raw;
 6244|  1.02k|    sample->probability = ntohs(nas->probability);
 6245|  1.02k|    sample->collector_set_id = ntohl(nas->collector_set_id);
 6246|  1.02k|    sample->obs_domain_imm = ntohl(nas->obs_domain_id);
 6247|  1.02k|    sample->obs_domain_src.field = NULL;
 6248|  1.02k|    sample->obs_point_imm = ntohl(nas->obs_point_id);
 6249|  1.02k|    sample->obs_point_src.field = NULL;
 6250|  1.02k|    sample->sampling_port = u16_to_ofp(ntohs(nas->sampling_port));
 6251|  1.02k|    sample->direction = direction;
 6252|       |
 6253|  1.02k|    if (sample->probability == 0) {
  ------------------
  |  Branch (6253:9): [True: 201, False: 825]
  ------------------
 6254|    201|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 6255|    201|    }
 6256|       |
 6257|    825|    return 0;
 6258|  1.02k|}
ofp-actions.c:decode_NXAST_RAW_SAMPLE3:
 6285|  1.06k|{
 6286|  1.06k|    struct ofpact_sample *sample = ofpact_put_SAMPLE(out);
 6287|  1.06k|    int err;
 6288|       |
 6289|  1.06k|    if (!is_all_zeros(nas->zeros, sizeof nas->zeros)) {
  ------------------
  |  Branch (6289:9): [True: 212, False: 855]
  ------------------
 6290|    212|        return OFPERR_NXBRC_MUST_BE_ZERO;
 6291|    212|    }
 6292|    855|    err = check_sample_direction(nas->direction);
 6293|    855|    if (err) {
  ------------------
  |  Branch (6293:9): [True: 44, False: 811]
  ------------------
 6294|     44|        return err;
 6295|     44|    }
 6296|    811|    return decode_SAMPLE2(nas, NXAST_RAW_SAMPLE3, nas->direction, sample);
 6297|    855|}
ofp-actions.c:check_sample_direction:
 6271|  1.79k|{
 6272|  1.79k|    if (direction != NX_ACTION_SAMPLE_DEFAULT &&
  ------------------
  |  Branch (6272:9): [True: 808, False: 987]
  ------------------
 6273|    808|        direction != NX_ACTION_SAMPLE_INGRESS &&
  ------------------
  |  Branch (6273:9): [True: 518, False: 290]
  ------------------
 6274|    518|        direction != NX_ACTION_SAMPLE_EGRESS) {
  ------------------
  |  Branch (6274:9): [True: 183, False: 335]
  ------------------
 6275|    183|        VLOG_WARN_RL(&rl, "invalid sample direction %"PRIu8, direction);
  ------------------
  |  |  224|    183|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    183|    do {                                                                \
  |  |  |  |  288|    183|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    183|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 183]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    183|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 183]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6276|    183|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 6277|    183|    }
 6278|  1.61k|    return 0;
 6279|  1.79k|}
ofp-actions.c:decode_NXAST_RAW_SAMPLE4:
 6340|  1.13k|{
 6341|  1.13k|    struct ofpact_sample *sample = ofpact_put_SAMPLE(out);
 6342|  1.13k|    int err;
 6343|       |
 6344|  1.13k|    if (!is_all_zeros(nas->zeros, sizeof nas->zeros)) {
  ------------------
  |  Branch (6344:9): [True: 190, False: 940]
  ------------------
 6345|    190|        return OFPERR_NXBRC_MUST_BE_ZERO;
 6346|    190|    }
 6347|       |
 6348|    940|    err = check_sample_direction(nas->direction);
 6349|    940|    if (err) {
  ------------------
  |  Branch (6349:9): [True: 139, False: 801]
  ------------------
 6350|    139|        return err;
 6351|    139|    }
 6352|       |
 6353|    801|    sample->ofpact.raw = NXAST_RAW_SAMPLE4;
 6354|    801|    sample->probability = ntohs(nas->probability);
 6355|    801|    sample->collector_set_id = ntohl(nas->collector_set_id);
 6356|    801|    sample->sampling_port = u16_to_ofp(ntohs(nas->sampling_port));
 6357|    801|    sample->direction = nas->direction;
 6358|       |
 6359|    801|    if (sample->probability == 0) {
  ------------------
  |  Branch (6359:9): [True: 6, False: 795]
  ------------------
 6360|      6|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 6361|      6|    }
 6362|       |
 6363|    795|    err = decode_sample_obs_id(nas->obs_domain_src,
 6364|    795|                               nas->obs_domain_ofs_nbits,
 6365|    795|                               nas->obs_domain_imm,
 6366|    795|                               vl_mff_map, tlv_bitmap,
 6367|    795|                               &sample->obs_domain_src,
 6368|    795|                               &sample->obs_domain_imm);
 6369|    795|    if (err) {
  ------------------
  |  Branch (6369:9): [True: 132, False: 663]
  ------------------
 6370|    132|        return err;
 6371|    132|    }
 6372|       |
 6373|    663|    return decode_sample_obs_id(nas->obs_point_src,
 6374|    663|                                nas->obs_point_ofs_nbits,
 6375|    663|                                nas->obs_point_imm,
 6376|    663|                                vl_mff_map, tlv_bitmap,
 6377|    663|                                &sample->obs_point_src,
 6378|    663|                                &sample->obs_point_imm);
 6379|    795|}
ofp-actions.c:decode_sample_obs_id:
 6303|  1.45k|{
 6304|  1.45k|    if (src) {
  ------------------
  |  Branch (6304:9): [True: 942, False: 516]
  ------------------
 6305|    942|        enum ofperr error;
 6306|       |
 6307|    942|        src_out->ofs = nxm_decode_ofs(ofs_nbits);
 6308|    942|        src_out->n_bits = nxm_decode_n_bits(ofs_nbits);
 6309|    942|        error = mf_vl_mff_mf_from_nxm_header(ntohl(src),
 6310|    942|                                             vl_mff_map, &src_out->field,
 6311|    942|                                             tlv_bitmap);
 6312|    942|        if (error) {
  ------------------
  |  Branch (6312:13): [True: 360, False: 582]
  ------------------
 6313|    360|            return error;
 6314|    360|        }
 6315|       |
 6316|    582|        error = mf_check_src(src_out, NULL);
 6317|    582|        if (error) {
  ------------------
  |  Branch (6317:13): [True: 28, False: 554]
  ------------------
 6318|     28|            return error;
 6319|     28|        }
 6320|       |
 6321|    554|        if (src_out->n_bits > 32) {
  ------------------
  |  Branch (6321:13): [True: 180, False: 374]
  ------------------
 6322|    180|            VLOG_WARN_RL(&rl, "size of field used in observation_id (%d) "
  ------------------
  |  |  224|    180|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    180|    do {                                                                \
  |  |  |  |  288|    180|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    180|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 180]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    180|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 180]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6323|    180|                               "exceeds maximum (32)", src_out->n_bits);
 6324|    180|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 6325|    180|        }
 6326|    554|    } else {
 6327|    516|        src_out->field = NULL;
 6328|    516|        *imm_out = ntohl(imm);
 6329|    516|    }
 6330|       |
 6331|    890|    return 0;
 6332|  1.45k|}
ofp-actions.c:decode_NXAST_RAW_CONJUNCTION:
 5678|  4.58k|{
 5679|  4.58k|    if (nac->n_clauses < 2 || nac->n_clauses > 64
  ------------------
  |  Branch (5679:9): [True: 1.04k, False: 3.53k]
  |  Branch (5679:31): [True: 32, False: 3.50k]
  ------------------
 5680|  3.50k|        || nac->clause >= nac->n_clauses) {
  ------------------
  |  Branch (5680:12): [True: 329, False: 3.17k]
  ------------------
 5681|  1.40k|        return OFPERR_NXBAC_BAD_CONJUNCTION;
 5682|  3.17k|    } else {
 5683|       |        add_conjunction(out, ntohl(nac->id), nac->clause, nac->n_clauses);
 5684|  3.17k|        return 0;
 5685|  3.17k|    }
 5686|  4.58k|}
ofp-actions.c:add_conjunction:
 5665|  3.17k|{
 5666|  3.17k|    struct ofpact_conjunction *oc;
 5667|       |
 5668|  3.17k|    oc = ofpact_put_CONJUNCTION(out);
 5669|  3.17k|    oc->id = id;
 5670|  3.17k|    oc->clause = clause;
 5671|  3.17k|    oc->n_clauses = n_clauses;
 5672|  3.17k|}
ofp-actions.c:decode_NXAST_RAW_CT:
 6828|  8.37k|{
 6829|  8.37k|    const size_t ct_offset = ofpacts_pull(out);
 6830|  8.37k|    struct ofpact_conntrack *conntrack = ofpact_put_CT(out);
 6831|  8.37k|    int error;
 6832|       |
 6833|  8.37k|    conntrack->flags = ntohs(nac->flags);
 6834|  8.37k|    if (conntrack->flags & NX_CT_F_FORCE &&
  ------------------
  |  Branch (6834:9): [True: 1.96k, False: 6.41k]
  ------------------
 6835|  1.96k|        !(conntrack->flags & NX_CT_F_COMMIT)) {
  ------------------
  |  Branch (6835:9): [True: 282, False: 1.67k]
  ------------------
 6836|    282|        error = OFPERR_OFPBAC_BAD_ARGUMENT;
 6837|    282|        goto out;
 6838|    282|    }
 6839|       |
 6840|  8.09k|    error = decode_ct_zone(nac, conntrack, vl_mff_map, tlv_bitmap);
 6841|  8.09k|    if (error) {
  ------------------
  |  Branch (6841:9): [True: 1.28k, False: 6.81k]
  ------------------
 6842|  1.28k|        goto out;
 6843|  1.28k|    }
 6844|  6.81k|    conntrack->recirc_table = nac->recirc_table;
 6845|  6.81k|    conntrack->alg = ntohs(nac->alg);
 6846|       |
 6847|  6.81k|    ofpbuf_pull(out, sizeof(*conntrack));
 6848|       |
 6849|  6.81k|    struct ofpbuf openflow = ofpbuf_const_initializer(
 6850|  6.81k|        nac + 1, ntohs(nac->len) - sizeof(*nac));
 6851|  6.81k|    error = ofpacts_pull_openflow_actions__(&openflow, openflow.size,
 6852|  6.81k|                                            ofp_version,
 6853|  6.81k|                                            1u << OVSINST_OFPIT11_APPLY_ACTIONS,
 6854|  6.81k|                                            out, OFPACT_CT, vl_mff_map,
 6855|  6.81k|                                            tlv_bitmap);
 6856|  6.81k|    if (error) {
  ------------------
  |  Branch (6856:9): [True: 1.33k, False: 5.47k]
  ------------------
 6857|  1.33k|        return error;
 6858|  1.33k|    }
 6859|       |
 6860|  5.47k|    conntrack = ofpbuf_push_uninit(out, sizeof(*conntrack));
 6861|  5.47k|    out->header = &conntrack->ofpact;
 6862|  5.47k|    ofpact_finish_CT(out, &conntrack);
 6863|       |
 6864|  5.47k|    if (conntrack->ofpact.len > sizeof(*conntrack)
  ------------------
  |  Branch (6864:9): [True: 3.68k, False: 1.78k]
  ------------------
 6865|  3.68k|        && !(conntrack->flags & NX_CT_F_COMMIT)) {
  ------------------
  |  Branch (6865:12): [True: 528, False: 3.16k]
  ------------------
 6866|    528|        const struct ofpact *a;
 6867|    528|        size_t ofpacts_len = conntrack->ofpact.len - sizeof(*conntrack);
 6868|       |
 6869|    528|        OFPACT_FOR_EACH (a, conntrack->actions, ofpacts_len) {
  ------------------
  |  |  261|    597|    for ((POS) = (OFPACTS); (POS) < ofpact_end(OFPACTS, OFPACTS_LEN);  \
  |  |  ------------------
  |  |  |  Branch (261:29): [True: 528, False: 69]
  |  |  ------------------
  |  |  262|    528|         (POS) = ofpact_next(POS))
  ------------------
 6870|    528|            if (a->type != OFPACT_NAT || ofpact_get_NAT(a)->flags
  ------------------
  |  Branch (6870:17): [True: 152, False: 376]
  |  Branch (6870:42): [True: 297, False: 79]
  ------------------
 6871|    459|                || ofpact_get_NAT(a)->range_af != AF_UNSPEC) {
  ------------------
  |  Branch (6871:20): [True: 10, False: 69]
  ------------------
 6872|    459|                VLOG_WARN_RL(&rl, "CT action requires commit flag if actions "
  ------------------
  |  |  224|    459|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    459|    do {                                                                \
  |  |  |  |  288|    459|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    459|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 459]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    459|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 459]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6873|    459|                             "other than NAT without arguments are specified.");
 6874|    459|                error = OFPERR_OFPBAC_BAD_ARGUMENT;
 6875|    459|                goto out;
 6876|    459|            }
 6877|    528|        }
 6878|    528|    }
 6879|       |
 6880|  7.04k|out:
 6881|  7.04k|    ofpbuf_push_uninit(out, ct_offset);
 6882|  7.04k|    return error;
 6883|  5.47k|}
ofp-actions.c:ofpacts_pull:
  536|  9.59k|{
  537|  9.59k|    size_t ofs;
  538|       |
  539|  9.59k|    ofs = ofpacts->size;
  540|  9.59k|    ofpbuf_pull(ofpacts, ofs);
  541|       |
  542|  9.59k|    return ofs;
  543|  9.59k|}
ofp-actions.c:decode_ct_zone:
 6792|  8.09k|{
 6793|  8.09k|    if (nac->zone_src) {
  ------------------
  |  Branch (6793:9): [True: 2.53k, False: 5.55k]
  ------------------
 6794|  2.53k|        enum ofperr error;
 6795|       |
 6796|  2.53k|        out->zone_src.ofs = nxm_decode_ofs(nac->zone_ofs_nbits);
 6797|  2.53k|        out->zone_src.n_bits = nxm_decode_n_bits(nac->zone_ofs_nbits);
 6798|  2.53k|        error = mf_vl_mff_mf_from_nxm_header(ntohl(nac->zone_src),
 6799|  2.53k|                                             vl_mff_map, &out->zone_src.field,
 6800|  2.53k|                                             tlv_bitmap);
 6801|  2.53k|        if (error) {
  ------------------
  |  Branch (6801:13): [True: 822, False: 1.71k]
  ------------------
 6802|    822|            return error;
 6803|    822|        }
 6804|       |
 6805|  1.71k|        error = mf_check_src(&out->zone_src, NULL);
 6806|  1.71k|        if (error) {
  ------------------
  |  Branch (6806:13): [True: 415, False: 1.30k]
  ------------------
 6807|    415|            return error;
 6808|    415|        }
 6809|       |
 6810|  1.30k|        if (out->zone_src.n_bits != 16) {
  ------------------
  |  Branch (6810:13): [True: 48, False: 1.25k]
  ------------------
 6811|     48|            VLOG_WARN_RL(&rl, "zone n_bits %d not within valid range [16..16]",
  ------------------
  |  |  224|     48|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     48|    do {                                                                \
  |  |  |  |  288|     48|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     48|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 48]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     48|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 48]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6812|     48|                         out->zone_src.n_bits);
 6813|     48|            return OFPERR_OFPBAC_BAD_SET_LEN;
 6814|     48|        }
 6815|  5.55k|    } else {
 6816|  5.55k|        out->zone_src.field = NULL;
 6817|  5.55k|        out->zone_imm = ntohs(nac->zone_imm);
 6818|  5.55k|    }
 6819|       |
 6820|  6.81k|    return 0;
 6821|  8.09k|}
ofp-actions.c:decode_NXAST_RAW_NAT:
 7207|  17.3k|{
 7208|  17.3k|    struct ofpact_nat *nat;
 7209|  17.3k|    uint16_t range_present = ntohs(nan->range_present);
 7210|  17.3k|    const char *opts = (char *)(nan + 1);
 7211|  17.3k|    uint16_t len = ntohs(nan->len) - sizeof *nan;
 7212|       |
 7213|  17.3k|    nat = ofpact_put_NAT(out);
 7214|  17.3k|    nat->flags = ntohs(nan->flags);
 7215|       |
 7216|       |    /* Check for unknown or mutually exclusive flags. */
 7217|  17.3k|    if ((nat->flags & ~NX_NAT_F_MASK)
  ------------------
  |  Branch (7217:9): [True: 2.95k, False: 14.3k]
  ------------------
 7218|  14.3k|        || (nat->flags & NX_NAT_F_SRC && nat->flags & NX_NAT_F_DST)
  ------------------
  |  Branch (7218:13): [True: 3.29k, False: 11.0k]
  |  Branch (7218:42): [True: 129, False: 3.16k]
  ------------------
 7219|  14.2k|        || (nat->flags & NX_NAT_F_PROTO_HASH
  ------------------
  |  Branch (7219:13): [True: 100, False: 14.1k]
  ------------------
 7220|  3.09k|            && nat->flags & NX_NAT_F_PROTO_RANDOM)) {
  ------------------
  |  Branch (7220:16): [True: 11, False: 89]
  ------------------
 7221|  3.09k|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 7222|  3.09k|    }
 7223|       |
 7224|  14.2k|#define NX_NAT_GET_OPT(DST, SRC, LEN, TYPE)                     \
 7225|  14.2k|    (LEN >= sizeof(TYPE)                                        \
 7226|  14.2k|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
 7227|  14.2k|        SRC += sizeof(TYPE))                                    \
 7228|  14.2k|     : NULL)
 7229|       |
 7230|  14.2k|    nat->range_af = AF_UNSPEC;
 7231|  14.2k|    if (range_present & NX_NAT_RANGE_IPV4_MIN) {
  ------------------
  |  Branch (7231:9): [True: 7.00k, False: 7.24k]
  ------------------
 7232|  7.00k|        if (range_present & (NX_NAT_RANGE_IPV6_MIN | NX_NAT_RANGE_IPV6_MAX)) {
  ------------------
  |  Branch (7232:13): [True: 973, False: 6.03k]
  ------------------
 7233|    973|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 7234|    973|        }
 7235|       |
 7236|  6.03k|        if (!NX_NAT_GET_OPT(&nat->range.addr.ipv4.min, opts, len, ovs_be32)
  ------------------
  |  | 7225|  12.0k|    (LEN >= sizeof(TYPE)                                        \
  |  |  ------------------
  |  |  |  Branch (7225:6): [True: 6.02k, False: 4]
  |  |  ------------------
  |  | 7226|  12.0k|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
  |  | 7227|  6.02k|        SRC += sizeof(TYPE))                                    \
  |  | 7228|  12.0k|     : NULL)
  ------------------
  |  Branch (7236:13): [True: 4, False: 6.02k]
  ------------------
 7237|  6.02k|            || !nat->range.addr.ipv4.min) {
  ------------------
  |  Branch (7237:16): [True: 255, False: 5.77k]
  ------------------
 7238|    259|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 7239|    259|        }
 7240|       |
 7241|  5.77k|        nat->range_af = AF_INET;
 7242|       |
 7243|  5.77k|        if (range_present & NX_NAT_RANGE_IPV4_MAX) {
  ------------------
  |  Branch (7243:13): [True: 1.19k, False: 4.57k]
  ------------------
 7244|  1.19k|            if (!NX_NAT_GET_OPT(&nat->range.addr.ipv4.max, opts, len,
  ------------------
  |  | 7225|  1.19k|    (LEN >= sizeof(TYPE)                                        \
  |  |  ------------------
  |  |  |  Branch (7225:6): [True: 1.19k, False: 0]
  |  |  ------------------
  |  | 7226|  1.19k|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
  |  | 7227|  1.19k|        SRC += sizeof(TYPE))                                    \
  |  | 7228|  1.19k|     : NULL)
  ------------------
  |  Branch (7244:17): [True: 0, False: 1.19k]
  ------------------
 7245|  1.19k|                                ovs_be32)) {
 7246|      0|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 7247|      0|            }
 7248|  1.19k|            if (ntohl(nat->range.addr.ipv4.max)
  ------------------
  |  Branch (7248:17): [True: 615, False: 579]
  ------------------
 7249|  1.19k|                < ntohl(nat->range.addr.ipv4.min)) {
 7250|    615|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 7251|    615|            }
 7252|  1.19k|        }
 7253|  7.24k|    } else if (range_present & NX_NAT_RANGE_IPV4_MAX) {
  ------------------
  |  Branch (7253:16): [True: 248, False: 6.99k]
  ------------------
 7254|    248|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 7255|  6.99k|    } else if (range_present & NX_NAT_RANGE_IPV6_MIN) {
  ------------------
  |  Branch (7255:16): [True: 4.64k, False: 2.35k]
  ------------------
 7256|  4.64k|        if (!NX_NAT_GET_OPT(&nat->range.addr.ipv6.min, opts, len,
  ------------------
  |  | 7225|  9.29k|    (LEN >= sizeof(TYPE)                                        \
  |  |  ------------------
  |  |  |  Branch (7225:6): [True: 3.31k, False: 1.33k]
  |  |  ------------------
  |  | 7226|  9.29k|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
  |  | 7227|  3.31k|        SRC += sizeof(TYPE))                                    \
  |  | 7228|  9.29k|     : NULL)
  ------------------
  |  Branch (7256:13): [True: 1.33k, False: 3.31k]
  ------------------
 7257|  4.64k|                            struct in6_addr)
 7258|  3.92k|            || ipv6_mask_is_any(&nat->range.addr.ipv6.min)) {
  ------------------
  |  Branch (7258:16): [True: 2.59k, False: 718]
  ------------------
 7259|  3.92k|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 7260|  3.92k|        }
 7261|       |
 7262|    718|        nat->range_af = AF_INET6;
 7263|       |
 7264|    718|        if (range_present & NX_NAT_RANGE_IPV6_MAX) {
  ------------------
  |  Branch (7264:13): [True: 330, False: 388]
  ------------------
 7265|    330|            if (!NX_NAT_GET_OPT(&nat->range.addr.ipv6.max, opts, len,
  ------------------
  |  | 7225|    330|    (LEN >= sizeof(TYPE)                                        \
  |  |  ------------------
  |  |  |  Branch (7225:6): [True: 229, False: 101]
  |  |  ------------------
  |  | 7226|    330|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
  |  | 7227|    229|        SRC += sizeof(TYPE))                                    \
  |  | 7228|    330|     : NULL)
  ------------------
  |  Branch (7265:17): [True: 101, False: 229]
  ------------------
 7266|    330|                                struct in6_addr)) {
 7267|    101|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 7268|    101|            }
 7269|    229|            if (memcmp(&nat->range.addr.ipv6.max, &nat->range.addr.ipv6.min,
  ------------------
  |  Branch (7269:17): [True: 76, False: 153]
  ------------------
 7270|    229|                       sizeof(struct in6_addr)) < 0) {
 7271|     76|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 7272|     76|            }
 7273|    229|        }
 7274|  2.35k|    } else if (range_present & NX_NAT_RANGE_IPV6_MAX) {
  ------------------
  |  Branch (7274:16): [True: 421, False: 1.93k]
  ------------------
 7275|    421|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 7276|    421|    }
 7277|       |
 7278|  7.62k|    if (range_present & NX_NAT_RANGE_PROTO_MIN) {
  ------------------
  |  Branch (7278:9): [True: 2.15k, False: 5.47k]
  ------------------
 7279|  2.15k|        ovs_be16 proto;
 7280|       |
 7281|  2.15k|        if (nat->range_af == AF_UNSPEC) {
  ------------------
  |  Branch (7281:13): [True: 378, False: 1.77k]
  ------------------
 7282|    378|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 7283|    378|        }
 7284|  1.77k|        if (!NX_NAT_GET_OPT(&proto, opts, len, ovs_be16) || proto == 0) {
  ------------------
  |  | 7225|  3.55k|    (LEN >= sizeof(TYPE)                                        \
  |  |  ------------------
  |  |  |  Branch (7225:6): [True: 1.33k, False: 444]
  |  |  ------------------
  |  | 7226|  3.55k|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
  |  | 7227|  1.33k|        SRC += sizeof(TYPE))                                    \
  |  | 7228|  3.55k|     : NULL)
  ------------------
  |  Branch (7284:13): [True: 444, False: 1.33k]
  |  Branch (7284:61): [True: 124, False: 1.21k]
  ------------------
 7285|    568|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 7286|    568|        }
 7287|  1.21k|        nat->range.proto.min = ntohs(proto);
 7288|  1.21k|        if (range_present & NX_NAT_RANGE_PROTO_MAX) {
  ------------------
  |  Branch (7288:13): [True: 436, False: 775]
  ------------------
 7289|    436|            if (!NX_NAT_GET_OPT(&proto, opts, len, ovs_be16)) {
  ------------------
  |  | 7225|    436|    (LEN >= sizeof(TYPE)                                        \
  |  |  ------------------
  |  |  |  Branch (7225:6): [True: 436, False: 0]
  |  |  ------------------
  |  | 7226|    436|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
  |  | 7227|    436|        SRC += sizeof(TYPE))                                    \
  |  | 7228|    436|     : NULL)
  ------------------
  |  Branch (7289:17): [True: 0, False: 436]
  ------------------
 7290|      0|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 7291|      0|            }
 7292|    436|            nat->range.proto.max = ntohs(proto);
 7293|    436|            if (nat->range.proto.max < nat->range.proto.min) {
  ------------------
  |  Branch (7293:17): [True: 263, False: 173]
  ------------------
 7294|    263|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 7295|    263|            }
 7296|    436|        }
 7297|  5.47k|    } else if (range_present & NX_NAT_RANGE_PROTO_MAX) {
  ------------------
  |  Branch (7297:16): [True: 200, False: 5.27k]
  ------------------
 7298|    200|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 7299|    200|    }
 7300|       |
 7301|  6.22k|    return 0;
 7302|  7.62k|}
ofp-actions.c:decode_NXAST_RAW_OUTPUT_TRUNC:
 7505|  1.11k|{
 7506|  1.11k|    struct ofpact_output_trunc *output_trunc;
 7507|       |
 7508|  1.11k|    output_trunc = ofpact_put_OUTPUT_TRUNC(out);
 7509|  1.11k|    output_trunc->max_len = ntohl(natrc->max_len);
 7510|  1.11k|    output_trunc->port = u16_to_ofp(ntohs(natrc->port));
 7511|       |
 7512|  1.11k|    if (output_trunc->max_len < ETH_HEADER_LEN) {
  ------------------
  |  |  439|  1.11k|#define ETH_HEADER_LEN 14
  ------------------
  |  Branch (7512:9): [True: 10, False: 1.10k]
  ------------------
 7513|     10|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 7514|     10|    }
 7515|  1.10k|    return 0;
 7516|  1.11k|}
ofp-actions.c:decode_NXAST_RAW_CLONE:
 6047|  1.21k|{
 6048|  1.21k|    int error;
 6049|  1.21k|    struct ofpbuf openflow;
 6050|  1.21k|    const size_t clone_offset = ofpacts_pull(out);
 6051|  1.21k|    struct ofpact_nest *clone = ofpact_put_CLONE(out);
 6052|       |
 6053|       |    /* decode action list */
 6054|  1.21k|    ofpbuf_pull(out, sizeof(*clone));
 6055|  1.21k|    openflow = ofpbuf_const_initializer(
 6056|  1.21k|                    eah + 1, ntohs(eah->len) - sizeof *eah);
 6057|  1.21k|    error = ofpacts_pull_openflow_actions__(&openflow, openflow.size,
 6058|  1.21k|                                            ofp_version,
 6059|  1.21k|                                            1u << OVSINST_OFPIT11_APPLY_ACTIONS,
 6060|  1.21k|                                            out, 0, vl_mff_map, tlv_bitmap);
 6061|  1.21k|    if (error) {
  ------------------
  |  Branch (6061:9): [True: 95, False: 1.12k]
  ------------------
 6062|     95|        return error;
 6063|     95|    }
 6064|  1.12k|    clone = ofpbuf_push_uninit(out, sizeof *clone);
 6065|  1.12k|    out->header = &clone->ofpact;
 6066|  1.12k|    ofpact_finish_CLONE(out, &clone);
 6067|  1.12k|    ofpbuf_push_uninit(out, clone_offset);
 6068|  1.12k|    return error;
 6069|  1.21k|}
ofp-actions.c:decode_NXAST_RAW_CT_CLEAR:
 7092|    178|{
 7093|    178|    ofpact_put_CT_CLEAR(out);
 7094|    178|    return 0;
 7095|    178|}
ofp-actions.c:decode_NXAST_RAW_ENCAP:
 4467|  3.81k|{
 4468|  3.81k|    struct ofpact_encap *encap;
 4469|  3.81k|    const struct ofp_ed_prop_header *ofp_prop;
 4470|  3.81k|    const size_t encap_ofs = out->size;
 4471|  3.81k|    size_t props_len;
 4472|  3.81k|    uint16_t n_props = 0;
 4473|  3.81k|    int err;
 4474|       |
 4475|  3.81k|    encap = ofpact_put_ENCAP(out);
 4476|  3.81k|    encap->ofpact.raw = NXAST_RAW_ENCAP;
 4477|  3.81k|    switch (ntohl(nae->new_pkt_type)) {
 4478|  1.35k|    case PT_ETH:
  ------------------
  |  Branch (4478:5): [True: 1.35k, False: 2.46k]
  ------------------
 4479|  2.07k|    case PT_NSH:
  ------------------
  |  Branch (4479:5): [True: 717, False: 3.09k]
  ------------------
 4480|  2.36k|    case PT_MPLS:
  ------------------
  |  Branch (4480:5): [True: 294, False: 3.52k]
  ------------------
 4481|  3.27k|    case PT_MPLS_MC:
  ------------------
  |  Branch (4481:5): [True: 907, False: 2.90k]
  ------------------
 4482|       |        /* Add supported encap header types here. */
 4483|  3.27k|        break;
 4484|    542|    default:
  ------------------
  |  Branch (4484:5): [True: 542, False: 3.27k]
  ------------------
 4485|    542|        return OFPERR_NXBAC_BAD_HEADER_TYPE;
 4486|  3.81k|    }
 4487|  3.27k|    encap->new_pkt_type = nae->new_pkt_type;
 4488|  3.27k|    encap->hdr_size = ntohs(nae->hdr_size);
 4489|       |
 4490|  3.27k|    ofp_prop = nae->props;
 4491|  3.27k|    props_len = ntohs(nae->len) - offsetof(struct nx_action_encap, props);
 4492|  3.27k|    n_props = 0;
 4493|  5.14k|    while (props_len > 0) {
  ------------------
  |  Branch (4493:12): [True: 2.71k, False: 2.42k]
  ------------------
 4494|  2.71k|        err = decode_ed_prop(&ofp_prop, out, &props_len);
 4495|  2.71k|        if (err) {
  ------------------
  |  Branch (4495:13): [True: 849, False: 1.86k]
  ------------------
 4496|    849|            return err;
 4497|    849|        }
 4498|  1.86k|        n_props++;
 4499|  1.86k|    }
 4500|  2.42k|    encap = ofpbuf_at_assert(out, encap_ofs, sizeof *encap);
 4501|  2.42k|    encap->n_props = n_props;
 4502|  2.42k|    out->header = &encap->ofpact;
 4503|  2.42k|    ofpact_finish_ENCAP(out, &encap);
 4504|       |
 4505|  2.42k|    return 0;
 4506|  3.27k|}
ofp-actions.c:decode_NXAST_RAW_DECAP:
 4698|  11.2k|{
 4699|  11.2k|    struct ofpact_decap * decap;
 4700|       |
 4701|  11.2k|    if (ntohs(nad->len) > sizeof *nad) {
  ------------------
  |  Branch (4701:9): [True: 465, False: 10.8k]
  ------------------
 4702|       |        /* No properties supported yet. */
 4703|    465|        return OFPERR_NXBAC_UNKNOWN_ED_PROP;
 4704|    465|    }
 4705|       |
 4706|  10.8k|    decap = ofpact_put_DECAP(ofpacts);
 4707|  10.8k|    decap->ofpact.raw = NXAST_RAW_DECAP;
 4708|  10.8k|    decap->new_pkt_type = nad->new_pkt_type;
 4709|  10.8k|    return 0;
 4710|  11.2k|}
ofp-actions.c:decode_NXAST_RAW_DEC_NSH_TTL:
 4800|  1.20k|{
 4801|  1.20k|    ofpact_put_DEC_NSH_TTL(out);
 4802|  1.20k|    return 0;
 4803|  1.20k|}
ofp-actions.c:decode_NXAST_RAW_CHECK_PKT_LARGER:
 7821|  1.26k|{
 7822|  1.26k|    struct ofpact_check_pkt_larger *check_pkt_larger;
 7823|  1.26k|    enum ofperr error;
 7824|       |
 7825|  1.26k|    check_pkt_larger = ofpact_put_CHECK_PKT_LARGER(out);
 7826|  1.26k|    check_pkt_larger->pkt_len = ntohs(ncpl->pkt_len);
 7827|  1.26k|    check_pkt_larger->dst.ofs = ntohs(ncpl->offset);
 7828|  1.26k|    check_pkt_larger->dst.n_bits = 1;
 7829|       |
 7830|  1.26k|    struct ofpbuf b = ofpbuf_const_initializer(ncpl, ntohs(ncpl->len));
 7831|  1.26k|    ofpbuf_pull(&b, OBJECT_OFFSETOF(ncpl, pad));
  ------------------
  |  |  108|  1.26k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 7832|       |
 7833|  1.26k|    error = mf_vl_mff_nx_pull_header(&b, vl_mff_map,
 7834|  1.26k|                                     &check_pkt_larger->dst.field,
 7835|  1.26k|                                     NULL, tlv_bitmap);
 7836|  1.26k|    if (error) {
  ------------------
  |  Branch (7836:9): [True: 388, False: 876]
  ------------------
 7837|    388|        return error;
 7838|    388|    }
 7839|       |
 7840|    876|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (7840:9): [True: 591, False: 285]
  ------------------
 7841|    591|        return OFPERR_NXBRC_MUST_BE_ZERO;
 7842|    591|    }
 7843|       |
 7844|    285|    return mf_check_dst(&check_pkt_larger->dst, NULL);
 7845|    876|}
ofp-actions.c:decode_NXAST_RAW_DELETE_FIELD:
 4201|    308|{
 4202|    308|    struct ofpact_delete_field *delete_field;
 4203|    308|    enum ofperr err;
 4204|       |
 4205|    308|    delete_field = ofpact_put_DELETE_FIELD(out);
 4206|    308|    delete_field->ofpact.raw = NXAST_RAW_DELETE_FIELD;
 4207|       |
 4208|    308|    struct ofpbuf b = ofpbuf_const_initializer(nadf, ntohs(nadf->len));
 4209|    308|    ofpbuf_pull(&b, OBJECT_OFFSETOF(nadf, pad));
  ------------------
  |  |  108|    308|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 4210|       |
 4211|    308|    err = mf_vl_mff_nx_pull_header(&b, vl_mff_map, &delete_field->field,
 4212|    308|                                   NULL, tlv_bitmap);
 4213|    308|    if (err) {
  ------------------
  |  Branch (4213:9): [True: 284, False: 24]
  ------------------
 4214|    284|        return err;
 4215|    284|    }
 4216|       |
 4217|     24|    return 0;
 4218|    308|}
ofp-actions.c:decode_NXAST_RAW_DEBUG_SLOW:
 6617|     68|{
 6618|     68|    if (!enable_debug) {
  ------------------
  |  Branch (6618:9): [True: 68, False: 0]
  ------------------
 6619|     68|        return OFPERR_OFPBAC_BAD_VENDOR_TYPE;
 6620|     68|    }
 6621|       |
 6622|      0|    ofpact_put_DEBUG_SLOW(out);
 6623|      0|    return 0;
 6624|     68|}
ofp-actions.c:decode_NXAST_RAW_DEBUG_RECIRC:
 6577|     36|{
 6578|     36|    if (!enable_debug) {
  ------------------
  |  Branch (6578:9): [True: 36, False: 0]
  ------------------
 6579|     36|        return OFPERR_OFPBAC_BAD_VENDOR_TYPE;
 6580|     36|    }
 6581|       |
 6582|      0|    ofpact_put_DEBUG_RECIRC(out);
 6583|      0|    return 0;
 6584|     36|}
ofp-actions.c:log_bad_action:
 7969|  63.6k|{
 7970|  63.6k|    if (!VLOG_DROP_WARN(&rl)) {
  ------------------
  |  |  234|  63.6k|#define VLOG_DROP_WARN(RL) vlog_should_drop(&this_module, VLL_WARN, RL)
  ------------------
  |  Branch (7970:9): [True: 0, False: 63.6k]
  ------------------
 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|  63.6k|}
ofp-actions.c:ofpacts_decode_for_action_set:
 8326|  10.6k|{
 8327|  10.6k|    enum ofperr error;
 8328|  10.6k|    struct ofpact *a;
 8329|  10.6k|    size_t start = out->size;
 8330|       |
 8331|  10.6k|    error = ofpacts_decode(in, n_in, version, vl_mff_map, ofpacts_tlv_bitmap,
 8332|  10.6k|                           out);
 8333|       |
 8334|  10.6k|    if (error) {
  ------------------
  |  Branch (8334:9): [True: 2.56k, False: 8.06k]
  ------------------
 8335|  2.56k|        return error;
 8336|  2.56k|    }
 8337|       |
 8338|  30.4k|    OFPACT_FOR_EACH (a, ofpact_end(out->data, start), out->size - start) {
  ------------------
  |  |  261|  37.9k|    for ((POS) = (OFPACTS); (POS) < ofpact_end(OFPACTS, OFPACTS_LEN);  \
  |  |  ------------------
  |  |  |  Branch (261:29): [True: 30.4k, False: 7.57k]
  |  |  ------------------
  |  |  262|  29.9k|         (POS) = ofpact_next(POS))
  ------------------
 8339|  30.4k|        if (!ofpact_is_allowed_in_actions_set(a)) {
  ------------------
  |  Branch (8339:13): [True: 489, False: 29.9k]
  ------------------
 8340|    489|            VLOG_WARN_RL(&rl, "disallowed action in action set");
  ------------------
  |  |  224|    489|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    489|    do {                                                                \
  |  |  |  |  288|    489|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    489|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 489]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    489|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 489]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8341|    489|            return OFPERR_OFPBAC_BAD_TYPE;
 8342|    489|        }
 8343|  30.4k|    }
 8344|       |
 8345|  7.57k|    return 0;
 8346|  8.06k|}
ofp-actions.c:ofpact_is_allowed_in_actions_set:
 8257|  30.4k|{
 8258|  30.4k|    return action_set_classify(a) != ACTION_SLOT_INVALID;
 8259|  30.4k|}
ofp-actions.c:ofpact_check__:
 8823|  78.5k|{
 8824|  78.5k|    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|  2.02k|    OFPACT(OUTPUT,          ofpact_output,      ofpact, "output")       \
  |  |  ------------------
  |  |  |  | 8826|  2.02k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 2.02k, False: 76.4k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  2.02k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   65|  2.02k|    OFPACT(GROUP,           ofpact_group,       ofpact, "group")        \
  |  |  ------------------
  |  |  |  | 8826|    576|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 576, False: 77.9k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    576|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   66|    576|    OFPACT(CONTROLLER,      ofpact_controller,  userdata, "controller") \
  |  |  ------------------
  |  |  |  | 8826|     41|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 41, False: 78.4k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     41|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   67|    142|    OFPACT(ENQUEUE,         ofpact_enqueue,     ofpact, "enqueue")      \
  |  |  ------------------
  |  |  |  | 8826|    142|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 142, False: 78.3k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    142|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   68|    142|    OFPACT(OUTPUT_REG,      ofpact_output_reg,  ofpact, "output_reg")   \
  |  |  ------------------
  |  |  |  | 8826|    102|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 102, False: 78.4k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    102|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   69|    559|    OFPACT(BUNDLE,          ofpact_bundle,      members, "bundle")      \
  |  |  ------------------
  |  |  |  | 8826|    559|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 559, False: 77.9k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    559|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   70|    559|                                                                        \
  |  |   71|    559|    /* Header changes. */                                               \
  |  |   72|  1.22k|    OFPACT(SET_FIELD,       ofpact_set_field,   ofpact, "set_field")    \
  |  |  ------------------
  |  |  |  | 8826|  1.22k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.22k, False: 77.3k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.22k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   73|  3.60k|    OFPACT(SET_VLAN_VID,    ofpact_vlan_vid,    ofpact, "set_vlan_vid") \
  |  |  ------------------
  |  |  |  | 8826|  3.60k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 3.60k, False: 74.9k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  3.60k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   74|  3.60k|    OFPACT(SET_VLAN_PCP,    ofpact_vlan_pcp,    ofpact, "set_vlan_pcp") \
  |  |  ------------------
  |  |  |  | 8826|  1.18k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.18k, False: 77.3k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.18k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   75|  2.70k|    OFPACT(STRIP_VLAN,      ofpact_null,        ofpact, "strip_vlan")   \
  |  |  ------------------
  |  |  |  | 8826|  2.70k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 2.70k, False: 75.8k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  2.70k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   76|  2.70k|    OFPACT(PUSH_VLAN,       ofpact_push_vlan,   ofpact, "push_vlan")    \
  |  |  ------------------
  |  |  |  | 8826|  1.53k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.53k, False: 76.9k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.53k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   77|  1.53k|    OFPACT(SET_ETH_SRC,     ofpact_mac,         ofpact, "mod_dl_src")   \
  |  |  ------------------
  |  |  |  | 8826|     38|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 38, False: 78.4k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     38|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   78|    108|    OFPACT(SET_ETH_DST,     ofpact_mac,         ofpact, "mod_dl_dst")   \
  |  |  ------------------
  |  |  |  | 8826|    108|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 108, False: 78.4k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    108|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   79|  1.52k|    OFPACT(SET_IPV4_SRC,    ofpact_ipv4,        ofpact, "mod_nw_src")   \
  |  |  ------------------
  |  |  |  | 8826|  1.52k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.52k, False: 77.0k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.52k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   80|  1.69k|    OFPACT(SET_IPV4_DST,    ofpact_ipv4,        ofpact, "mod_nw_dst")   \
  |  |  ------------------
  |  |  |  | 8826|  1.69k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.69k, False: 76.8k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.69k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   81|  1.86k|    OFPACT(SET_IP_DSCP,     ofpact_dscp,        ofpact, "mod_nw_tos")   \
  |  |  ------------------
  |  |  |  | 8826|  1.86k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.86k, False: 76.6k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.86k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   82|  1.86k|    OFPACT(SET_IP_ECN,      ofpact_ecn,         ofpact, "mod_nw_ecn")   \
  |  |  ------------------
  |  |  |  | 8826|  1.12k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.12k, False: 77.3k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.12k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   83|  1.12k|    OFPACT(SET_IP_TTL,      ofpact_ip_ttl,      ofpact, "mod_nw_ttl")   \
  |  |  ------------------
  |  |  |  | 8826|    409|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 409, False: 78.1k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    409|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   84|  1.65k|    OFPACT(SET_L4_SRC_PORT, ofpact_l4_port,     ofpact, "mod_tp_src")   \
  |  |  ------------------
  |  |  |  | 8826|  1.65k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.65k, False: 76.8k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.65k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   85|  3.41k|    OFPACT(SET_L4_DST_PORT, ofpact_l4_port,     ofpact, "mod_tp_dst")   \
  |  |  ------------------
  |  |  |  | 8826|  3.41k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 3.41k, False: 75.1k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  3.41k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   86|  3.41k|    OFPACT(REG_MOVE,        ofpact_reg_move,    ofpact, "move")         \
  |  |  ------------------
  |  |  |  | 8826|     50|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 50, False: 78.4k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     50|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   87|     67|    OFPACT(STACK_PUSH,      ofpact_stack,       ofpact, "push")         \
  |  |  ------------------
  |  |  |  | 8826|     67|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 67, False: 78.4k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     67|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   88|    454|    OFPACT(STACK_POP,       ofpact_stack,       ofpact, "pop")          \
  |  |  ------------------
  |  |  |  | 8826|    454|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 454, False: 78.0k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    454|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   89|  1.11k|    OFPACT(DEC_TTL,         ofpact_cnt_ids,     cnt_ids, "dec_ttl")     \
  |  |  ------------------
  |  |  |  | 8826|  1.11k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.11k, False: 77.4k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.11k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   90|  2.09k|    OFPACT(SET_MPLS_LABEL,  ofpact_mpls_label,  ofpact, "set_mpls_label") \
  |  |  ------------------
  |  |  |  | 8826|  2.09k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 2.09k, False: 76.4k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  2.09k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   91|  2.09k|    OFPACT(SET_MPLS_TC,     ofpact_mpls_tc,     ofpact, "set_mpls_tc")  \
  |  |  ------------------
  |  |  |  | 8826|    678|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 678, False: 77.8k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    678|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   92|    963|    OFPACT(SET_MPLS_TTL,    ofpact_mpls_ttl,    ofpact, "set_mpls_ttl") \
  |  |  ------------------
  |  |  |  | 8826|    963|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 963, False: 77.5k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    963|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   93|  3.20k|    OFPACT(DEC_MPLS_TTL,    ofpact_null,        ofpact, "dec_mpls_ttl") \
  |  |  ------------------
  |  |  |  | 8826|  3.20k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 3.20k, False: 75.3k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  3.20k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   94|  3.20k|    OFPACT(PUSH_MPLS,       ofpact_push_mpls,   ofpact, "push_mpls")    \
  |  |  ------------------
  |  |  |  | 8826|  2.55k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 2.55k, False: 75.9k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  2.55k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   95|  3.09k|    OFPACT(POP_MPLS,        ofpact_pop_mpls,    ofpact, "pop_mpls")     \
  |  |  ------------------
  |  |  |  | 8826|  3.09k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 3.09k, False: 75.4k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  3.09k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   96|  3.09k|    OFPACT(DEC_NSH_TTL,     ofpact_null,        ofpact, "dec_nsh_ttl")  \
  |  |  ------------------
  |  |  |  | 8826|  1.18k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.18k, False: 77.3k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.18k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   97|  1.18k|    OFPACT(DELETE_FIELD,    ofpact_delete_field, ofpact, "delete_field") \
  |  |  ------------------
  |  |  |  | 8826|     14|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 14, False: 78.5k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     14|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   98|     14|                                                                        \
  |  |   99|     14|    /* Generic encap & decap */                                         \
  |  |  100|  1.40k|    OFPACT(ENCAP,           ofpact_encap,       props, "encap")         \
  |  |  ------------------
  |  |  |  | 8826|  1.40k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.40k, False: 77.1k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.40k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  101|  8.97k|    OFPACT(DECAP,           ofpact_decap,       ofpact, "decap")        \
  |  |  ------------------
  |  |  |  | 8826|  8.97k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 8.97k, False: 69.5k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  8.97k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  102|  8.97k|                                                                        \
  |  |  103|  8.97k|    /* Metadata. */                                                     \
  |  |  104|  8.97k|    OFPACT(SET_TUNNEL,      ofpact_tunnel,      ofpact, "set_tunnel")   \
  |  |  ------------------
  |  |  |  | 8826|      7|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 7, False: 78.5k]
  |  |  |  |  ------------------
  |  |  |  | 8827|      7|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  105|     99|    OFPACT(SET_QUEUE,       ofpact_queue,       ofpact, "set_queue")    \
  |  |  ------------------
  |  |  |  | 8826|     99|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 99, False: 78.4k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     99|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  106|     99|    OFPACT(POP_QUEUE,       ofpact_null,        ofpact, "pop_queue")    \
  |  |  ------------------
  |  |  |  | 8826|     98|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 98, False: 78.4k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     98|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  107|    144|    OFPACT(FIN_TIMEOUT,     ofpact_fin_timeout, ofpact, "fin_timeout")  \
  |  |  ------------------
  |  |  |  | 8826|    144|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 144, False: 78.3k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    144|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  108|    144|                                                                        \
  |  |  109|    144|    /* Flow table interaction. */                                       \
  |  |  110|    295|    OFPACT(RESUBMIT,        ofpact_resubmit,    ofpact, "resubmit")     \
  |  |  ------------------
  |  |  |  | 8826|    295|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 295, False: 78.2k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    295|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  111|  10.8k|    OFPACT(LEARN,           ofpact_learn,       specs, "learn")         \
  |  |  ------------------
  |  |  |  | 8826|  10.8k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 10.8k, False: 67.6k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  10.8k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  112|  10.8k|    OFPACT(CONJUNCTION,     ofpact_conjunction, ofpact, "conjunction")  \
  |  |  ------------------
  |  |  |  | 8826|     39|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 39, False: 78.4k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     39|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  113|     39|                                                                        \
  |  |  114|     39|    /* Arithmetic. */                                                   \
  |  |  115|    123|    OFPACT(MULTIPATH,       ofpact_multipath,   ofpact, "multipath")    \
  |  |  ------------------
  |  |  |  | 8826|    123|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 123, False: 78.4k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    123|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  116|    123|                                                                        \
  |  |  117|    123|    /* Other. */                                                        \
  |  |  118|    157|    OFPACT(NOTE,            ofpact_note,        data, "note")           \
  |  |  ------------------
  |  |  |  | 8826|    157|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 157, False: 78.3k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    157|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  119|    191|    OFPACT(EXIT,            ofpact_null,        ofpact, "exit")         \
  |  |  ------------------
  |  |  |  | 8826|    191|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 191, False: 78.3k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    191|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  120|    191|    OFPACT(SAMPLE,          ofpact_sample,      ofpact, "sample")       \
  |  |  ------------------
  |  |  |  | 8826|     32|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 32, False: 78.4k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     32|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  121|     32|    OFPACT(UNROLL_XLATE,    ofpact_unroll_xlate, ofpact, "unroll_xlate") \
  |  |  ------------------
  |  |  |  | 8826|      0|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 0, False: 78.5k]
  |  |  |  |  ------------------
  |  |  |  | 8827|      0|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  122|  2.97k|    OFPACT(CT,              ofpact_conntrack,   ofpact, "ct")           \
  |  |  ------------------
  |  |  |  | 8826|  2.97k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 2.97k, False: 75.5k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  2.97k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  123|  2.97k|    OFPACT(CT_CLEAR,        ofpact_null,        ofpact, "ct_clear")     \
  |  |  ------------------
  |  |  |  | 8826|    125|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 125, False: 78.4k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    125|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  124|  2.37k|    OFPACT(NAT,             ofpact_nat,         ofpact, "nat")          \
  |  |  ------------------
  |  |  |  | 8826|  2.37k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 2.37k, False: 76.1k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  2.37k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  125|  2.37k|    OFPACT(OUTPUT_TRUNC,    ofpact_output_trunc,ofpact, "output_trunc") \
  |  |  ------------------
  |  |  |  | 8826|    953|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 953, False: 77.5k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    953|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  126|    953|    OFPACT(CLONE,           ofpact_nest,        actions, "clone")       \
  |  |  ------------------
  |  |  |  | 8826|    773|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 773, False: 77.7k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    773|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  127|    773|    OFPACT(CHECK_PKT_LARGER, ofpact_check_pkt_larger, ofpact,           \
  |  |  ------------------
  |  |  |  | 8826|     10|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 10, False: 78.5k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     10|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  128|     10|           "check_pkt_larger")                                          \
  |  |  129|     10|                                                                        \
  |  |  130|     10|    /* Debugging actions.                                               \
  |  |  131|     10|     *                                                                  \
  |  |  132|     10|     * These are intentionally undocumented, subject to change, and     \
  |  |  133|     10|     * only accepted if ovs-vswitchd is started with --enable-dummy. */ \
  |  |  134|     10|    OFPACT(DEBUG_RECIRC, ofpact_null,           ofpact, "debug_recirc") \
  |  |  ------------------
  |  |  |  | 8826|      0|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 0, False: 78.5k]
  |  |  |  |  ------------------
  |  |  |  | 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: 78.5k]
  |  |  |  |  ------------------
  |  |  |  | 8827|      0|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  136|      0|                                                                        \
  |  |  137|      0|    /* Instructions ("meter" is an action in OF1.5+). */                \
  |  |  138|    155|    OFPACT(METER,           ofpact_meter,       ofpact, "meter")        \
  |  |  ------------------
  |  |  |  | 8826|    155|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 155, False: 78.3k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    155|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  139|    155|    OFPACT(CLEAR_ACTIONS,   ofpact_null,        ofpact, "clear_actions") \
  |  |  ------------------
  |  |  |  | 8826|    140|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 140, False: 78.3k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    140|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  140|  7.39k|    OFPACT(WRITE_ACTIONS,   ofpact_nest,        actions, "write_actions") \
  |  |  ------------------
  |  |  |  | 8826|  7.39k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 7.39k, False: 71.1k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  7.39k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  141|  7.39k|    OFPACT(WRITE_METADATA,  ofpact_metadata,    ofpact, "write_metadata") \
  |  |  ------------------
  |  |  |  | 8826|     40|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 40, False: 78.4k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     40|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  142|    167|    OFPACT(GOTO_TABLE,      ofpact_goto_table,  ofpact, "goto_table")
  |  |  ------------------
  |  |  |  | 8826|    167|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 167, False: 78.3k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    167|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  ------------------
 8829|      0|#undef OFPACT
 8830|      0|    default:
  ------------------
  |  Branch (8830:5): [True: 0, False: 78.5k]
  ------------------
 8831|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 8832|  78.5k|    }
 8833|  78.5k|}
ofp-actions.c:check_OUTPUT:
  717|  2.02k|{
  718|  2.02k|    return ofpact_check_output_port(a->port, cp->max_ports);
  719|  2.02k|}
ofp-actions.c:check_GROUP:
  756|    576|{
  757|    576|    return 0;
  758|    576|}
ofp-actions.c:check_CONTROLLER:
 1074|     41|{
 1075|     41|    return 0;
 1076|     41|}
ofp-actions.c:check_ENQUEUE:
 1161|    142|{
 1162|    142|    if (ofp_to_u16(a->port) >= ofp_to_u16(cp->max_ports)
  ------------------
  |  Branch (1162:9): [True: 76, False: 66]
  ------------------
 1163|    142|        && a->port != OFPP_IN_PORT
  ------------------
  |  |   39|     76|#define OFPP_IN_PORT    OFP_PORT_C(0xfff8) /* Where the packet came in. */
  |  |  ------------------
  |  |  |  |  157|    218|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1163:12): [True: 10, False: 66]
  ------------------
 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|    142|    return 0;
 1168|    142|}
ofp-actions.c:check_OUTPUT_REG:
 1326|    102|{
 1327|    102|    return mf_check_src(&a->src, cp->match);
 1328|    102|}
ofp-actions.c:check_BUNDLE:
 1552|    559|{
 1553|    559|    return bundle_check(a, cp->max_ports, cp->match);
 1554|    559|}
ofp-actions.c:check_SET_FIELD:
 3352|  1.22k|{
 3353|  1.22k|    const struct mf_field *mf = a->field;
 3354|  1.22k|    struct flow *flow = &cp->match->flow;
 3355|  1.22k|    ovs_be16 *tci = &flow->vlans[0].tci;
 3356|       |
 3357|       |    /* Require OXM_OF_VLAN_VID to have an existing VLAN header. */
 3358|  1.22k|    if (!mf_are_prereqs_ok(mf, flow, NULL)
  ------------------
  |  Branch (3358:9): [True: 372, False: 853]
  ------------------
 3359|    853|        || (mf->id == MFF_VLAN_VID && !(*tci & htons(VLAN_CFI)))) {
  ------------------
  |  Branch (3359:13): [True: 195, False: 658]
  |  Branch (3359:39): [True: 10, False: 185]
  ------------------
 3360|    382|        VLOG_WARN_RL(&rl, "set_field %s lacks correct prerequisites",
  ------------------
  |  |  224|    382|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    382|    do {                                                                \
  |  |  |  |  288|    382|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    382|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 382]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    382|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 382]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3361|    382|                     mf->name);
 3362|    382|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 3363|    382|    }
 3364|       |
 3365|       |    /* Remember if we saw a VLAN tag in the flow, to aid translating to
 3366|       |     * OpenFlow 1.1 if need be. */
 3367|    843|    a->flow_has_vlan = (*tci & htons(VLAN_CFI)) != 0;
 3368|    843|    if (mf->id == MFF_VLAN_TCI) {
  ------------------
  |  Branch (3368:9): [True: 27, False: 816]
  ------------------
 3369|       |        /* The set field may add or remove the VLAN tag,
 3370|       |         * Mark the status temporarily. */
 3371|     27|        *tci = a->value->be16;
 3372|     27|    }
 3373|       |
 3374|    843|    return 0;
 3375|  1.22k|}
ofp-actions.c:check_SET_VLAN_VID:
 1649|  3.60k|{
 1650|       |    /* Remember if we saw a vlan tag in the flow to aid translating to OpenFlow
 1651|       |     * 1.1+ if need be. */
 1652|  3.60k|    ovs_be16 *tci = &cp->match->flow.vlans[0].tci;
 1653|  3.60k|    a->flow_has_vlan = (*tci & htons(VLAN_CFI)) != 0;
 1654|  3.60k|    if (!a->flow_has_vlan && !a->push_vlan_if_needed) {
  ------------------
  |  Branch (1654:9): [True: 424, False: 3.17k]
  |  Branch (1654:30): [True: 115, False: 309]
  ------------------
 1655|    115|        inconsistent_match(&cp->usable_protocols);
 1656|    115|    }
 1657|       |
 1658|       |    /* Temporarily mark that we have a vlan tag. */
 1659|  3.60k|    *tci |= htons(VLAN_CFI);
 1660|       |
 1661|  3.60k|    return 0;
 1662|  3.60k|}
ofp-actions.c:inconsistent_match:
 8812|  20.3k|{
 8813|  20.3k|    *usable_protocols &= OFPUTIL_P_OF10_ANY;
  ------------------
  |  |   60|  20.3k|#define OFPUTIL_P_OF10_ANY (OFPUTIL_P_OF10_STD_ANY | OFPUTIL_P_OF10_NXM_ANY)
  |  |  ------------------
  |  |  |  |   58|  20.3k|#define OFPUTIL_P_OF10_STD_ANY (OFPUTIL_P_OF10_STD | OFPUTIL_P_OF10_STD_TID)
  |  |  ------------------
  |  |               #define OFPUTIL_P_OF10_ANY (OFPUTIL_P_OF10_STD_ANY | OFPUTIL_P_OF10_NXM_ANY)
  |  |  ------------------
  |  |  |  |   59|  20.3k|#define OFPUTIL_P_OF10_NXM_ANY (OFPUTIL_P_OF10_NXM | OFPUTIL_P_OF10_NXM_TID)
  |  |  ------------------
  ------------------
 8814|  20.3k|}
ofp-actions.c:check_SET_VLAN_PCP:
 1757|  1.18k|{
 1758|       |    /* Remember if we saw a vlan tag in the flow to aid translating to OpenFlow
 1759|       |     * 1.1+ if need be. */
 1760|  1.18k|    ovs_be16 *tci = &cp->match->flow.vlans[0].tci;
 1761|  1.18k|    a->flow_has_vlan = (*tci & htons(VLAN_CFI)) != 0;
 1762|  1.18k|    if (!a->flow_has_vlan && !a->push_vlan_if_needed) {
  ------------------
  |  Branch (1762:9): [True: 645, False: 543]
  |  Branch (1762:30): [True: 382, False: 263]
  ------------------
 1763|    382|        inconsistent_match(&cp->usable_protocols);
 1764|    382|    }
 1765|       |
 1766|       |    /* Temporarily mark that we have a vlan tag. */
 1767|  1.18k|    *tci |= htons(VLAN_CFI);
 1768|       |
 1769|  1.18k|    return 0;
 1770|  1.18k|}
ofp-actions.c:check_STRIP_VLAN:
 1826|  2.70k|{
 1827|  2.70k|    if (!(cp->match->flow.vlans[0].tci & htons(VLAN_CFI))) {
  ------------------
  |  Branch (1827:9): [True: 1.34k, False: 1.36k]
  ------------------
 1828|  1.34k|        inconsistent_match(&cp->usable_protocols);
 1829|  1.34k|    }
 1830|       |    flow_pop_vlan(&cp->match->flow, NULL);
 1831|  2.70k|    return 0;
 1832|  2.70k|}
ofp-actions.c:check_PUSH_VLAN:
 1894|  1.53k|{
 1895|  1.53k|    struct flow *flow = &cp->match->flow;
 1896|  1.53k|    if (flow->vlans[FLOW_MAX_VLAN_HEADERS - 1].tci & htons(VLAN_CFI)) {
  ------------------
  |  |   75|  1.53k|#define FLOW_MAX_VLAN_HEADERS 2
  ------------------
  |  Branch (1896:9): [True: 338, False: 1.19k]
  ------------------
 1897|       |        /* Support maximum (FLOW_MAX_VLAN_HEADERS) VLAN headers. */
 1898|    338|        return OFPERR_OFPBAC_BAD_TAG;
 1899|    338|    }
 1900|       |    /* Temporary mark that we have a vlan tag. */
 1901|  1.19k|    flow_push_vlan_uninit(flow, NULL);
 1902|       |    flow->vlans[0].tci |= htons(VLAN_CFI);
 1903|  1.19k|    return 0;
 1904|  1.53k|}
ofp-actions.c:check_SET_ETH_SRC:
 1998|     38|{
 1999|     38|    return 0;
 2000|     38|}
ofp-actions.c:check_SET_ETH_DST:
 2005|    108|{
 2006|    108|    return 0;
 2007|    108|}
ofp-actions.c:check_SET_IPV4_SRC:
 2100|  1.52k|{
 2101|  1.52k|    return check_set_ipv4(cp);
 2102|  1.52k|}
ofp-actions.c:check_set_ipv4:
 2089|  3.21k|{
 2090|  3.21k|    ovs_be16 dl_type = get_dl_type(&cp->match->flow);
 2091|  3.21k|    if (dl_type != htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (2091:9): [True: 2.29k, False: 922]
  ------------------
 2092|  2.29k|        inconsistent_match(&cp->usable_protocols);
 2093|  2.29k|    }
 2094|  3.21k|    return 0;
 2095|  3.21k|}
ofp-actions.c:check_SET_IPV4_DST:
 2107|  1.69k|{
 2108|  1.69k|    return check_set_ipv4(cp);
 2109|  1.69k|}
ofp-actions.c:check_SET_IP_DSCP:
 2176|  1.86k|{
 2177|  1.86k|    return check_set_ip(cp);
 2178|  1.86k|}
ofp-actions.c:check_set_ip:
 2166|  4.52k|{
 2167|  4.52k|    if (!is_ip_any(&cp->match->flow)) {
  ------------------
  |  Branch (2167:9): [True: 3.39k, False: 1.13k]
  ------------------
 2168|  3.39k|        inconsistent_match(&cp->usable_protocols);
 2169|  3.39k|    }
 2170|  4.52k|    return 0;
 2171|  4.52k|}
ofp-actions.c:check_SET_IP_ECN:
 2240|  1.12k|{
 2241|  1.12k|    return check_set_ip(cp);
 2242|  1.12k|}
ofp-actions.c:check_SET_IP_TTL:
 2295|    409|{
 2296|    409|    return check_set_ip(cp);
 2297|    409|}
ofp-actions.c:check_SET_L4_SRC_PORT:
 2411|  1.65k|{
 2412|  1.65k|    return check_set_l4_port(a, cp);
 2413|  1.65k|}
ofp-actions.c:check_set_l4_port:
 2392|  5.06k|{
 2393|  5.06k|    const struct flow *flow = &cp->match->flow;
 2394|  5.06k|    if (!is_ip_any(flow)
  ------------------
  |  Branch (2394:9): [True: 3.15k, False: 1.90k]
  ------------------
 2395|  1.90k|        || flow->nw_frag & FLOW_NW_FRAG_LATER
  ------------------
  |  |   55|  6.96k|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  |  Branch (2395:12): [True: 0, False: 1.90k]
  ------------------
 2396|  1.90k|        || (flow->nw_proto != IPPROTO_TCP &&
  ------------------
  |  Branch (2396:13): [True: 1.80k, False: 102]
  ------------------
 2397|  1.80k|            flow->nw_proto != IPPROTO_UDP &&
  ------------------
  |  Branch (2397:13): [True: 1.44k, False: 356]
  ------------------
 2398|  4.31k|            flow->nw_proto != IPPROTO_SCTP)) {
  ------------------
  |  Branch (2398:13): [True: 1.16k, False: 287]
  ------------------
 2399|  4.31k|        inconsistent_match(&cp->usable_protocols);
 2400|  4.31k|    }
 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|  5.06k|    a->flow_ip_proto = flow->nw_proto;
 2405|       |
 2406|  5.06k|    return 0;
 2407|  5.06k|}
ofp-actions.c:check_SET_L4_DST_PORT:
 2417|  3.41k|{
 2418|  3.41k|    return check_set_l4_port(a, cp);
 2419|  3.41k|}
ofp-actions.c:check_REG_MOVE:
 2722|     50|{
 2723|     50|    return nxm_reg_move_check(a, cp->match);
 2724|     50|}
ofp-actions.c:check_STACK_PUSH:
 3572|     67|{
 3573|     67|    return nxm_stack_push_check(a, cp->match);
 3574|     67|}
ofp-actions.c:check_STACK_POP:
 3579|    454|{
 3580|    454|    return nxm_stack_pop_check(a, cp->match);
 3581|    454|}
ofp-actions.c:check_DEC_TTL:
 3755|  1.11k|{
 3756|  1.11k|    return check_set_ip(cp);
 3757|  1.11k|}
ofp-actions.c:check_SET_MPLS_LABEL:
 3828|  2.09k|{
 3829|  2.09k|    return check_set_mpls(cp);
 3830|  2.09k|}
ofp-actions.c:check_set_mpls:
 3817|  6.94k|{
 3818|  6.94k|    ovs_be16 dl_type = get_dl_type(&cp->match->flow);
 3819|  6.94k|    if (!eth_type_mpls(dl_type)) {
  ------------------
  |  Branch (3819:9): [True: 5.55k, False: 1.38k]
  ------------------
 3820|  5.55k|        inconsistent_match(&cp->usable_protocols);
 3821|  5.55k|    }
 3822|  6.94k|    return 0;
 3823|  6.94k|}
ofp-actions.c:check_SET_MPLS_TC:
 3889|    678|{
 3890|    678|    return check_set_mpls(cp);
 3891|    678|}
ofp-actions.c:check_SET_MPLS_TTL:
 3947|    963|{
 3948|    963|    return check_set_mpls(cp);
 3949|    963|}
ofp-actions.c:check_DEC_MPLS_TTL:
 3984|  3.20k|{
 3985|  3.20k|    return check_set_mpls(cp);
 3986|  3.20k|}
ofp-actions.c:check_PUSH_MPLS:
 4037|  2.55k|{
 4038|  2.55k|    struct flow *flow = &cp->match->flow;
 4039|       |
 4040|  2.55k|    if (flow->packet_type != htonl(PT_ETH)) {
  ------------------
  |  Branch (4040:9): [True: 10, False: 2.54k]
  ------------------
 4041|     10|        inconsistent_match(&cp->usable_protocols);
 4042|     10|    }
 4043|  2.55k|    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|  2.55k|    flow->nw_proto = 0;
 4049|       |
 4050|  2.55k|    return 0;
 4051|  2.55k|}
ofp-actions.c:check_POP_MPLS:
 4094|  3.09k|{
 4095|  3.09k|    struct flow *flow = &cp->match->flow;
 4096|  3.09k|    ovs_be16 dl_type = get_dl_type(flow);
 4097|       |
 4098|  3.09k|    if (flow->packet_type != htonl(PT_ETH) || !eth_type_mpls(dl_type)) {
  ------------------
  |  Branch (4098:9): [True: 629, False: 2.46k]
  |  Branch (4098:47): [True: 2.00k, False: 458]
  ------------------
 4099|  2.63k|        inconsistent_match(&cp->usable_protocols);
 4100|  2.63k|    }
 4101|  3.09k|    flow->dl_type = a->ethertype;
 4102|  3.09k|    return 0;
 4103|  3.09k|}
ofp-actions.c:check_DEC_NSH_TTL:
 4829|  1.18k|{
 4830|  1.18k|    struct flow *flow = &cp->match->flow;
 4831|  1.18k|    if (flow->packet_type != htonl(PT_NSH) &&
  ------------------
  |  Branch (4831:9): [True: 451, False: 733]
  ------------------
 4832|    451|        flow->dl_type != htons(ETH_TYPE_NSH)) {
  ------------------
  |  Branch (4832:9): [True: 257, False: 194]
  ------------------
 4833|    257|        inconsistent_match(&cp->usable_protocols);
 4834|    257|    }
 4835|  1.18k|    return 0;
 4836|  1.18k|}
ofp-actions.c:check_DELETE_FIELD:
 4256|     14|{
 4257|     14|    if (odf->field->id < MFF_TUN_METADATA0 ||
  ------------------
  |  Branch (4257:9): [True: 1, False: 13]
  ------------------
 4258|     13|        odf->field->id > MFF_TUN_METADATA63) {
  ------------------
  |  Branch (4258:9): [True: 10, False: 3]
  ------------------
 4259|     11|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 4260|     11|    }
 4261|      3|    return 0;
 4262|     14|}
ofp-actions.c:check_ENCAP:
 4664|  1.40k|{
 4665|  1.40k|    struct flow *flow = &cp->match->flow;
 4666|  1.40k|    flow->packet_type = a->new_pkt_type;
 4667|  1.40k|    if (pt_ns(flow->packet_type) == OFPHTN_ETHERTYPE) {
  ------------------
  |  Branch (4667:9): [True: 1.24k, False: 160]
  ------------------
 4668|  1.24k|        flow->dl_type = htons(pt_ns_type(flow->packet_type));
 4669|  1.24k|    }
 4670|  1.40k|    if (!is_ip_any(flow)) {
  ------------------
  |  Branch (4670:9): [True: 1.39k, False: 12]
  ------------------
 4671|  1.39k|        flow->nw_proto = 0;
 4672|  1.39k|    }
 4673|  1.40k|    return 0;
 4674|  1.40k|}
ofp-actions.c:check_DECAP:
 4781|  8.97k|{
 4782|  8.97k|    struct flow *flow = &cp->match->flow;
 4783|  8.97k|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (4783:9): [True: 5.69k, False: 3.28k]
  ------------------
 4784|       |        /* Adjust the packet_type to allow subsequent actions. */
 4785|  5.69k|        flow->packet_type = PACKET_TYPE_BE(OFPHTN_ETHERTYPE,
  ------------------
  |  | 1565|  5.69k|#define PACKET_TYPE_BE(NS, NS_TYPE) (htonl((NS) << 16 | (NS_TYPE)))
  ------------------
 4786|  5.69k|                                           ntohs(flow->dl_type));
 4787|  5.69k|    } else {
 4788|       |        /* The actual packet_type is only known after decapsulation.
 4789|       |         * Do not allow subsequent actions that depend on packet headers. */
 4790|  3.28k|        flow->packet_type = htonl(PT_UNKNOWN);
 4791|  3.28k|        flow->dl_type = OVS_BE16_MAX;
  ------------------
  |  |   42|  3.28k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
 4792|  3.28k|    }
 4793|  8.97k|    return 0;
 4794|  8.97k|}
ofp-actions.c:check_SET_TUNNEL:
 4177|      7|{
 4178|      7|    return 0;
 4179|      7|}
ofp-actions.c:check_SET_QUEUE:
 4299|     99|{
 4300|     99|    return 0;
 4301|     99|}
ofp-actions.c:check_POP_QUEUE:
 4337|     98|{
 4338|     98|    return 0;
 4339|     98|}
ofp-actions.c:check_FIN_TIMEOUT:
 4444|    144|{
 4445|    144|    if (cp->match->flow.nw_proto != IPPROTO_TCP) {
  ------------------
  |  Branch (4445:9): [True: 77, False: 67]
  ------------------
 4446|     77|        inconsistent_match(&cp->usable_protocols);
 4447|     77|    }
 4448|    144|    return 0;
 4449|    144|}
ofp-actions.c:check_RESUBMIT:
 5051|    295|{
 5052|    295|    if (a->with_ct_orig && !is_ct_valid(&cp->match->flow, &cp->match->wc,
  ------------------
  |  Branch (5052:9): [True: 3, False: 292]
  |  Branch (5052:28): [True: 3, False: 0]
  ------------------
 5053|      3|                                        NULL)) {
 5054|      3|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 5055|      3|    }
 5056|    292|    return 0;
 5057|    295|}
ofp-actions.c:check_LEARN:
 5646|  10.8k|{
 5647|  10.8k|    return learn_check(a, cp->match);
 5648|  10.8k|}
ofp-actions.c:check_CONJUNCTION:
 5739|     39|{
 5740|     39|    return 0;
 5741|     39|}
ofp-actions.c:check_MULTIPATH:
 5873|    123|{
 5874|    123|    return multipath_check(a, cp->match);
 5875|    123|}
ofp-actions.c:check_NOTE:
 5959|    157|{
 5960|    157|    return 0;
 5961|    157|}
ofp-actions.c:check_EXIT:
 5996|    191|{
 5997|    191|    return 0;
 5998|    191|}
ofp-actions.c:check_SAMPLE:
 6561|     32|{
 6562|     32|    return 0;
 6563|     32|}
ofp-actions.c:check_CT:
 7068|  2.97k|{
 7069|  2.97k|    struct flow *flow = &cp->match->flow;
 7070|       |
 7071|  2.97k|    if (!dl_type_is_ip_any(get_dl_type(flow))
  ------------------
  |  Branch (7071:9): [True: 66, False: 2.90k]
  ------------------
 7072|  2.90k|        || (flow->ct_state & CS_INVALID && a->flags & NX_CT_F_COMMIT)
  ------------------
  |  Branch (7072:13): [True: 0, False: 2.90k]
  |  Branch (7072:44): [True: 0, False: 0]
  ------------------
 7073|  2.90k|        || (a->alg == IPPORT_FTP && flow->nw_proto != IPPROTO_TCP)
  ------------------
  |  |  695|  5.80k|#define IPPORT_FTP  21
  ------------------
  |  Branch (7073:13): [True: 351, False: 2.55k]
  |  Branch (7073:37): [True: 34, False: 317]
  ------------------
 7074|  2.87k|        || (a->alg == IPPORT_TFTP && flow->nw_proto != IPPROTO_UDP)) {
  ------------------
  |  |  699|  5.74k|#define IPPORT_TFTP  69
  ------------------
  |  Branch (7074:13): [True: 18, False: 2.85k]
  |  Branch (7074:38): [True: 10, False: 8]
  ------------------
 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|    110|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 7079|    110|    }
 7080|       |
 7081|  2.86k|    if (a->zone_src.field) {
  ------------------
  |  Branch (7081:9): [True: 479, False: 2.38k]
  ------------------
 7082|    479|        return mf_check_src(&a->zone_src, cp->match);
 7083|    479|    }
 7084|       |
 7085|  2.38k|    return check_subactions(a->actions, ofpact_ct_get_action_len(a), cp);
 7086|  2.86k|}
ofp-actions.c:check_subactions:
 6123|  3.15k|{
 6124|  3.15k|    struct ofpact_check_params sub = *cp;
 6125|  3.15k|    enum ofperr error = ofpacts_check(ofpacts, ofpacts_len, &sub);
 6126|  3.15k|    cp->usable_protocols &= sub.usable_protocols;
 6127|  3.15k|    return error;
 6128|  3.15k|}
ofp-actions.c:check_CT_CLEAR:
 7122|    125|{
 7123|    125|    return 0;
 7124|    125|}
ofp-actions.c:check_NAT:
 7480|  2.37k|{
 7481|  2.37k|    ovs_be16 dl_type = get_dl_type(&cp->match->flow);
 7482|  2.37k|    if (!dl_type_is_ip_any(dl_type) ||
  ------------------
  |  Branch (7482:9): [True: 0, False: 2.37k]
  ------------------
 7483|  2.37k|        (a->range_af == AF_INET && dl_type != htons(ETH_TYPE_IP)) ||
  ------------------
  |  Branch (7483:10): [True: 975, False: 1.40k]
  |  Branch (7483:36): [True: 208, False: 767]
  ------------------
 7484|  2.17k|        (a->range_af == AF_INET6 && dl_type != htons(ETH_TYPE_IPV6))) {
  ------------------
  |  Branch (7484:10): [True: 0, False: 2.17k]
  |  Branch (7484:37): [True: 0, False: 0]
  ------------------
 7485|    208|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 7486|    208|    }
 7487|  2.17k|    return 0;
 7488|  2.37k|}
ofp-actions.c:check_OUTPUT_TRUNC:
 7550|    953|{
 7551|    953|    return ofpact_check_output_port(a->port, cp->max_ports);
 7552|    953|}
ofp-actions.c:check_CLONE:
 6132|    773|{
 6133|    773|    return check_subactions(a->actions, ofpact_nest_get_action_len(a), cp);
 6134|    773|}
ofp-actions.c:check_CHECK_PKT_LARGER:
 7911|     10|{
 7912|     10|    return 0;
 7913|     10|}
ofp-actions.c:check_METER:
 7601|    155|{
 7602|    155|    uint32_t mid = a->meter_id;
 7603|    155|    return mid == 0 || mid > OFPM13_MAX ? OFPERR_OFPMMFC_INVALID_METER : 0;
  ------------------
  |  Branch (7603:12): [True: 11, False: 144]
  |  Branch (7603:24): [True: 0, False: 144]
  ------------------
 7604|    155|}
ofp-actions.c:check_CLEAR_ACTIONS:
 7635|    140|{
 7636|    140|    return 0;
 7637|    140|}
ofp-actions.c:check_WRITE_ACTIONS:
 7698|  7.39k|{
 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|  7.39k|    struct ofpact_check_params tmp = *cp;
 7702|  7.39k|    return ofpacts_check(a->actions, ofpact_nest_get_action_len(a), &tmp);
 7703|  7.39k|}
ofp-actions.c:check_WRITE_METADATA:
 7794|     40|{
 7795|     40|    return 0;
 7796|     40|}
ofp-actions.c:check_GOTO_TABLE:
 7958|    167|{
 7959|    167|    if ((cp->table_id != 255 && a->table_id <= cp->table_id)
  ------------------
  |  Branch (7959:10): [True: 58, False: 109]
  |  Branch (7959:33): [True: 36, False: 22]
  ------------------
 7960|    131|        || (cp->n_tables != 255 && a->table_id >= cp->n_tables)) {
  ------------------
  |  Branch (7960:13): [True: 0, False: 131]
  |  Branch (7960:36): [True: 0, False: 0]
  ------------------
 7961|     36|        return OFPERR_OFPBIC_BAD_TABLE_ID;
 7962|     36|    }
 7963|    131|    return 0;
 7964|    167|}
ofp-actions.c:ofpacts_verify:
 9006|  86.1k|{
 9007|  86.1k|    const struct ofpact *a;
 9008|  86.1k|    enum ovs_instruction_type inst;
 9009|       |
 9010|  86.1k|    inst = OVSINST_OFPIT13_METER;
 9011|   100k|    OFPACT_FOR_EACH (a, ofpacts, ofpacts_len) {
  ------------------
  |  |  261|   180k|    for ((POS) = (OFPACTS); (POS) < ofpact_end(OFPACTS, OFPACTS_LEN);  \
  |  |  ------------------
  |  |  |  Branch (261:29): [True: 100k, False: 79.8k]
  |  |  ------------------
  |  |  262|  94.0k|         (POS) = ofpact_next(POS))
  ------------------
 9012|   100k|        enum ovs_instruction_type next;
 9013|   100k|        enum ofperr error;
 9014|       |
 9015|   100k|        if (a->type == OFPACT_CONJUNCTION) {
  ------------------
  |  Branch (9015:13): [True: 3.14k, False: 97.2k]
  ------------------
 9016|  6.75k|            OFPACT_FOR_EACH (a, ofpacts, ofpacts_len) {
  ------------------
  |  |  261|  8.09k|    for ((POS) = (OFPACTS); (POS) < ofpact_end(OFPACTS, OFPACTS_LEN);  \
  |  |  ------------------
  |  |  |  Branch (261:29): [True: 6.75k, False: 1.34k]
  |  |  ------------------
  |  |  262|  4.95k|         (POS) = ofpact_next(POS))
  ------------------
 9017|  6.75k|                if (a->type != OFPACT_CONJUNCTION && a->type != OFPACT_NOTE) {
  ------------------
  |  Branch (9017:21): [True: 5.34k, False: 1.40k]
  |  Branch (9017:54): [True: 1.80k, False: 3.54k]
  ------------------
 9018|  1.80k|                    verify_error(errorp, "\"conjunction\" actions may be used "
 9019|  1.80k|                                 "along with \"note\" but not any other kind "
 9020|  1.80k|                                 "of action (such as the \"%s\" action used "
 9021|  1.80k|                                 "here)", ofpact_name(a->type));
 9022|  1.80k|                    return OFPERR_NXBAC_BAD_CONJUNCTION;
 9023|  1.80k|                }
 9024|  6.75k|            }
 9025|  1.34k|            return 0;
 9026|  3.14k|        }
 9027|       |
 9028|  97.2k|        error = ofpacts_verify_nested(a, outer_action, errorp);
 9029|  97.2k|        if (error) {
  ------------------
  |  Branch (9029:13): [True: 3.12k, False: 94.1k]
  ------------------
 9030|  3.12k|            return error;
 9031|  3.12k|        }
 9032|       |
 9033|  94.1k|        next = ovs_instruction_type_from_ofpact_type(a->type, version);
 9034|  94.1k|        if (a > ofpacts
  ------------------
  |  Branch (9034:13): [True: 37.7k, False: 56.4k]
  ------------------
 9035|  37.7k|            && (inst == OVSINST_OFPIT11_APPLY_ACTIONS
  ------------------
  |  Branch (9035:16): [True: 88, False: 37.6k]
  |  Branch (9035:17): [True: 37.5k, False: 231]
  ------------------
 9036|  37.7k|                ? next < inst
 9037|  37.7k|                : next <= inst)) {
 9038|     88|            const char *name = ovs_instruction_name_from_type(inst);
 9039|     88|            const char *next_name = ovs_instruction_name_from_type(next);
 9040|       |
 9041|     88|            if (next == inst) {
  ------------------
  |  Branch (9041:17): [True: 6, False: 82]
  ------------------
 9042|      6|                verify_error(errorp, "duplicate %s instruction not allowed, "
 9043|      6|                             "for OpenFlow 1.1+ compatibility", name);
 9044|     82|            } else {
 9045|     82|                verify_error(errorp, "invalid instruction ordering: "
 9046|     82|                             "%s must appear before %s, "
 9047|     82|                             "for OpenFlow 1.1+ compatibility",
 9048|     82|                             next_name, name);
 9049|     82|            }
 9050|     88|            return OFPERR_OFPBAC_UNSUPPORTED_ORDER;
 9051|     88|        }
 9052|  94.0k|        if (!((1u << next) & allowed_ovsinsts)) {
  ------------------
  |  Branch (9052:13): [True: 30, False: 94.0k]
  ------------------
 9053|     30|            const char *name = ovs_instruction_name_from_type(next);
 9054|       |
 9055|     30|            if (next == OVSINST_OFPIT13_METER && version >= OFP15_VERSION) {
  ------------------
  |  Branch (9055:17): [True: 0, False: 30]
  |  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|     30|            } else {
 9059|     30|                verify_error(errorp, "%s instruction not allowed here", name);
 9060|     30|                return OFPERR_OFPBIC_UNSUP_INST;
 9061|     30|            }
 9062|     30|        }
 9063|       |
 9064|  94.0k|        inst = next;
 9065|  94.0k|    }
 9066|       |
 9067|  79.8k|    return 0;
 9068|  86.1k|}
ofp-actions.c:verify_error:
 8916|  5.04k|{
 8917|  5.04k|    va_list args;
 8918|  5.04k|    va_start(args, format);
 8919|  5.04k|    char *error = xvasprintf(format, args);
 8920|  5.04k|    va_end(args);
 8921|       |
 8922|  5.04k|    if (errorp) {
  ------------------
  |  Branch (8922:9): [True: 0, False: 5.04k]
  ------------------
 8923|      0|        *errorp = error;
 8924|  5.04k|    } else {
 8925|  5.04k|        VLOG_WARN("%s", error);
  ------------------
  |  |  209|  5.04k|#define VLOG_WARN(...) VLOG(VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  280|  5.04k|    do {                                                \
  |  |  |  |  281|  5.04k|        enum vlog_level level__ = LEVEL;                \
  |  |  |  |  282|  5.04k|        if (this_module.min_level >= level__) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (282:13): [True: 0, False: 5.04k]
  |  |  |  |  ------------------
  |  |  |  |  283|      0|            vlog(&this_module, level__, __VA_ARGS__);   \
  |  |  |  |  284|      0|        }                                               \
  |  |  |  |  285|  5.04k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (285:14): [Folded, False: 5.04k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8926|  5.04k|        free(error);
 8927|  5.04k|    }
 8928|  5.04k|}
ofp-actions.c:ofpacts_verify_nested:
 8949|  97.2k|{
 8950|  97.2k|    const struct mf_field *field = ofpact_get_mf_dst(a);
 8951|       |
 8952|  97.2k|    if (field && field_requires_ct(field->id) && outer_action != OFPACT_CT) {
  ------------------
  |  Branch (8952:9): [True: 10.5k, False: 86.7k]
  |  Branch (8952:18): [True: 495, False: 10.0k]
  |  Branch (8952:50): [True: 58, False: 437]
  ------------------
 8953|     58|        verify_error(errorp, "cannot set CT fields outside of ct action");
 8954|     58|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 8955|     58|    }
 8956|  97.2k|    if (a->type == OFPACT_NAT) {
  ------------------
  |  Branch (8956:9): [True: 6.20k, False: 91.0k]
  ------------------
 8957|  6.20k|        if (outer_action != OFPACT_CT) {
  ------------------
  |  Branch (8957:13): [True: 2.94k, False: 3.25k]
  ------------------
 8958|  2.94k|            verify_error(errorp,
 8959|  2.94k|                         "Cannot have NAT action outside of \"ct\" action");
 8960|  2.94k|            return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 8961|  2.94k|        }
 8962|  3.25k|        return 0;
 8963|  6.20k|    }
 8964|       |
 8965|  91.0k|    if (outer_action) {
  ------------------
  |  Branch (8965:9): [True: 558, False: 90.4k]
  ------------------
 8966|    558|        ovs_assert(outer_action == OFPACT_WRITE_ACTIONS
  ------------------
  |  |   62|    558|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (8966:20): [True: 0, False: 558]
  ------------------
 8967|    558|                   || outer_action == OFPACT_CT
  ------------------
  |  Branch (8967:23): [True: 558, False: 0]
  ------------------
 8968|      0|                   || outer_action == OFPACT_CLONE);
  ------------------
  |  Branch (8968:23): [True: 0, False: 0]
  ------------------
 8969|       |
 8970|    558|        if (outer_action == OFPACT_CT) {
  ------------------
  |  Branch (8970:13): [True: 558, False: 0]
  ------------------
 8971|    558|            if (!field) {
  ------------------
  |  Branch (8971:17): [True: 88, False: 470]
  ------------------
 8972|     88|                return unsupported_nesting(a->type, outer_action, errorp);
 8973|    470|            } else if (!field_requires_ct(field->id)) {
  ------------------
  |  Branch (8973:24): [True: 33, False: 437]
  ------------------
 8974|     33|                verify_error(errorp,
 8975|     33|                             "%s action doesn't support nested modification "
 8976|     33|                             "of %s", ofpact_name(outer_action), field->name);
 8977|     33|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 8978|     33|            }
 8979|    558|        }
 8980|       |
 8981|    437|        if (a->type == OFPACT_METER) {
  ------------------
  |  Branch (8981:13): [True: 0, False: 437]
  ------------------
 8982|      0|            return unsupported_nesting(a->type, outer_action, errorp);
 8983|      0|        }
 8984|    437|    }
 8985|       |
 8986|  90.9k|    return 0;
 8987|  91.0k|}
ofp-actions.c:field_requires_ct:
 8941|  11.0k|{
 8942|  11.0k|    return field == MFF_CT_MARK || field == MFF_CT_LABEL;
  ------------------
  |  Branch (8942:12): [True: 932, False: 10.0k]
  |  Branch (8942:36): [True: 0, False: 10.0k]
  ------------------
 8943|  11.0k|}
ofp-actions.c:unsupported_nesting:
 8933|     88|{
 8934|     88|    verify_error(errorp, "%s action doesn't support nested action %s",
 8935|     88|                 ofpact_name(outer_action), ofpact_name(action));
 8936|     88|    return OFPERR_OFPBAC_BAD_ARGUMENT;
 8937|     88|}
ofp-actions.c:next_load_segment:
 2967|  3.35k|{
 2968|  3.35k|    int n_bits = sf->field->n_bits;
 2969|  3.35k|    int n_bytes = sf->field->n_bytes;
 2970|  3.35k|    int start = dst->ofs + dst->n_bits;
 2971|       |
 2972|  3.35k|    if (start < n_bits) {
  ------------------
  |  Branch (2972:9): [True: 2.87k, False: 479]
  ------------------
 2973|  2.87k|        dst->field = sf->field;
 2974|  2.87k|        dst->ofs = bitwise_scan(ofpact_set_field_mask(sf), n_bytes, 1, start,
  ------------------
  |  |  563|  2.87k|    ALIGNED_CAST(union mf_value *,                                          \
  |  |  ------------------
  |  |  |  |  434|  2.87k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  ------------------
  |  |  564|  2.87k|                 (uint8_t *)(SF)->value +                                   \
  |  |  565|  2.87k|                            ROUND_UP((SF)->field->n_bytes, OFPACT_ALIGNTO))
  ------------------
 2975|  2.87k|                                n_bits);
 2976|  2.87k|        if (dst->ofs < n_bits) {
  ------------------
  |  Branch (2976:13): [True: 1.67k, False: 1.19k]
  ------------------
 2977|  1.67k|            dst->n_bits = bitwise_scan(ofpact_set_field_mask(sf), n_bytes, 0,
  ------------------
  |  |  563|  1.67k|    ALIGNED_CAST(union mf_value *,                                          \
  |  |  ------------------
  |  |  |  |  434|  1.67k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  ------------------
  |  |  564|  1.67k|                 (uint8_t *)(SF)->value +                                   \
  |  |  565|  1.67k|                            ROUND_UP((SF)->field->n_bytes, OFPACT_ALIGNTO))
  ------------------
 2978|  1.67k|                                       dst->ofs + 1,
 2979|  1.67k|                                       MIN(dst->ofs + 64, n_bits)) - dst->ofs;
  ------------------
  |  |   91|  1.67k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (91:20): [True: 1.12k, False: 551]
  |  |  ------------------
  ------------------
 2980|  1.67k|            *value = bitwise_get(sf->value, n_bytes, dst->ofs, dst->n_bits);
 2981|  1.67k|            return true;
 2982|  1.67k|        }
 2983|  2.87k|    }
 2984|  1.67k|    return false;
 2985|  3.35k|}
ofp-actions.c:get_ofpact_map:
 9158|  52.5k|{
 9159|       |    /* OpenFlow 1.0 actions. */
 9160|  52.5k|    static const struct ofpact_map of10[] = {
 9161|  52.5k|        { OFPACT_OUTPUT, 0 },
 9162|  52.5k|        { OFPACT_SET_VLAN_VID, 1 },
 9163|  52.5k|        { OFPACT_SET_VLAN_PCP, 2 },
 9164|  52.5k|        { OFPACT_STRIP_VLAN, 3 },
 9165|  52.5k|        { OFPACT_SET_ETH_SRC, 4 },
 9166|  52.5k|        { OFPACT_SET_ETH_DST, 5 },
 9167|  52.5k|        { OFPACT_SET_IPV4_SRC, 6 },
 9168|  52.5k|        { OFPACT_SET_IPV4_DST, 7 },
 9169|  52.5k|        { OFPACT_SET_IP_DSCP, 8 },
 9170|  52.5k|        { OFPACT_SET_L4_SRC_PORT, 9 },
 9171|  52.5k|        { OFPACT_SET_L4_DST_PORT, 10 },
 9172|  52.5k|        { OFPACT_ENQUEUE, 11 },
 9173|  52.5k|        { 0, -1 },
 9174|  52.5k|    };
 9175|       |
 9176|       |    /* OpenFlow 1.1 actions. */
 9177|  52.5k|    static const struct ofpact_map of11[] = {
 9178|  52.5k|        { OFPACT_OUTPUT, 0 },
 9179|  52.5k|        { OFPACT_SET_VLAN_VID, 1 },
 9180|  52.5k|        { OFPACT_SET_VLAN_PCP, 2 },
 9181|  52.5k|        { OFPACT_SET_ETH_SRC, 3 },
 9182|  52.5k|        { OFPACT_SET_ETH_DST, 4 },
 9183|  52.5k|        { OFPACT_SET_IPV4_SRC, 5 },
 9184|  52.5k|        { OFPACT_SET_IPV4_DST, 6 },
 9185|  52.5k|        { OFPACT_SET_IP_DSCP, 7 },
 9186|  52.5k|        { OFPACT_SET_IP_ECN, 8 },
 9187|  52.5k|        { OFPACT_SET_L4_SRC_PORT, 9 },
 9188|  52.5k|        { OFPACT_SET_L4_DST_PORT, 10 },
 9189|       |        /* OFPAT_COPY_TTL_OUT (11) not supported. */
 9190|       |        /* OFPAT_COPY_TTL_IN (12) not supported. */
 9191|  52.5k|        { OFPACT_SET_MPLS_LABEL, 13 },
 9192|  52.5k|        { OFPACT_SET_MPLS_TC, 14 },
 9193|  52.5k|        { OFPACT_SET_MPLS_TTL, 15 },
 9194|  52.5k|        { OFPACT_DEC_MPLS_TTL, 16 },
 9195|  52.5k|        { OFPACT_PUSH_VLAN, 17 },
 9196|  52.5k|        { OFPACT_STRIP_VLAN, 18 },
 9197|  52.5k|        { OFPACT_PUSH_MPLS, 19 },
 9198|  52.5k|        { OFPACT_POP_MPLS, 20 },
 9199|  52.5k|        { OFPACT_SET_QUEUE, 21 },
 9200|  52.5k|        { OFPACT_GROUP, 22 },
 9201|  52.5k|        { OFPACT_SET_IP_TTL, 23 },
 9202|  52.5k|        { OFPACT_DEC_TTL, 24 },
 9203|  52.5k|        { 0, -1 },
 9204|  52.5k|    };
 9205|       |
 9206|       |    /* OpenFlow 1.2, 1.3, and 1.4 actions. */
 9207|  52.5k|    static const struct ofpact_map of12[] = {
 9208|  52.5k|        { OFPACT_OUTPUT, 0 },
 9209|       |        /* OFPAT_COPY_TTL_OUT (11) not supported. */
 9210|       |        /* OFPAT_COPY_TTL_IN (12) not supported. */
 9211|  52.5k|        { OFPACT_SET_MPLS_TTL, 15 },
 9212|  52.5k|        { OFPACT_DEC_MPLS_TTL, 16 },
 9213|  52.5k|        { OFPACT_PUSH_VLAN, 17 },
 9214|  52.5k|        { OFPACT_STRIP_VLAN, 18 },
 9215|  52.5k|        { OFPACT_PUSH_MPLS, 19 },
 9216|  52.5k|        { OFPACT_POP_MPLS, 20 },
 9217|  52.5k|        { OFPACT_SET_QUEUE, 21 },
 9218|  52.5k|        { OFPACT_GROUP, 22 },
 9219|  52.5k|        { OFPACT_SET_IP_TTL, 23 },
 9220|  52.5k|        { OFPACT_DEC_TTL, 24 },
 9221|  52.5k|        { OFPACT_SET_FIELD, 25 },
 9222|       |        /* OF1.3+ OFPAT_PUSH_PBB (26) not supported. */
 9223|       |        /* OF1.3+ OFPAT_POP_PBB (27) not supported. */
 9224|  52.5k|        { 0, -1 },
 9225|  52.5k|    };
 9226|       |
 9227|  52.5k|    switch (version) {
 9228|  1.08k|    case OFP10_VERSION:
  ------------------
  |  Branch (9228:5): [True: 1.08k, False: 51.4k]
  ------------------
 9229|  1.08k|        return of10;
 9230|       |
 9231|  11.5k|    case OFP11_VERSION:
  ------------------
  |  Branch (9231:5): [True: 11.5k, False: 41.0k]
  ------------------
 9232|  11.5k|        return of11;
 9233|       |
 9234|  37.1k|    case OFP12_VERSION:
  ------------------
  |  Branch (9234:5): [True: 37.1k, False: 15.4k]
  ------------------
 9235|  37.1k|    case OFP13_VERSION:
  ------------------
  |  Branch (9235:5): [True: 0, False: 52.5k]
  ------------------
 9236|  39.1k|    case OFP14_VERSION:
  ------------------
  |  Branch (9236:5): [True: 2.02k, False: 50.4k]
  ------------------
 9237|  39.9k|    case OFP15_VERSION:
  ------------------
  |  Branch (9237:5): [True: 779, False: 51.7k]
  ------------------
 9238|  39.9k|    default:
  ------------------
  |  Branch (9238:5): [True: 0, False: 52.5k]
  ------------------
 9239|  39.9k|        return of12;
 9240|  52.5k|    }
 9241|  52.5k|}
ofp-actions.c:ofpact_format:
 9465|  99.7k|{
 9466|  99.7k|    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|  9.28k|    OFPACT(OUTPUT,          ofpact_output,      ofpact, "output")       \
  |  |  ------------------
  |  |  |  | 9468|  9.28k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 9.28k, False: 90.4k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  9.28k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  9.28k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  9.28k|            break;
  |  |  ------------------
  |  |   65|  9.28k|    OFPACT(GROUP,           ofpact_group,       ofpact, "group")        \
  |  |  ------------------
  |  |  |  | 9468|    238|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 238, False: 99.5k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    238|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    238|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    238|            break;
  |  |  ------------------
  |  |   66|  3.20k|    OFPACT(CONTROLLER,      ofpact_controller,  userdata, "controller") \
  |  |  ------------------
  |  |  |  | 9468|  3.20k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 3.20k, False: 96.5k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  3.20k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  3.20k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  3.20k|            break;
  |  |  ------------------
  |  |   67|  3.20k|    OFPACT(ENQUEUE,         ofpact_enqueue,     ofpact, "enqueue")      \
  |  |  ------------------
  |  |  |  | 9468|    157|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 157, False: 99.6k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    157|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    157|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    157|            break;
  |  |  ------------------
  |  |   68|    157|    OFPACT(OUTPUT_REG,      ofpact_output_reg,  ofpact, "output_reg")   \
  |  |  ------------------
  |  |  |  | 9468|     60|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 60, False: 99.7k]
  |  |  |  |  ------------------
  |  |  |  | 9469|     60|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|     60|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|     60|            break;
  |  |  ------------------
  |  |   69|  1.03k|    OFPACT(BUNDLE,          ofpact_bundle,      members, "bundle")      \
  |  |  ------------------
  |  |  |  | 9468|  1.03k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.03k, False: 98.7k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.03k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.03k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.03k|            break;
  |  |  ------------------
  |  |   70|  1.03k|                                                                        \
  |  |   71|  1.03k|    /* Header changes. */                                               \
  |  |   72|  6.45k|    OFPACT(SET_FIELD,       ofpact_set_field,   ofpact, "set_field")    \
  |  |  ------------------
  |  |  |  | 9468|  6.45k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 6.45k, False: 93.3k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  6.45k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  6.45k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  6.45k|            break;
  |  |  ------------------
  |  |   73|  6.45k|    OFPACT(SET_VLAN_VID,    ofpact_vlan_vid,    ofpact, "set_vlan_vid") \
  |  |  ------------------
  |  |  |  | 9468|  3.48k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 3.48k, False: 96.2k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  3.48k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  3.48k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  3.48k|            break;
  |  |  ------------------
  |  |   74|  3.48k|    OFPACT(SET_VLAN_PCP,    ofpact_vlan_pcp,    ofpact, "set_vlan_pcp") \
  |  |  ------------------
  |  |  |  | 9468|    881|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 881, False: 98.8k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    881|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    881|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    881|            break;
  |  |  ------------------
  |  |   75|  2.70k|    OFPACT(STRIP_VLAN,      ofpact_null,        ofpact, "strip_vlan")   \
  |  |  ------------------
  |  |  |  | 9468|  2.70k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 2.70k, False: 97.0k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  2.70k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  2.70k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  2.70k|            break;
  |  |  ------------------
  |  |   76|  2.70k|    OFPACT(PUSH_VLAN,       ofpact_push_vlan,   ofpact, "push_vlan")    \
  |  |  ------------------
  |  |  |  | 9468|    659|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 659, False: 99.1k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    659|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    659|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    659|            break;
  |  |  ------------------
  |  |   77|    659|    OFPACT(SET_ETH_SRC,     ofpact_mac,         ofpact, "mod_dl_src")   \
  |  |  ------------------
  |  |  |  | 9468|     46|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 46, False: 99.7k]
  |  |  |  |  ------------------
  |  |  |  | 9469|     46|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|     46|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|     46|            break;
  |  |  ------------------
  |  |   78|    116|    OFPACT(SET_ETH_DST,     ofpact_mac,         ofpact, "mod_dl_dst")   \
  |  |  ------------------
  |  |  |  | 9468|    116|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 116, False: 99.6k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    116|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    116|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    116|            break;
  |  |  ------------------
  |  |   79|    898|    OFPACT(SET_IPV4_SRC,    ofpact_ipv4,        ofpact, "mod_nw_src")   \
  |  |  ------------------
  |  |  |  | 9468|    898|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 898, False: 98.8k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    898|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    898|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    898|            break;
  |  |  ------------------
  |  |   80|    982|    OFPACT(SET_IPV4_DST,    ofpact_ipv4,        ofpact, "mod_nw_dst")   \
  |  |  ------------------
  |  |  |  | 9468|    982|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 982, False: 98.7k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    982|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    982|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    982|            break;
  |  |  ------------------
  |  |   81|  1.90k|    OFPACT(SET_IP_DSCP,     ofpact_dscp,        ofpact, "mod_nw_tos")   \
  |  |  ------------------
  |  |  |  | 9468|  1.90k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.90k, False: 97.8k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.90k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.90k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.90k|            break;
  |  |  ------------------
  |  |   82|  1.90k|    OFPACT(SET_IP_ECN,      ofpact_ecn,         ofpact, "mod_nw_ecn")   \
  |  |  ------------------
  |  |  |  | 9468|  1.31k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.31k, False: 98.4k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.31k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.31k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.31k|            break;
  |  |  ------------------
  |  |   83|  1.31k|    OFPACT(SET_IP_TTL,      ofpact_ip_ttl,      ofpact, "mod_nw_ttl")   \
  |  |  ------------------
  |  |  |  | 9468|    409|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 409, False: 99.3k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    409|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    409|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    409|            break;
  |  |  ------------------
  |  |   84|  2.12k|    OFPACT(SET_L4_SRC_PORT, ofpact_l4_port,     ofpact, "mod_tp_src")   \
  |  |  ------------------
  |  |  |  | 9468|  2.12k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 2.12k, False: 97.6k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  2.12k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  2.12k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  2.12k|            break;
  |  |  ------------------
  |  |   85|  3.42k|    OFPACT(SET_L4_DST_PORT, ofpact_l4_port,     ofpact, "mod_tp_dst")   \
  |  |  ------------------
  |  |  |  | 9468|  3.42k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 3.42k, False: 96.3k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  3.42k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  3.42k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  3.42k|            break;
  |  |  ------------------
  |  |   86|  3.42k|    OFPACT(REG_MOVE,        ofpact_reg_move,    ofpact, "move")         \
  |  |  ------------------
  |  |  |  | 9468|    265|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 265, False: 99.5k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    265|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    265|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    265|            break;
  |  |  ------------------
  |  |   87|    265|    OFPACT(STACK_PUSH,      ofpact_stack,       ofpact, "push")         \
  |  |  ------------------
  |  |  |  | 9468|    196|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 196, False: 99.5k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    196|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    196|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    196|            break;
  |  |  ------------------
  |  |   88|    316|    OFPACT(STACK_POP,       ofpact_stack,       ofpact, "pop")          \
  |  |  ------------------
  |  |  |  | 9468|    316|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 316, False: 99.4k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    316|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    316|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    316|            break;
  |  |  ------------------
  |  |   89|  1.44k|    OFPACT(DEC_TTL,         ofpact_cnt_ids,     cnt_ids, "dec_ttl")     \
  |  |  ------------------
  |  |  |  | 9468|  1.44k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.44k, False: 98.3k]
  |  |  |  |  ------------------
  |  |  |  | 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;
  |  |  ------------------
  |  |   90|  1.44k|    OFPACT(SET_MPLS_LABEL,  ofpact_mpls_label,  ofpact, "set_mpls_label") \
  |  |  ------------------
  |  |  |  | 9468|    463|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 463, False: 99.3k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    463|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    463|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    463|            break;
  |  |  ------------------
  |  |   91|    689|    OFPACT(SET_MPLS_TC,     ofpact_mpls_tc,     ofpact, "set_mpls_tc")  \
  |  |  ------------------
  |  |  |  | 9468|    689|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 689, False: 99.0k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    689|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    689|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    689|            break;
  |  |  ------------------
  |  |   92|  1.84k|    OFPACT(SET_MPLS_TTL,    ofpact_mpls_ttl,    ofpact, "set_mpls_ttl") \
  |  |  ------------------
  |  |  |  | 9468|  1.84k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.84k, False: 97.9k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.84k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.84k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.84k|            break;
  |  |  ------------------
  |  |   93|  3.21k|    OFPACT(DEC_MPLS_TTL,    ofpact_null,        ofpact, "dec_mpls_ttl") \
  |  |  ------------------
  |  |  |  | 9468|  3.21k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 3.21k, False: 96.5k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  3.21k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  3.21k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  3.21k|            break;
  |  |  ------------------
  |  |   94|  3.21k|    OFPACT(PUSH_MPLS,       ofpact_push_mpls,   ofpact, "push_mpls")    \
  |  |  ------------------
  |  |  |  | 9468|  2.55k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 2.55k, False: 97.2k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  2.55k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  2.55k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  2.55k|            break;
  |  |  ------------------
  |  |   95|  3.09k|    OFPACT(POP_MPLS,        ofpact_pop_mpls,    ofpact, "pop_mpls")     \
  |  |  ------------------
  |  |  |  | 9468|  3.09k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 3.09k, False: 96.6k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  3.09k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  3.09k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  3.09k|            break;
  |  |  ------------------
  |  |   96|  3.09k|    OFPACT(DEC_NSH_TTL,     ofpact_null,        ofpact, "dec_nsh_ttl")  \
  |  |  ------------------
  |  |  |  | 9468|  1.18k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.18k, False: 98.5k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.18k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.18k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.18k|            break;
  |  |  ------------------
  |  |   97|  1.18k|    OFPACT(DELETE_FIELD,    ofpact_delete_field, ofpact, "delete_field") \
  |  |  ------------------
  |  |  |  | 9468|     13|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 13, False: 99.7k]
  |  |  |  |  ------------------
  |  |  |  | 9469|     13|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|     13|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|     13|            break;
  |  |  ------------------
  |  |   98|     13|                                                                        \
  |  |   99|     13|    /* Generic encap & decap */                                         \
  |  |  100|  1.73k|    OFPACT(ENCAP,           ofpact_encap,       props, "encap")         \
  |  |  ------------------
  |  |  |  | 9468|  1.73k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.73k, False: 98.0k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.73k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.73k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.73k|            break;
  |  |  ------------------
  |  |  101|  5.52k|    OFPACT(DECAP,           ofpact_decap,       ofpact, "decap")        \
  |  |  ------------------
  |  |  |  | 9468|  5.52k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 5.52k, False: 94.2k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  5.52k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  5.52k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  5.52k|            break;
  |  |  ------------------
  |  |  102|  5.52k|                                                                        \
  |  |  103|  5.52k|    /* Metadata. */                                                     \
  |  |  104|  5.52k|    OFPACT(SET_TUNNEL,      ofpact_tunnel,      ofpact, "set_tunnel")   \
  |  |  ------------------
  |  |  |  | 9468|    196|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 196, False: 99.5k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    196|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    196|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    196|            break;
  |  |  ------------------
  |  |  105|    270|    OFPACT(SET_QUEUE,       ofpact_queue,       ofpact, "set_queue")    \
  |  |  ------------------
  |  |  |  | 9468|    270|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 270, False: 99.5k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    270|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    270|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    270|            break;
  |  |  ------------------
  |  |  106|    443|    OFPACT(POP_QUEUE,       ofpact_null,        ofpact, "pop_queue")    \
  |  |  ------------------
  |  |  |  | 9468|    443|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 443, False: 99.3k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    443|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    443|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    443|            break;
  |  |  ------------------
  |  |  107|    443|    OFPACT(FIN_TIMEOUT,     ofpact_fin_timeout, ofpact, "fin_timeout")  \
  |  |  ------------------
  |  |  |  | 9468|    406|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 406, False: 99.3k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    406|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    406|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    406|            break;
  |  |  ------------------
  |  |  108|    406|                                                                        \
  |  |  109|    406|    /* Flow table interaction. */                                       \
  |  |  110|  2.00k|    OFPACT(RESUBMIT,        ofpact_resubmit,    ofpact, "resubmit")     \
  |  |  ------------------
  |  |  |  | 9468|  2.00k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 2.00k, False: 97.7k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  2.00k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  2.00k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  2.00k|            break;
  |  |  ------------------
  |  |  111|  10.4k|    OFPACT(LEARN,           ofpact_learn,       specs, "learn")         \
  |  |  ------------------
  |  |  |  | 9468|  10.4k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 10.4k, False: 89.3k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  10.4k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  10.4k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  10.4k|            break;
  |  |  ------------------
  |  |  112|  10.4k|    OFPACT(CONJUNCTION,     ofpact_conjunction, ofpact, "conjunction")  \
  |  |  ------------------
  |  |  |  | 9468|  1.36k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.36k, False: 98.4k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.36k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.36k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.36k|            break;
  |  |  ------------------
  |  |  113|  1.36k|                                                                        \
  |  |  114|  1.36k|    /* Arithmetic. */                                                   \
  |  |  115|  1.36k|    OFPACT(MULTIPATH,       ofpact_multipath,   ofpact, "multipath")    \
  |  |  ------------------
  |  |  |  | 9468|    810|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 810, False: 98.9k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    810|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    810|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    810|            break;
  |  |  ------------------
  |  |  116|    810|                                                                        \
  |  |  117|    810|    /* Other. */                                                        \
  |  |  118|  3.36k|    OFPACT(NOTE,            ofpact_note,        data, "note")           \
  |  |  ------------------
  |  |  |  | 9468|  3.36k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 3.36k, False: 96.4k]
  |  |  |  |  ------------------
  |  |  |  | 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;
  |  |  ------------------
  |  |  119|  3.36k|    OFPACT(EXIT,            ofpact_null,        ofpact, "exit")         \
  |  |  ------------------
  |  |  |  | 9468|  1.70k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.70k, False: 98.0k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.70k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.70k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.70k|            break;
  |  |  ------------------
  |  |  120|  1.70k|    OFPACT(SAMPLE,          ofpact_sample,      ofpact, "sample")       \
  |  |  ------------------
  |  |  |  | 9468|  1.10k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.10k, False: 98.6k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.10k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.10k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.10k|            break;
  |  |  ------------------
  |  |  121|  1.25k|    OFPACT(UNROLL_XLATE,    ofpact_unroll_xlate, ofpact, "unroll_xlate") \
  |  |  ------------------
  |  |  |  | 9468|  1.25k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.25k, False: 98.5k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.25k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.25k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.25k|            break;
  |  |  ------------------
  |  |  122|  4.68k|    OFPACT(CT,              ofpact_conntrack,   ofpact, "ct")           \
  |  |  ------------------
  |  |  |  | 9468|  4.68k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 4.68k, False: 95.0k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  4.68k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  4.68k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  4.68k|            break;
  |  |  ------------------
  |  |  123|  4.68k|    OFPACT(CT_CLEAR,        ofpact_null,        ofpact, "ct_clear")     \
  |  |  ------------------
  |  |  |  | 9468|    149|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 149, False: 99.6k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    149|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    149|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    149|            break;
  |  |  ------------------
  |  |  124|    149|    OFPACT(NAT,             ofpact_nat,         ofpact, "nat")          \
  |  |  ------------------
  |  |  |  | 9468|      0|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 0, False: 99.7k]
  |  |  |  |  ------------------
  |  |  |  | 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|    983|    OFPACT(OUTPUT_TRUNC,    ofpact_output_trunc,ofpact, "output_trunc") \
  |  |  ------------------
  |  |  |  | 9468|    983|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 983, False: 98.7k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    983|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    983|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    983|            break;
  |  |  ------------------
  |  |  126|    983|    OFPACT(CLONE,           ofpact_nest,        actions, "clone")       \
  |  |  ------------------
  |  |  |  | 9468|    953|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 953, False: 98.8k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    953|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    953|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    953|            break;
  |  |  ------------------
  |  |  127|    953|    OFPACT(CHECK_PKT_LARGER, ofpact_check_pkt_larger, ofpact,           \
  |  |  ------------------
  |  |  |  | 9468|    284|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 284, False: 99.4k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    284|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    284|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    284|            break;
  |  |  ------------------
  |  |  128|    284|           "check_pkt_larger")                                          \
  |  |  129|    284|                                                                        \
  |  |  130|    284|    /* Debugging actions.                                               \
  |  |  131|    284|     *                                                                  \
  |  |  132|    284|     * These are intentionally undocumented, subject to change, and     \
  |  |  133|    284|     * only accepted if ovs-vswitchd is started with --enable-dummy. */ \
  |  |  134|    284|    OFPACT(DEBUG_RECIRC, ofpact_null,           ofpact, "debug_recirc") \
  |  |  ------------------
  |  |  |  | 9468|      0|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 0, False: 99.7k]
  |  |  |  |  ------------------
  |  |  |  | 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: 99.7k]
  |  |  |  |  ------------------
  |  |  |  | 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|    145|    OFPACT(METER,           ofpact_meter,       ofpact, "meter")        \
  |  |  ------------------
  |  |  |  | 9468|    145|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 145, False: 99.6k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    145|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    145|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    145|            break;
  |  |  ------------------
  |  |  139|    145|    OFPACT(CLEAR_ACTIONS,   ofpact_null,        ofpact, "clear_actions") \
  |  |  ------------------
  |  |  |  | 9468|    140|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 140, False: 99.6k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    140|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    140|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    140|            break;
  |  |  ------------------
  |  |  140|  6.88k|    OFPACT(WRITE_ACTIONS,   ofpact_nest,        actions, "write_actions") \
  |  |  ------------------
  |  |  |  | 9468|  6.88k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 6.88k, False: 92.8k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  6.88k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  6.88k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  6.88k|            break;
  |  |  ------------------
  |  |  141|  6.88k|    OFPACT(WRITE_METADATA,  ofpact_metadata,    ofpact, "write_metadata") \
  |  |  ------------------
  |  |  |  | 9468|    141|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 141, False: 99.6k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    141|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    141|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    141|            break;
  |  |  ------------------
  |  |  142|    141|    OFPACT(GOTO_TABLE,      ofpact_goto_table,  ofpact, "goto_table")
  |  |  ------------------
  |  |  |  | 9468|    131|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 131, False: 99.6k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    131|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    131|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    131|            break;
  |  |  ------------------
  ------------------
 9472|      0|#undef OFPACT
 9473|      0|    default:
  ------------------
  |  Branch (9473:5): [True: 0, False: 99.7k]
  ------------------
 9474|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 9475|  99.7k|    }
 9476|  99.7k|}
ofp-actions.c:format_OUTPUT:
  704|  9.28k|{
  705|  9.28k|    if (ofp_to_u16(a->port) < ofp_to_u16(OFPP_MAX)) {
  ------------------
  |  |   33|  9.28k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|  9.28k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (705:9): [True: 2.32k, False: 6.95k]
  ------------------
  706|  2.32k|        ds_put_format(fp->s, "%soutput:%s", colors.special, colors.end);
  707|  2.32k|    }
  708|  9.28k|    ofputil_format_port(a->port, fp->port_map, fp->s);
  709|  9.28k|    if (a->port == OFPP_CONTROLLER) {
  ------------------
  |  |   45|  9.28k|#define OFPP_CONTROLLER OFP_PORT_C(0xfffd) /* Send to controller. */
  |  |  ------------------
  |  |  |  |  157|  9.28k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (709:9): [True: 5.77k, False: 3.50k]
  ------------------
  710|       |        ds_put_format(fp->s, ":%"PRIu16, a->max_len);
  711|  5.77k|    }
  712|  9.28k|}
ofp-actions.c:format_GROUP:
  748|    238|{
  749|       |    ds_put_format(fp->s, "%sgroup:%s%"PRIu32,
  750|    238|                  colors.special, colors.end, a->group_id);
  751|    238|}
ofp-actions.c:format_CONTROLLER:
 1029|  3.20k|{
 1030|  3.20k|    if (a->reason == OFPR_ACTION && !a->controller_id && !a->userdata_len
  ------------------
  |  Branch (1030:9): [True: 1.53k, False: 1.66k]
  |  Branch (1030:37): [True: 1.49k, False: 46]
  |  Branch (1030:58): [True: 1.44k, False: 46]
  ------------------
 1031|  1.44k|        && !a->pause && a->meter_id == NX_CTLR_NO_METER) {
  ------------------
  |  |  307|  1.08k|#define NX_CTLR_NO_METER 0
  ------------------
  |  Branch (1031:12): [True: 1.08k, False: 364]
  |  Branch (1031:25): [True: 72, False: 1.01k]
  ------------------
 1032|     72|        ds_put_format(fp->s, "%sCONTROLLER:%s%"PRIu16,
 1033|     72|                      colors.special, colors.end, a->max_len);
 1034|  3.13k|    } else {
 1035|  3.13k|        enum ofp_packet_in_reason reason = a->reason;
 1036|       |
 1037|  3.13k|        ds_put_format(fp->s, "%scontroller(%s", colors.paren, colors.end);
 1038|  3.13k|        if (reason != OFPR_ACTION) {
  ------------------
  |  Branch (1038:13): [True: 1.66k, False: 1.46k]
  ------------------
 1039|  1.66k|            char reasonbuf[OFPUTIL_PACKET_IN_REASON_BUFSIZE];
 1040|       |
 1041|  1.66k|            ds_put_format(fp->s, "%sreason=%s%s,", colors.param, colors.end,
 1042|  1.66k|                          ofputil_packet_in_reason_to_string(
 1043|  1.66k|                              reason, reasonbuf, sizeof reasonbuf));
 1044|  1.66k|        }
 1045|  3.13k|        if (a->max_len != UINT16_MAX) {
  ------------------
  |  Branch (1045:13): [True: 1.94k, False: 1.18k]
  ------------------
 1046|  1.94k|            ds_put_format(fp->s, "%smax_len=%s%"PRIu16",",
 1047|  1.94k|                          colors.param, colors.end, a->max_len);
 1048|  1.94k|        }
 1049|  3.13k|        if (a->controller_id != 0) {
  ------------------
  |  Branch (1049:13): [True: 1.59k, False: 1.53k]
  ------------------
 1050|  1.59k|            ds_put_format(fp->s, "%sid=%s%"PRIu16",",
 1051|  1.59k|                          colors.param, colors.end, a->controller_id);
 1052|  1.59k|        }
 1053|  3.13k|        if (a->userdata_len) {
  ------------------
  |  Branch (1053:13): [True: 46, False: 3.08k]
  ------------------
 1054|     46|            ds_put_format(fp->s, "%suserdata=%s", colors.param, colors.end);
 1055|     46|            ds_put_hex_with_delimiter(fp->s, a->userdata, a->userdata_len,
 1056|     46|                                      ".");
 1057|     46|            ds_put_char(fp->s, ',');
 1058|     46|        }
 1059|  3.13k|        if (a->pause) {
  ------------------
  |  Branch (1059:13): [True: 390, False: 2.74k]
  ------------------
 1060|    390|            ds_put_format(fp->s, "%spause%s,", colors.value, colors.end);
 1061|    390|        }
 1062|  3.13k|        if (a->meter_id != NX_CTLR_NO_METER) {
  ------------------
  |  |  307|  3.13k|#define NX_CTLR_NO_METER 0
  ------------------
  |  Branch (1062:13): [True: 1.01k, False: 2.12k]
  ------------------
 1063|  1.01k|            ds_put_format(fp->s, "%smeter_id=%s%"PRIu32",",
 1064|  1.01k|                          colors.param, colors.end, a->meter_id);
 1065|  1.01k|        }
 1066|  3.13k|        ds_chomp(fp->s, ',');
 1067|  3.13k|        ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 1068|  3.13k|    }
 1069|  3.20k|}
ofp-actions.c:format_ENQUEUE:
 1152|    157|{
 1153|    157|    ds_put_format(fp->s, "%senqueue:%s", colors.param, colors.end);
 1154|    157|    ofputil_format_port(a->port, fp->port_map, fp->s);
 1155|       |    ds_put_format(fp->s, ":%"PRIu32, a->queue);
 1156|    157|}
ofp-actions.c:format_OUTPUT_REG:
 1318|     60|{
 1319|     60|    ds_put_format(fp->s, "%soutput:%s", colors.special, colors.end);
 1320|     60|    mf_format_subfield(&a->src, fp->s);
 1321|     60|}
ofp-actions.c:format_BUNDLE:
 1545|  1.03k|{
 1546|  1.03k|    bundle_format(a, fp->port_map, fp->s);
 1547|  1.03k|}
ofp-actions.c:format_SET_FIELD:
 3326|  6.45k|{
 3327|  6.45k|    if (a->ofpact.raw == NXAST_RAW_REG_LOAD) {
  ------------------
  |  Branch (3327:9): [True: 1.67k, False: 4.78k]
  ------------------
 3328|  1.67k|        struct mf_subfield dst;
 3329|  1.67k|        uint64_t value;
 3330|       |
 3331|  1.67k|        dst.ofs = dst.n_bits = 0;
 3332|  3.35k|        while (next_load_segment(a, &dst, &value)) {
  ------------------
  |  Branch (3332:16): [True: 1.67k, False: 1.67k]
  ------------------
 3333|  1.67k|            ds_put_format(fp->s, "%sload:%s%#"PRIx64"%s->%s",
 3334|  1.67k|                          colors.special, colors.end, value,
 3335|  1.67k|                          colors.special, colors.end);
 3336|  1.67k|            mf_format_subfield(&dst, fp->s);
 3337|  1.67k|            ds_put_char(fp->s, ',');
 3338|  1.67k|        }
 3339|  1.67k|        ds_chomp(fp->s, ',');
 3340|  4.78k|    } else {
 3341|  4.78k|        ds_put_format(fp->s, "%sset_field:%s", colors.special, colors.end);
 3342|  4.78k|        mf_format(a->field, a->value, ofpact_set_field_mask(a),
  ------------------
  |  |  563|  4.78k|    ALIGNED_CAST(union mf_value *,                                          \
  |  |  ------------------
  |  |  |  |  434|  4.78k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  ------------------
  |  |  564|  4.78k|                 (uint8_t *)(SF)->value +                                   \
  |  |  565|  4.78k|                            ROUND_UP((SF)->field->n_bytes, OFPACT_ALIGNTO))
  ------------------
 3343|  4.78k|                  fp->port_map, fp->s);
 3344|  4.78k|        ds_put_format(fp->s, "%s->%s%s",
 3345|  4.78k|                      colors.special, colors.end, a->field->name);
 3346|  4.78k|    }
 3347|  6.45k|}
ofp-actions.c:format_SET_VLAN_VID:
 1641|  3.48k|{
 1642|  3.48k|    ds_put_format(fp->s, "%s%s:%s%"PRIu16, colors.param,
 1643|  3.48k|                  a->push_vlan_if_needed ? "mod_vlan_vid" : "set_vlan_vid",
  ------------------
  |  Branch (1643:19): [True: 3.30k, False: 182]
  ------------------
 1644|  3.48k|                  colors.end, a->vlan_vid);
 1645|  3.48k|}
ofp-actions.c:format_SET_VLAN_PCP:
 1749|    881|{
 1750|    881|    ds_put_format(fp->s, "%s%s:%s%"PRIu8, colors.param,
 1751|    881|                  a->push_vlan_if_needed ? "mod_vlan_pcp" : "set_vlan_pcp",
  ------------------
  |  Branch (1751:19): [True: 419, False: 462]
  ------------------
 1752|    881|                  colors.end, a->vlan_pcp);
 1753|    881|}
ofp-actions.c:format_STRIP_VLAN:
 1816|  2.70k|{
 1817|  2.70k|    ds_put_format(fp->s, (a->ofpact.raw == OFPAT_RAW11_POP_VLAN
  ------------------
  |  Branch (1817:27): [True: 1.83k, False: 867]
  ------------------
 1818|  2.70k|                    ? "%spop_vlan%s"
 1819|  2.70k|                    : "%sstrip_vlan%s"),
 1820|  2.70k|                  colors.value, colors.end);
 1821|  2.70k|}
ofp-actions.c:format_PUSH_VLAN:
 1886|    659|{
 1887|    659|    ds_put_format(fp->s, "%spush_vlan:%s%#"PRIx16,
 1888|       |                  colors.param, colors.end, ntohs(push_vlan->ethertype));
 1889|    659|}
ofp-actions.c:format_SET_ETH_SRC:
 1982|     46|{
 1983|     46|    ds_put_format(fp->s, "%smod_dl_src:%s"ETH_ADDR_FMT,
  ------------------
  |  |  370|     46|    "%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8
  ------------------
 1984|     46|                  colors.param, colors.end, ETH_ADDR_ARGS(a->mac));
  ------------------
  |  |  371|     46|#define ETH_ADDR_ARGS(EA) ETH_ADDR_BYTES_ARGS((EA).ea)
  |  |  ------------------
  |  |  |  |  373|     46|         (EAB)[0], (EAB)[1], (EAB)[2], (EAB)[3], (EAB)[4], (EAB)[5]
  |  |  ------------------
  ------------------
 1985|     46|}
ofp-actions.c:format_SET_ETH_DST:
 1990|    116|{
 1991|    116|    ds_put_format(fp->s, "%smod_dl_dst:%s"ETH_ADDR_FMT,
  ------------------
  |  |  370|    116|    "%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8
  ------------------
 1992|    116|                  colors.param, colors.end, ETH_ADDR_ARGS(a->mac));
  ------------------
  |  |  371|    116|#define ETH_ADDR_ARGS(EA) ETH_ADDR_BYTES_ARGS((EA).ea)
  |  |  ------------------
  |  |  |  |  373|    116|         (EAB)[0], (EAB)[1], (EAB)[2], (EAB)[3], (EAB)[4], (EAB)[5]
  |  |  ------------------
  ------------------
 1993|    116|}
ofp-actions.c:format_SET_IPV4_SRC:
 2074|    898|{
 2075|    898|    ds_put_format(fp->s, "%smod_nw_src:%s"IP_FMT,
  ------------------
  |  |  628|    898|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
 2076|       |                  colors.param, colors.end, IP_ARGS(a->ipv4));
  ------------------
  |  |  630|    898|    ntohl(ip) >> 24,                            \
  |  |  631|    898|    (ntohl(ip) >> 16) & 0xff,                   \
  |  |  632|    898|    (ntohl(ip) >> 8) & 0xff,                    \
  |  |  633|    898|    ntohl(ip) & 0xff
  ------------------
 2077|    898|}
ofp-actions.c:format_SET_IPV4_DST:
 2082|    982|{
 2083|    982|    ds_put_format(fp->s, "%smod_nw_dst:%s"IP_FMT,
  ------------------
  |  |  628|    982|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
 2084|       |                  colors.param, colors.end, IP_ARGS(a->ipv4));
  ------------------
  |  |  630|    982|    ntohl(ip) >> 24,                            \
  |  |  631|    982|    (ntohl(ip) >> 16) & 0xff,                   \
  |  |  632|    982|    (ntohl(ip) >> 8) & 0xff,                    \
  |  |  633|    982|    ntohl(ip) & 0xff
  ------------------
 2085|    982|}
ofp-actions.c:format_SET_IP_DSCP:
 2159|  1.90k|{
 2160|  1.90k|    ds_put_format(fp->s, "%smod_nw_tos:%s%d",
 2161|  1.90k|                  colors.param, colors.end, a->dscp);
 2162|  1.90k|}
ofp-actions.c:format_SET_IP_ECN:
 2232|  1.31k|{
 2233|  1.31k|    ds_put_format(fp->s, "%smod_nw_ecn:%s%d",
 2234|  1.31k|                  colors.param, colors.end, a->ecn);
 2235|  1.31k|}
ofp-actions.c:format_SET_IP_TTL:
 2287|    409|{
 2288|    409|    ds_put_format(fp->s, "%smod_nw_ttl:%s%d",
 2289|    409|                  colors.param, colors.end, a->ttl);
 2290|    409|}
ofp-actions.c:format_SET_L4_SRC_PORT:
 2377|  2.12k|{
 2378|  2.12k|    ds_put_format(fp->s, "%smod_tp_src:%s%d",
 2379|  2.12k|                  colors.param, colors.end, a->port);
 2380|  2.12k|}
ofp-actions.c:format_SET_L4_DST_PORT:
 2385|  3.42k|{
 2386|  3.42k|    ds_put_format(fp->s, "%smod_tp_dst:%s%d",
 2387|  3.42k|                  colors.param, colors.end, a->port);
 2388|  3.42k|}
ofp-actions.c:format_REG_MOVE:
 2715|    265|{
 2716|    265|    nxm_format_reg_move(a, fp->s);
 2717|    265|}
ofp-actions.c:format_STACK_PUSH:
 3558|    196|{
 3559|    196|    nxm_format_stack_push(a, fp->s);
 3560|    196|}
ofp-actions.c:format_STACK_POP:
 3565|    316|{
 3566|    316|    nxm_format_stack_pop(a, fp->s);
 3567|    316|}
ofp-actions.c:format_DEC_TTL:
 3736|  1.44k|{
 3737|  1.44k|    size_t i;
 3738|       |
 3739|  1.44k|    ds_put_format(fp->s, "%sdec_ttl%s", colors.paren, colors.end);
 3740|  1.44k|    if (a->ofpact.raw == NXAST_RAW_DEC_TTL_CNT_IDS) {
  ------------------
  |  Branch (3740:9): [True: 317, False: 1.12k]
  ------------------
 3741|    317|        ds_put_format(fp->s, "%s(%s", colors.paren, colors.end);
 3742|  1.12k|        for (i = 0; i < a->n_controllers; i++) {
  ------------------
  |  Branch (3742:21): [True: 810, False: 317]
  ------------------
 3743|    810|            if (i) {
  ------------------
  |  Branch (3743:17): [True: 545, False: 265]
  ------------------
 3744|    545|                ds_put_cstr(fp->s, ",");
 3745|    545|            }
 3746|       |            ds_put_format(fp->s, "%"PRIu16, a->cnt_ids[i]);
 3747|    810|        }
 3748|    317|        ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 3749|    317|    }
 3750|  1.44k|}
ofp-actions.c:format_SET_MPLS_LABEL:
 3809|    463|{
 3810|    463|    ds_put_format(fp->s, "%sset_mpls_label(%s%"PRIu32"%s)%s",
 3811|       |                  colors.paren, colors.end, ntohl(a->label),
 3812|    463|                  colors.paren, colors.end);
 3813|    463|}
ofp-actions.c:format_SET_MPLS_TC:
 3880|    689|{
 3881|    689|    ds_put_format(fp->s, "%sset_mpls_tc(%s%"PRIu8"%s)%s",
 3882|    689|                  colors.paren, colors.end, a->tc,
 3883|    689|                  colors.paren, colors.end);
 3884|    689|}
ofp-actions.c:format_SET_MPLS_TTL:
 3938|  1.84k|{
 3939|  1.84k|    ds_put_format(fp->s, "%sset_mpls_ttl(%s%"PRIu8"%s)%s",
 3940|  1.84k|                  colors.paren, colors.end, a->ttl,
 3941|  1.84k|                  colors.paren, colors.end);
 3942|  1.84k|}
ofp-actions.c:format_DEC_MPLS_TTL:
 3977|  3.21k|{
 3978|  3.21k|    ds_put_format(fp->s, "%sdec_mpls_ttl%s", colors.value, colors.end);
 3979|  3.21k|}
ofp-actions.c:format_PUSH_MPLS:
 4029|  2.55k|{
 4030|  2.55k|    ds_put_format(fp->s, "%spush_mpls:%s0x%04"PRIx16,
 4031|       |                  colors.param, colors.end, ntohs(a->ethertype));
 4032|  2.55k|}
ofp-actions.c:format_POP_MPLS:
 4087|  3.09k|{
 4088|  3.09k|    ds_put_format(fp->s, "%spop_mpls:%s0x%04"PRIx16,
 4089|       |                  colors.param, colors.end, ntohs(a->ethertype));
 4090|  3.09k|}
ofp-actions.c:format_DEC_NSH_TTL:
 4822|  1.18k|{
 4823|  1.18k|    ds_put_format(fp->s, "%sdec_nsh_ttl%s", colors.special, colors.end);
 4824|  1.18k|}
ofp-actions.c:format_DELETE_FIELD:
 4247|     13|{
 4248|     13|    ds_put_format(fp->s, "%sdelete_field:%s", colors.param,
 4249|     13|                  colors.end);
 4250|     13|    ds_put_format(fp->s, "%s", odf->field->name);
 4251|     13|}
ofp-actions.c:format_ENCAP:
 4651|  1.73k|{
 4652|  1.73k|    ds_put_format(fp->s, "%sencap(%s", colors.paren, colors.end);
 4653|  1.73k|    ds_put_format(fp->s, "%s", format_encap_pkt_type(a->new_pkt_type));
 4654|  1.73k|    if (a->n_props > 0) {
  ------------------
  |  Branch (4654:9): [True: 326, False: 1.40k]
  ------------------
 4655|    326|        ds_put_format(fp->s, "%s(%s", colors.paren, colors.end);
 4656|    326|        format_ed_props(fp->s, a->n_props, a->props);
 4657|    326|        ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 4658|    326|    }
 4659|  1.73k|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 4660|  1.73k|}
ofp-actions.c:format_encap_pkt_type:
 4612|  1.73k|{
 4613|  1.73k|    switch (ntohl(pkt_type)) {
 4614|    487|    case PT_ETH:
  ------------------
  |  Branch (4614:5): [True: 487, False: 1.24k]
  ------------------
 4615|    487|        return "ethernet";
 4616|    653|    case PT_NSH:
  ------------------
  |  Branch (4616:5): [True: 653, False: 1.07k]
  ------------------
 4617|    653|        return "nsh";
 4618|    230|    case PT_MPLS:
  ------------------
  |  Branch (4618:5): [True: 230, False: 1.50k]
  ------------------
 4619|    230|        return "mpls";
 4620|    362|    case PT_MPLS_MC:
  ------------------
  |  Branch (4620:5): [True: 362, False: 1.37k]
  ------------------
 4621|    362|        return "mpls_mc";
 4622|      0|    default:
  ------------------
  |  Branch (4622:5): [True: 0, False: 1.73k]
  ------------------
 4623|      0|        return "UNKNOWN";
 4624|  1.73k|    }
 4625|  1.73k|}
ofp-actions.c:format_ed_props:
 4630|    326|{
 4631|    326|    const uint8_t *p = (uint8_t *) prop;
 4632|    326|    int i;
 4633|       |
 4634|    326|    if (n_props == 0) {
  ------------------
  |  Branch (4634:9): [True: 0, False: 326]
  ------------------
 4635|      0|        return;
 4636|      0|    }
 4637|    827|    for (i = 0; i < n_props; i++) {
  ------------------
  |  Branch (4637:17): [True: 501, False: 326]
  ------------------
 4638|    501|        format_ed_prop(s, prop);
 4639|    501|        ds_put_char(s, ',');
 4640|    501|        p += ROUND_UP(prop->len, 8);
  ------------------
  |  |  303|    501|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|    501|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
 4641|    501|        prop = ALIGNED_CAST(const struct ofpact_ed_prop *, p);
  ------------------
  |  |  434|    501|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4642|    501|    }
 4643|    326|    if (n_props > 0) {
  ------------------
  |  Branch (4643:9): [True: 326, False: 0]
  ------------------
 4644|    326|        ds_chomp(s, ',');
 4645|    326|    }
 4646|    326|}
ofp-actions.c:format_DECAP:
 4768|  5.52k|{
 4769|  5.52k|    ds_put_format(fp->s, "%sdecap(%s", colors.paren, colors.end);
 4770|  5.52k|    if (a->new_pkt_type != htonl(PT_USE_NEXT_PROTO)) {
  ------------------
  |  Branch (4770:9): [True: 5.33k, False: 195]
  ------------------
 4771|  5.33k|        ds_put_format(fp->s, "packet_type(ns=%"PRIu16",type=%#"PRIx16")",
 4772|  5.33k|                      pt_ns(a->new_pkt_type),
 4773|  5.33k|                      pt_ns_type(a->new_pkt_type));
 4774|  5.33k|    }
 4775|  5.52k|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 4776|  5.52k|}
ofp-actions.c:format_SET_TUNNEL:
 4167|    196|{
 4168|    196|    ds_put_format(fp->s, "%sset_tunnel%s:%s%#"PRIx64, colors.param,
 4169|    196|                  (a->tun_id > UINT32_MAX
  ------------------
  |  Branch (4169:20): [True: 148, False: 48]
  ------------------
 4170|    159|                   || a->ofpact.raw == NXAST_RAW_SET_TUNNEL64 ? "64" : ""),
  ------------------
  |  Branch (4170:23): [True: 11, False: 37]
  ------------------
 4171|    196|                  colors.end, a->tun_id);
 4172|    196|}
ofp-actions.c:format_SET_QUEUE:
 4291|    270|{
 4292|       |    ds_put_format(fp->s, "%sset_queue:%s%"PRIu32,
 4293|    270|                  colors.param, colors.end, a->queue_id);
 4294|    270|}
ofp-actions.c:format_POP_QUEUE:
 4330|    443|{
 4331|    443|    ds_put_format(fp->s, "%spop_queue%s", colors.value, colors.end);
 4332|    443|}
ofp-actions.c:format_FIN_TIMEOUT:
 4426|    406|{
 4427|    406|    ds_put_format(fp->s, "%sfin_timeout(%s", colors.paren, colors.end);
 4428|    406|    if (a->fin_idle_timeout) {
  ------------------
  |  Branch (4428:9): [True: 347, False: 59]
  ------------------
 4429|    347|        ds_put_format(fp->s, "%sidle_timeout=%s%"PRIu16",",
 4430|    347|                      colors.param, colors.end, a->fin_idle_timeout);
 4431|    347|    }
 4432|    406|    if (a->fin_hard_timeout) {
  ------------------
  |  Branch (4432:9): [True: 387, False: 19]
  ------------------
 4433|    387|        ds_put_format(fp->s, "%shard_timeout=%s%"PRIu16",",
 4434|    387|                      colors.param, colors.end, a->fin_hard_timeout);
 4435|    387|    }
 4436|    406|    ds_chomp(fp->s, ',');
 4437|    406|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 4438|    406|}
ofp-actions.c:format_RESUBMIT:
 5028|  2.00k|{
 5029|  2.00k|    if (a->in_port != OFPP_IN_PORT && a->table_id == 255) {
  ------------------
  |  |   39|  2.00k|#define OFPP_IN_PORT    OFP_PORT_C(0xfff8) /* Where the packet came in. */
  |  |  ------------------
  |  |  |  |  157|  4.01k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (5029:9): [True: 1.92k, False: 84]
  |  Branch (5029:39): [True: 392, False: 1.53k]
  ------------------
 5030|    392|        ds_put_format(fp->s, "%sresubmit:%s", colors.special, colors.end);
 5031|    392|        ofputil_format_port(a->in_port, fp->port_map, fp->s);
 5032|  1.61k|    } else {
 5033|  1.61k|        ds_put_format(fp->s, "%sresubmit(%s", colors.paren, colors.end);
 5034|  1.61k|        if (a->in_port != OFPP_IN_PORT) {
  ------------------
  |  |   39|  1.61k|#define OFPP_IN_PORT    OFP_PORT_C(0xfff8) /* Where the packet came in. */
  |  |  ------------------
  |  |  |  |  157|  1.61k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (5034:13): [True: 1.53k, False: 84]
  ------------------
 5035|  1.53k|            ofputil_format_port(a->in_port, fp->port_map, fp->s);
 5036|  1.53k|        }
 5037|  1.61k|        ds_put_char(fp->s, ',');
 5038|  1.61k|        if (a->table_id != 255) {
  ------------------
  |  Branch (5038:13): [True: 1.59k, False: 19]
  ------------------
 5039|  1.59k|            ofputil_format_table(a->table_id, fp->table_map, fp->s);
 5040|  1.59k|        }
 5041|  1.61k|        if (a->with_ct_orig) {
  ------------------
  |  Branch (5041:13): [True: 1.52k, False: 95]
  ------------------
 5042|  1.52k|            ds_put_cstr(fp->s, ",ct");
 5043|  1.52k|        }
 5044|  1.61k|        ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 5045|  1.61k|    }
 5046|  2.00k|}
ofp-actions.c:format_LEARN:
 5639|  10.4k|{
 5640|  10.4k|    learn_format(a, fp->port_map, fp->table_map, fp->s);
 5641|  10.4k|}
ofp-actions.c:format_CONJUNCTION:
 5701|  1.36k|{
 5702|  1.36k|    ds_put_format(fp->s, "%sconjunction(%s%"PRIu32",%d/%"PRIu8"%s)%s",
 5703|  1.36k|                  colors.paren, colors.end,
 5704|  1.36k|                  oc->id, oc->clause + 1, oc->n_clauses,
 5705|  1.36k|                  colors.paren, colors.end);
 5706|  1.36k|}
ofp-actions.c:format_MULTIPATH:
 5866|    810|{
 5867|    810|    multipath_format(a, fp->s);
 5868|    810|}
ofp-actions.c:format_NOTE:
 5951|  3.36k|{
 5952|  3.36k|    ds_put_format(fp->s, "%snote:%s", colors.param, colors.end);
 5953|  3.36k|    ds_put_hex_with_delimiter(fp->s, a->data, a->length, ".");
 5954|  3.36k|}
ofp-actions.c:format_EXIT:
 5989|  1.70k|{
 5990|  1.70k|    ds_put_format(fp->s, "%sexit%s", colors.special, colors.end);
 5991|  1.70k|}
ofp-actions.c:format_SAMPLE:
 6527|  1.10k|{
 6528|  1.10k|    ds_put_format(fp->s, "%ssample(%s%sprobability=%s%"PRIu16
 6529|  1.10k|                  ",%scollector_set_id=%s%"PRIu32,
 6530|  1.10k|                  colors.paren, colors.end,
 6531|  1.10k|                  colors.param, colors.end, a->probability,
 6532|  1.10k|                  colors.param, colors.end, a->collector_set_id);
 6533|       |
 6534|  1.10k|    ds_put_format(fp->s, ",%sobs_domain_id=%s", colors.param, colors.end);
 6535|  1.10k|    if (a->obs_domain_src.field) {
  ------------------
  |  Branch (6535:9): [True: 144, False: 960]
  ------------------
 6536|    144|        mf_format_subfield(&a->obs_domain_src, fp->s);
 6537|    960|    } else {
 6538|    960|        ds_put_format(fp->s, "%"PRIu32, a->obs_domain_imm);
 6539|    960|    }
 6540|  1.10k|    ds_put_format(fp->s, ",%sobs_point_id=%s", colors.param, colors.end);
 6541|  1.10k|    if (a->obs_point_src.field) {
  ------------------
  |  Branch (6541:9): [True: 187, False: 917]
  ------------------
 6542|    187|        mf_format_subfield(&a->obs_point_src, fp->s);
 6543|    917|    } else {
 6544|    917|        ds_put_format(fp->s, "%"PRIu32, a->obs_point_imm);
 6545|    917|    }
 6546|  1.10k|    if (a->sampling_port != OFPP_NONE) {
  ------------------
  |  |   47|  1.10k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|  1.10k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (6546:9): [True: 1.01k, False: 88]
  ------------------
 6547|  1.01k|        ds_put_format(fp->s, ",%ssampling_port=%s", colors.param, colors.end);
 6548|  1.01k|        ofputil_format_port(a->sampling_port, fp->port_map, fp->s);
 6549|  1.01k|    }
 6550|  1.10k|    if (a->direction == NX_ACTION_SAMPLE_INGRESS) {
  ------------------
  |  Branch (6550:9): [True: 46, False: 1.05k]
  ------------------
 6551|     46|        ds_put_format(fp->s, ",%singress%s", colors.param, colors.end);
 6552|  1.05k|    } else if (a->direction == NX_ACTION_SAMPLE_EGRESS) {
  ------------------
  |  Branch (6552:16): [True: 288, False: 770]
  ------------------
 6553|    288|        ds_put_format(fp->s, ",%segress%s", colors.param, colors.end);
 6554|    288|    }
 6555|  1.10k|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 6556|  1.10k|}
ofp-actions.c:format_UNROLL_XLATE:
 6021|  1.25k|{
 6022|  1.25k|    ds_put_format(fp->s, "%sunroll_xlate(%s%stable=%s",
 6023|  1.25k|                  colors.paren,   colors.end,
 6024|  1.25k|                  colors.special, colors.end);
 6025|  1.25k|    ofputil_format_table(a->rule_table_id, fp->table_map, fp->s);
 6026|  1.25k|    ds_put_format(fp->s, ", %scookie=%s%"PRIu64"%s)%s",
 6027|  1.25k|                  colors.param,   colors.end, ntohll(a->rule_cookie),
 6028|  1.25k|                  colors.paren,   colors.end);
 6029|  1.25k|}
ofp-actions.c:format_CT:
 7025|  4.68k|{
 7026|  4.68k|    ds_put_format(fp->s, "%sct(%s", colors.paren, colors.end);
 7027|  4.68k|    if (a->flags & NX_CT_F_COMMIT) {
  ------------------
  |  Branch (7027:9): [True: 3.31k, False: 1.36k]
  ------------------
 7028|  3.31k|        ds_put_format(fp->s, "%scommit%s,", colors.value, colors.end);
 7029|  3.31k|    }
 7030|  4.68k|    if (a->flags & NX_CT_F_FORCE) {
  ------------------
  |  Branch (7030:9): [True: 609, False: 4.07k]
  ------------------
 7031|    609|        ds_put_format(fp->s, "%sforce%s,", colors.value, colors.end);
 7032|    609|    }
 7033|  4.68k|    if (a->recirc_table != NX_CT_RECIRC_NONE) {
  ------------------
  |  |  692|  4.68k|#define NX_CT_RECIRC_NONE OFPTT_ALL
  ------------------
  |  Branch (7033:9): [True: 4.49k, False: 183]
  ------------------
 7034|  4.49k|        ds_put_format(fp->s, "%stable=%s", colors.special, colors.end);
 7035|  4.49k|        ofputil_format_table(a->recirc_table, fp->table_map, fp->s);
 7036|  4.49k|        ds_put_char(fp->s, ',');
 7037|  4.49k|    }
 7038|  4.68k|    if (a->zone_src.field) {
  ------------------
  |  Branch (7038:9): [True: 1.20k, False: 3.47k]
  ------------------
 7039|  1.20k|        ds_put_format(fp->s, "%szone=%s", colors.param, colors.end);
 7040|  1.20k|        mf_format_subfield(&a->zone_src, fp->s);
 7041|  1.20k|        ds_put_char(fp->s, ',');
 7042|  3.47k|    } else if (a->zone_imm) {
  ------------------
  |  Branch (7042:16): [True: 2.74k, False: 726]
  ------------------
 7043|  2.74k|        ds_put_format(fp->s, "%szone=%s%"PRIu16",",
 7044|  2.74k|                      colors.param, colors.end, a->zone_imm);
 7045|  2.74k|    }
 7046|       |    /* If the first action is a NAT action, format it outside of the 'exec'
 7047|       |     * envelope. */
 7048|  4.68k|    const struct ofpact *action = a->actions;
 7049|  4.68k|    size_t actions_len = ofpact_ct_get_action_len(a);
 7050|  4.68k|    if (actions_len && action->type == OFPACT_NAT) {
  ------------------
  |  Branch (7050:9): [True: 3.02k, False: 1.66k]
  |  Branch (7050:24): [True: 2.73k, False: 285]
  ------------------
 7051|  2.73k|        format_NAT(ofpact_get_NAT(action), fp);
 7052|  2.73k|        ds_put_char(fp->s, ',');
 7053|  2.73k|        actions_len -= OFPACT_ALIGN(action->len);
  ------------------
  |  |  205|  2.73k|#define OFPACT_ALIGN(SIZE) ROUND_UP(SIZE, OFPACT_ALIGNTO)
  |  |  ------------------
  |  |  |  |  303|  2.73k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|  2.73k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7054|  2.73k|        action = ofpact_next(action);
 7055|  2.73k|    }
 7056|  4.68k|    if (actions_len) {
  ------------------
  |  Branch (7056:9): [True: 285, False: 4.39k]
  ------------------
 7057|    285|        ds_put_format(fp->s, "%sexec(%s", colors.paren, colors.end);
 7058|    285|        ofpacts_format(action, actions_len, fp);
 7059|    285|        ds_put_format(fp->s, "%s),%s", colors.paren, colors.end);
 7060|    285|    }
 7061|  4.68k|    format_alg(a->alg, fp->s);
 7062|  4.68k|    ds_chomp(fp->s, ',');
 7063|  4.68k|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 7064|  4.68k|}
ofp-actions.c:format_alg:
 7002|  4.68k|{
 7003|  4.68k|    switch(port) {
 7004|    857|    case IPPORT_FTP:
  ------------------
  |  |  695|    857|#define IPPORT_FTP  21
  ------------------
  |  Branch (7004:5): [True: 857, False: 3.82k]
  ------------------
 7005|    857|        ds_put_format(s, "%salg=%sftp,", colors.param, colors.end);
 7006|    857|        break;
 7007|    703|    case IPPORT_TFTP:
  ------------------
  |  |  699|    703|#define IPPORT_TFTP  69
  ------------------
  |  Branch (7007:5): [True: 703, False: 3.97k]
  ------------------
 7008|    703|        ds_put_format(s, "%salg=%stftp,", colors.param, colors.end);
 7009|    703|        break;
 7010|    318|    case 0:
  ------------------
  |  Branch (7010:5): [True: 318, False: 4.36k]
  ------------------
 7011|       |        /* Don't print. */
 7012|    318|        break;
 7013|  2.80k|    default:
  ------------------
  |  Branch (7013:5): [True: 2.80k, False: 1.87k]
  ------------------
 7014|  2.80k|        ds_put_format(s, "%salg=%s%d,", colors.param, colors.end, port);
 7015|  2.80k|        break;
 7016|  4.68k|    }
 7017|  4.68k|}
ofp-actions.c:format_CT_CLEAR:
 7115|    149|{
 7116|    149|    ds_put_format(fp->s, "%sct_clear%s", colors.value, colors.end);
 7117|    149|}
ofp-actions.c:format_NAT:
 7306|  2.73k|{
 7307|  2.73k|    ds_put_format(fp->s, "%snat%s", colors.paren, colors.end);
 7308|       |
 7309|  2.73k|    if (a->flags & (NX_NAT_F_SRC | NX_NAT_F_DST)) {
  ------------------
  |  Branch (7309:9): [True: 2.65k, False: 84]
  ------------------
 7310|  2.65k|        ds_put_format(fp->s, "%s(%s", colors.paren, colors.end);
 7311|  2.65k|        ds_put_format(fp->s, a->flags & NX_NAT_F_SRC ? "%ssrc%s" : "%sdst%s",
  ------------------
  |  Branch (7311:30): [True: 2.18k, False: 472]
  ------------------
 7312|  2.65k|                      colors.param, colors.end);
 7313|       |
 7314|  2.65k|        if (a->range_af != AF_UNSPEC) {
  ------------------
  |  Branch (7314:13): [True: 1.25k, False: 1.40k]
  ------------------
 7315|  1.25k|            ds_put_format(fp->s, "%s=%s", colors.param, colors.end);
 7316|       |
 7317|  1.25k|            if (a->range_af == AF_INET) {
  ------------------
  |  Branch (7317:17): [True: 1.25k, False: 0]
  ------------------
 7318|  1.25k|                ds_put_format(fp->s, IP_FMT, IP_ARGS(a->range.addr.ipv4.min));
  ------------------
  |  |  628|  1.25k|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
                              ds_put_format(fp->s, IP_FMT, IP_ARGS(a->range.addr.ipv4.min));
  ------------------
  |  |  630|  1.25k|    ntohl(ip) >> 24,                            \
  |  |  631|  1.25k|    (ntohl(ip) >> 16) & 0xff,                   \
  |  |  632|  1.25k|    (ntohl(ip) >> 8) & 0xff,                    \
  |  |  633|  1.25k|    ntohl(ip) & 0xff
  ------------------
 7319|       |
 7320|  1.25k|                if (a->range.addr.ipv4.max
  ------------------
  |  Branch (7320:21): [True: 137, False: 1.11k]
  ------------------
 7321|    137|                    && a->range.addr.ipv4.max != a->range.addr.ipv4.min) {
  ------------------
  |  Branch (7321:24): [True: 60, False: 77]
  ------------------
 7322|     60|                    ds_put_format(fp->s, "-"IP_FMT,
  ------------------
  |  |  628|     60|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
 7323|     60|                                  IP_ARGS(a->range.addr.ipv4.max));
  ------------------
  |  |  630|     60|    ntohl(ip) >> 24,                            \
  |  |  631|     60|    (ntohl(ip) >> 16) & 0xff,                   \
  |  |  632|     60|    (ntohl(ip) >> 8) & 0xff,                    \
  |  |  633|     60|    ntohl(ip) & 0xff
  ------------------
 7324|     60|                }
 7325|  1.25k|            } 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.25k|            if (a->range.proto.min) {
  ------------------
  |  Branch (7337:17): [True: 909, False: 342]
  ------------------
 7338|    909|                ds_put_char(fp->s, ':');
 7339|    909|                ds_put_format(fp->s, "%"PRIu16, a->range.proto.min);
 7340|       |
 7341|    909|                if (a->range.proto.max
  ------------------
  |  Branch (7341:21): [True: 142, False: 767]
  ------------------
 7342|    142|                    && a->range.proto.max != a->range.proto.min) {
  ------------------
  |  Branch (7342:24): [True: 53, False: 89]
  ------------------
 7343|     53|                    ds_put_format(fp->s, "-%"PRIu16, a->range.proto.max);
 7344|     53|                }
 7345|    909|            }
 7346|  1.25k|            ds_put_char(fp->s, ',');
 7347|       |
 7348|  1.25k|            if (a->flags & NX_NAT_F_PERSISTENT) {
  ------------------
  |  Branch (7348:17): [True: 992, False: 259]
  ------------------
 7349|    992|                ds_put_format(fp->s, "%spersistent%s,",
 7350|    992|                              colors.value, colors.end);
 7351|    992|            }
 7352|  1.25k|            if (a->flags & NX_NAT_F_PROTO_HASH) {
  ------------------
  |  Branch (7352:17): [True: 52, False: 1.19k]
  ------------------
 7353|     52|                ds_put_format(fp->s, "%shash%s,", colors.value, colors.end);
 7354|     52|            }
 7355|  1.25k|            if (a->flags & NX_NAT_F_PROTO_RANDOM) {
  ------------------
  |  Branch (7355:17): [True: 771, False: 480]
  ------------------
 7356|    771|                ds_put_format(fp->s, "%srandom%s,", colors.value, colors.end);
 7357|    771|            }
 7358|  1.25k|        }
 7359|  2.65k|        ds_chomp(fp->s, ',');
 7360|  2.65k|        ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 7361|  2.65k|    }
 7362|  2.73k|}
ofp-actions.c:format_OUTPUT_TRUNC:
 7541|    983|{
 7542|    983|    ds_put_format(fp->s, "%soutput%s(port=", colors.special, colors.end);
 7543|    983|    ofputil_format_port(a->port, fp->port_map, fp->s);
 7544|    983|    ds_put_format(fp->s, ",max_len=%"PRIu32")", a->max_len);
 7545|    983|}
ofp-actions.c:format_CLONE:
 6114|    953|{
 6115|    953|    ds_put_format(fp->s, "%sclone(%s", colors.paren, colors.end);
 6116|    953|    ofpacts_format(a->actions, ofpact_nest_get_action_len(a), fp);
 6117|    953|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 6118|    953|}
ofp-actions.c:format_CHECK_PKT_LARGER:
 7902|    284|{
 7903|    284|    ds_put_format(fp->s, "%scheck_pkt_larger(%s%"PRIu32")->",
 7904|    284|                  colors.param, colors.end, a->pkt_len);
 7905|    284|    mf_format_subfield(&a->dst, fp->s);
 7906|    284|}
ofp-actions.c:format_METER:
 7593|    145|{
 7594|       |    ds_put_format(fp->s, "%smeter:%s%"PRIu32,
 7595|    145|                  colors.param, colors.end, a->meter_id);
 7596|    145|}
ofp-actions.c:format_CLEAR_ACTIONS:
 7628|    140|{
 7629|    140|    ds_put_format(fp->s, "%sclear_actions%s", colors.value, colors.end);
 7630|    140|}
ofp-actions.c:format_WRITE_ACTIONS:
 7689|  6.88k|{
 7690|  6.88k|    ds_put_format(fp->s, "%swrite_actions(%s", colors.paren, colors.end);
 7691|  6.88k|    ofpacts_format(a->actions, ofpact_nest_get_action_len(a), fp);
 7692|  6.88k|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 7693|  6.88k|}
ofp-actions.c:format_WRITE_METADATA:
 7783|    141|{
 7784|    141|    ds_put_format(fp->s, "%swrite_metadata:%s%#"PRIx64,
 7785|    141|                  colors.param, colors.end, ntohll(a->metadata));
 7786|    141|    if (a->mask != OVS_BE64_MAX) {
  ------------------
  |  |   44|    141|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  |  Branch (7786:9): [True: 124, False: 17]
  ------------------
 7787|       |        ds_put_format(fp->s, "/%#"PRIx64, ntohll(a->mask));
 7788|    124|    }
 7789|    141|}
ofp-actions.c:format_GOTO_TABLE:
 7950|    131|{
 7951|    131|    ds_put_format(fp->s, "%sgoto_table:%s", colors.param, colors.end);
 7952|    131|    ofputil_format_table(a->table_id, fp->table_map, fp->s);
 7953|    131|}

ofp-actions.c:ofpact_decode:
 4645|   186k|{
 4646|   186k|    switch (raw) {
 4647|  9.94k|    case OFPAT_RAW10_OUTPUT:
  ------------------
  |  Branch (4647:5): [True: 9.94k, False: 176k]
  ------------------
 4648|  9.94k|        return decode_OFPAT_RAW10_OUTPUT(ALIGNED_CAST(const struct ofp10_action_output *, a), version, out);
  ------------------
  |  |  434|  9.94k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4649|       |
 4650|    870|    case OFPAT_RAW11_OUTPUT:
  ------------------
  |  Branch (4650:5): [True: 870, False: 185k]
  ------------------
 4651|    870|        return decode_OFPAT_RAW11_OUTPUT(ALIGNED_CAST(const struct ofp11_action_output *, a), version, out);
  ------------------
  |  |  434|    870|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4652|       |
 4653|  5.35k|    case OFPAT_RAW10_SET_VLAN_VID:
  ------------------
  |  Branch (4653:5): [True: 5.35k, False: 180k]
  ------------------
 4654|  5.35k|        return decode_OFPAT_RAW10_SET_VLAN_VID(arg, version, out);
 4655|       |
 4656|    772|    case OFPAT_RAW10_SET_VLAN_PCP:
  ------------------
  |  Branch (4656:5): [True: 772, False: 185k]
  ------------------
 4657|    772|        return decode_OFPAT_RAW10_SET_VLAN_PCP(arg, version, out);
 4658|       |
 4659|  1.00k|    case OFPAT_RAW11_SET_VLAN_VID:
  ------------------
  |  Branch (4659:5): [True: 1.00k, False: 185k]
  ------------------
 4660|  1.00k|        return decode_OFPAT_RAW11_SET_VLAN_VID(arg, version, out);
 4661|       |
 4662|  1.50k|    case OFPAT_RAW11_SET_VLAN_PCP:
  ------------------
  |  Branch (4662:5): [True: 1.50k, False: 184k]
  ------------------
 4663|  1.50k|        return decode_OFPAT_RAW11_SET_VLAN_PCP(arg, version, out);
 4664|       |
 4665|  2.19k|    case OFPAT_RAW11_PUSH_VLAN:
  ------------------
  |  Branch (4665:5): [True: 2.19k, False: 184k]
  ------------------
 4666|  2.19k|        return decode_OFPAT_RAW11_PUSH_VLAN(htons(arg), version, out);
 4667|       |
 4668|  1.59k|    case OFPAT_RAW10_STRIP_VLAN:
  ------------------
  |  Branch (4668:5): [True: 1.59k, False: 184k]
  ------------------
 4669|  1.59k|        return decode_OFPAT_RAW10_STRIP_VLAN(out);
 4670|       |
 4671|  2.44k|    case OFPAT_RAW11_POP_VLAN:
  ------------------
  |  Branch (4671:5): [True: 2.44k, False: 183k]
  ------------------
 4672|  2.44k|        return decode_OFPAT_RAW11_POP_VLAN(out);
 4673|       |
 4674|     48|    case OFPAT_RAW_SET_DL_SRC:
  ------------------
  |  Branch (4674:5): [True: 48, False: 186k]
  ------------------
 4675|     48|        return decode_OFPAT_RAW_SET_DL_SRC(ALIGNED_CAST(const struct ofp_action_dl_addr *, a), version, out);
  ------------------
  |  |  434|     48|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4676|       |
 4677|    129|    case OFPAT_RAW_SET_DL_DST:
  ------------------
  |  Branch (4677:5): [True: 129, False: 186k]
  ------------------
 4678|    129|        return decode_OFPAT_RAW_SET_DL_DST(ALIGNED_CAST(const struct ofp_action_dl_addr *, a), version, out);
  ------------------
  |  |  434|    129|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4679|       |
 4680|  2.26k|    case OFPAT_RAW_SET_NW_SRC:
  ------------------
  |  Branch (4680:5): [True: 2.26k, False: 183k]
  ------------------
 4681|  2.26k|        return decode_OFPAT_RAW_SET_NW_SRC(htonl(arg), version, out);
 4682|       |
 4683|  2.14k|    case OFPAT_RAW_SET_NW_DST:
  ------------------
  |  Branch (4683:5): [True: 2.14k, False: 184k]
  ------------------
 4684|  2.14k|        return decode_OFPAT_RAW_SET_NW_DST(htonl(arg), version, out);
 4685|       |
 4686|  2.66k|    case OFPAT_RAW_SET_NW_TOS:
  ------------------
  |  Branch (4686:5): [True: 2.66k, False: 183k]
  ------------------
 4687|  2.66k|        return decode_OFPAT_RAW_SET_NW_TOS(arg, version, out);
 4688|       |
 4689|  1.84k|    case OFPAT_RAW11_SET_NW_ECN:
  ------------------
  |  Branch (4689:5): [True: 1.84k, False: 184k]
  ------------------
 4690|  1.84k|        return decode_OFPAT_RAW11_SET_NW_ECN(arg, version, out);
 4691|       |
 4692|  3.01k|    case OFPAT_RAW_SET_TP_SRC:
  ------------------
  |  Branch (4692:5): [True: 3.01k, False: 183k]
  ------------------
 4693|  3.01k|        return decode_OFPAT_RAW_SET_TP_SRC(htons(arg), version, out);
 4694|       |
 4695|  4.28k|    case OFPAT_RAW_SET_TP_DST:
  ------------------
  |  Branch (4695:5): [True: 4.28k, False: 181k]
  ------------------
 4696|  4.28k|        return decode_OFPAT_RAW_SET_TP_DST(htons(arg), version, out);
 4697|       |
 4698|    169|    case OFPAT_RAW10_ENQUEUE:
  ------------------
  |  Branch (4698:5): [True: 169, False: 186k]
  ------------------
 4699|    169|        return decode_OFPAT_RAW10_ENQUEUE(ALIGNED_CAST(const struct ofp10_action_enqueue *, a), version, out);
  ------------------
  |  |  434|    169|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4700|       |
 4701|  2.25k|    case OFPAT_RAW_SET_MPLS_LABEL:
  ------------------
  |  Branch (4701:5): [True: 2.25k, False: 184k]
  ------------------
 4702|  2.25k|        return decode_OFPAT_RAW_SET_MPLS_LABEL(htonl(arg), version, out);
 4703|       |
 4704|    711|    case OFPAT_RAW_SET_MPLS_TC:
  ------------------
  |  Branch (4704:5): [True: 711, False: 185k]
  ------------------
 4705|    711|        return decode_OFPAT_RAW_SET_MPLS_TC(arg, version, out);
 4706|       |
 4707|  1.96k|    case OFPAT_RAW_SET_MPLS_TTL:
  ------------------
  |  Branch (4707:5): [True: 1.96k, False: 184k]
  ------------------
 4708|  1.96k|        return decode_OFPAT_RAW_SET_MPLS_TTL(arg, version, out);
 4709|       |
 4710|  3.49k|    case OFPAT_RAW_DEC_MPLS_TTL:
  ------------------
  |  Branch (4710:5): [True: 3.49k, False: 182k]
  ------------------
 4711|  3.49k|        return decode_OFPAT_RAW_DEC_MPLS_TTL(out);
 4712|       |
 4713|  2.84k|    case OFPAT_RAW_PUSH_MPLS:
  ------------------
  |  Branch (4713:5): [True: 2.84k, False: 183k]
  ------------------
 4714|  2.84k|        return decode_OFPAT_RAW_PUSH_MPLS(htons(arg), version, out);
 4715|       |
 4716|  3.67k|    case OFPAT_RAW_POP_MPLS:
  ------------------
  |  Branch (4716:5): [True: 3.67k, False: 182k]
  ------------------
 4717|  3.67k|        return decode_OFPAT_RAW_POP_MPLS(htons(arg), version, out);
 4718|       |
 4719|    274|    case OFPAT_RAW_SET_QUEUE:
  ------------------
  |  Branch (4719:5): [True: 274, False: 185k]
  ------------------
 4720|    274|        return decode_OFPAT_RAW_SET_QUEUE(arg, version, out);
 4721|       |
 4722|    706|    case OFPAT_RAW_GROUP:
  ------------------
  |  Branch (4722:5): [True: 706, False: 185k]
  ------------------
 4723|    706|        return decode_OFPAT_RAW_GROUP(arg, version, out);
 4724|       |
 4725|    439|    case OFPAT_RAW11_SET_NW_TTL:
  ------------------
  |  Branch (4725:5): [True: 439, False: 185k]
  ------------------
 4726|    439|        return decode_OFPAT_RAW11_SET_NW_TTL(arg, version, out);
 4727|       |
 4728|  1.47k|    case OFPAT_RAW_DEC_NW_TTL:
  ------------------
  |  Branch (4728:5): [True: 1.47k, False: 184k]
  ------------------
 4729|  1.47k|        return decode_OFPAT_RAW_DEC_NW_TTL(out);
 4730|       |
 4731|    776|    case NXAST_RAW_DEC_TTL_CNT_IDS:
  ------------------
  |  Branch (4731:5): [True: 776, False: 185k]
  ------------------
 4732|    776|        return decode_NXAST_RAW_DEC_TTL_CNT_IDS(ALIGNED_CAST(const struct nx_action_cnt_ids *, a), version, out);
  ------------------
  |  |  434|    776|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4733|       |
 4734|  4.14k|    case OFPAT_RAW12_SET_FIELD:
  ------------------
  |  Branch (4734:5): [True: 4.14k, False: 182k]
  ------------------
 4735|  4.14k|        return decode_OFPAT_RAW12_SET_FIELD(ALIGNED_CAST(const struct ofp12_action_set_field *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  4.14k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4736|       |
 4737|  8.95k|    case OFPAT_RAW15_SET_FIELD:
  ------------------
  |  Branch (4737:5): [True: 8.95k, False: 177k]
  ------------------
 4738|  8.95k|        return decode_OFPAT_RAW15_SET_FIELD(ALIGNED_CAST(const struct ofp12_action_set_field *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  8.95k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4739|       |
 4740|  2.45k|    case NXAST_RAW_REG_LOAD:
  ------------------
  |  Branch (4740:5): [True: 2.45k, False: 183k]
  ------------------
 4741|  2.45k|        return decode_NXAST_RAW_REG_LOAD(ALIGNED_CAST(const struct nx_action_reg_load *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  2.45k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4742|       |
 4743|  2.41k|    case NXAST_RAW_REG_LOAD2:
  ------------------
  |  Branch (4743:5): [True: 2.41k, False: 183k]
  ------------------
 4744|  2.41k|        return decode_NXAST_RAW_REG_LOAD2(ALIGNED_CAST(const struct ext_action_header *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  2.41k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4745|       |
 4746|  1.84k|    case OFPAT_RAW15_COPY_FIELD:
  ------------------
  |  Branch (4746:5): [True: 1.84k, False: 184k]
  ------------------
 4747|  1.84k|        return decode_OFPAT_RAW15_COPY_FIELD(ALIGNED_CAST(const struct ofp15_action_copy_field *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  1.84k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4748|       |
 4749|     31|    case ONFACT_RAW13_COPY_FIELD:
  ------------------
  |  Branch (4749:5): [True: 31, False: 186k]
  ------------------
 4750|     31|        return decode_ONFACT_RAW13_COPY_FIELD(ALIGNED_CAST(const struct onf_action_copy_field *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|     31|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4751|       |
 4752|  6.53k|    case NXAST_RAW_REG_MOVE:
  ------------------
  |  Branch (4752:5): [True: 6.53k, False: 179k]
  ------------------
 4753|  6.53k|        return decode_NXAST_RAW_REG_MOVE(ALIGNED_CAST(const struct nx_action_reg_move *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  6.53k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4754|       |
 4755|    499|    case OFPAT_RAW15_METER:
  ------------------
  |  Branch (4755:5): [True: 499, False: 185k]
  ------------------
 4756|    499|        return decode_OFPAT_RAW15_METER(arg, version, out);
 4757|       |
 4758|    768|    case NXAST_RAW_RESUBMIT:
  ------------------
  |  Branch (4758:5): [True: 768, False: 185k]
  ------------------
 4759|    768|        return decode_NXAST_RAW_RESUBMIT(arg, version, out);
 4760|       |
 4761|    381|    case NXAST_RAW_RESUBMIT_TABLE:
  ------------------
  |  Branch (4761:5): [True: 381, False: 185k]
  ------------------
 4762|    381|        return decode_NXAST_RAW_RESUBMIT_TABLE(ALIGNED_CAST(const struct nx_action_resubmit *, a), version, out);
  ------------------
  |  |  434|    381|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4763|       |
 4764|  2.44k|    case NXAST_RAW_RESUBMIT_TABLE_CT:
  ------------------
  |  Branch (4764:5): [True: 2.44k, False: 183k]
  ------------------
 4765|  2.44k|        return decode_NXAST_RAW_RESUBMIT_TABLE_CT(ALIGNED_CAST(const struct nx_action_resubmit *, a), version, out);
  ------------------
  |  |  434|  2.44k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4766|       |
 4767|  1.03k|    case NXAST_RAW_SET_TUNNEL:
  ------------------
  |  Branch (4767:5): [True: 1.03k, False: 185k]
  ------------------
 4768|  1.03k|        return decode_NXAST_RAW_SET_TUNNEL(arg, version, out);
 4769|       |
 4770|    173|    case NXAST_RAW_SET_TUNNEL64:
  ------------------
  |  Branch (4770:5): [True: 173, False: 186k]
  ------------------
 4771|    173|        return decode_NXAST_RAW_SET_TUNNEL64(arg, version, out);
 4772|       |
 4773|  1.89k|    case NXAST_RAW_POP_QUEUE:
  ------------------
  |  Branch (4773:5): [True: 1.89k, False: 184k]
  ------------------
 4774|  1.89k|        return decode_NXAST_RAW_POP_QUEUE(out);
 4775|       |
 4776|  10.4k|    case NXAST_RAW_NOTE:
  ------------------
  |  Branch (4776:5): [True: 10.4k, False: 175k]
  ------------------
 4777|  10.4k|        return decode_NXAST_RAW_NOTE(ALIGNED_CAST(const struct nx_action_note *, a), version, out);
  ------------------
  |  |  434|  10.4k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4778|       |
 4779|  1.22k|    case NXAST_RAW_MULTIPATH:
  ------------------
  |  Branch (4779:5): [True: 1.22k, False: 185k]
  ------------------
 4780|  1.22k|        return decode_NXAST_RAW_MULTIPATH(ALIGNED_CAST(const struct nx_action_multipath *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  1.22k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4781|       |
 4782|    795|    case NXAST_RAW_BUNDLE:
  ------------------
  |  Branch (4782:5): [True: 795, False: 185k]
  ------------------
 4783|    795|        return decode_NXAST_RAW_BUNDLE(ALIGNED_CAST(const struct nx_action_bundle *, a), version, out);
  ------------------
  |  |  434|    795|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4784|       |
 4785|  2.47k|    case NXAST_RAW_BUNDLE_LOAD:
  ------------------
  |  Branch (4785:5): [True: 2.47k, False: 183k]
  ------------------
 4786|  2.47k|        return decode_NXAST_RAW_BUNDLE_LOAD(ALIGNED_CAST(const struct nx_action_bundle *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  2.47k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4787|       |
 4788|    344|    case NXAST_RAW_OUTPUT_REG:
  ------------------
  |  Branch (4788:5): [True: 344, False: 185k]
  ------------------
 4789|    344|        return decode_NXAST_RAW_OUTPUT_REG(ALIGNED_CAST(const struct nx_action_output_reg *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|    344|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4790|       |
 4791|    169|    case NXAST_RAW_OUTPUT_REG2:
  ------------------
  |  Branch (4791:5): [True: 169, False: 186k]
  ------------------
 4792|    169|        return decode_NXAST_RAW_OUTPUT_REG2(ALIGNED_CAST(const struct nx_action_output_reg2 *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|    169|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4793|       |
 4794|  13.7k|    case NXAST_RAW_LEARN:
  ------------------
  |  Branch (4794:5): [True: 13.7k, False: 172k]
  ------------------
 4795|  13.7k|        return decode_NXAST_RAW_LEARN(ALIGNED_CAST(const struct nx_action_learn *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  13.7k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4796|       |
 4797|  1.40k|    case NXAST_RAW_LEARN2:
  ------------------
  |  Branch (4797:5): [True: 1.40k, False: 184k]
  ------------------
 4798|  1.40k|        return decode_NXAST_RAW_LEARN2(ALIGNED_CAST(const struct nx_action_learn2 *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  1.40k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4799|       |
 4800|  1.82k|    case NXAST_RAW_EXIT:
  ------------------
  |  Branch (4800:5): [True: 1.82k, False: 184k]
  ------------------
 4801|  1.82k|        return decode_NXAST_RAW_EXIT(out);
 4802|       |
 4803|    440|    case NXAST_RAW_FIN_TIMEOUT:
  ------------------
  |  Branch (4803:5): [True: 440, False: 185k]
  ------------------
 4804|    440|        return decode_NXAST_RAW_FIN_TIMEOUT(ALIGNED_CAST(const struct nx_action_fin_timeout *, a), version, out);
  ------------------
  |  |  434|    440|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4805|       |
 4806|  1.92k|    case NXAST_RAW_CONTROLLER:
  ------------------
  |  Branch (4806:5): [True: 1.92k, False: 184k]
  ------------------
 4807|  1.92k|        return decode_NXAST_RAW_CONTROLLER(ALIGNED_CAST(const struct nx_action_controller *, a), version, out);
  ------------------
  |  |  434|  1.92k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4808|       |
 4809|  2.17k|    case NXAST_RAW_CONTROLLER2:
  ------------------
  |  Branch (4809:5): [True: 2.17k, False: 184k]
  ------------------
 4810|  2.17k|        return decode_NXAST_RAW_CONTROLLER2(ALIGNED_CAST(const struct ext_action_header *, a), version, out);
  ------------------
  |  |  434|  2.17k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4811|       |
 4812|    441|    case NXAST_RAW_WRITE_METADATA:
  ------------------
  |  Branch (4812:5): [True: 441, False: 185k]
  ------------------
 4813|    441|        return decode_NXAST_RAW_WRITE_METADATA(ALIGNED_CAST(const struct nx_action_write_metadata *, a), version, out);
  ------------------
  |  |  434|    441|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4814|       |
 4815|    417|    case NXAST_RAW_STACK_PUSH:
  ------------------
  |  Branch (4815:5): [True: 417, False: 185k]
  ------------------
 4816|    417|        return decode_NXAST_RAW_STACK_PUSH(ALIGNED_CAST(const struct nx_action_stack *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|    417|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4817|       |
 4818|    734|    case NXAST_RAW_STACK_POP:
  ------------------
  |  Branch (4818:5): [True: 734, False: 185k]
  ------------------
 4819|    734|        return decode_NXAST_RAW_STACK_POP(ALIGNED_CAST(const struct nx_action_stack *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|    734|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4820|       |
 4821|    127|    case NXAST_RAW_SAMPLE:
  ------------------
  |  Branch (4821:5): [True: 127, False: 186k]
  ------------------
 4822|    127|        return decode_NXAST_RAW_SAMPLE(ALIGNED_CAST(const struct nx_action_sample *, a), version, out);
  ------------------
  |  |  434|    127|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4823|       |
 4824|    215|    case NXAST_RAW_SAMPLE2:
  ------------------
  |  Branch (4824:5): [True: 215, False: 186k]
  ------------------
 4825|    215|        return decode_NXAST_RAW_SAMPLE2(ALIGNED_CAST(const struct nx_action_sample2 *, a), version, out);
  ------------------
  |  |  434|    215|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4826|       |
 4827|  1.06k|    case NXAST_RAW_SAMPLE3:
  ------------------
  |  Branch (4827:5): [True: 1.06k, False: 185k]
  ------------------
 4828|  1.06k|        return decode_NXAST_RAW_SAMPLE3(ALIGNED_CAST(const struct nx_action_sample2 *, a), version, out);
  ------------------
  |  |  434|  1.06k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4829|       |
 4830|  1.13k|    case NXAST_RAW_SAMPLE4:
  ------------------
  |  Branch (4830:5): [True: 1.13k, False: 185k]
  ------------------
 4831|  1.13k|        return decode_NXAST_RAW_SAMPLE4(ALIGNED_CAST(const struct nx_action_sample4 *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  1.13k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4832|       |
 4833|  4.58k|    case NXAST_RAW_CONJUNCTION:
  ------------------
  |  Branch (4833:5): [True: 4.58k, False: 181k]
  ------------------
 4834|  4.58k|        return decode_NXAST_RAW_CONJUNCTION(ALIGNED_CAST(const struct nx_action_conjunction *, a), version, out);
  ------------------
  |  |  434|  4.58k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4835|       |
 4836|  8.37k|    case NXAST_RAW_CT:
  ------------------
  |  Branch (4836:5): [True: 8.37k, False: 177k]
  ------------------
 4837|  8.37k|        return decode_NXAST_RAW_CT(ALIGNED_CAST(const struct nx_action_conntrack *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  8.37k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4838|       |
 4839|  17.3k|    case NXAST_RAW_NAT:
  ------------------
  |  Branch (4839:5): [True: 17.3k, False: 168k]
  ------------------
 4840|  17.3k|        return decode_NXAST_RAW_NAT(ALIGNED_CAST(const struct nx_action_nat *, a), version, out);
  ------------------
  |  |  434|  17.3k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4841|       |
 4842|  1.11k|    case NXAST_RAW_OUTPUT_TRUNC:
  ------------------
  |  Branch (4842:5): [True: 1.11k, False: 185k]
  ------------------
 4843|  1.11k|        return decode_NXAST_RAW_OUTPUT_TRUNC(ALIGNED_CAST(const struct nx_action_output_trunc *, a), version, out);
  ------------------
  |  |  434|  1.11k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4844|       |
 4845|  1.21k|    case NXAST_RAW_CLONE:
  ------------------
  |  Branch (4845:5): [True: 1.21k, False: 185k]
  ------------------
 4846|  1.21k|        return decode_NXAST_RAW_CLONE(ALIGNED_CAST(const struct ext_action_header *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  1.21k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4847|       |
 4848|    178|    case NXAST_RAW_CT_CLEAR:
  ------------------
  |  Branch (4848:5): [True: 178, False: 186k]
  ------------------
 4849|    178|        return decode_NXAST_RAW_CT_CLEAR(out);
 4850|       |
 4851|  3.81k|    case NXAST_RAW_ENCAP:
  ------------------
  |  Branch (4851:5): [True: 3.81k, False: 182k]
  ------------------
 4852|  3.81k|        return decode_NXAST_RAW_ENCAP(ALIGNED_CAST(const struct nx_action_encap *, a), version, out);
  ------------------
  |  |  434|  3.81k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4853|       |
 4854|  11.2k|    case NXAST_RAW_DECAP:
  ------------------
  |  Branch (4854:5): [True: 11.2k, False: 174k]
  ------------------
 4855|  11.2k|        return decode_NXAST_RAW_DECAP(ALIGNED_CAST(const struct nx_action_decap *, a), version, out);
  ------------------
  |  |  434|  11.2k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4856|       |
 4857|  1.20k|    case NXAST_RAW_DEC_NSH_TTL:
  ------------------
  |  Branch (4857:5): [True: 1.20k, False: 185k]
  ------------------
 4858|  1.20k|        return decode_NXAST_RAW_DEC_NSH_TTL(out);
 4859|       |
 4860|  1.26k|    case NXAST_RAW_CHECK_PKT_LARGER:
  ------------------
  |  Branch (4860:5): [True: 1.26k, False: 184k]
  ------------------
 4861|  1.26k|        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|  1.26k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4862|       |
 4863|    308|    case NXAST_RAW_DELETE_FIELD:
  ------------------
  |  Branch (4863:5): [True: 308, False: 185k]
  ------------------
 4864|    308|        return decode_NXAST_RAW_DELETE_FIELD(ALIGNED_CAST(const struct nx_action_delete_field *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|    308|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4865|       |
 4866|     68|    case NXAST_RAW_DEBUG_SLOW:
  ------------------
  |  Branch (4866:5): [True: 68, False: 186k]
  ------------------
 4867|     68|        return decode_NXAST_RAW_DEBUG_SLOW(out);
 4868|       |
 4869|     36|    case NXAST_RAW_DEBUG_RECIRC:
  ------------------
  |  Branch (4869:5): [True: 36, False: 186k]
  ------------------
 4870|     36|        return decode_NXAST_RAW_DEBUG_RECIRC(out);
 4871|       |
 4872|      0|    default:
  ------------------
  |  Branch (4872:5): [True: 0, False: 186k]
  ------------------
 4873|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 4874|   186k|    }
 4875|   186k|}

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

ofputil_decode_role_message:
   42|  5.84k|{
   43|  5.84k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
   44|  5.84k|    enum ofpraw raw = ofpraw_pull_assert(&b);
   45|  5.84k|    if (raw == OFPRAW_OFPT12_ROLE_REQUEST ||
  ------------------
  |  Branch (45:9): [True: 513, False: 5.33k]
  ------------------
   46|  5.33k|        raw == OFPRAW_OFPT12_ROLE_REPLY) {
  ------------------
  |  Branch (46:9): [True: 4.71k, False: 621]
  ------------------
   47|  5.22k|        const struct ofp12_role_request *orr = b.msg;
   48|       |
   49|  5.22k|        if (orr->role != htonl(OFPCR12_ROLE_NOCHANGE) &&
  ------------------
  |  Branch (49:13): [True: 4.95k, False: 266]
  ------------------
   50|  4.95k|            orr->role != htonl(OFPCR12_ROLE_EQUAL) &&
  ------------------
  |  Branch (50:13): [True: 1.71k, False: 3.24k]
  ------------------
   51|  1.71k|            orr->role != htonl(OFPCR12_ROLE_PRIMARY) &&
  ------------------
  |  Branch (51:13): [True: 1.68k, False: 28]
  ------------------
   52|  1.68k|            orr->role != htonl(OFPCR12_ROLE_SECONDARY)) {
  ------------------
  |  Branch (52:13): [True: 1.50k, False: 177]
  ------------------
   53|  1.50k|            return OFPERR_OFPRRFC_BAD_ROLE;
   54|  1.50k|        }
   55|       |
   56|  3.71k|        rr->role = ntohl(orr->role);
   57|  3.71k|        if (raw == OFPRAW_OFPT12_ROLE_REQUEST
  ------------------
  |  Branch (57:13): [True: 414, False: 3.30k]
  |  Branch (57:13): [True: 178, False: 3.53k]
  ------------------
   58|  3.71k|            ? orr->role == htonl(OFPCR12_ROLE_NOCHANGE)
   59|  3.71k|            : orr->generation_id == OVS_BE64_MAX) {
  ------------------
  |  |   44|  3.30k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
   60|    178|            rr->have_generation_id = false;
   61|    178|            rr->generation_id = 0;
   62|  3.53k|        } else {
   63|  3.53k|            rr->have_generation_id = true;
   64|  3.53k|            rr->generation_id = ntohll(orr->generation_id);
   65|  3.53k|        }
   66|  3.71k|    } else if (raw == OFPRAW_NXT_ROLE_REQUEST ||
  ------------------
  |  Branch (66:16): [True: 432, False: 189]
  ------------------
   67|    621|               raw == OFPRAW_NXT_ROLE_REPLY) {
  ------------------
  |  Branch (67:16): [True: 189, False: 0]
  ------------------
   68|    621|        const struct nx_role_request *nrr = b.msg;
   69|       |
   70|    621|        BUILD_ASSERT(NX_ROLE_OTHER + 1 == OFPCR12_ROLE_EQUAL);
  ------------------
  |  |  271|    621|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  ------------------
   71|    621|        BUILD_ASSERT(NX_ROLE_PRIMARY + 1 == OFPCR12_ROLE_PRIMARY);
  ------------------
  |  |  271|    621|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  ------------------
   72|    621|        BUILD_ASSERT(NX_ROLE_SECONDARY + 1 == OFPCR12_ROLE_SECONDARY);
  ------------------
  |  |  271|    621|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  ------------------
   73|       |
   74|    621|        if (nrr->role != htonl(NX_ROLE_OTHER) &&
  ------------------
  |  Branch (74:13): [True: 570, False: 51]
  ------------------
   75|    570|            nrr->role != htonl(NX_ROLE_PRIMARY) &&
  ------------------
  |  Branch (75:13): [True: 564, False: 6]
  ------------------
   76|    564|            nrr->role != htonl(NX_ROLE_SECONDARY)) {
  ------------------
  |  Branch (76:13): [True: 122, False: 442]
  ------------------
   77|    122|            return OFPERR_OFPRRFC_BAD_ROLE;
   78|    122|        }
   79|       |
   80|    499|        rr->role = ntohl(nrr->role) + 1;
   81|    499|        rr->have_generation_id = false;
   82|    499|        rr->generation_id = 0;
   83|    499|    } else {
   84|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
   85|      0|    }
   86|       |
   87|  4.21k|    return 0;
   88|  5.84k|}
ofputil_format_role_message:
  121|  4.21k|{
  122|  4.21k|    format_role_generic(string, rr->role, (rr->have_generation_id
  ------------------
  |  Branch (122:44): [True: 3.53k, False: 677]
  ------------------
  123|  4.21k|                                           ? rr->generation_id
  124|       |                                           : UINT64_MAX));
  125|  4.21k|}
ofputil_decode_role_status:
  191|  1.94k|{
  192|  1.94k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  193|  1.94k|    enum ofpraw raw = ofpraw_pull_assert(&b);
  194|  1.94k|    ovs_assert(raw == OFPRAW_OFPT14_ROLE_STATUS ||
  ------------------
  |  |   62|  1.94k|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (194:16): [True: 1.94k, False: 0]
  ------------------
  195|      0|               raw == OFPRAW_ONFT13_ROLE_STATUS);
  ------------------
  |  Branch (195:16): [True: 0, False: 0]
  ------------------
  196|       |
  197|  1.94k|    const struct ofp14_role_status *r = b.msg;
  198|  1.94k|    if (r->role != htonl(OFPCR12_ROLE_NOCHANGE) &&
  ------------------
  |  Branch (198:9): [True: 1.37k, False: 567]
  ------------------
  199|  1.37k|        r->role != htonl(OFPCR12_ROLE_EQUAL) &&
  ------------------
  |  Branch (199:9): [True: 1.26k, False: 111]
  ------------------
  200|  1.26k|        r->role != htonl(OFPCR12_ROLE_PRIMARY) &&
  ------------------
  |  Branch (200:9): [True: 819, False: 447]
  ------------------
  201|    819|        r->role != htonl(OFPCR12_ROLE_SECONDARY)) {
  ------------------
  |  Branch (201:9): [True: 592, False: 227]
  ------------------
  202|    592|        return OFPERR_OFPRRFC_BAD_ROLE;
  203|    592|    }
  204|       |
  205|  1.35k|    rs->role = ntohl(r->role);
  206|  1.35k|    rs->generation_id = ntohll(r->generation_id);
  207|  1.35k|    rs->reason = r->reason;
  208|       |
  209|  1.35k|    return 0;
  210|  1.94k|}
ofputil_format_role_status:
  215|  1.35k|{
  216|  1.35k|    format_role_generic(string, rs->role, rs->generation_id);
  217|       |
  218|  1.35k|    ds_put_cstr(string, " reason=");
  219|       |
  220|  1.35k|    switch (rs->reason) {
  221|    597|    case OFPCRR_PRIMARY_REQUEST:
  ------------------
  |  Branch (221:5): [True: 597, False: 755]
  ------------------
  222|    597|        ds_put_cstr(string, "primary_request");
  223|    597|        break;
  224|     11|    case OFPCRR_CONFIG:
  ------------------
  |  Branch (224:5): [True: 11, False: 1.34k]
  ------------------
  225|     11|        ds_put_cstr(string, "configuration_changed");
  226|     11|        break;
  227|     52|    case OFPCRR_EXPERIMENTER:
  ------------------
  |  Branch (227:5): [True: 52, False: 1.30k]
  ------------------
  228|     52|        ds_put_cstr(string, "experimenter_data_changed");
  229|     52|        break;
  230|    333|    case OFPCRR_N_REASONS:
  ------------------
  |  Branch (230:5): [True: 333, False: 1.01k]
  ------------------
  231|    692|    default:
  ------------------
  |  Branch (231:5): [True: 359, False: 993]
  ------------------
  232|    692|        ds_put_cstr(string, "(unknown)");
  233|    692|        break;
  234|  1.35k|    }
  235|  1.35k|}
ofputil_async_msg_type_to_string:
  239|  73.4k|{
  240|  73.4k|    switch (type) {
  241|  12.2k|    case OAM_PACKET_IN:      return "PACKET_IN";
  ------------------
  |  Branch (241:5): [True: 12.2k, False: 61.2k]
  ------------------
  242|  12.2k|    case OAM_PORT_STATUS:    return "PORT_STATUS";
  ------------------
  |  Branch (242:5): [True: 12.2k, False: 61.2k]
  ------------------
  243|  12.2k|    case OAM_FLOW_REMOVED:   return "FLOW_REMOVED";
  ------------------
  |  Branch (243:5): [True: 12.2k, False: 61.2k]
  ------------------
  244|  12.2k|    case OAM_ROLE_STATUS:    return "ROLE_STATUS";
  ------------------
  |  Branch (244:5): [True: 12.2k, False: 61.2k]
  ------------------
  245|  12.2k|    case OAM_TABLE_STATUS:   return "TABLE_STATUS";
  ------------------
  |  Branch (245:5): [True: 12.2k, False: 61.2k]
  ------------------
  246|  12.2k|    case OAM_REQUESTFORWARD: return "REQUESTFORWARD";
  ------------------
  |  Branch (246:5): [True: 12.2k, False: 61.2k]
  ------------------
  247|       |
  248|      0|    case OAM_N_TYPES:
  ------------------
  |  Branch (248:5): [True: 0, False: 73.4k]
  ------------------
  249|      0|    default:
  ------------------
  |  Branch (249:5): [True: 0, False: 73.4k]
  ------------------
  250|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  251|  73.4k|    }
  252|  73.4k|}
ofputil_decode_set_async_config:
  427|  9.63k|{
  428|  9.63k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  429|  9.63k|    enum ofpraw raw = ofpraw_pull_assert(&b);
  430|       |
  431|  9.63k|    if (raw == OFPRAW_OFPT13_SET_ASYNC ||
  ------------------
  |  Branch (431:9): [True: 515, False: 9.12k]
  ------------------
  432|  9.12k|        raw == OFPRAW_NXT_SET_ASYNC_CONFIG ||
  ------------------
  |  Branch (432:9): [True: 42, False: 9.08k]
  ------------------
  433|  9.08k|        raw == OFPRAW_OFPT13_GET_ASYNC_REPLY) {
  ------------------
  |  Branch (433:9): [True: 588, False: 8.49k]
  ------------------
  434|  1.14k|        const struct nx_async_config *msg = ofpmsg_body(oh);
  435|       |
  436|  1.14k|        *ac = OFPUTIL_ASYNC_CFG_INIT;
  ------------------
  |  |   75|  1.14k|#define OFPUTIL_ASYNC_CFG_INIT (struct ofputil_async_cfg) { .primary[0] = 0 }
  ------------------
  437|  1.14k|        decode_legacy_async_masks(msg->packet_in_mask, OAM_PACKET_IN,
  438|  1.14k|                                  oh->version, ac);
  439|  1.14k|        decode_legacy_async_masks(msg->port_status_mask, OAM_PORT_STATUS,
  440|  1.14k|                                  oh->version, ac);
  441|  1.14k|        decode_legacy_async_masks(msg->flow_removed_mask, OAM_FLOW_REMOVED,
  442|  1.14k|                                  oh->version, ac);
  443|  8.49k|    } else if (raw == OFPRAW_OFPT14_SET_ASYNC ||
  ------------------
  |  Branch (443:16): [True: 1.97k, False: 6.52k]
  ------------------
  444|  6.52k|               raw == OFPRAW_OFPT14_GET_ASYNC_REPLY ||
  ------------------
  |  Branch (444:16): [True: 6.48k, False: 37]
  ------------------
  445|  8.49k|               raw == OFPRAW_NXT_SET_ASYNC_CONFIG2) {
  ------------------
  |  Branch (445:16): [True: 37, False: 0]
  ------------------
  446|  8.49k|        *ac = *basis;
  447|  13.4k|        while (b.size > 0) {
  ------------------
  |  Branch (447:16): [True: 8.49k, False: 4.97k]
  ------------------
  448|  8.49k|            struct ofpbuf property;
  449|  8.49k|            enum ofperr error;
  450|  8.49k|            uint64_t type;
  451|       |
  452|  8.49k|            error = ofpprop_pull__(&b, &property, 8, 0xfffe, &type);
  453|  8.49k|            if (error) {
  ------------------
  |  Branch (453:17): [True: 2.77k, False: 5.72k]
  ------------------
  454|  2.77k|                return error;
  455|  2.77k|            }
  456|       |
  457|  5.72k|            const struct ofp14_async_prop *ap
  458|  5.72k|                = get_ofp14_async_config_prop_by_prop_type(type);
  459|  5.72k|            error = (ap
  ------------------
  |  Branch (459:22): [True: 4.12k, False: 1.59k]
  ------------------
  460|  5.72k|                     ? parse_async_tlv(&property, ap, ac, oh->version, loose)
  461|  5.72k|                     : OFPPROP_UNKNOWN(loose, "async config", type));
  ------------------
  |  |  144|  1.59k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  462|  5.72k|            if (error) {
  ------------------
  |  Branch (462:17): [True: 741, False: 4.97k]
  ------------------
  463|       |                /* Most messages use OFPBPC_BAD_TYPE but async has its own (who
  464|       |                 * knows why, it's OpenFlow. */
  465|    741|                if (error == OFPERR_OFPBPC_BAD_TYPE) {
  ------------------
  |  Branch (465:21): [True: 356, False: 385]
  ------------------
  466|    356|                    error = OFPERR_OFPACFC_UNSUPPORTED;
  467|    356|                }
  468|    741|                return error;
  469|    741|            }
  470|  5.72k|        }
  471|  8.49k|    } else {
  472|      0|        return OFPERR_OFPBRC_BAD_VERSION;
  473|      0|    }
  474|  6.12k|    return 0;
  475|  9.63k|}
ofputil_format_set_async_config:
  667|  6.12k|{
  668|  18.3k|    for (int i = 0; i < 2; i++) {
  ------------------
  |  Branch (668:21): [True: 12.2k, False: 6.12k]
  ------------------
  669|  12.2k|        ds_put_format(string, "\n %s:\n", i == 0 ? "primary" : "secondary");
  ------------------
  |  Branch (669:43): [True: 6.12k, False: 6.12k]
  ------------------
  670|  85.6k|        for (uint32_t type = 0; type < OAM_N_TYPES; type++) {
  ------------------
  |  Branch (670:33): [True: 73.4k, False: 12.2k]
  ------------------
  671|  73.4k|            ds_put_format(string, "%16s:",
  672|  73.4k|                          ofputil_async_msg_type_to_string(type));
  673|       |
  674|  73.4k|            uint32_t role = i == 0 ? ac->primary[type] : ac->secondary[type];
  ------------------
  |  Branch (674:29): [True: 36.7k, False: 36.7k]
  ------------------
  675|  2.42M|            for (int j = 0; j < 32; j++) {
  ------------------
  |  Branch (675:29): [True: 2.35M, False: 73.4k]
  ------------------
  676|  2.35M|                if (role & (1u << j)) {
  ------------------
  |  Branch (676:21): [True: 23.4k, False: 2.32M]
  ------------------
  677|  23.4k|                    char reasonbuf[INT_STRLEN(int) + 1];
  678|  23.4k|                    const char *reason;
  679|       |
  680|  23.4k|                    reason = ofp_async_config_reason_to_string(
  681|  23.4k|                        j, type, reasonbuf, sizeof reasonbuf);
  682|  23.4k|                    if (reason[0]) {
  ------------------
  |  Branch (682:25): [True: 21.7k, False: 1.69k]
  ------------------
  683|  21.7k|                        ds_put_format(string, " %s", reason);
  684|  21.7k|                    }
  685|  23.4k|                }
  686|  2.35M|            }
  687|  73.4k|            if (!role) {
  ------------------
  |  Branch (687:17): [True: 66.2k, False: 7.19k]
  ------------------
  688|  66.2k|                ds_put_cstr(string, " (off)");
  689|  66.2k|            }
  690|  73.4k|            ds_put_char(string, '\n');
  691|  73.4k|        }
  692|  12.2k|    }
  693|  6.12k|}
ofp-connection.c:format_role_generic:
   93|  5.56k|{
   94|  5.56k|    ds_put_cstr(string, " role=");
   95|       |
   96|  5.56k|    switch (role) {
   97|    833|    case OFPCR12_ROLE_NOCHANGE:
  ------------------
  |  Branch (97:5): [True: 833, False: 4.73k]
  ------------------
   98|    833|        ds_put_cstr(string, "nochange");
   99|    833|        break;
  100|  3.40k|    case OFPCR12_ROLE_EQUAL:
  ------------------
  |  Branch (100:5): [True: 3.40k, False: 2.16k]
  ------------------
  101|  3.40k|        ds_put_cstr(string, "equal"); /* OF 1.2 wording */
  102|  3.40k|        break;
  103|    481|    case OFPCR12_ROLE_PRIMARY:
  ------------------
  |  Branch (103:5): [True: 481, False: 5.08k]
  ------------------
  104|    481|        ds_put_cstr(string, "primary");
  105|    481|        break;
  106|    846|    case OFPCR12_ROLE_SECONDARY:
  ------------------
  |  Branch (106:5): [True: 846, False: 4.72k]
  ------------------
  107|    846|        ds_put_cstr(string, "secondary");
  108|    846|        break;
  109|      0|    default:
  ------------------
  |  Branch (109:5): [True: 0, False: 5.56k]
  ------------------
  110|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  111|  5.56k|    }
  112|       |
  113|  5.56k|    if (generation_id != UINT64_MAX) {
  ------------------
  |  Branch (113:9): [True: 4.88k, False: 679]
  ------------------
  114|       |        ds_put_format(string, " generation_id=%"PRIu64, generation_id);
  115|  4.88k|    }
  116|  5.56k|}
ofp-connection.c:decode_legacy_async_masks:
  393|  3.43k|{
  394|  10.3k|    for (int i = 0; i < 2; i++) {
  ------------------
  |  Branch (394:21): [True: 6.87k, False: 3.43k]
  ------------------
  395|  6.87k|        bool primary = i == 0;
  396|  6.87k|        const struct ofp14_async_prop *ap
  397|  6.87k|            = get_ofp14_async_config_prop_by_oam(oam, primary);
  398|       |        decode_async_mask(masks[i], ap, version, true, dst);
  399|  6.87k|    }
  400|  3.43k|}
ofp-connection.c:get_ofp14_async_config_prop_by_oam:
  292|  6.87k|{
  293|  24.0k|    FOR_EACH_ASYNC_PROP (ap) {
  ------------------
  |  |  275|  6.87k|    for (const struct ofp14_async_prop *VAR = async_props;      \
  |  |  276|  24.0k|         VAR < &async_props[ARRAY_SIZE(async_props)]; VAR++)
  |  |  ------------------
  |  |  |  |  297|  24.0k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  |  |  ------------------
  |  |  |  |  |  |   46|  24.0k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   41|  24.0k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   47|  24.0k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  24.0k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   44|  24.0k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (276:10): [True: 24.0k, False: 0]
  |  |  ------------------
  ------------------
  294|  24.0k|        if (ap->oam == oam && ap->primary == primary) {
  ------------------
  |  Branch (294:13): [True: 10.3k, False: 13.7k]
  |  Branch (294:31): [True: 6.87k, False: 3.43k]
  ------------------
  295|  6.87k|            return ap;
  296|  6.87k|        }
  297|  24.0k|    }
  298|      0|    return NULL;
  299|  6.87k|}
ofp-connection.c:decode_async_mask:
  323|  10.8k|{
  324|  10.8k|    uint32_t mask = ntohl(src);
  325|  10.8k|    uint32_t allowed = ofp14_async_prop_allowed(ap, version);
  326|  10.8k|    if (mask & ~allowed) {
  ------------------
  |  Branch (326:9): [True: 8.68k, False: 2.19k]
  ------------------
  327|  8.68k|        static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
  ------------------
  |  |  110|  8.68k|        {                                                                 \
  |  |  111|  8.68k|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|  34.7k|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [True: 0, Folded]
  |  |  |  |  |  Branch (37:48): [Folded, False: 8.68k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  8.68k|            0,                              /* first_dropped */           \
  |  |  113|  8.68k|            0,                              /* last_dropped */            \
  |  |  114|  8.68k|            0,                              /* n_dropped */               \
  |  |  115|  8.68k|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  8.68k|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  8.68k|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  8.68k|        }
  ------------------
  328|  8.68k|        OFPPROP_LOG(&rl, loose,
  ------------------
  |  |  139|  8.68k|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  8.68k|    do {                                                                \
  |  |  |  |  288|  17.3k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [True: 8.43k, False: 255]
  |  |  |  |  ------------------
  |  |  |  |  289|  8.68k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 8.68k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  8.68k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 8.68k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  329|  8.68k|                    "bad value %#x for %s (allowed mask %#x)",
  330|  8.68k|                    mask, ofputil_async_msg_type_to_string(ap->oam),
  331|  8.68k|                    allowed);
  332|  8.68k|        mask &= allowed;
  333|  8.68k|        if (!loose) {
  ------------------
  |  Branch (333:13): [True: 255, False: 8.43k]
  ------------------
  334|    255|            return OFPERR_OFPACFC_INVALID;
  335|    255|        }
  336|  8.68k|    }
  337|       |
  338|  10.6k|    if (ap->oam == OAM_PACKET_IN) {
  ------------------
  |  Branch (338:9): [True: 3.17k, False: 7.44k]
  ------------------
  339|  3.17k|        if (mask & (1u << OFPR_NO_MATCH)) {
  ------------------
  |  Branch (339:13): [True: 1.68k, False: 1.48k]
  ------------------
  340|  1.68k|            mask |= 1u << OFPR_EXPLICIT_MISS;
  341|  1.68k|            if (version < OFP13_VERSION) {
  ------------------
  |  Branch (341:17): [True: 67, False: 1.62k]
  ------------------
  342|     67|                mask |= 1u << OFPR_IMPLICIT_MISS;
  343|     67|            }
  344|  1.68k|        }
  345|  3.17k|    }
  346|       |
  347|  10.6k|    uint32_t *array = ap->primary ? dst->primary : dst->secondary;
  ------------------
  |  Branch (347:23): [True: 4.18k, False: 6.44k]
  ------------------
  348|  10.6k|    array[ap->oam] = mask;
  349|  10.6k|    return 0;
  350|  10.8k|}
ofp-connection.c:ofp14_async_prop_allowed:
  304|  10.8k|{
  305|  10.8k|    return version >= OFP14_VERSION ? prop->allowed14 : prop->allowed10;
  ------------------
  |  Branch (305:12): [True: 4.01k, False: 6.86k]
  ------------------
  306|  10.8k|}
ofp-connection.c:get_ofp14_async_config_prop_by_prop_type:
  280|  5.72k|{
  281|  44.0k|    FOR_EACH_ASYNC_PROP (ap) {
  ------------------
  |  |  275|  5.72k|    for (const struct ofp14_async_prop *VAR = async_props;      \
  |  |  276|  45.6k|         VAR < &async_props[ARRAY_SIZE(async_props)]; VAR++)
  |  |  ------------------
  |  |  |  |  297|  45.6k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  |  |  ------------------
  |  |  |  |  |  |   46|  45.6k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   41|  45.6k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   47|  45.6k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  45.6k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   44|  45.6k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (276:10): [True: 44.0k, False: 1.59k]
  |  |  ------------------
  ------------------
  282|  44.0k|        if (prop_type == ap->prop_type) {
  ------------------
  |  Branch (282:13): [True: 4.12k, False: 39.8k]
  ------------------
  283|  4.12k|            return ap;
  284|  4.12k|        }
  285|  44.0k|    }
  286|  1.59k|    return NULL;
  287|  5.72k|}
ofp-connection.c:parse_async_tlv:
  357|  4.12k|{
  358|  4.12k|    enum ofperr error;
  359|  4.12k|    ovs_be32 mask;
  360|       |
  361|  4.12k|    error  = ofpprop_parse_be32(property, &mask);
  362|  4.12k|    if (error) {
  ------------------
  |  Branch (362:9): [True: 112, False: 4.00k]
  ------------------
  363|    112|        return error;
  364|    112|    }
  365|       |
  366|  4.00k|    if (ofpprop_is_experimenter(ap->prop_type)) {
  ------------------
  |  Branch (366:9): [True: 0, False: 4.00k]
  ------------------
  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|  4.00k|    return decode_async_mask(mask, ap, version, loose, ac);
  386|  4.00k|}
ofp-connection.c:ofp_async_config_reason_to_string:
  638|  23.4k|{
  639|  23.4k|    switch (type) {
  640|  8.54k|    case OAM_PACKET_IN:
  ------------------
  |  Branch (640:5): [True: 8.54k, False: 14.9k]
  ------------------
  641|  8.54k|        return ofputil_packet_in_reason_to_string(reason, reasonbuf, bufsize);
  642|       |
  643|  3.39k|    case OAM_PORT_STATUS:
  ------------------
  |  Branch (643:5): [True: 3.39k, False: 20.0k]
  ------------------
  644|  3.39k|        return ofp_port_reason_to_string(reason, reasonbuf, bufsize);
  645|       |
  646|  5.24k|    case OAM_FLOW_REMOVED:
  ------------------
  |  Branch (646:5): [True: 5.24k, False: 18.2k]
  ------------------
  647|  5.24k|        return ofp_flow_removed_reason_to_string(reason, reasonbuf, bufsize);
  648|       |
  649|  4.88k|    case OAM_ROLE_STATUS:
  ------------------
  |  Branch (649:5): [True: 4.88k, False: 18.6k]
  ------------------
  650|  4.88k|        return ofp_role_reason_to_string(reason, reasonbuf, bufsize);
  651|       |
  652|    753|    case OAM_TABLE_STATUS:
  ------------------
  |  Branch (652:5): [True: 753, False: 22.7k]
  ------------------
  653|    753|        return ofp_table_reason_to_string(reason, reasonbuf, bufsize);
  654|       |
  655|    672|    case OAM_REQUESTFORWARD:
  ------------------
  |  Branch (655:5): [True: 672, False: 22.8k]
  ------------------
  656|    672|        return ofp_requestforward_reason_to_string(reason, reasonbuf, bufsize);
  657|       |
  658|      0|    case OAM_N_TYPES:
  ------------------
  |  Branch (658:5): [True: 0, False: 23.4k]
  ------------------
  659|      0|    default:
  ------------------
  |  Branch (659:5): [True: 0, False: 23.4k]
  ------------------
  660|      0|        return "Unknown asynchronous configuration message type";
  661|  23.4k|    }
  662|  23.4k|}
ofp-connection.c:ofp_port_reason_to_string:
  571|  3.39k|{
  572|  3.39k|    switch (reason) {
  573|  1.19k|    case OFPPR_ADD:
  ------------------
  |  Branch (573:5): [True: 1.19k, False: 2.19k]
  ------------------
  574|  1.19k|        return "add";
  575|       |
  576|  1.01k|    case OFPPR_DELETE:
  ------------------
  |  Branch (576:5): [True: 1.01k, False: 2.38k]
  ------------------
  577|  1.01k|        return "delete";
  578|       |
  579|  1.18k|    case OFPPR_MODIFY:
  ------------------
  |  Branch (579:5): [True: 1.18k, False: 2.20k]
  ------------------
  580|  1.18k|        return "modify";
  581|       |
  582|      0|    case OFPPR_N_REASONS:
  ------------------
  |  Branch (582:5): [True: 0, False: 3.39k]
  ------------------
  583|      0|    default:
  ------------------
  |  Branch (583:5): [True: 0, False: 3.39k]
  ------------------
  584|      0|        snprintf(reasonbuf, bufsize, "%d", (int) reason);
  585|      0|        return reasonbuf;
  586|  3.39k|    }
  587|  3.39k|}
ofp-connection.c:ofp_role_reason_to_string:
  595|  4.88k|{
  596|  4.88k|    switch (reason) {
  597|  1.64k|    case OFPCRR_PRIMARY_REQUEST:
  ------------------
  |  Branch (597:5): [True: 1.64k, False: 3.23k]
  ------------------
  598|  1.64k|        return "primary_request";
  599|       |
  600|  1.59k|    case OFPCRR_CONFIG:
  ------------------
  |  Branch (600:5): [True: 1.59k, False: 3.28k]
  ------------------
  601|  1.59k|        return "configuration_changed";
  602|       |
  603|  1.63k|    case OFPCRR_EXPERIMENTER:
  ------------------
  |  Branch (603:5): [True: 1.63k, False: 3.24k]
  ------------------
  604|  1.63k|        return "experimenter_data_changed";
  605|       |
  606|      0|    case OFPCRR_N_REASONS:
  ------------------
  |  Branch (606:5): [True: 0, False: 4.88k]
  ------------------
  607|      0|    default:
  ------------------
  |  Branch (607:5): [True: 0, False: 4.88k]
  ------------------
  608|      0|        snprintf(reasonbuf, bufsize, "%d", (int) reason);
  609|      0|        return reasonbuf;
  610|  4.88k|    }
  611|  4.88k|}
ofp-connection.c:ofp_requestforward_reason_to_string:
  619|    672|{
  620|    672|    switch (reason) {
  621|    336|    case OFPRFR_GROUP_MOD:
  ------------------
  |  Branch (621:5): [True: 336, False: 336]
  ------------------
  622|    336|        return "group_mod_request";
  623|       |
  624|    336|    case OFPRFR_METER_MOD:
  ------------------
  |  Branch (624:5): [True: 336, False: 336]
  ------------------
  625|    336|        return "meter_mod_request";
  626|       |
  627|      0|    case OFPRFR_N_REASONS:
  ------------------
  |  Branch (627:5): [True: 0, False: 672]
  ------------------
  628|      0|    default:
  ------------------
  |  Branch (628:5): [True: 0, False: 672]
  ------------------
  629|      0|        snprintf(reasonbuf, bufsize, "%d", (int) reason);
  630|      0|        return reasonbuf;
  631|    672|    }
  632|    672|}

ofp_ct_match_format:
  100|  3.13k|{
  101|  3.13k|    if (match->mark_mask) {
  ------------------
  |  Branch (101:9): [True: 411, False: 2.72k]
  ------------------
  102|    411|        ds_put_format(ds, "mark=%#"PRIx32, match->mark);
  103|    411|        if (match->mark_mask != UINT32_MAX) {
  ------------------
  |  Branch (103:13): [True: 193, False: 218]
  ------------------
  104|    193|            ds_put_format(ds, "/%#"PRIx32, match->mark_mask);
  105|    193|        }
  106|    411|        ds_put_char(ds, ' ');
  107|    411|    }
  108|       |
  109|  3.13k|    if (!ovs_u128_is_zero(match->labels_mask)) {
  ------------------
  |  Branch (109:9): [True: 699, False: 2.43k]
  ------------------
  110|    699|        ovs_be128 be_value = hton128(match->labels);
  111|    699|        ovs_be128 be_mask = hton128(match->labels_mask);
  112|       |
  113|    699|        ds_put_cstr(ds, "labels=");
  114|    699|        ds_put_hex(ds, &be_value, sizeof be_value);
  115|       |
  116|    699|        if (!ovs_u128_is_ones(match->labels_mask)) {
  ------------------
  |  Branch (116:13): [True: 557, False: 142]
  ------------------
  117|    557|            ds_put_char(ds, '/');
  118|    557|            ds_put_hex(ds, &be_mask, sizeof be_mask);
  119|    557|        }
  120|    699|        ds_put_char(ds, ' ');
  121|    699|    }
  122|       |
  123|  3.13k|    ds_put_cstr(ds, "'");
  124|  3.13k|    ofp_ct_tuple_format(ds, &match->tuple_orig, match->ip_proto,
  125|  3.13k|                        match->l3_type);
  126|  3.13k|    ds_put_format(ds, ",ct_nw_proto=%u' '", match->ip_proto);
  127|  3.13k|    ofp_ct_tuple_format(ds, &match->tuple_reply, match->ip_proto,
  128|  3.13k|                        match->l3_type);
  129|  3.13k|    ds_put_cstr(ds, "'");
  130|  3.13k|}
ofp_ct_match_decode:
  473|  8.01k|{
  474|  8.01k|    uint32_t tlv_flags = 0;
  475|  8.01k|    struct ofpbuf msg = ofpbuf_const_initializer(oh, ntohs(oh->length));
  476|  8.01k|    ofpraw_pull_assert(&msg);
  477|       |
  478|  8.01k|    const struct nx_ct_flush *nx_flush = ofpbuf_pull(&msg, sizeof *nx_flush);
  479|       |
  480|  8.01k|    if (!is_all_zeros(nx_flush->pad, sizeof nx_flush->pad)) {
  ------------------
  |  Branch (480:9): [True: 1.27k, False: 6.74k]
  ------------------
  481|  1.27k|        return OFPERR_NXBRC_MUST_BE_ZERO;
  482|  1.27k|    }
  483|       |
  484|  6.74k|    match->ip_proto = nx_flush->ip_proto;
  485|       |
  486|  6.74k|    struct ofp_ct_tuple *orig = &match->tuple_orig;
  487|  6.74k|    struct ofp_ct_tuple *reply = &match->tuple_reply;
  488|       |
  489|  11.0k|    while (msg.size) {
  ------------------
  |  Branch (489:12): [True: 7.91k, False: 3.13k]
  ------------------
  490|  7.91k|        struct ofpbuf property;
  491|  7.91k|        uint64_t type;
  492|       |
  493|  7.91k|        enum ofperr error = ofpprop_pull(&msg, &property, &type);
  494|  7.91k|        if (error) {
  ------------------
  |  Branch (494:13): [True: 385, False: 7.53k]
  ------------------
  495|    385|            return error;
  496|    385|        }
  497|       |
  498|  7.53k|        switch (type) {
  499|  4.76k|        case NXT_CT_ORIG_TUPLE:
  ------------------
  |  Branch (499:9): [True: 4.76k, False: 2.77k]
  ------------------
  500|  4.76k|            error = ofp_ct_tuple_decode_nested(&property, orig,
  501|  4.76k|                                               &match->l3_type);
  502|  4.76k|            break;
  503|       |
  504|    844|        case NXT_CT_REPLY_TUPLE:
  ------------------
  |  Branch (504:9): [True: 844, False: 6.68k]
  ------------------
  505|    844|            error = ofp_ct_tuple_decode_nested(&property, reply,
  506|    844|                                               &match->l3_type);
  507|    844|            break;
  508|       |
  509|    520|        case NXT_CT_ZONE_ID:
  ------------------
  |  Branch (509:9): [True: 520, False: 7.01k]
  ------------------
  510|    520|            if (with_zone) {
  ------------------
  |  Branch (510:17): [True: 0, False: 520]
  ------------------
  511|      0|                *with_zone = true;
  512|      0|            }
  513|    520|            error = ofpprop_parse_u16(&property, zone_id);
  514|    520|            break;
  515|       |
  516|    433|        case NXT_CT_MARK:
  ------------------
  |  Branch (516:9): [True: 433, False: 7.10k]
  ------------------
  517|    433|            error = ofpprop_parse_u32(&property, &match->mark);
  518|    433|            break;
  519|       |
  520|    203|        case NXT_CT_MARK_MASK:
  ------------------
  |  Branch (520:9): [True: 203, False: 7.33k]
  ------------------
  521|    203|            error = ofpprop_parse_u32(&property, &match->mark_mask);
  522|    203|            break;
  523|       |
  524|     28|        case NXT_CT_LABELS:
  ------------------
  |  Branch (524:9): [True: 28, False: 7.50k]
  ------------------
  525|     28|            error = ofpprop_parse_u128(&property, &match->labels);
  526|     28|            break;
  527|       |
  528|    690|        case NXT_CT_LABELS_MASK:
  ------------------
  |  Branch (528:9): [True: 690, False: 6.84k]
  ------------------
  529|    690|            error = ofpprop_parse_u128(&property, &match->labels_mask);
  530|    690|            break;
  531|       |
  532|     55|        default:
  ------------------
  |  Branch (532:9): [True: 55, False: 7.47k]
  ------------------
  533|     55|            error = OFPPROP_UNKNOWN(false, "NXT_CT_FLUSH", type);
  ------------------
  |  |  144|     55|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  534|     55|            break;
  535|  7.53k|        }
  536|       |
  537|  7.53k|        if (error) {
  ------------------
  |  Branch (537:13): [True: 3.22k, False: 4.30k]
  ------------------
  538|  3.22k|            return error;
  539|  3.22k|        }
  540|       |
  541|  4.30k|        if (type < (sizeof tlv_flags * CHAR_BIT)) {
  ------------------
  |  Branch (541:13): [True: 4.30k, False: 0]
  ------------------
  542|  4.30k|            tlv_flags |= (UINT32_C(1) << type);
  543|  4.30k|        }
  544|  4.30k|    }
  545|       |
  546|       |    /* Consider the mask being all ones if it's not present but the value
  547|       |     * is specified. */
  548|  3.13k|    if (tlv_flags & (UINT32_C(1) << NXT_CT_MARK) &&
  ------------------
  |  Branch (548:9): [True: 351, False: 2.78k]
  ------------------
  549|    351|        !(tlv_flags & (UINT32_C(1) << NXT_CT_MARK_MASK))) {
  ------------------
  |  Branch (549:9): [True: 218, False: 133]
  ------------------
  550|    218|        match->mark_mask = UINT32_MAX;
  551|    218|    }
  552|       |
  553|  3.13k|    if (tlv_flags & (UINT32_C(1) << NXT_CT_LABELS) &&
  ------------------
  |  Branch (553:9): [True: 26, False: 3.10k]
  ------------------
  554|     26|        !(tlv_flags & (UINT32_C(1) << NXT_CT_LABELS_MASK))) {
  ------------------
  |  Branch (554:9): [True: 19, False: 7]
  ------------------
  555|     19|        match->labels_mask = OVS_U128_MAX;
  556|     19|    }
  557|       |
  558|  3.13k|    return 0;
  559|  6.74k|}
ofp-ct.c:ofp_ct_tuple_format:
   41|  6.26k|{
   42|  6.26k|    ds_put_cstr(ds, l3_type == AF_INET ? "ct_nw_src=": "ct_ipv6_src=");
  ------------------
  |  Branch (42:21): [True: 1.07k, False: 5.18k]
  ------------------
   43|  6.26k|    ipv6_format_mapped(&tuple->src, ds);
   44|  6.26k|    ds_put_cstr(ds, l3_type == AF_INET ? ",ct_nw_dst=": ",ct_ipv6_dst=");
  ------------------
  |  Branch (44:21): [True: 1.07k, False: 5.18k]
  ------------------
   45|  6.26k|    ipv6_format_mapped(&tuple->dst, ds);
   46|  6.26k|    if (ip_proto == IPPROTO_ICMP || ip_proto == IPPROTO_ICMPV6) {
  ------------------
  |  Branch (46:9): [True: 3.44k, False: 2.81k]
  |  Branch (46:37): [True: 124, False: 2.69k]
  ------------------
   47|  3.57k|        ds_put_format(ds, ",icmp_id=%u,icmp_type=%u,icmp_code=%u",
   48|  3.57k|                      ntohs(tuple->icmp_id), tuple->icmp_type,
   49|  3.57k|                      tuple->icmp_code);
   50|  3.57k|    } else {
   51|  2.69k|        ds_put_format(ds, ",ct_tp_src=%u,ct_tp_dst=%u", ntohs(tuple->src_port),
   52|       |                      ntohs(tuple->dst_port));
   53|  2.69k|    }
   54|  6.26k|}
ofp-ct.c:ofp_ct_tuple_decode_nested:
  376|  5.60k|{
  377|  5.60k|    struct ofpbuf nested;
  378|  5.60k|    enum ofperr error = ofpprop_parse_nested(property, &nested);
  379|  5.60k|    if (error) {
  ------------------
  |  Branch (379:9): [True: 9, False: 5.59k]
  ------------------
  380|      9|        return error;
  381|      9|    }
  382|       |
  383|  13.6k|    while (nested.size) {
  ------------------
  |  Branch (383:12): [True: 11.2k, False: 2.44k]
  ------------------
  384|  11.2k|        struct ofpbuf inner;
  385|  11.2k|        uint64_t type;
  386|       |
  387|  11.2k|        error = ofpprop_pull(&nested, &inner, &type);
  388|  11.2k|        if (error) {
  ------------------
  |  Branch (388:13): [True: 949, False: 10.2k]
  ------------------
  389|    949|            return error;
  390|    949|        }
  391|  10.2k|        switch (type) {
  392|  3.10k|        case NXT_CT_TUPLE_SRC:
  ------------------
  |  Branch (392:9): [True: 3.10k, False: 7.18k]
  ------------------
  393|  3.10k|            error = ofpprop_pull_ipv6(&inner, &tuple->src, l3_type);
  394|  3.10k|            break;
  395|       |
  396|  4.51k|        case NXT_CT_TUPLE_DST:
  ------------------
  |  Branch (396:9): [True: 4.51k, False: 5.77k]
  ------------------
  397|  4.51k|            error = ofpprop_pull_ipv6(&inner, &tuple->dst, l3_type);
  398|  4.51k|            break;
  399|       |
  400|     84|        case NXT_CT_TUPLE_SRC_PORT:
  ------------------
  |  Branch (400:9): [True: 84, False: 10.2k]
  ------------------
  401|     84|            error = ofpprop_parse_be16(&inner, &tuple->src_port);
  402|     84|            break;
  403|       |
  404|  1.03k|        case NXT_CT_TUPLE_DST_PORT:
  ------------------
  |  Branch (404:9): [True: 1.03k, False: 9.25k]
  ------------------
  405|  1.03k|            error = ofpprop_parse_be16(&inner, &tuple->dst_port);
  406|  1.03k|            break;
  407|       |
  408|    110|        case NXT_CT_TUPLE_ICMP_ID:
  ------------------
  |  Branch (408:9): [True: 110, False: 10.1k]
  ------------------
  409|    110|            error = ofpprop_parse_be16(&inner, &tuple->icmp_id);
  410|    110|            break;
  411|       |
  412|    190|        case NXT_CT_TUPLE_ICMP_TYPE:
  ------------------
  |  Branch (412:9): [True: 190, False: 10.0k]
  ------------------
  413|    190|            error = ofpprop_parse_u8(&inner, &tuple->icmp_type);
  414|    190|            break;
  415|       |
  416|     22|        case NXT_CT_TUPLE_ICMP_CODE:
  ------------------
  |  Branch (416:9): [True: 22, False: 10.2k]
  ------------------
  417|     22|            error = ofpprop_parse_u8(&inner, &tuple->icmp_code);
  418|     22|            break;
  419|       |
  420|  1.23k|        default:
  ------------------
  |  Branch (420:9): [True: 1.23k, False: 9.05k]
  ------------------
  421|  1.23k|            error = OFPPROP_UNKNOWN(false, "NXT_CT_TUPLE", type);
  ------------------
  |  |  144|  1.23k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  422|  1.23k|            break;
  423|  10.2k|        }
  424|       |
  425|  10.2k|        if (error) {
  ------------------
  |  Branch (425:13): [True: 2.19k, False: 8.09k]
  ------------------
  426|  2.19k|            return error;
  427|  2.19k|        }
  428|  10.2k|    }
  429|       |
  430|  2.44k|    return 0;
  431|  5.59k|}
ofp-ct.c:ofpprop_pull_ipv6:
  352|  7.61k|{
  353|  7.61k|    if (ofpbuf_msgsize(property) < sizeof *addr) {
  ------------------
  |  Branch (353:9): [True: 837, False: 6.78k]
  ------------------
  354|    837|        return OFPERR_OFPBPC_BAD_LEN;
  355|    837|    }
  356|       |
  357|  6.78k|    memcpy(addr, property->msg, sizeof *addr);
  358|       |
  359|  6.78k|    uint16_t l3 = 0;
  360|  6.78k|    if (!ipv6_is_zero(addr)) {
  ------------------
  |  Branch (360:9): [True: 6.18k, False: 595]
  ------------------
  361|  6.18k|        l3 = IN6_IS_ADDR_V4MAPPED(addr) ? AF_INET : AF_INET6;
  ------------------
  |  Branch (361:14): [True: 666, False: 5.51k]
  ------------------
  362|  6.18k|    }
  363|       |
  364|  6.78k|    if (*l3_type && l3 && *l3_type != l3) {
  ------------------
  |  Branch (364:9): [True: 1.96k, False: 4.81k]
  |  Branch (364:21): [True: 1.48k, False: 489]
  |  Branch (364:27): [True: 123, False: 1.35k]
  ------------------
  365|    123|        return OFPERR_OFPBPC_BAD_VALUE;
  366|    123|    }
  367|       |
  368|  6.65k|    *l3_type = l3;
  369|       |
  370|  6.65k|    return 0;
  371|  6.78k|}

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

ofperr_is_valid:
   76|  1.19M|{
   77|  1.19M|    return error >= OFPERR_OFS && error < OFPERR_OFS + OFPERR_N_ERRORS;
  ------------------
  |  |   52|  2.38M|#define OFPERR_OFS (1 << 30)
  ------------------
                  return error >= OFPERR_OFS && error < OFPERR_OFS + OFPERR_N_ERRORS;
  ------------------
  |  |   52|  1.18M|#define OFPERR_OFS (1 << 30)
  ------------------
                  return error >= OFPERR_OFS && error < OFPERR_OFS + OFPERR_N_ERRORS;
  ------------------
  |  |    3|  2.37M|#define OFPERR_N_ERRORS 198
  ------------------
  |  Branch (77:12): [True: 1.18M, False: 5.35k]
  |  Branch (77:35): [True: 1.18M, False: 76]
  ------------------
   78|  1.19M|}
ofperr_get_name:
   98|  1.19M|{
   99|  1.19M|    return (ofperr_is_valid(error)
  ------------------
  |  Branch (99:13): [True: 1.18M, False: 5.43k]
  ------------------
  100|  1.19M|            ? error_names[error - OFPERR_OFS]
  ------------------
  |  |   52|  1.18M|#define OFPERR_OFS (1 << 30)
  ------------------
  101|  1.19M|            : "<invalid>");
  102|  1.19M|}
ofperr_msg_format:
  248|   325k|{
  249|   325k|    ds_put_format(string, " %s\n", ofperr_get_name(error));
  250|       |
  251|   325k|    if (error == OFPERR_OFPHFC_INCOMPATIBLE || error == OFPERR_OFPHFC_EPERM) {
  ------------------
  |  Branch (251:9): [True: 8.51k, False: 316k]
  |  Branch (251:48): [True: 810, False: 315k]
  ------------------
  252|  9.32k|        ds_put_printable(string, payload->data, payload->size);
  253|   315k|    } else {
  254|   315k|        char *s = ofp_to_string(payload->data, payload->size,
  255|   315k|                                port_map, table_map, 1);
  256|   315k|        ds_put_cstr(string, s);
  257|   315k|        free(s);
  258|   315k|    }
  259|   325k|}
ofperr_decode_msg:
  303|   497k|{
  304|   497k|    const struct ofp_error_msg *oem;
  305|   497k|    enum ofpraw raw;
  306|   497k|    uint16_t type, code;
  307|   497k|    uint32_t vendor;
  308|       |
  309|   497k|    if (payload) {
  ------------------
  |  Branch (309:9): [True: 497k, False: 0]
  ------------------
  310|   497k|        memset(payload, 0, sizeof *payload);
  311|   497k|    }
  312|       |
  313|       |    /* Pull off the error message. */
  314|   497k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  315|   497k|    enum ofperr error = ofpraw_pull(&raw, &b);
  316|   497k|    if (error) {
  ------------------
  |  Branch (316:9): [True: 0, False: 497k]
  ------------------
  317|      0|        return 0;
  318|      0|    }
  319|   497k|    oem = ofpbuf_pull(&b, sizeof *oem);
  320|       |
  321|       |    /* Get the error type and code. */
  322|   497k|    vendor = 0;
  323|   497k|    type = ntohs(oem->type);
  324|   497k|    code = ntohs(oem->code);
  325|   497k|    if (type == NXET_VENDOR && code == NXVC_VENDOR_ERROR) {
  ------------------
  |  |   54|   994k|#define NXET_VENDOR 0xb0c2
  ------------------
  |  Branch (325:9): [True: 34.6k, False: 462k]
  |  Branch (325:32): [True: 30.1k, False: 4.54k]
  ------------------
  326|  30.1k|        const struct nx_vendor_error *nve = ofpbuf_try_pull(&b, sizeof *nve);
  327|  30.1k|        if (!nve) {
  ------------------
  |  Branch (327:13): [True: 221, False: 29.9k]
  ------------------
  328|    221|            return 0;
  329|    221|        }
  330|       |
  331|  29.9k|        vendor = ntohl(nve->vendor);
  332|  29.9k|        type = ntohs(nve->type);
  333|  29.9k|        code = ntohs(nve->code);
  334|   467k|    } else if (type == OFPET12_EXPERIMENTER) {
  ------------------
  |  |   59|   467k|#define OFPET12_EXPERIMENTER 0xffff
  ------------------
  |  Branch (334:16): [True: 62.7k, False: 404k]
  ------------------
  335|  62.7k|        const ovs_be32 *vendorp = ofpbuf_try_pull(&b, sizeof *vendorp);
  336|  62.7k|        if (!vendorp) {
  ------------------
  |  Branch (336:13): [True: 5.01k, False: 57.7k]
  ------------------
  337|  5.01k|            return 0;
  338|  5.01k|        }
  339|       |
  340|  57.7k|        vendor = ntohl(*vendorp);
  341|  57.7k|        type = code;
  342|  57.7k|        code = 0;
  343|  57.7k|    }
  344|       |
  345|       |    /* Translate the error type and code into an ofperr. */
  346|   491k|    error = ofperr_decode(oh->version, vendor, type, code);
  347|   491k|    if (error && payload) {
  ------------------
  |  Branch (347:9): [True: 325k, False: 166k]
  |  Branch (347:18): [True: 325k, False: 0]
  ------------------
  348|   325k|        ofpbuf_init(payload, b.size);
  349|   325k|        ofpbuf_push(payload, b.data, b.size);
  350|   325k|        ofpbuf_trim(payload);
  351|   325k|    }
  352|   491k|    return error;
  353|   497k|}
ofp-errors.c:ofperr_domain_from_version:
   46|   491k|{
   47|   491k|    switch (version) {
   48|  48.8k|    case OFP10_VERSION:
  ------------------
  |  Branch (48:5): [True: 48.8k, False: 443k]
  ------------------
   49|  48.8k|        return &ofperr_of10;
   50|  53.2k|    case OFP11_VERSION:
  ------------------
  |  Branch (50:5): [True: 53.2k, False: 438k]
  ------------------
   51|  53.2k|        return &ofperr_of11;
   52|   112k|    case OFP12_VERSION:
  ------------------
  |  Branch (52:5): [True: 112k, False: 379k]
  ------------------
   53|   112k|        return &ofperr_of12;
   54|  85.8k|    case OFP13_VERSION:
  ------------------
  |  Branch (54:5): [True: 85.8k, False: 406k]
  ------------------
   55|  85.8k|        return &ofperr_of13;
   56|  75.7k|    case OFP14_VERSION:
  ------------------
  |  Branch (56:5): [True: 75.7k, False: 416k]
  ------------------
   57|  75.7k|        return &ofperr_of14;
   58|  86.2k|    case OFP15_VERSION:
  ------------------
  |  Branch (58:5): [True: 86.2k, False: 405k]
  ------------------
   59|  86.2k|        return &ofperr_of15;
   60|  29.8k|    default:
  ------------------
  |  Branch (60:5): [True: 29.8k, False: 462k]
  ------------------
   61|       |        return NULL;
   62|   491k|    }
   63|   491k|}
ofp-errors.c:ofperr_decode:
   86|   491k|{
   87|   491k|    const struct ofperr_domain *domain = ofperr_domain_from_version(version);
   88|   491k|    return domain ? domain->decode(vendor, type, code) : 0;
  ------------------
  |  Branch (88:12): [True: 462k, False: 29.8k]
  ------------------
   89|   491k|}

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

ofputil_flow_mod_flags_format:
  111|  28.4k|{
  112|  28.4k|    if (flags & OFPUTIL_FF_SEND_FLOW_REM) {
  ------------------
  |  Branch (112:9): [True: 4.38k, False: 24.0k]
  ------------------
  113|  4.38k|        ds_put_cstr(s, "send_flow_rem ");
  114|  4.38k|    }
  115|  28.4k|    if (flags & OFPUTIL_FF_CHECK_OVERLAP) {
  ------------------
  |  Branch (115:9): [True: 4.61k, False: 23.7k]
  ------------------
  116|  4.61k|        ds_put_cstr(s, "check_overlap ");
  117|  4.61k|    }
  118|  28.4k|    if (flags & OFPUTIL_FF_RESET_COUNTS) {
  ------------------
  |  Branch (118:9): [True: 2.03k, False: 26.3k]
  ------------------
  119|  2.03k|        ds_put_cstr(s, "reset_counts ");
  120|  2.03k|    }
  121|  28.4k|    if (flags & OFPUTIL_FF_NO_PKT_COUNTS) {
  ------------------
  |  Branch (121:9): [True: 3.82k, False: 24.5k]
  ------------------
  122|  3.82k|        ds_put_cstr(s, "no_packet_counts ");
  123|  3.82k|    }
  124|  28.4k|    if (flags & OFPUTIL_FF_NO_BYT_COUNTS) {
  ------------------
  |  Branch (124:9): [True: 1.55k, False: 26.8k]
  ------------------
  125|  1.55k|        ds_put_cstr(s, "no_byte_counts ");
  126|  1.55k|    }
  127|  28.4k|    if (flags & OFPUTIL_FF_HIDDEN_FIELDS) {
  ------------------
  |  Branch (127:9): [True: 0, False: 28.4k]
  ------------------
  128|      0|        ds_put_cstr(s, "allow_hidden_fields ");
  129|      0|    }
  130|  28.4k|    if (flags & OFPUTIL_FF_NO_READONLY) {
  ------------------
  |  Branch (130:9): [True: 0, False: 28.4k]
  ------------------
  131|      0|        ds_put_cstr(s, "no_readonly_table ");
  132|      0|    }
  133|  28.4k|}
ofputil_decode_flow_mod:
  155|  63.7k|{
  156|  63.7k|    ovs_be16 raw_flags;
  157|  63.7k|    enum ofperr error;
  158|  63.7k|    struct match match;
  159|  63.7k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  160|  63.7k|    enum ofpraw raw = ofpraw_pull_assert(&b);
  161|  63.7k|    if (raw == OFPRAW_OFPT11_FLOW_MOD) {
  ------------------
  |  Branch (161:9): [True: 27.9k, False: 35.7k]
  ------------------
  162|       |        /* Standard OpenFlow 1.1+ flow_mod. */
  163|  27.9k|        const struct ofp11_flow_mod *ofm;
  164|       |
  165|  27.9k|        ofm = ofpbuf_pull(&b, sizeof *ofm);
  166|       |
  167|  27.9k|        error = ofputil_pull_ofp11_match(&b, tun_table, vl_mff_map, &match,
  168|  27.9k|                                         NULL);
  169|  27.9k|        if (error) {
  ------------------
  |  Branch (169:13): [True: 8.68k, False: 19.3k]
  ------------------
  170|  8.68k|            return error;
  171|  8.68k|        }
  172|       |
  173|       |        /* Translate the message. */
  174|  19.3k|        fm->priority = ntohs(ofm->priority);
  175|  19.3k|        if (ofm->command == OFPFC_ADD
  ------------------
  |  Branch (175:13): [True: 10.6k, False: 8.70k]
  ------------------
  176|  8.70k|            || (oh->version == OFP11_VERSION
  ------------------
  |  Branch (176:17): [True: 2.48k, False: 6.22k]
  ------------------
  177|  2.48k|                && (ofm->command == OFPFC_MODIFY ||
  ------------------
  |  Branch (177:21): [True: 1.35k, False: 1.13k]
  ------------------
  178|  1.13k|                    ofm->command == OFPFC_MODIFY_STRICT)
  ------------------
  |  Branch (178:21): [True: 366, False: 764]
  ------------------
  179|  10.6k|                && ofm->cookie_mask == htonll(0))) {
  ------------------
  |  Branch (179:20): [True: 41, False: 1.68k]
  ------------------
  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|  10.6k|            fm->cookie = htonll(0);
  184|  10.6k|            fm->cookie_mask = htonll(0);
  185|  10.6k|            fm->new_cookie = ofm->cookie;
  186|  10.6k|        } else {
  187|  8.66k|            fm->cookie = ofm->cookie;
  188|  8.66k|            fm->cookie_mask = ofm->cookie_mask;
  189|  8.66k|            fm->new_cookie = OVS_BE64_MAX;
  ------------------
  |  |   44|  8.66k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  190|  8.66k|        }
  191|  19.3k|        fm->modify_cookie = false;
  192|  19.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|  19.3k|        fm->table_id = ofm->table_id;
  199|  19.3k|        if (fm->table_id == OFPTT_ALL
  ------------------
  |  Branch (199:13): [True: 1.08k, False: 18.2k]
  ------------------
  200|  1.08k|            && (oh->version == OFP11_VERSION
  ------------------
  |  Branch (200:17): [True: 482, False: 598]
  ------------------
  201|    598|                || (ofm->command != OFPFC_DELETE &&
  ------------------
  |  Branch (201:21): [True: 270, False: 328]
  ------------------
  202|    565|                    ofm->command != OFPFC_DELETE_STRICT))) {
  ------------------
  |  Branch (202:21): [True: 83, False: 187]
  ------------------
  203|    565|            return OFPERR_OFPFMFC_BAD_TABLE_ID;
  204|    565|        }
  205|       |
  206|  18.7k|        fm->idle_timeout = ntohs(ofm->idle_timeout);
  207|  18.7k|        fm->hard_timeout = ntohs(ofm->hard_timeout);
  208|  18.7k|        if (oh->version >= OFP14_VERSION && ofm->command == OFPFC_ADD) {
  ------------------
  |  Branch (208:13): [True: 16.2k, False: 2.53k]
  |  Branch (208:45): [True: 10.0k, False: 6.11k]
  ------------------
  209|  10.0k|            fm->importance = ntohs(ofm->importance);
  210|  10.0k|        } else {
  211|  8.64k|            fm->importance = 0;
  212|  8.64k|        }
  213|  18.7k|        fm->buffer_id = ntohl(ofm->buffer_id);
  214|  18.7k|        error = ofputil_port_from_ofp11(ofm->out_port, &fm->out_port);
  215|  18.7k|        if (error) {
  ------------------
  |  Branch (215:13): [True: 692, False: 18.0k]
  ------------------
  216|    692|            return error;
  217|    692|        }
  218|       |
  219|  18.0k|        fm->out_group = (ofm->command == OFPFC_DELETE ||
  ------------------
  |  Branch (219:26): [True: 1.63k, False: 16.4k]
  ------------------
  220|  16.4k|                         ofm->command == OFPFC_DELETE_STRICT
  ------------------
  |  Branch (220:26): [True: 1.44k, False: 14.9k]
  ------------------
  221|  18.0k|                         ? ntohl(ofm->out_group)
  222|  18.0k|                         : OFPG_ANY);
  223|  18.0k|        raw_flags = ofm->flags;
  224|  35.7k|    } else {
  225|  35.7k|        uint16_t command;
  226|       |
  227|  35.7k|        if (raw == OFPRAW_OFPT10_FLOW_MOD) {
  ------------------
  |  Branch (227:13): [True: 33.4k, False: 2.34k]
  ------------------
  228|       |            /* Standard OpenFlow 1.0 flow_mod. */
  229|  33.4k|            const struct ofp10_flow_mod *ofm;
  230|       |
  231|       |            /* Get the ofp10_flow_mod. */
  232|  33.4k|            ofm = ofpbuf_pull(&b, sizeof *ofm);
  233|       |
  234|       |            /* Translate the rule. */
  235|  33.4k|            ofputil_match_from_ofp10_match(&ofm->match, &match);
  236|  33.4k|            ofputil_normalize_match(&match);
  237|       |
  238|       |            /* OpenFlow 1.0 says that exact-match rules have to have the
  239|       |             * highest possible priority. */
  240|  33.4k|            fm->priority = (ofm->match.wildcards & htonl(OFPFW10_ALL)
  ------------------
  |  Branch (240:29): [True: 29.1k, False: 4.29k]
  ------------------
  241|  33.4k|                            ? ntohs(ofm->priority)
  242|  33.4k|                            : UINT16_MAX);
  243|       |
  244|       |            /* Translate the message. */
  245|  33.4k|            command = ntohs(ofm->command);
  246|  33.4k|            fm->cookie = htonll(0);
  247|  33.4k|            fm->cookie_mask = htonll(0);
  248|  33.4k|            fm->new_cookie = ofm->cookie;
  249|  33.4k|            fm->idle_timeout = ntohs(ofm->idle_timeout);
  250|  33.4k|            fm->hard_timeout = ntohs(ofm->hard_timeout);
  251|  33.4k|            fm->importance = 0;
  252|  33.4k|            fm->buffer_id = ntohl(ofm->buffer_id);
  253|  33.4k|            fm->out_port = u16_to_ofp(ntohs(ofm->out_port));
  254|  33.4k|            fm->out_group = OFPG_ANY;
  255|  33.4k|            raw_flags = ofm->flags;
  256|  33.4k|        } else if (raw == OFPRAW_NXT_FLOW_MOD) {
  ------------------
  |  Branch (256:20): [True: 2.34k, False: 0]
  ------------------
  257|       |            /* Nicira extended flow_mod. */
  258|  2.34k|            const struct nx_flow_mod *nfm;
  259|       |
  260|       |            /* Dissect the message. */
  261|  2.34k|            nfm = ofpbuf_pull(&b, sizeof *nfm);
  262|  2.34k|            error = nx_pull_match(&b, ntohs(nfm->match_len),
  263|  2.34k|                                  &match, &fm->cookie, &fm->cookie_mask,
  264|  2.34k|                                  false, tun_table, vl_mff_map);
  265|  2.34k|            if (error) {
  ------------------
  |  Branch (265:17): [True: 335, False: 2.00k]
  ------------------
  266|    335|                return error;
  267|    335|            }
  268|       |
  269|       |            /* Translate the message. */
  270|  2.00k|            command = ntohs(nfm->command);
  271|  2.00k|            if ((command & 0xff) == OFPFC_ADD && fm->cookie_mask) {
  ------------------
  |  Branch (271:17): [True: 393, False: 1.61k]
  |  Branch (271:50): [True: 114, False: 279]
  ------------------
  272|       |                /* Flow additions may only set a new cookie, not match an
  273|       |                 * existing cookie. */
  274|    114|                return OFPERR_NXBRC_NXM_INVALID;
  275|    114|            }
  276|  1.89k|            fm->priority = ntohs(nfm->priority);
  277|  1.89k|            fm->new_cookie = nfm->cookie;
  278|  1.89k|            fm->idle_timeout = ntohs(nfm->idle_timeout);
  279|  1.89k|            fm->hard_timeout = ntohs(nfm->hard_timeout);
  280|  1.89k|            fm->importance = 0;
  281|  1.89k|            fm->buffer_id = ntohl(nfm->buffer_id);
  282|  1.89k|            fm->out_port = u16_to_ofp(ntohs(nfm->out_port));
  283|  1.89k|            fm->out_group = OFPG_ANY;
  284|  1.89k|            raw_flags = nfm->flags;
  285|  1.89k|        } else {
  286|      0|            OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  287|      0|        }
  288|       |
  289|  35.3k|        fm->modify_cookie = fm->new_cookie != OVS_BE64_MAX;
  ------------------
  |  |   44|  35.3k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  290|  35.3k|        if (protocol & OFPUTIL_P_TID) {
  ------------------
  |  |  103|  35.3k|#define OFPUTIL_P_TID (OFPUTIL_P_OF10_STD_TID | \
  |  |  104|  35.3k|                       OFPUTIL_P_OF10_NXM_TID | \
  |  |  105|  35.3k|                       OFPUTIL_P_OF11_STD |     \
  |  |  106|  35.3k|                       OFPUTIL_P_ANY_OXM)
  |  |  ------------------
  |  |  |  |   82|  35.3k|#define OFPUTIL_P_ANY_OXM (OFPUTIL_P_OF12_OXM | \
  |  |  |  |   83|  35.3k|                           OFPUTIL_P_OF13_OXM | \
  |  |  |  |   84|  35.3k|                           OFPUTIL_P_OF14_OXM | \
  |  |  |  |   85|  35.3k|                           OFPUTIL_P_OF15_OXM)
  |  |  ------------------
  ------------------
  |  Branch (290:13): [True: 35.3k, False: 0]
  ------------------
  291|  35.3k|            fm->command = command & 0xff;
  292|  35.3k|            fm->table_id = command >> 8;
  293|  35.3k|        } 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|  35.3k|    }
  302|       |
  303|       |    /* Check for mismatched conntrack original direction tuple address fields
  304|       |     * w.r.t. the IP version of the match. */
  305|  53.3k|    if (((match.wc.masks.ct_nw_src || match.wc.masks.ct_nw_dst)
  ------------------
  |  Branch (305:11): [True: 0, False: 53.3k]
  |  Branch (305:39): [True: 0, False: 53.3k]
  ------------------
  306|      0|         && match.flow.dl_type != htons(ETH_TYPE_IP))
  ------------------
  |  Branch (306:13): [True: 0, False: 0]
  ------------------
  307|  53.3k|        || ((ipv6_addr_is_set(&match.wc.masks.ct_ipv6_src)
  ------------------
  |  Branch (307:14): [True: 0, False: 53.3k]
  ------------------
  308|  53.3k|             || ipv6_addr_is_set(&match.wc.masks.ct_ipv6_dst))
  ------------------
  |  Branch (308:17): [True: 0, False: 53.3k]
  ------------------
  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|  53.3k|    if (fm->command > OFPFC_DELETE_STRICT) {
  ------------------
  |  Branch (313:9): [True: 2.82k, False: 50.5k]
  ------------------
  314|  2.82k|        return OFPERR_OFPFMFC_BAD_COMMAND;
  315|  2.82k|    }
  316|       |
  317|  50.5k|    fm->ofpacts_tlv_bitmap = 0;
  318|  50.5k|    error = ofpacts_pull_openflow_instructions(&b, b.size, oh->version,
  319|  50.5k|                                               vl_mff_map,
  320|  50.5k|                                               &fm->ofpacts_tlv_bitmap,
  321|  50.5k|                                               ofpacts);
  322|  50.5k|    if (error) {
  ------------------
  |  Branch (322:9): [True: 17.4k, False: 33.0k]
  ------------------
  323|  17.4k|        return error;
  324|  17.4k|    }
  325|  33.0k|    fm->ofpacts = ofpacts->data;
  326|  33.0k|    fm->ofpacts_len = ofpacts->size;
  327|       |
  328|  33.0k|    error = ofputil_decode_flow_mod_flags(raw_flags, fm->command,
  329|  33.0k|                                          oh->version, &fm->flags);
  330|  33.0k|    if (error) {
  ------------------
  |  Branch (330:9): [True: 1.11k, False: 31.9k]
  ------------------
  331|  1.11k|        return error;
  332|  1.11k|    }
  333|       |
  334|  31.9k|    if (fm->flags & OFPUTIL_FF_EMERG) {
  ------------------
  |  Branch (334:9): [True: 1.54k, False: 30.4k]
  ------------------
  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|  1.54k|        return (fm->hard_timeout || fm->idle_timeout
  ------------------
  |  Branch (341:17): [True: 1.41k, False: 124]
  |  Branch (341:37): [True: 11, False: 113]
  ------------------
  342|  1.54k|                ? OFPERR_OFPFMFC_BAD_EMERG_TIMEOUT
  343|  1.54k|                : OFPERR_OFPFMFC_TABLE_FULL);
  344|  1.54k|    }
  345|       |
  346|  30.4k|    struct ofpact_check_params cp = {
  347|  30.4k|        .match = &match,
  348|  30.4k|        .max_ports = max_port,
  349|  30.4k|        .table_id = fm->table_id,
  350|  30.4k|        .n_tables = max_table
  351|  30.4k|    };
  352|  30.4k|    error = ofpacts_check_consistency(fm->ofpacts, fm->ofpacts_len,
  353|  30.4k|                                      protocol, &cp);
  354|  30.4k|    if (!error) {
  ------------------
  |  Branch (354:9): [True: 26.5k, False: 3.90k]
  ------------------
  355|  26.5k|        minimatch_init(&fm->match, &match);
  356|  26.5k|    }
  357|  30.4k|    return error;
  358|  31.9k|}
ofputil_flow_mod_format:
  489|  63.7k|{
  490|  63.7k|    struct ofputil_flow_mod fm;
  491|  63.7k|    struct ofpbuf ofpacts;
  492|  63.7k|    bool need_priority;
  493|  63.7k|    enum ofperr error;
  494|  63.7k|    enum ofpraw raw;
  495|  63.7k|    enum ofputil_protocol protocol;
  496|       |
  497|  63.7k|    protocol = ofputil_protocol_from_ofp_version(oh->version);
  498|  63.7k|    protocol = ofputil_protocol_set_tid(protocol, true);
  499|       |
  500|  63.7k|    ofpbuf_init(&ofpacts, 64);
  501|  63.7k|    error = ofputil_decode_flow_mod(&fm, oh, protocol, NULL, NULL, &ofpacts,
  502|  63.7k|                                    OFPP_MAX, 255);
  ------------------
  |  |   33|  63.7k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|  63.7k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  503|  63.7k|    if (error) {
  ------------------
  |  Branch (503:9): [True: 37.2k, False: 26.5k]
  ------------------
  504|  37.2k|        ofpbuf_uninit(&ofpacts);
  505|  37.2k|        return error;
  506|  37.2k|    }
  507|       |
  508|  26.5k|    ds_put_char(s, ' ');
  509|  26.5k|    switch (fm.command) {
  510|  17.2k|    case OFPFC_ADD:
  ------------------
  |  Branch (510:5): [True: 17.2k, False: 9.22k]
  ------------------
  511|  17.2k|        ds_put_cstr(s, "ADD");
  512|  17.2k|        break;
  513|  3.44k|    case OFPFC_MODIFY:
  ------------------
  |  Branch (513:5): [True: 3.44k, False: 23.0k]
  ------------------
  514|  3.44k|        ds_put_cstr(s, "MOD");
  515|  3.44k|        break;
  516|  4.02k|    case OFPFC_MODIFY_STRICT:
  ------------------
  |  Branch (516:5): [True: 4.02k, False: 22.4k]
  ------------------
  517|  4.02k|        ds_put_cstr(s, "MOD_STRICT");
  518|  4.02k|        break;
  519|  1.09k|    case OFPFC_DELETE:
  ------------------
  |  Branch (519:5): [True: 1.09k, False: 25.4k]
  ------------------
  520|  1.09k|        ds_put_cstr(s, "DEL");
  521|  1.09k|        break;
  522|    655|    case OFPFC_DELETE_STRICT:
  ------------------
  |  Branch (522:5): [True: 655, False: 25.8k]
  ------------------
  523|    655|        ds_put_cstr(s, "DEL_STRICT");
  524|    655|        break;
  525|      0|    default:
  ------------------
  |  Branch (525:5): [True: 0, False: 26.5k]
  ------------------
  526|      0|        ds_put_format(s, "cmd:%d", fm.command);
  527|  26.5k|    }
  528|  26.5k|    if (fm.table_id != 0
  ------------------
  |  Branch (528:9): [True: 13.4k, False: 13.0k]
  ------------------
  529|  13.4k|        || ofputil_table_map_get_name(table_map, fm.table_id)) {
  ------------------
  |  Branch (529:12): [True: 0, False: 13.0k]
  ------------------
  530|  13.4k|        ds_put_format(s, " table:");
  531|  13.4k|        ofputil_format_table(fm.table_id, table_map, s);
  532|  13.4k|    }
  533|       |
  534|  26.5k|    ds_put_char(s, ' ');
  535|  26.5k|    ofpraw_decode(&raw, oh);
  536|  26.5k|    if (verbosity >= 3 && raw == OFPRAW_OFPT10_FLOW_MOD) {
  ------------------
  |  Branch (536:9): [True: 0, False: 26.5k]
  |  Branch (536:27): [True: 0, False: 0]
  ------------------
  537|      0|        const struct ofp10_flow_mod *ofm = ofpmsg_body(oh);
  538|      0|        ofp10_match_print(s, &ofm->match, port_map, verbosity);
  539|       |
  540|       |        /* ofp_print_match() doesn't print priority. */
  541|      0|        need_priority = true;
  542|  26.5k|    } else if (verbosity >= 3 && raw == OFPRAW_NXT_FLOW_MOD) {
  ------------------
  |  Branch (542:16): [True: 0, False: 26.5k]
  |  Branch (542:34): [True: 0, False: 0]
  ------------------
  543|      0|        const struct nx_flow_mod *nfm = ofpmsg_body(oh);
  544|      0|        const void *nxm = nfm + 1;
  545|      0|        char *nxm_s;
  546|       |
  547|      0|        nxm_s = nx_match_to_string(nxm, ntohs(nfm->match_len));
  548|      0|        ds_put_cstr(s, nxm_s);
  549|      0|        free(nxm_s);
  550|       |
  551|       |        /* nx_match_to_string() doesn't print priority. */
  552|      0|        need_priority = true;
  553|  26.5k|    } else {
  554|  26.5k|        struct match match;
  555|  26.5k|        minimatch_expand(&fm.match, &match);
  556|  26.5k|        match_format(&match, port_map, s, fm.priority);
  557|       |
  558|       |        /* match_format() does print priority. */
  559|  26.5k|        need_priority = false;
  560|  26.5k|    }
  561|       |
  562|  26.5k|    if (ds_last(s) != ' ') {
  ------------------
  |  Branch (562:9): [True: 26.3k, False: 141]
  ------------------
  563|  26.3k|        ds_put_char(s, ' ');
  564|  26.3k|    }
  565|  26.5k|    if (fm.new_cookie != htonll(0) && fm.new_cookie != OVS_BE64_MAX) {
  ------------------
  |  |   44|  25.8k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  |  Branch (565:9): [True: 25.8k, False: 605]
  |  Branch (565:39): [True: 20.9k, False: 4.99k]
  ------------------
  566|  20.9k|        ds_put_format(s, "cookie:0x%"PRIx64" ", ntohll(fm.new_cookie));
  567|  20.9k|    }
  568|  26.5k|    if (fm.cookie_mask != htonll(0)) {
  ------------------
  |  Branch (568:9): [True: 4.98k, False: 21.5k]
  ------------------
  569|  4.98k|        ds_put_format(s, "cookie:0x%"PRIx64"/0x%"PRIx64" ",
  570|  4.98k|                ntohll(fm.cookie), ntohll(fm.cookie_mask));
  571|  4.98k|    }
  572|  26.5k|    if (fm.idle_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  26.5k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (572:9): [True: 20.1k, False: 6.32k]
  ------------------
  573|  20.1k|        ds_put_format(s, "idle:%"PRIu16" ", fm.idle_timeout);
  574|  20.1k|    }
  575|  26.5k|    if (fm.hard_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  26.5k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (575:9): [True: 21.6k, False: 4.88k]
  ------------------
  576|  21.6k|        ds_put_format(s, "hard:%"PRIu16" ", fm.hard_timeout);
  577|  21.6k|    }
  578|  26.5k|    if (fm.importance != 0) {
  ------------------
  |  Branch (578:9): [True: 3.65k, False: 22.8k]
  ------------------
  579|  3.65k|        ds_put_format(s, "importance:%"PRIu16" ", fm.importance);
  580|  3.65k|    }
  581|  26.5k|    if (fm.priority != OFP_DEFAULT_PRIORITY && need_priority) {
  ------------------
  |  |  138|  53.0k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
  |  Branch (581:9): [True: 26.3k, False: 144]
  |  Branch (581:48): [True: 0, False: 26.3k]
  ------------------
  582|      0|        ds_put_format(s, "pri:%d ", fm.priority);
  583|      0|    }
  584|  26.5k|    if (fm.buffer_id != UINT32_MAX) {
  ------------------
  |  Branch (584:9): [True: 26.2k, False: 207]
  ------------------
  585|  26.2k|        ds_put_format(s, "buf:0x%"PRIx32" ", fm.buffer_id);
  586|  26.2k|    }
  587|  26.5k|    if (fm.out_port != OFPP_ANY) {
  ------------------
  |  |   80|  26.5k|#define OFPP_ANY OFPP_NONE
  |  |  ------------------
  |  |  |  |   47|  26.5k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|  26.5k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (587:9): [True: 25.4k, False: 1.03k]
  ------------------
  588|  25.4k|        ds_put_format(s, "out_port:");
  589|  25.4k|        ofputil_format_port(fm.out_port, port_map, s);
  590|  25.4k|        ds_put_char(s, ' ');
  591|  25.4k|    }
  592|       |
  593|  26.5k|    if (oh->version == OFP10_VERSION || oh->version == OFP11_VERSION) {
  ------------------
  |  Branch (593:9): [True: 17.0k, False: 9.46k]
  |  Branch (593:41): [True: 1.64k, False: 7.81k]
  ------------------
  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|  18.6k|        fm.flags &= ~OFPUTIL_FF_RESET_COUNTS;
  598|  18.6k|    }
  599|  26.5k|    ofputil_flow_mod_flags_format(s, fm.flags);
  600|       |
  601|  26.5k|    ds_put_cstr(s, "actions=");
  602|  26.5k|    struct ofpact_format_params fp = {
  603|  26.5k|        .port_map = port_map,
  604|  26.5k|        .table_map = table_map,
  605|  26.5k|        .s = s,
  606|  26.5k|    };
  607|  26.5k|    ofpacts_format(fm.ofpacts, fm.ofpacts_len, &fp);
  608|  26.5k|    ofpbuf_uninit(&ofpacts);
  609|  26.5k|    minimatch_destroy(&fm.match);
  610|       |
  611|  26.5k|    return 0;
  612|  26.5k|}
ofputil_decode_flow_stats_request:
  697|  4.14k|{
  698|  4.14k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  699|  4.14k|    enum ofpraw raw = ofpraw_pull_assert(&b);
  700|  4.14k|    switch ((int) raw) {
  701|    498|    case OFPRAW_OFPST10_FLOW_REQUEST:
  ------------------
  |  Branch (701:5): [True: 498, False: 3.64k]
  ------------------
  702|    498|        return ofputil_decode_ofpst10_flow_request(fsr, b.data, false);
  703|       |
  704|    587|    case OFPRAW_OFPST10_AGGREGATE_REQUEST:
  ------------------
  |  Branch (704:5): [True: 587, False: 3.55k]
  ------------------
  705|    587|        return ofputil_decode_ofpst10_flow_request(fsr, b.data, true);
  706|       |
  707|    996|    case OFPRAW_OFPST11_FLOW_REQUEST:
  ------------------
  |  Branch (707:5): [True: 996, False: 3.14k]
  ------------------
  708|    996|        return ofputil_decode_ofpst11_flow_request(fsr, &b, false, tun_table,
  709|    996|                                                   vl_mff_map);
  710|       |
  711|  1.17k|    case OFPRAW_OFPST11_AGGREGATE_REQUEST:
  ------------------
  |  Branch (711:5): [True: 1.17k, False: 2.97k]
  ------------------
  712|  1.17k|        return ofputil_decode_ofpst11_flow_request(fsr, &b, true, tun_table,
  713|  1.17k|                                                   vl_mff_map);
  714|       |
  715|    119|    case OFPRAW_OFPST15_AGGREGATE_REQUEST:
  ------------------
  |  Branch (715:5): [True: 119, False: 4.02k]
  ------------------
  716|    119|       return ofputil_decode_ofpst11_flow_request(fsr, &b, true,
  717|    119|                                                  tun_table, vl_mff_map);
  718|       |
  719|    545|    case OFPRAW_NXST_FLOW_REQUEST:
  ------------------
  |  Branch (719:5): [True: 545, False: 3.59k]
  ------------------
  720|    545|        return ofputil_decode_nxst_flow_request(fsr, &b, false, tun_table,
  721|    545|                                                vl_mff_map);
  722|       |
  723|    229|    case OFPRAW_NXST_AGGREGATE_REQUEST:
  ------------------
  |  Branch (723:5): [True: 229, False: 3.91k]
  ------------------
  724|    229|        return ofputil_decode_nxst_flow_request(fsr, &b, true, tun_table,
  725|    229|                                                vl_mff_map);
  726|       |
  727|      0|    default:
  ------------------
  |  Branch (727:5): [True: 0, False: 4.14k]
  ------------------
  728|       |        /* Hey, the caller lied. */
  729|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  730|  4.14k|    }
  731|  4.14k|}
ofputil_flow_stats_request_format:
  819|  1.24k|{
  820|  1.24k|    if (fsr->table_id != 0xff) {
  ------------------
  |  Branch (820:9): [True: 600, False: 641]
  ------------------
  821|    600|        ds_put_format(s, " table=");
  822|    600|        ofputil_format_table(fsr->table_id, table_map, s);
  823|    600|    }
  824|       |
  825|  1.24k|    if (fsr->out_port != OFPP_ANY) {
  ------------------
  |  |   80|  1.24k|#define OFPP_ANY OFPP_NONE
  |  |  ------------------
  |  |  |  |   47|  1.24k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|  1.24k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (825:9): [True: 1.01k, False: 231]
  ------------------
  826|  1.01k|        ds_put_cstr(s, " out_port=");
  827|  1.01k|        ofputil_format_port(fsr->out_port, port_map, s);
  828|  1.01k|    }
  829|       |
  830|  1.24k|    ds_put_char(s, ' ');
  831|  1.24k|    match_format(&fsr->match, port_map, s, OFP_DEFAULT_PRIORITY);
  ------------------
  |  |  138|  1.24k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
  832|  1.24k|}
ofputil_decode_flow_stats_reply:
  896|  18.4k|{
  897|  18.4k|    const struct ofp_header *oh;
  898|  18.4k|    size_t instructions_len;
  899|  18.4k|    enum ofperr error;
  900|  18.4k|    enum ofpraw raw;
  901|       |
  902|  18.4k|    error = (msg->header ? ofpraw_decode(&raw, msg->header)
  ------------------
  |  Branch (902:14): [True: 5.65k, False: 12.8k]
  ------------------
  903|  18.4k|             : ofpraw_pull(&raw, msg));
  904|  18.4k|    if (error) {
  ------------------
  |  Branch (904:9): [True: 0, False: 18.4k]
  ------------------
  905|      0|        return error;
  906|      0|    }
  907|  18.4k|    oh = msg->header;
  908|       |
  909|  18.4k|    if (!msg->size) {
  ------------------
  |  Branch (909:9): [True: 1.91k, False: 16.5k]
  ------------------
  910|  1.91k|        return EOF;
  911|  16.5k|    } else if (raw == OFPRAW_OFPST15_FLOW_REPLY) {
  ------------------
  |  Branch (911:16): [True: 10.4k, False: 6.08k]
  ------------------
  912|  10.4k|        const struct ofp15_flow_desc *ofd;
  913|  10.4k|        size_t length;
  914|  10.4k|        uint16_t padded_match_len;
  915|  10.4k|        uint16_t stat_len;
  916|  10.4k|        uint8_t oxs_field_set;
  917|       |
  918|  10.4k|        ofd = ofpbuf_try_pull(msg, sizeof *ofd);
  919|  10.4k|        if (!ofd) {
  ------------------
  |  Branch (919:13): [True: 2.49k, False: 7.96k]
  ------------------
  920|  2.49k|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply has %" PRIu32
  ------------------
  |  |  224|  2.49k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  2.49k|    do {                                                                \
  |  |  |  |  288|  2.49k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  2.49k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 2.49k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  2.49k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 2.49k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  921|  2.49k|                         " leftover " "bytes at end", msg->size);
  922|  2.49k|            return EINVAL;
  923|  2.49k|        }
  924|       |
  925|  7.96k|        length = ntohs(ofd->length);
  926|  7.96k|        if (length < sizeof *ofd) {
  ------------------
  |  Branch (926:13): [True: 609, False: 7.35k]
  ------------------
  927|    609|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply claims invalid "
  ------------------
  |  |  224|    609|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    609|    do {                                                                \
  |  |  |  |  288|    609|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    609|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 609]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    609|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 609]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  928|    609|                         "length %" PRIuSIZE, length);
  929|    609|            return EINVAL;
  930|    609|        }
  931|       |
  932|  7.35k|        if (ofputil_pull_ofp11_match(msg, NULL, NULL, &fs->match,
  ------------------
  |  Branch (932:13): [True: 1.60k, False: 5.75k]
  ------------------
  933|  7.35k|                                     &padded_match_len)) {
  934|  1.60k|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply bad match");
  ------------------
  |  |  224|  1.60k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.60k|    do {                                                                \
  |  |  |  |  288|  1.60k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.60k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.60k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.60k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.60k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  935|  1.60k|            return EINVAL;
  936|  1.60k|        }
  937|       |
  938|  5.75k|        fs->priority = ntohs(ofd->priority);
  939|  5.75k|        fs->table_id = ofd->table_id;
  940|  5.75k|        fs->cookie = ofd->cookie;
  941|  5.75k|        fs->idle_timeout = ntohs(ofd->idle_timeout);
  942|  5.75k|        fs->hard_timeout = ntohs(ofd->hard_timeout);
  943|  5.75k|        fs->importance = ntohs(ofd->importance);
  944|       |
  945|  5.75k|        error = ofputil_decode_flow_mod_flags(ofd->flags, -1, oh->version,
  946|  5.75k|                                                &fs->flags);
  947|  5.75k|        if (error) {
  ------------------
  |  Branch (947:13): [True: 564, False: 5.18k]
  ------------------
  948|    564|            return error;
  949|    564|        }
  950|       |
  951|  5.18k|        struct oxs_stats oxs;
  952|  5.18k|        if (oxs_pull_stat(msg, &oxs, &stat_len, &oxs_field_set)) {
  ------------------
  |  Branch (952:13): [True: 650, False: 4.53k]
  ------------------
  953|    650|            VLOG_WARN_RL(&rl, "OXS OFPST_FLOW reply bad stats");
  ------------------
  |  |  224|    650|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    650|    do {                                                                \
  |  |  |  |  288|    650|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    650|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 650]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    650|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 650]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  954|    650|            return EINVAL;
  955|    650|        }
  956|  4.53k|        fs->duration_sec = oxs.duration_sec;
  957|  4.53k|        fs->duration_nsec = oxs.duration_nsec;
  958|  4.53k|        fs->packet_count = oxs.packet_count;
  959|  4.53k|        fs->byte_count = oxs.byte_count;
  960|  4.53k|        fs->idle_age = oxs.idle_age == UINT32_MAX ? -1 : oxs.idle_age;
  ------------------
  |  Branch (960:24): [True: 4.53k, False: 0]
  ------------------
  961|  4.53k|        fs->hard_age = -1;
  962|       |
  963|  4.53k|        instructions_len = length - sizeof *ofd - padded_match_len - stat_len;
  964|  6.08k|    } else if (raw == OFPRAW_OFPST11_FLOW_REPLY
  ------------------
  |  Branch (964:16): [True: 1.07k, False: 5.00k]
  ------------------
  965|  5.00k|               || raw == OFPRAW_OFPST13_FLOW_REPLY) {
  ------------------
  |  Branch (965:19): [True: 1.97k, False: 3.02k]
  ------------------
  966|  3.05k|        const struct ofp11_flow_stats *ofs;
  967|  3.05k|        size_t length;
  968|  3.05k|        uint16_t padded_match_len;
  969|       |
  970|  3.05k|        ofs = ofpbuf_try_pull(msg, sizeof *ofs);
  971|  3.05k|        if (!ofs) {
  ------------------
  |  Branch (971:13): [True: 658, False: 2.39k]
  ------------------
  972|    658|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply has %"PRIu32" leftover "
  ------------------
  |  |  224|    658|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    658|    do {                                                                \
  |  |  |  |  288|    658|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    658|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 658]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    658|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 658]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  973|    658|                         "bytes at end", msg->size);
  974|    658|            return OFPERR_OFPBRC_BAD_LEN;
  975|    658|        }
  976|       |
  977|  2.39k|        length = ntohs(ofs->length);
  978|  2.39k|        if (length < sizeof *ofs) {
  ------------------
  |  Branch (978:13): [True: 19, False: 2.37k]
  ------------------
  979|     19|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply claims invalid "
  ------------------
  |  |  224|     19|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     19|    do {                                                                \
  |  |  |  |  288|     19|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     19|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 19]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     19|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 19]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  980|     19|                         "length %"PRIuSIZE, length);
  981|     19|            return OFPERR_OFPBRC_BAD_LEN;
  982|     19|        }
  983|       |
  984|  2.37k|        error = ofputil_pull_ofp11_match(msg, NULL, NULL, &fs->match,
  985|  2.37k|                                         &padded_match_len);
  986|  2.37k|        if (error) {
  ------------------
  |  Branch (986:13): [True: 584, False: 1.79k]
  ------------------
  987|    584|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply bad match");
  ------------------
  |  |  224|    584|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    584|    do {                                                                \
  |  |  |  |  288|    584|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    584|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 584]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    584|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 584]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  988|    584|            return error;
  989|    584|        }
  990|  1.79k|        instructions_len = length - sizeof *ofs - padded_match_len;
  991|       |
  992|  1.79k|        fs->priority = ntohs(ofs->priority);
  993|  1.79k|        fs->table_id = ofs->table_id;
  994|  1.79k|        fs->duration_sec = ntohl(ofs->duration_sec);
  995|  1.79k|        fs->duration_nsec = ntohl(ofs->duration_nsec);
  996|  1.79k|        fs->idle_timeout = ntohs(ofs->idle_timeout);
  997|  1.79k|        fs->hard_timeout = ntohs(ofs->hard_timeout);
  998|  1.79k|        if (oh->version >= OFP14_VERSION) {
  ------------------
  |  Branch (998:13): [True: 155, False: 1.63k]
  ------------------
  999|    155|            fs->importance = ntohs(ofs->importance);
 1000|  1.63k|        } else {
 1001|  1.63k|            fs->importance = 0;
 1002|  1.63k|        }
 1003|  1.79k|        if (raw == OFPRAW_OFPST13_FLOW_REPLY) {
  ------------------
  |  Branch (1003:13): [True: 1.10k, False: 684]
  ------------------
 1004|  1.10k|            error = ofputil_decode_flow_mod_flags(ofs->flags, -1, oh->version,
 1005|  1.10k|                                                  &fs->flags);
 1006|  1.10k|            if (error) {
  ------------------
  |  Branch (1006:17): [True: 763, False: 346]
  ------------------
 1007|    763|                return error;
 1008|    763|            }
 1009|  1.10k|        } else {
 1010|    684|            fs->flags = 0;
 1011|    684|        }
 1012|  1.03k|        fs->idle_age = -1;
 1013|  1.03k|        fs->hard_age = -1;
 1014|  1.03k|        fs->cookie = ofs->cookie;
 1015|  1.03k|        fs->packet_count = ntohll(ofs->packet_count);
 1016|  1.03k|        fs->byte_count = ntohll(ofs->byte_count);
 1017|  3.02k|    } else if (raw == OFPRAW_OFPST10_FLOW_REPLY) {
  ------------------
  |  Branch (1017:16): [True: 1.14k, False: 1.87k]
  ------------------
 1018|  1.14k|        const struct ofp10_flow_stats *ofs;
 1019|  1.14k|        size_t length;
 1020|       |
 1021|  1.14k|        ofs = ofpbuf_try_pull(msg, sizeof *ofs);
 1022|  1.14k|        if (!ofs) {
  ------------------
  |  Branch (1022:13): [True: 91, False: 1.05k]
  ------------------
 1023|     91|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply has %"PRIu32" leftover "
  ------------------
  |  |  224|     91|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     91|    do {                                                                \
  |  |  |  |  288|     91|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     91|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 91]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     91|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 91]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1024|     91|                         "bytes at end", msg->size);
 1025|     91|            return OFPERR_OFPBRC_BAD_LEN;
 1026|     91|        }
 1027|       |
 1028|  1.05k|        length = ntohs(ofs->length);
 1029|  1.05k|        if (length < sizeof *ofs) {
  ------------------
  |  Branch (1029:13): [True: 674, False: 383]
  ------------------
 1030|    674|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply claims invalid "
  ------------------
  |  |  224|    674|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    674|    do {                                                                \
  |  |  |  |  288|    674|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    674|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 674]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    674|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 674]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1031|    674|                         "length %"PRIuSIZE, length);
 1032|    674|            return OFPERR_OFPBRC_BAD_LEN;
 1033|    674|        }
 1034|    383|        instructions_len = length - sizeof *ofs;
 1035|       |
 1036|    383|        fs->cookie = get_32aligned_be64(&ofs->cookie);
 1037|    383|        ofputil_match_from_ofp10_match(&ofs->match, &fs->match);
 1038|    383|        fs->priority = ntohs(ofs->priority);
 1039|    383|        fs->table_id = ofs->table_id;
 1040|    383|        fs->duration_sec = ntohl(ofs->duration_sec);
 1041|    383|        fs->duration_nsec = ntohl(ofs->duration_nsec);
 1042|    383|        fs->idle_timeout = ntohs(ofs->idle_timeout);
 1043|    383|        fs->hard_timeout = ntohs(ofs->hard_timeout);
 1044|    383|        fs->importance = 0;
 1045|    383|        fs->idle_age = -1;
 1046|    383|        fs->hard_age = -1;
 1047|    383|        fs->packet_count = ntohll(get_32aligned_be64(&ofs->packet_count));
 1048|    383|        fs->byte_count = ntohll(get_32aligned_be64(&ofs->byte_count));
 1049|    383|        fs->flags = 0;
 1050|  1.87k|    } else if (raw == OFPRAW_NXST_FLOW_REPLY) {
  ------------------
  |  Branch (1050:16): [True: 1.87k, False: 0]
  ------------------
 1051|  1.87k|        const struct nx_flow_stats *nfs;
 1052|  1.87k|        size_t match_len, length;
 1053|       |
 1054|  1.87k|        nfs = ofpbuf_try_pull(msg, sizeof *nfs);
 1055|  1.87k|        if (!nfs) {
  ------------------
  |  Branch (1055:13): [True: 227, False: 1.65k]
  ------------------
 1056|    227|            VLOG_WARN_RL(&rl, "NXST_FLOW reply has %"PRIu32" leftover "
  ------------------
  |  |  224|    227|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    227|    do {                                                                \
  |  |  |  |  288|    227|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    227|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 227]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    227|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 227]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1057|    227|                         "bytes at end", msg->size);
 1058|    227|            return OFPERR_OFPBRC_BAD_LEN;
 1059|    227|        }
 1060|       |
 1061|  1.65k|        length = ntohs(nfs->length);
 1062|  1.65k|        match_len = ntohs(nfs->match_len);
 1063|  1.65k|        if (length < sizeof *nfs + ROUND_UP(match_len, 8)) {
  ------------------
  |  |  303|  1.65k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|  1.65k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (1063:13): [True: 671, False: 981]
  ------------------
 1064|    671|            VLOG_WARN_RL(&rl, "NXST_FLOW reply with match_len=%"PRIuSIZE" "
  ------------------
  |  |  224|    671|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    671|    do {                                                                \
  |  |  |  |  288|    671|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    671|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 671]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    671|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 671]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1065|    671|                         "claims invalid length %"PRIuSIZE, match_len, length);
 1066|    671|            return OFPERR_OFPBRC_BAD_LEN;
 1067|    671|        }
 1068|    981|        error = nx_pull_match(msg, match_len, &fs->match, NULL, NULL, false,
 1069|    981|                              NULL, NULL);
 1070|    981|        if (error) {
  ------------------
  |  Branch (1070:13): [True: 311, False: 670]
  ------------------
 1071|    311|            return error;
 1072|    311|        }
 1073|    670|        instructions_len = length - sizeof *nfs - ROUND_UP(match_len, 8);
  ------------------
  |  |  303|    670|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|    670|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
 1074|       |
 1075|    670|        fs->cookie = nfs->cookie;
 1076|    670|        fs->table_id = nfs->table_id;
 1077|    670|        fs->duration_sec = ntohl(nfs->duration_sec);
 1078|    670|        fs->duration_nsec = ntohl(nfs->duration_nsec);
 1079|    670|        fs->priority = ntohs(nfs->priority);
 1080|    670|        fs->idle_timeout = ntohs(nfs->idle_timeout);
 1081|    670|        fs->hard_timeout = ntohs(nfs->hard_timeout);
 1082|    670|        fs->importance = 0;
 1083|    670|        fs->idle_age = -1;
 1084|    670|        fs->hard_age = -1;
 1085|    670|        if (flow_age_extension) {
  ------------------
  |  Branch (1085:13): [True: 670, False: 0]
  ------------------
 1086|    670|            if (nfs->idle_age) {
  ------------------
  |  Branch (1086:17): [True: 153, False: 517]
  ------------------
 1087|    153|                fs->idle_age = ntohs(nfs->idle_age) - 1;
 1088|    153|            }
 1089|    670|            if (nfs->hard_age) {
  ------------------
  |  Branch (1089:17): [True: 500, False: 170]
  ------------------
 1090|    500|                fs->hard_age = ntohs(nfs->hard_age) - 1;
 1091|    500|            }
 1092|    670|        }
 1093|    670|        fs->packet_count = ntohll(nfs->packet_count);
 1094|    670|        fs->byte_count = ntohll(nfs->byte_count);
 1095|    670|        fs->flags = 0;
 1096|    670|    } else {
 1097|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1098|      0|    }
 1099|       |
 1100|  6.62k|    error = ofpacts_pull_openflow_instructions(msg, instructions_len,
 1101|  6.62k|                                               oh->version, NULL, NULL,
 1102|  6.62k|                                               ofpacts);
 1103|  6.62k|    if (error) {
  ------------------
  |  Branch (1103:9): [True: 967, False: 5.65k]
  ------------------
 1104|    967|        VLOG_WARN_RL(&rl, "OFPST_FLOW reply bad instructions");
  ------------------
  |  |  224|    967|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    967|    do {                                                                \
  |  |  |  |  288|    967|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    967|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 967]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    967|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 967]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1105|    967|        return error;
 1106|    967|    }
 1107|  5.65k|    fs->ofpacts = ofpacts->data;
 1108|  5.65k|    fs->ofpacts_len = ofpacts->size;
 1109|       |
 1110|  5.65k|    return 0;
 1111|  6.62k|}
ofputil_flow_stats_format:
 1292|  5.65k|{
 1293|  5.65k|    if (show_stats || fs->cookie) {
  ------------------
  |  Branch (1293:9): [True: 5.65k, False: 0]
  |  Branch (1293:23): [True: 0, False: 0]
  ------------------
 1294|  5.65k|        ds_put_format(string, "%scookie=%s0x%"PRIx64", ",
 1295|  5.65k|                      colors.param, colors.end, ntohll(fs->cookie));
 1296|  5.65k|    }
 1297|  5.65k|    if (show_stats) {
  ------------------
  |  Branch (1297:9): [True: 5.65k, False: 0]
  ------------------
 1298|  5.65k|        ds_put_format(string, "%sduration=%s", colors.param, colors.end);
 1299|  5.65k|        ofp_print_duration(string, fs->duration_sec, fs->duration_nsec);
 1300|  5.65k|        ds_put_cstr(string, ", ");
 1301|  5.65k|    }
 1302|       |
 1303|  5.65k|    if (show_stats || fs->table_id
  ------------------
  |  Branch (1303:9): [True: 5.65k, False: 0]
  |  Branch (1303:23): [True: 0, False: 0]
  ------------------
 1304|  5.65k|        || ofputil_table_map_get_name(table_map, fs->table_id) != NULL) {
  ------------------
  |  Branch (1304:12): [True: 0, False: 0]
  ------------------
 1305|  5.65k|        ds_put_format(string, "%stable=%s", colors.special, colors.end);
 1306|  5.65k|        ofputil_format_table(fs->table_id, table_map, string);
 1307|  5.65k|        ds_put_cstr(string, ", ");
 1308|  5.65k|    }
 1309|  5.65k|    if (show_stats) {
  ------------------
  |  Branch (1309:9): [True: 5.65k, False: 0]
  ------------------
 1310|  5.65k|        print_flow_stat(string, "n_packets", fs->packet_count);
 1311|  5.65k|        print_flow_stat(string, "n_bytes", fs->byte_count);
 1312|  5.65k|    }
 1313|  5.65k|    if (fs->idle_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  5.65k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (1313:9): [True: 4.44k, False: 1.20k]
  ------------------
 1314|  4.44k|        ds_put_format(string, "%sidle_timeout=%s%"PRIu16", ",
 1315|  4.44k|                      colors.param, colors.end, fs->idle_timeout);
 1316|  4.44k|    }
 1317|  5.65k|    if (fs->hard_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  5.65k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (1317:9): [True: 4.20k, False: 1.44k]
  ------------------
 1318|  4.20k|        ds_put_format(string, "%shard_timeout=%s%"PRIu16", ",
 1319|  4.20k|                      colors.param, colors.end, fs->hard_timeout);
 1320|  4.20k|    }
 1321|  5.65k|    if (fs->flags) {
  ------------------
  |  Branch (1321:9): [True: 1.90k, False: 3.75k]
  ------------------
 1322|  1.90k|        ofputil_flow_mod_flags_format(string, fs->flags);
 1323|  1.90k|    }
 1324|  5.65k|    if (fs->importance != 0) {
  ------------------
  |  Branch (1324:9): [True: 4.45k, False: 1.20k]
  ------------------
 1325|  4.45k|        ds_put_format(string, "%simportance=%s%"PRIu16", ",
 1326|  4.45k|                      colors.param, colors.end, fs->importance);
 1327|  4.45k|    }
 1328|  5.65k|    if (show_stats && fs->idle_age >= 0) {
  ------------------
  |  Branch (1328:9): [True: 5.65k, False: 0]
  |  Branch (1328:23): [True: 141, False: 5.51k]
  ------------------
 1329|    141|        ds_put_format(string, "%sidle_age=%s%d, ",
 1330|    141|                      colors.param, colors.end, fs->idle_age);
 1331|    141|    }
 1332|  5.65k|    if (show_stats && fs->hard_age >= 0 && fs->hard_age != fs->duration_sec) {
  ------------------
  |  Branch (1332:9): [True: 5.65k, False: 0]
  |  Branch (1332:23): [True: 478, False: 5.17k]
  |  Branch (1332:44): [True: 441, False: 37]
  ------------------
 1333|    441|        ds_put_format(string, "%shard_age=%s%d, ",
 1334|    441|                      colors.param, colors.end, fs->hard_age);
 1335|    441|    }
 1336|       |
 1337|       |    /* Print the match, followed by a space (but omit the space if the match
 1338|       |     * was an empty string). */
 1339|  5.65k|    size_t length = string->length;
 1340|  5.65k|    match_format(&fs->match, port_map, string, fs->priority);
 1341|  5.65k|    if (string->length != length) {
  ------------------
  |  Branch (1341:9): [True: 5.60k, False: 51]
  ------------------
 1342|  5.60k|        ds_put_char(string, ' ');
 1343|  5.60k|    }
 1344|       |
 1345|  5.65k|    ds_put_format(string, "%sactions=%s", colors.actions, colors.end);
 1346|  5.65k|    struct ofpact_format_params fp = {
 1347|  5.65k|        .port_map = port_map,
 1348|  5.65k|        .table_map = table_map,
 1349|  5.65k|        .s = string,
 1350|  5.65k|    };
 1351|  5.65k|    ofpacts_format(fs->ofpacts, fs->ofpacts_len, &fp);
 1352|  5.65k|}
ofputil_decode_aggregate_stats_reply:
 1401|  1.22k|{
 1402|  1.22k|    struct ofpbuf msg = ofpbuf_const_initializer(reply, ntohs(reply->length));
 1403|  1.22k|    enum ofpraw raw;
 1404|       |
 1405|  1.22k|    raw = ofpraw_pull_assert(&msg);
 1406|  1.22k|    if (raw == OFPRAW_OFPST15_AGGREGATE_REPLY) {
  ------------------
  |  Branch (1406:9): [True: 1.19k, False: 34]
  ------------------
 1407|  1.19k|        struct oxs_stats oxs;
 1408|  1.19k|        uint16_t statlen;
 1409|  1.19k|        uint8_t oxs_field_set;
 1410|  1.19k|        enum ofperr error = oxs_pull_stat(&msg, &oxs, &statlen,
 1411|  1.19k|                                          &oxs_field_set);
 1412|  1.19k|        if (error) {
  ------------------
  |  Branch (1412:13): [True: 1.12k, False: 69]
  ------------------
 1413|  1.12k|            return error;
 1414|  1.12k|        }
 1415|     69|        stats->packet_count = oxs.packet_count;
 1416|     69|        stats->byte_count = oxs.byte_count;
 1417|     69|        stats->flow_count = oxs.flow_count;
 1418|     69|    } else {
 1419|     34|        struct ofp_aggregate_stats_reply *asr = msg.msg;
 1420|     34|        stats->packet_count = ntohll(get_32aligned_be64(&asr->packet_count));
 1421|     34|        stats->byte_count = ntohll(get_32aligned_be64(&asr->byte_count));
 1422|     34|        stats->flow_count = ntohl(asr->flow_count);
 1423|     34|    }
 1424|       |
 1425|    103|    return 0;
 1426|  1.22k|}
ofputil_aggregate_stats_format:
 1431|    103|{
 1432|    103|    ds_put_format(s, " packet_count=%"PRIu64, as->packet_count);
 1433|    103|    ds_put_format(s, " byte_count=%"PRIu64, as->byte_count);
 1434|       |    ds_put_format(s, " flow_count=%"PRIu32, as->flow_count);
 1435|    103|}
ofp-flow.c:ofputil_decode_flow_mod_flags:
   63|  39.9k|{
   64|  39.9k|    uint16_t raw_flags = ntohs(raw_flags_);
   65|  39.9k|    const struct ofputil_flow_mod_flag *f;
   66|       |
   67|  39.9k|    *flagsp = 0;
   68|   279k|    for (f = ofputil_flow_mod_flags; f->raw_flag; f++) {
  ------------------
  |  Branch (68:38): [True: 239k, False: 39.9k]
  ------------------
   69|   239k|        if (raw_flags & f->raw_flag
  ------------------
  |  Branch (69:13): [True: 30.6k, False: 208k]
  ------------------
   70|  30.6k|            && version >= f->min_version
  ------------------
  |  Branch (70:16): [True: 30.1k, False: 531]
  ------------------
   71|  30.1k|            && (!f->max_version || version <= f->max_version)) {
  ------------------
  |  Branch (71:17): [True: 24.5k, False: 5.60k]
  |  Branch (71:36): [True: 1.95k, False: 3.64k]
  ------------------
   72|  26.5k|            raw_flags &= ~f->raw_flag;
   73|  26.5k|            *flagsp |= f->flag;
   74|  26.5k|        }
   75|   239k|    }
   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|  39.9k|    if ((version == OFP10_VERSION || version == OFP11_VERSION)
  ------------------
  |  Branch (82:10): [True: 20.8k, False: 19.0k]
  |  Branch (82:38): [True: 1.76k, False: 17.3k]
  ------------------
   83|  22.6k|        && command == OFPFC_ADD) {
  ------------------
  |  Branch (83:12): [True: 16.1k, False: 6.46k]
  ------------------
   84|  16.1k|        *flagsp |= OFPUTIL_FF_RESET_COUNTS;
   85|  16.1k|    }
   86|       |
   87|  39.9k|    return raw_flags ? OFPERR_OFPFMFC_BAD_FLAGS : 0;
  ------------------
  |  Branch (87:12): [True: 2.44k, False: 37.4k]
  ------------------
   88|  39.9k|}
ofp-flow.c:ofputil_decode_ofpst10_flow_request:
  618|  1.08k|{
  619|  1.08k|    fsr->aggregate = aggregate;
  620|  1.08k|    ofputil_match_from_ofp10_match(&ofsr->match, &fsr->match);
  621|  1.08k|    fsr->out_port = u16_to_ofp(ntohs(ofsr->out_port));
  622|  1.08k|    fsr->out_group = OFPG_ANY;
  623|  1.08k|    fsr->table_id = ofsr->table_id;
  624|  1.08k|    fsr->cookie = fsr->cookie_mask = htonll(0);
  625|       |
  626|  1.08k|    return 0;
  627|  1.08k|}
ofp-flow.c:ofputil_decode_ofpst11_flow_request:
  634|  2.28k|{
  635|  2.28k|    const struct ofp11_flow_stats_request *ofsr;
  636|  2.28k|    enum ofperr error;
  637|       |
  638|  2.28k|    ofsr = ofpbuf_pull(b, sizeof *ofsr);
  639|  2.28k|    fsr->aggregate = aggregate;
  640|  2.28k|    fsr->table_id = ofsr->table_id;
  641|  2.28k|    error = ofputil_port_from_ofp11(ofsr->out_port, &fsr->out_port);
  642|  2.28k|    if (error) {
  ------------------
  |  Branch (642:9): [True: 509, False: 1.77k]
  ------------------
  643|    509|        return error;
  644|    509|    }
  645|  1.77k|    fsr->out_group = ntohl(ofsr->out_group);
  646|  1.77k|    fsr->cookie = ofsr->cookie;
  647|  1.77k|    fsr->cookie_mask = ofsr->cookie_mask;
  648|  1.77k|    error = ofputil_pull_ofp11_match(b, tun_table, vl_mff_map, &fsr->match,
  649|  1.77k|                                     NULL);
  650|  1.77k|    if (error) {
  ------------------
  |  Branch (650:9): [True: 1.71k, False: 62]
  ------------------
  651|  1.71k|        return error;
  652|  1.71k|    }
  653|       |
  654|     62|    return 0;
  655|  1.77k|}
ofp-flow.c:ofputil_decode_nxst_flow_request:
  662|    774|{
  663|    774|    const struct nx_flow_stats_request *nfsr;
  664|    774|    enum ofperr error;
  665|       |
  666|    774|    nfsr = ofpbuf_pull(b, sizeof *nfsr);
  667|    774|    error = nx_pull_match(b, ntohs(nfsr->match_len), &fsr->match,
  668|    774|                          &fsr->cookie, &fsr->cookie_mask, false, tun_table,
  669|    774|                          vl_mff_map);
  670|    774|    if (error) {
  ------------------
  |  Branch (670:9): [True: 613, False: 161]
  ------------------
  671|    613|        return error;
  672|    613|    }
  673|    161|    if (b->size) {
  ------------------
  |  Branch (673:9): [True: 67, False: 94]
  ------------------
  674|     67|        return OFPERR_OFPBRC_BAD_LEN;
  675|     67|    }
  676|       |
  677|     94|    fsr->aggregate = aggregate;
  678|     94|    fsr->out_port = u16_to_ofp(ntohs(nfsr->out_port));
  679|     94|    fsr->out_group = OFPG_ANY;
  680|     94|    fsr->table_id = nfsr->table_id;
  681|       |
  682|     94|    return 0;
  683|    161|}
ofp-flow.c:print_flow_stat:
 1272|  11.3k|{
 1273|  11.3k|    ds_put_format(string, "%s%s=%s", colors.param, leader, colors.end);
 1274|  11.3k|    if (stat != UINT64_MAX) {
  ------------------
  |  Branch (1274:9): [True: 2.37k, False: 8.92k]
  ------------------
 1275|  2.37k|        ds_put_format(string, "%"PRIu64, stat);
 1276|  8.92k|    } else {
 1277|  8.92k|        ds_put_char(string, '?');
 1278|  8.92k|    }
 1279|  11.3k|    ds_put_cstr(string, ", ");
 1280|  11.3k|}

ofputil_format_group:
   66|  1.27k|{
   67|  1.27k|    char name[MAX_GROUP_NAME_LEN + 1];
   68|       |
   69|  1.27k|    ofputil_group_to_string(group_id, name, sizeof name);
   70|  1.27k|    ds_put_cstr(s, name);
   71|  1.27k|}
ofputil_group_to_string:
   81|  1.27k|{
   82|  1.27k|    switch (group_id) {
   83|    375|    case OFPG_ALL:
  ------------------
  |  Branch (83:5): [True: 375, False: 897]
  ------------------
   84|    375|        ovs_strlcpy(namebuf, "ALL", bufsize);
   85|    375|        break;
   86|       |
   87|     55|    case OFPG_ANY:
  ------------------
  |  Branch (87:5): [True: 55, False: 1.21k]
  ------------------
   88|     55|        ovs_strlcpy(namebuf, "ANY", bufsize);
   89|     55|        break;
   90|       |
   91|    842|    default:
  ------------------
  |  Branch (91:5): [True: 842, False: 430]
  ------------------
   92|       |        snprintf(namebuf, bufsize, "%"PRIu32, group_id);
   93|    842|        break;
   94|  1.27k|    }
   95|  1.27k|}
ofputil_bucket_list_destroy:
  100|  26.9k|{
  101|  26.9k|    struct ofputil_bucket *bucket;
  102|       |
  103|  26.9k|    LIST_FOR_EACH_POP (bucket, list_node, buckets) {
  ------------------
  |  |  140|  36.6k|    while (!ovs_list_is_empty(LIST) ?                                         \
  |  |  ------------------
  |  |  |  Branch (140:12): [True: 9.63k, False: 26.9k]
  |  |  |  Branch (140:12): [True: 9.63k, False: 26.9k]
  |  |  ------------------
  |  |  141|  36.6k|           (INIT_CONTAINER(ITER, ovs_list_pop_front(LIST), MEMBER), 1) :      \
  |  |  ------------------
  |  |  |  |  150|  9.63k|    ((OBJECT) = NULL, ASSIGN_CONTAINER(OBJECT, POINTER, MEMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  |  143|  9.63k|    ((OBJECT) = OBJECT_CONTAINING(POINTER, OBJECT, MEMBER), (void) 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  134|  9.63k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  |  |  135|  9.63k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  108|  9.63k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  142|  36.6k|           (ITER = NULL, 0))
  ------------------
  104|  9.63k|        free(bucket->ofpacts);
  105|  9.63k|        free(bucket);
  106|  9.63k|    }
  107|  26.9k|}
ofputil_bucket_check_duplicate_id:
  169|  9.67k|{
  170|  9.67k|    struct ofputil_bucket *i, *j;
  171|       |
  172|  9.67k|    LIST_FOR_EACH (i, list_node, buckets) {
  ------------------
  |  |   76|  9.67k|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->next, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  171|  9.67k|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|  9.67k|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|  14.5k|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  185|  14.5k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 4.93k, False: 9.57k]
  |  |  |  |  |  Branch (185:6): [True: 4.93k, False: 9.57k]
  |  |  |  |  ------------------
  |  |  |  |  186|  14.5k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  4.93k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|  4.93k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|  4.93k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  14.5k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   78|  9.67k|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->next))
  |  |  ------------------
  |  |  |  |  193|  4.84k|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  4.84k|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  173|  7.61k|        LIST_FOR_EACH_REVERSE (j, list_node, buckets) {
  ------------------
  |  |   86|  4.93k|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->prev, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  171|  4.93k|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|  4.93k|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   87|  7.61k|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  185|  7.61k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 7.61k, False: 0]
  |  |  |  |  |  Branch (185:6): [True: 7.61k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  186|  7.61k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  7.61k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|  7.61k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|  7.61k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  7.61k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   88|  4.93k|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->prev))
  |  |  ------------------
  |  |  |  |  193|  2.68k|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  2.68k|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  174|  7.61k|            if (i == j) {
  ------------------
  |  Branch (174:17): [True: 4.84k, False: 2.77k]
  ------------------
  175|  4.84k|                break;
  176|  4.84k|            }
  177|  2.77k|            if (i->bucket_id == j->bucket_id) {
  ------------------
  |  Branch (177:17): [True: 95, False: 2.68k]
  ------------------
  178|     95|                return true;
  179|     95|            }
  180|  2.77k|        }
  181|  4.93k|    }
  182|       |
  183|  9.57k|    return false;
  184|  9.67k|}
ofputil_uninit_group_desc:
  231|    879|{
  232|    879|    ofputil_bucket_list_destroy(&gd->buckets);
  233|    879|    ofputil_group_properties_destroy(&gd->props);
  234|    879|}
ofputil_decode_group_desc_request:
  241|    417|{
  242|    417|    struct ofpbuf request = ofpbuf_const_initializer(oh, ntohs(oh->length));
  243|    417|    enum ofpraw raw = ofpraw_pull_assert(&request);
  244|    417|    if (raw == OFPRAW_OFPST11_GROUP_DESC_REQUEST) {
  ------------------
  |  Branch (244:9): [True: 109, False: 308]
  ------------------
  245|    109|        return OFPG_ALL;
  246|    308|    } else if (raw == OFPRAW_NXST_GROUP_DESC_REQUEST ||
  ------------------
  |  Branch (246:16): [True: 72, False: 236]
  ------------------
  247|    308|               raw == OFPRAW_OFPST15_GROUP_DESC_REQUEST) {
  ------------------
  |  Branch (247:16): [True: 236, False: 0]
  ------------------
  248|    308|        ovs_be32 *group_id = ofpbuf_pull(&request, sizeof *group_id);
  249|    308|        return ntohl(*group_id);
  250|    308|    } else {
  251|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  252|      0|    }
  253|    417|}
ofputil_group_desc_request_format:
  298|    417|{
  299|    417|    uint32_t group_id = ofputil_decode_group_desc_request(oh);
  300|    417|    ds_put_cstr(string, " group_id=");
  301|    417|    ofputil_format_group(group_id, string);
  302|       |
  303|    417|    return 0;
  304|    417|}
ofputil_decode_group_features_reply:
  422|    508|{
  423|    508|    const struct ofp12_group_features_stats *ogf = ofpmsg_body(oh);
  424|    508|    int i;
  425|       |
  426|    508|    features->types = ntohl(ogf->types);
  427|    508|    features->capabilities = ntohl(ogf->capabilities);
  428|  2.54k|    for (i = 0; i < OFPGT12_N_TYPES; i++) {
  ------------------
  |  |  151|  2.54k|#define OFPGT12_N_TYPES 4
  ------------------
  |  Branch (428:17): [True: 2.03k, False: 508]
  ------------------
  429|       |        features->max_groups[i] = ntohl(ogf->max_groups[i]);
  430|  2.03k|        features->ofpacts[i] = ofpact_bitmap_from_openflow(
  431|  2.03k|            ogf->actions[i], oh->version);
  432|  2.03k|    }
  433|    508|}
ofputil_group_features_format:
  449|    508|{
  450|    508|    struct ofputil_group_features features;
  451|    508|    int i;
  452|       |
  453|    508|    ofputil_decode_group_features_reply(oh, &features);
  454|       |
  455|    508|    ds_put_format(string, "\n Group table:\n");
  456|    508|    ds_put_format(string, "    Types:  0x%"PRIx32"\n", features.types);
  457|    508|    ds_put_format(string, "    Capabilities:  0x%"PRIx32"\n",
  458|    508|                  features.capabilities);
  459|       |
  460|  2.54k|    for (i = 0; i < OFPGT12_N_TYPES; i++) {
  ------------------
  |  |  151|  2.54k|#define OFPGT12_N_TYPES 4
  ------------------
  |  Branch (460:17): [True: 2.03k, False: 508]
  ------------------
  461|  2.03k|        if (features.types & (1u << i)) {
  ------------------
  |  Branch (461:13): [True: 1.57k, False: 453]
  ------------------
  462|  1.57k|            ds_put_format(string, "    %s group:\n", group_type_to_string(i));
  463|  1.57k|            ds_put_format(string, "       max_groups=%#"PRIx32"\n",
  464|  1.57k|                          features.max_groups[i]);
  465|  1.57k|            ds_put_format(string, "       actions: ");
  466|  1.57k|            ofpact_bitmap_format(features.ofpacts[i], string);
  467|  1.57k|            ds_put_char(string, '\n');
  468|  1.57k|        }
  469|  2.03k|    }
  470|       |
  471|    508|    return 0;
  472|    508|}
ofputil_decode_group_stats_request:
  480|    855|{
  481|    855|    const struct ofp11_group_stats_request *gsr11 = ofpmsg_body(request);
  482|       |    *group_id = ntohl(gsr11->group_id);
  483|    855|    return 0;
  484|    855|}
ofputil_decode_group_stats_reply:
  500|  4.32k|{
  501|  4.32k|    struct ofp11_bucket_counter *obc;
  502|  4.32k|    struct ofp11_group_stats *ogs11;
  503|  4.32k|    enum ofpraw raw;
  504|  4.32k|    enum ofperr error;
  505|  4.32k|    size_t base_len;
  506|  4.32k|    size_t length;
  507|  4.32k|    size_t i;
  508|       |
  509|  4.32k|    gs->bucket_stats = NULL;
  510|  4.32k|    error = (msg->header ? ofpraw_decode(&raw, msg->header)
  ------------------
  |  Branch (510:14): [True: 2.58k, False: 1.74k]
  ------------------
  511|  4.32k|             : ofpraw_pull(&raw, msg));
  512|  4.32k|    if (error) {
  ------------------
  |  Branch (512:9): [True: 0, False: 4.32k]
  ------------------
  513|      0|        return error;
  514|      0|    }
  515|       |
  516|  4.32k|    if (!msg->size) {
  ------------------
  |  Branch (516:9): [True: 293, False: 4.03k]
  ------------------
  517|    293|        return EOF;
  518|    293|    }
  519|       |
  520|  4.03k|    if (raw == OFPRAW_OFPST11_GROUP_REPLY) {
  ------------------
  |  Branch (520:9): [True: 1.02k, False: 3.01k]
  ------------------
  521|  1.02k|        base_len = sizeof *ogs11;
  522|  1.02k|        ogs11 = ofpbuf_try_pull(msg, sizeof *ogs11);
  523|  1.02k|        gs->duration_sec = gs->duration_nsec = UINT32_MAX;
  524|  3.01k|    } else if (raw == OFPRAW_NXST_GROUP_REPLY ||
  ------------------
  |  Branch (524:16): [True: 1.64k, False: 1.36k]
  ------------------
  525|  3.01k|               raw == OFPRAW_OFPST13_GROUP_REPLY) {
  ------------------
  |  Branch (525:16): [True: 1.36k, False: 0]
  ------------------
  526|  3.01k|        struct ofp13_group_stats *ogs13;
  527|       |
  528|  3.01k|        base_len = sizeof *ogs13;
  529|  3.01k|        ogs13 = ofpbuf_try_pull(msg, sizeof *ogs13);
  530|  3.01k|        if (ogs13) {
  ------------------
  |  Branch (530:13): [True: 2.61k, False: 396]
  ------------------
  531|  2.61k|            ogs11 = &ogs13->gs;
  532|  2.61k|            gs->duration_sec = ntohl(ogs13->duration_sec);
  533|  2.61k|            gs->duration_nsec = ntohl(ogs13->duration_nsec);
  534|  2.61k|        } else {
  535|    396|            ogs11 = NULL;
  536|    396|        }
  537|  3.01k|    } else {
  538|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  539|      0|    }
  540|       |
  541|  4.03k|    if (!ogs11) {
  ------------------
  |  Branch (541:9): [True: 466, False: 3.56k]
  ------------------
  542|    466|        VLOG_WARN_RL(&rl, "%s reply has %"PRIu32" leftover bytes at end",
  ------------------
  |  |  224|    466|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    466|    do {                                                                \
  |  |  |  |  288|    466|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    466|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 466]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    466|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 466]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|    466|                     ofpraw_get_name(raw), msg->size);
  544|    466|        return OFPERR_OFPBRC_BAD_LEN;
  545|    466|    }
  546|  3.56k|    length = ntohs(ogs11->length);
  547|  3.56k|    if (length < sizeof base_len) {
  ------------------
  |  Branch (547:9): [True: 99, False: 3.46k]
  ------------------
  548|     99|        VLOG_WARN_RL(&rl, "%s reply claims invalid length %"PRIuSIZE,
  ------------------
  |  |  224|     99|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     99|    do {                                                                \
  |  |  |  |  288|     99|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     99|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 99]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     99|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 99]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  549|     99|                     ofpraw_get_name(raw), length);
  550|     99|        return OFPERR_OFPBRC_BAD_LEN;
  551|     99|    }
  552|       |
  553|  3.46k|    gs->group_id = ntohl(ogs11->group_id);
  554|  3.46k|    gs->ref_count = ntohl(ogs11->ref_count);
  555|  3.46k|    gs->packet_count = ntohll(ogs11->packet_count);
  556|  3.46k|    gs->byte_count = ntohll(ogs11->byte_count);
  557|       |
  558|  3.46k|    gs->n_buckets = (length - base_len) / sizeof *obc;
  559|  3.46k|    obc = ofpbuf_try_pull(msg, gs->n_buckets * sizeof *obc);
  560|  3.46k|    if (!obc) {
  ------------------
  |  Branch (560:9): [True: 887, False: 2.58k]
  ------------------
  561|    887|        VLOG_WARN_RL(&rl, "%s reply has %"PRIu32" leftover bytes at end",
  ------------------
  |  |  224|    887|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    887|    do {                                                                \
  |  |  |  |  288|    887|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    887|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 887]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    887|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 887]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  562|    887|                     ofpraw_get_name(raw), msg->size);
  563|    887|        return OFPERR_OFPBRC_BAD_LEN;
  564|    887|    }
  565|       |
  566|  2.58k|    gs->bucket_stats = xmalloc(gs->n_buckets * sizeof *gs->bucket_stats);
  567|  35.6k|    for (i = 0; i < gs->n_buckets; i++) {
  ------------------
  |  Branch (567:17): [True: 33.0k, False: 2.58k]
  ------------------
  568|  33.0k|        gs->bucket_stats[i].packet_count = ntohll(obc[i].packet_count);
  569|  33.0k|        gs->bucket_stats[i].byte_count = ntohll(obc[i].byte_count);
  570|  33.0k|    }
  571|       |
  572|  2.58k|    return 0;
  573|  3.46k|}
ofputil_group_stats_request_format:
  579|    855|{
  580|    855|    enum ofperr error;
  581|    855|    uint32_t group_id;
  582|       |
  583|    855|    error = ofputil_decode_group_stats_request(oh, &group_id);
  584|    855|    if (error) {
  ------------------
  |  Branch (584:9): [True: 0, False: 855]
  ------------------
  585|      0|        return error;
  586|      0|    }
  587|       |
  588|    855|    ds_put_cstr(string, " group_id=");
  589|    855|    ofputil_format_group(group_id, string);
  590|    855|    return 0;
  591|    855|}
ofputil_group_stats_format:
  595|  1.74k|{
  596|  1.74k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  597|  4.32k|    for (;;) {
  598|  4.32k|        struct ofputil_group_stats gs;
  599|  4.32k|        int retval;
  600|       |
  601|  4.32k|        retval = ofputil_decode_group_stats_reply(&b, &gs);
  602|  4.32k|        if (retval) {
  ------------------
  |  Branch (602:13): [True: 1.74k, False: 2.58k]
  ------------------
  603|  1.74k|            if (retval != EOF) {
  ------------------
  |  Branch (603:17): [True: 1.45k, False: 293]
  ------------------
  604|  1.45k|                ds_put_cstr(s, " ***parse error***");
  605|  1.45k|                return retval;
  606|  1.45k|            }
  607|    293|            break;
  608|  1.74k|        }
  609|       |
  610|  2.58k|        ds_put_char(s, '\n');
  611|       |
  612|  2.58k|        ds_put_char(s, ' ');
  613|  2.58k|        ds_put_format(s, "group_id=%"PRIu32",", gs.group_id);
  614|       |
  615|  2.58k|        if (gs.duration_sec != UINT32_MAX) {
  ------------------
  |  Branch (615:13): [True: 1.95k, False: 623]
  ------------------
  616|  1.95k|            ds_put_cstr(s, "duration=");
  617|  1.95k|            ofp_print_duration(s, gs.duration_sec, gs.duration_nsec);
  618|  1.95k|            ds_put_char(s, ',');
  619|  1.95k|        }
  620|  2.58k|        ds_put_format(s, "ref_count=%"PRIu32",", gs.ref_count);
  621|  2.58k|        ds_put_format(s, "packet_count=%"PRIu64",", gs.packet_count);
  622|  2.58k|        ds_put_format(s, "byte_count=%"PRIu64"", gs.byte_count);
  623|       |
  624|  35.6k|        for (uint32_t bucket_i = 0; bucket_i < gs.n_buckets; bucket_i++) {
  ------------------
  |  Branch (624:37): [True: 33.0k, False: 2.58k]
  ------------------
  625|  33.0k|            if (gs.bucket_stats[bucket_i].packet_count != UINT64_MAX) {
  ------------------
  |  Branch (625:17): [True: 32.4k, False: 629]
  ------------------
  626|  32.4k|                ds_put_format(s, ",bucket%"PRIu32":", bucket_i);
  627|  32.4k|                ds_put_format(s, "packet_count=%"PRIu64",", gs.bucket_stats[bucket_i].packet_count);
  628|  32.4k|                ds_put_format(s, "byte_count=%"PRIu64"", gs.bucket_stats[bucket_i].byte_count);
  629|  32.4k|            }
  630|  33.0k|        }
  631|       |
  632|  2.58k|        free(gs.bucket_stats);
  633|  2.58k|    }
  634|    293|    return 0;
  635|  1.74k|}
ofputil_group_properties_destroy:
 1525|  17.4k|{
 1526|  17.4k|    free(gp->fields.values);
 1527|  17.4k|}
ofputil_group_properties_format:
 1532|  10.1k|{
 1533|  10.1k|    if (!gp->selection_method[0]) {
  ------------------
  |  Branch (1533:9): [True: 7.46k, False: 2.71k]
  ------------------
 1534|  7.46k|        return;
 1535|  7.46k|    }
 1536|       |
 1537|  2.71k|    ds_put_format(ds, ",selection_method=%s", gp->selection_method);
 1538|  2.71k|    if (gp->selection_method_param) {
  ------------------
  |  Branch (1538:9): [True: 2.62k, False: 93]
  ------------------
 1539|  2.62k|        ds_put_format(ds, ",selection_method_param=%"PRIu64,
 1540|  2.62k|                      gp->selection_method_param);
 1541|  2.62k|    }
 1542|       |
 1543|  2.71k|    size_t n = bitmap_count1(gp->fields.used.bm, MFF_N_IDS);
 1544|  2.71k|    if (n == 1) {
  ------------------
  |  Branch (1544:9): [True: 112, False: 2.60k]
  ------------------
 1545|    112|        ds_put_cstr(ds, ",fields=");
 1546|    112|        oxm_format_field_array(ds, &gp->fields);
 1547|  2.60k|    } else if (n > 1) {
  ------------------
  |  Branch (1547:16): [True: 2.27k, False: 324]
  ------------------
 1548|  2.27k|        ds_put_cstr(ds, ",fields(");
 1549|  2.27k|        oxm_format_field_array(ds, &gp->fields);
 1550|  2.27k|        ds_put_char(ds, ')');
 1551|  2.27k|    }
 1552|  2.71k|}
ofputil_decode_group_desc_reply:
 1793|  3.33k|{
 1794|  3.33k|    ofputil_init_group_properties(&gd->props);
 1795|       |
 1796|  3.33k|    switch (version)
 1797|  3.33k|    {
 1798|    247|    case OFP11_VERSION:
  ------------------
  |  Branch (1798:5): [True: 247, False: 3.08k]
  ------------------
 1799|  1.13k|    case OFP12_VERSION:
  ------------------
  |  Branch (1799:5): [True: 892, False: 2.43k]
  ------------------
 1800|  1.19k|    case OFP13_VERSION:
  ------------------
  |  Branch (1800:5): [True: 52, False: 3.27k]
  ------------------
 1801|  1.39k|    case OFP14_VERSION:
  ------------------
  |  Branch (1801:5): [True: 200, False: 3.13k]
  ------------------
 1802|  1.39k|        return ofputil_decode_ofp11_group_desc_reply(gd, msg, version);
 1803|       |
 1804|  1.48k|    case OFP10_VERSION:
  ------------------
  |  Branch (1804:5): [True: 1.48k, False: 1.84k]
  ------------------
 1805|  1.93k|    case OFP15_VERSION:
  ------------------
  |  Branch (1805:5): [True: 458, False: 2.87k]
  ------------------
 1806|  1.93k|        return ofputil_decode_ofp15_group_desc_reply(gd, msg, version);
 1807|       |
 1808|      0|    default:
  ------------------
  |  Branch (1808:5): [True: 0, False: 3.33k]
  ------------------
 1809|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1810|  3.33k|    }
 1811|  3.33k|}
ofputil_bucket_format:
 1846|  4.16k|{
 1847|  4.16k|    ds_put_cstr(s, "bucket=");
 1848|       |
 1849|  4.16k|    ofp_print_bucket_id(s, "bucket_id:", bucket->bucket_id, ofp_version);
 1850|  4.16k|    if (bucket->weight != (type == OFPGT11_SELECT ? 1 : 0)) {
  ------------------
  |  Branch (1850:9): [True: 1.07k, False: 3.09k]
  |  Branch (1850:28): [True: 984, False: 3.18k]
  ------------------
 1851|  1.07k|        ds_put_format(s, "weight:%"PRIu16",", bucket->weight);
 1852|  1.07k|    }
 1853|  4.16k|    if (bucket->watch_port != OFPP_NONE) {
  ------------------
  |  |   47|  4.16k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|  4.16k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1853:9): [True: 690, False: 3.47k]
  ------------------
 1854|    690|        ds_put_cstr(s, "watch_port:");
 1855|    690|        ofputil_format_port(bucket->watch_port, port_map, s);
 1856|    690|        ds_put_char(s, ',');
 1857|    690|    }
 1858|  4.16k|    if (bucket->watch_group != OFPG_ANY) {
  ------------------
  |  Branch (1858:9): [True: 1.18k, False: 2.98k]
  ------------------
 1859|  1.18k|        ds_put_format(s, "watch_group:%"PRIu32",", bucket->watch_group);
 1860|  1.18k|    }
 1861|       |
 1862|  4.16k|    ds_put_cstr(s, "actions=");
 1863|  4.16k|    struct ofpact_format_params fp = {
 1864|  4.16k|        .port_map = port_map,
 1865|  4.16k|        .table_map = table_map,
 1866|  4.16k|        .s = s,
 1867|  4.16k|    };
 1868|  4.16k|    ofpacts_format(bucket->ofpacts, bucket->ofpacts_len, &fp);
 1869|  4.16k|}
ofputil_group_format:
 1879|  10.1k|{
 1880|  10.1k|    ds_put_format(s, "group_id=%"PRIu32, group_id);
 1881|       |
 1882|  10.1k|    if (!suppress_type) {
  ------------------
  |  Branch (1882:9): [True: 7.49k, False: 2.68k]
  ------------------
 1883|  7.49k|        static const char *type_str[] = { "all", "select", "indirect",
 1884|  7.49k|                                          "ff", "unknown" };
 1885|  7.49k|        ds_put_format(s, ",type=%s", type_str[type > 4 ? 4 : type]);
  ------------------
  |  Branch (1885:47): [True: 500, False: 6.99k]
  ------------------
 1886|  7.49k|    }
 1887|       |
 1888|  10.1k|    ofputil_group_properties_format(props, s);
 1889|       |
 1890|  10.1k|    if (!bucket && !p_buckets) {
  ------------------
  |  Branch (1890:9): [True: 10.1k, False: 0]
  |  Branch (1890:20): [True: 0, False: 10.1k]
  ------------------
 1891|      0|        return;
 1892|      0|    }
 1893|       |
 1894|  10.1k|    ds_put_char(s, ',');
 1895|       |
 1896|  10.1k|    if (bucket) {
  ------------------
  |  Branch (1896:9): [True: 0, False: 10.1k]
  ------------------
 1897|      0|        ofputil_bucket_format(s, bucket, type, ofp_version, NULL, NULL);
 1898|  10.1k|    } else {
 1899|  10.1k|        LIST_FOR_EACH (bucket, list_node, p_buckets) {
  ------------------
  |  |   76|  10.1k|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->next, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  171|  10.1k|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|  10.1k|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|  14.3k|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  185|  14.3k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 4.16k, False: 10.1k]
  |  |  |  |  |  Branch (185:6): [True: 4.16k, False: 10.1k]
  |  |  |  |  ------------------
  |  |  |  |  186|  14.3k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  4.16k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|  4.16k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|  4.16k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  14.3k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   78|  10.1k|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->next))
  |  |  ------------------
  |  |  |  |  193|  4.16k|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  4.16k|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1900|  4.16k|            ofputil_bucket_format(s, bucket, type, ofp_version,
 1901|  4.16k|                                port_map, table_map);
 1902|  4.16k|            ds_put_char(s, ',');
 1903|  4.16k|        }
 1904|  10.1k|        ds_chomp(s, ',');
 1905|  10.1k|    }
 1906|  10.1k|}
ofputil_group_desc_format:
 1912|  2.63k|{
 1913|  2.63k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
 1914|  3.33k|    for (;;) {
 1915|  3.33k|        struct ofputil_group_desc gd;
 1916|  3.33k|        int retval;
 1917|       |
 1918|  3.33k|        retval = ofputil_decode_group_desc_reply(&gd, &b, oh->version);
 1919|  3.33k|        if (retval) {
  ------------------
  |  Branch (1919:13): [True: 2.63k, False: 694]
  ------------------
 1920|  2.63k|            return retval != EOF ? retval : 0;
  ------------------
  |  Branch (1920:20): [True: 2.06k, False: 567]
  ------------------
 1921|  2.63k|        }
 1922|       |
 1923|    694|        ds_put_char(s, '\n');
 1924|    694|        ds_put_char(s, ' ');
 1925|    694|        ofputil_group_format(s, gd.group_id, gd.type, NULL, &gd.buckets,
 1926|       |                             &gd.props, oh->version, false,
 1927|    694|                             port_map, table_map);
 1928|    694|        ofputil_uninit_group_desc(&gd);
 1929|    694|     }
 1930|  2.63k|}
ofputil_uninit_group_mod:
 1934|  16.5k|{
 1935|  16.5k|    ofputil_bucket_list_destroy(&gm->buckets);
 1936|  16.5k|    ofputil_group_properties_destroy(&gm->props);
 1937|  16.5k|}
ofputil_decode_group_mod:
 2310|  27.7k|{
 2311|  27.7k|    ofputil_init_group_properties(&gm->props);
 2312|       |
 2313|  27.7k|    enum ofp_version ofp_version = oh->version;
 2314|  27.7k|    struct ofpbuf msg = ofpbuf_const_initializer(oh, ntohs(oh->length));
 2315|  27.7k|    ofpraw_pull_assert(&msg);
 2316|       |
 2317|  27.7k|    enum ofperr err;
 2318|  27.7k|    switch (ofp_version) {
 2319|  3.39k|    case OFP11_VERSION:
  ------------------
  |  Branch (2319:5): [True: 3.39k, False: 24.3k]
  ------------------
 2320|  4.80k|    case OFP12_VERSION:
  ------------------
  |  Branch (2320:5): [True: 1.41k, False: 26.3k]
  ------------------
 2321|  5.86k|    case OFP13_VERSION:
  ------------------
  |  Branch (2321:5): [True: 1.06k, False: 26.7k]
  ------------------
 2322|  9.92k|    case OFP14_VERSION:
  ------------------
  |  Branch (2322:5): [True: 4.06k, False: 23.6k]
  ------------------
 2323|  9.92k|        err = ofputil_pull_ofp11_group_mod(&msg, ofp_version, gm);
 2324|  9.92k|        break;
 2325|       |
 2326|     64|    case OFP10_VERSION:
  ------------------
  |  Branch (2326:5): [True: 64, False: 27.6k]
  ------------------
 2327|  17.8k|    case OFP15_VERSION:
  ------------------
  |  Branch (2327:5): [True: 17.7k, False: 9.99k]
  ------------------
 2328|  17.8k|        err = ofputil_pull_ofp15_group_mod(&msg, ofp_version, gm);
 2329|  17.8k|        break;
 2330|       |
 2331|      0|    default:
  ------------------
  |  Branch (2331:5): [True: 0, False: 27.7k]
  ------------------
 2332|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 2333|  27.7k|    }
 2334|  27.7k|    if (err) {
  ------------------
  |  Branch (2334:9): [True: 14.3k, False: 13.4k]
  ------------------
 2335|  14.3k|        return err;
 2336|  14.3k|    }
 2337|       |
 2338|  13.4k|    err = ofputil_check_group_mod(gm);
 2339|  13.4k|    if (err) {
  ------------------
  |  Branch (2339:9): [True: 3.97k, False: 9.48k]
  ------------------
 2340|  3.97k|        ofputil_uninit_group_mod(gm);
 2341|  3.97k|    }
 2342|  13.4k|    return err;
 2343|  27.7k|}
ofputil_group_mod_format__:
 2350|  9.48k|{
 2351|  9.48k|    bool bucket_command = false;
 2352|       |
 2353|  9.48k|    ds_put_char(s, '\n');
 2354|       |
 2355|  9.48k|    ds_put_char(s, ' ');
 2356|  9.48k|    switch (gm->command) {
 2357|  3.98k|    case OFPGC11_ADD:
  ------------------
  |  Branch (2357:5): [True: 3.98k, False: 5.49k]
  ------------------
 2358|  3.98k|        ds_put_cstr(s, "ADD");
 2359|  3.98k|        break;
 2360|       |
 2361|  1.70k|    case OFPGC11_MODIFY:
  ------------------
  |  Branch (2361:5): [True: 1.70k, False: 7.78k]
  ------------------
 2362|  1.70k|        ds_put_cstr(s, "MOD");
 2363|  1.70k|        break;
 2364|       |
 2365|    437|    case OFPGC11_ADD_OR_MOD:
  ------------------
  |  Branch (2365:5): [True: 437, False: 9.05k]
  ------------------
 2366|    437|        ds_put_cstr(s, "ADD_OR_MOD");
 2367|    437|        break;
 2368|       |
 2369|    669|    case OFPGC11_DELETE:
  ------------------
  |  Branch (2369:5): [True: 669, False: 8.81k]
  ------------------
 2370|    669|        ds_put_cstr(s, "DEL");
 2371|    669|        break;
 2372|       |
 2373|  2.00k|    case OFPGC15_INSERT_BUCKET:
  ------------------
  |  Branch (2373:5): [True: 2.00k, False: 7.48k]
  ------------------
 2374|  2.00k|        ds_put_cstr(s, "INSERT_BUCKET");
 2375|  2.00k|        bucket_command = true;
 2376|  2.00k|        break;
 2377|       |
 2378|    686|    case OFPGC15_REMOVE_BUCKET:
  ------------------
  |  Branch (2378:5): [True: 686, False: 8.80k]
  ------------------
 2379|    686|        ds_put_cstr(s, "REMOVE_BUCKET");
 2380|    686|        bucket_command = true;
 2381|    686|        break;
 2382|       |
 2383|      0|    default:
  ------------------
  |  Branch (2383:5): [True: 0, False: 9.48k]
  ------------------
 2384|      0|        ds_put_format(s, "cmd:%"PRIu16"", gm->command);
 2385|  9.48k|    }
 2386|  9.48k|    ds_put_char(s, ' ');
 2387|       |
 2388|  9.48k|    if (bucket_command) {
  ------------------
  |  Branch (2388:9): [True: 2.68k, False: 6.80k]
  ------------------
 2389|  2.68k|        ofp_print_bucket_id(s, "command_bucket_id:",
 2390|  2.68k|                            gm->command_bucket_id, ofp_version);
 2391|  2.68k|    }
 2392|       |
 2393|       |    ofputil_group_format(s, gm->group_id, gm->type, NULL, &gm->buckets,
 2394|  9.48k|                         &gm->props, ofp_version, bucket_command,
 2395|  9.48k|                         port_map, table_map);
 2396|  9.48k|}
ofputil_group_mod_format:
 2402|  27.0k|{
 2403|  27.0k|    struct ofputil_group_mod gm;
 2404|  27.0k|    int error;
 2405|       |
 2406|  27.0k|    error = ofputil_decode_group_mod(oh, &gm);
 2407|  27.0k|    if (error) {
  ------------------
  |  Branch (2407:9): [True: 18.0k, False: 9.02k]
  ------------------
 2408|  18.0k|        return error;
 2409|  18.0k|    }
 2410|  9.02k|    ofputil_group_mod_format__(s, oh->version, &gm, port_map, table_map);
 2411|  9.02k|    ofputil_uninit_group_mod(&gm);
 2412|  9.02k|    return 0;
 2413|  27.0k|}
ofp-group.c:group_type_to_string:
  437|  1.57k|{
  438|  1.57k|    switch (type) {
  439|    499|    case OFPGT11_ALL: return "all";
  ------------------
  |  Branch (439:5): [True: 499, False: 1.08k]
  ------------------
  440|    472|    case OFPGT11_SELECT: return "select";
  ------------------
  |  Branch (440:5): [True: 472, False: 1.10k]
  ------------------
  441|    469|    case OFPGT11_INDIRECT: return "indirect";
  ------------------
  |  Branch (441:5): [True: 469, False: 1.11k]
  ------------------
  442|    139|    case OFPGT11_FF: return "fast failover";
  ------------------
  |  Branch (442:5): [True: 139, False: 1.44k]
  ------------------
  443|      0|    default: OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  |  Branch (443:5): [True: 0, False: 1.57k]
  ------------------
  444|  1.57k|    }
  445|  1.57k|}
ofp-group.c:ofputil_init_group_properties:
 1511|  31.0k|{
 1512|  31.0k|    memset(gp, 0, sizeof *gp);
 1513|  31.0k|}
ofp-group.c:ofputil_decode_ofp11_group_desc_reply:
 1686|  1.39k|{
 1687|  1.39k|    struct ofp11_group_desc_stats *ogds;
 1688|  1.39k|    size_t length;
 1689|       |
 1690|  1.39k|    if (!msg->header) {
  ------------------
  |  Branch (1690:9): [True: 789, False: 602]
  ------------------
 1691|    789|        ofpraw_pull_assert(msg);
 1692|    789|    }
 1693|       |
 1694|  1.39k|    if (!msg->size) {
  ------------------
  |  Branch (1694:9): [True: 284, False: 1.10k]
  ------------------
 1695|    284|        return EOF;
 1696|    284|    }
 1697|       |
 1698|  1.10k|    ogds = ofpbuf_try_pull(msg, sizeof *ogds);
 1699|  1.10k|    if (!ogds) {
  ------------------
  |  Branch (1699:9): [True: 0, False: 1.10k]
  ------------------
 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|  1.10k|    gd->type = ogds->type;
 1705|  1.10k|    gd->group_id = ntohl(ogds->group_id);
 1706|       |
 1707|  1.10k|    length = ntohs(ogds->length);
 1708|  1.10k|    if (length < sizeof *ogds || length - sizeof *ogds > msg->size) {
  ------------------
  |  Branch (1708:9): [True: 265, False: 842]
  |  Branch (1708:34): [True: 234, False: 608]
  ------------------
 1709|    499|        VLOG_WARN_RL(&rl, "OFPST11_GROUP_DESC reply claims invalid "
  ------------------
  |  |  224|    499|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    499|    do {                                                                \
  |  |  |  |  288|    499|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    499|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 499]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    499|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 499]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1710|    499|                     "length %"PRIuSIZE, length);
 1711|    499|        return OFPERR_OFPBRC_BAD_LEN;
 1712|    499|    }
 1713|       |
 1714|    608|    return ofputil_pull_ofp11_buckets(msg, length - sizeof *ogds, version,
 1715|    608|                                      &gd->buckets);
 1716|  1.10k|}
ofp-group.c:ofputil_pull_ofp11_buckets:
 1319|  10.5k|{
 1320|  10.5k|    struct ofp11_bucket *ob;
 1321|  10.5k|    uint32_t bucket_id = 0;
 1322|       |
 1323|  10.5k|    ovs_list_init(buckets);
 1324|  13.6k|    while (buckets_length > 0) {
  ------------------
  |  Branch (1324:12): [True: 5.55k, False: 8.07k]
  ------------------
 1325|  5.55k|        struct ofputil_bucket *bucket;
 1326|  5.55k|        struct ofpbuf ofpacts;
 1327|  5.55k|        enum ofperr error;
 1328|  5.55k|        size_t ob_len;
 1329|       |
 1330|  5.55k|        ob = (buckets_length >= sizeof *ob
  ------------------
  |  Branch (1330:15): [True: 5.45k, False: 99]
  ------------------
 1331|  5.55k|              ? ofpbuf_try_pull(msg, sizeof *ob)
 1332|  5.55k|              : NULL);
 1333|  5.55k|        if (!ob) {
  ------------------
  |  Branch (1333:13): [True: 99, False: 5.45k]
  ------------------
 1334|     99|            VLOG_WARN_RL(&rl, "buckets end with %"PRIuSIZE" leftover bytes",
  ------------------
  |  |  224|     99|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     99|    do {                                                                \
  |  |  |  |  288|     99|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     99|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 99]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     99|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 99]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1335|     99|                         buckets_length);
 1336|     99|            ofputil_bucket_list_destroy(buckets);
 1337|     99|            return OFPERR_OFPGMFC_BAD_BUCKET;
 1338|     99|        }
 1339|       |
 1340|  5.45k|        ob_len = ntohs(ob->len);
 1341|  5.45k|        if (ob_len < sizeof *ob) {
  ------------------
  |  Branch (1341:13): [True: 520, False: 4.93k]
  ------------------
 1342|    520|            VLOG_WARN_RL(&rl, "OpenFlow message bucket length "
  ------------------
  |  |  224|    520|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    520|    do {                                                                \
  |  |  |  |  288|    520|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    520|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 520]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    520|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 520]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1343|    520|                         "%"PRIuSIZE" is not valid", ob_len);
 1344|    520|            ofputil_bucket_list_destroy(buckets);
 1345|    520|            return OFPERR_OFPGMFC_BAD_BUCKET;
 1346|  4.93k|        } else if (ob_len > buckets_length) {
  ------------------
  |  Branch (1346:20): [True: 556, False: 4.37k]
  ------------------
 1347|    556|            VLOG_WARN_RL(&rl, "OpenFlow message bucket length %"PRIuSIZE" "
  ------------------
  |  |  224|    556|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    556|    do {                                                                \
  |  |  |  |  288|    556|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    556|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 556]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    556|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 556]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1348|    556|                         "exceeds remaining buckets data size %"PRIuSIZE,
 1349|    556|                         ob_len, buckets_length);
 1350|    556|            ofputil_bucket_list_destroy(buckets);
 1351|    556|            return OFPERR_OFPGMFC_BAD_BUCKET;
 1352|    556|        }
 1353|  4.37k|        buckets_length -= ob_len;
 1354|       |
 1355|  4.37k|        ofpbuf_init(&ofpacts, 0);
 1356|  4.37k|        error = ofpacts_pull_openflow_actions(msg, ob_len - sizeof *ob,
 1357|  4.37k|                                              version, NULL, NULL, &ofpacts);
 1358|  4.37k|        if (error) {
  ------------------
  |  Branch (1358:13): [True: 790, False: 3.58k]
  ------------------
 1359|    790|            ofpbuf_uninit(&ofpacts);
 1360|    790|            ofputil_bucket_list_destroy(buckets);
 1361|    790|            return error;
 1362|    790|        }
 1363|       |
 1364|  3.58k|        bucket = xzalloc(sizeof *bucket);
 1365|  3.58k|        bucket->weight = ntohs(ob->weight);
 1366|  3.58k|        error = ofputil_port_from_ofp11(ob->watch_port, &bucket->watch_port);
 1367|  3.58k|        if (error) {
  ------------------
  |  Branch (1367:13): [True: 496, False: 3.09k]
  ------------------
 1368|    496|            ofpbuf_uninit(&ofpacts);
 1369|    496|            ofputil_bucket_list_destroy(buckets);
 1370|    496|            free(bucket);
 1371|    496|            return OFPERR_OFPGMFC_BAD_WATCH;
 1372|    496|        }
 1373|  3.09k|        bucket->watch_group = ntohl(ob->watch_group);
 1374|  3.09k|        bucket->bucket_id = bucket_id++;
 1375|       |
 1376|  3.09k|        bucket->ofpacts = ofpbuf_steal_data(&ofpacts);
 1377|  3.09k|        bucket->ofpacts_len = ofpacts.size;
 1378|  3.09k|        ovs_list_push_back(buckets, &bucket->list_node);
 1379|  3.09k|    }
 1380|       |
 1381|  8.07k|    return 0;
 1382|  10.5k|}
ofp-group.c:ofputil_decode_ofp15_group_desc_reply:
 1722|  1.93k|{
 1723|  1.93k|    struct ofp15_group_desc_stats *ogds;
 1724|  1.93k|    uint16_t length, bucket_list_len;
 1725|  1.93k|    int error;
 1726|       |
 1727|  1.93k|    if (!msg->header) {
  ------------------
  |  Branch (1727:9): [True: 1.84k, False: 92]
  ------------------
 1728|  1.84k|        ofpraw_pull_assert(msg);
 1729|  1.84k|    }
 1730|       |
 1731|  1.93k|    if (!msg->size) {
  ------------------
  |  Branch (1731:9): [True: 283, False: 1.65k]
  ------------------
 1732|    283|        return EOF;
 1733|    283|    }
 1734|       |
 1735|  1.65k|    ogds = ofpbuf_try_pull(msg, sizeof *ogds);
 1736|  1.65k|    if (!ogds) {
  ------------------
  |  Branch (1736:9): [True: 126, False: 1.53k]
  ------------------
 1737|    126|        VLOG_WARN_RL(&rl, "OFPST11_GROUP_DESC reply has %"PRIu32" "
  ------------------
  |  |  224|    126|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    126|    do {                                                                \
  |  |  |  |  288|    126|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    126|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 126]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    126|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 126]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1738|    126|                     "leftover bytes at end", msg->size);
 1739|    126|        return OFPERR_OFPBRC_BAD_LEN;
 1740|    126|    }
 1741|  1.53k|    gd->type = ogds->type;
 1742|  1.53k|    gd->group_id = ntohl(ogds->group_id);
 1743|       |
 1744|  1.53k|    length = ntohs(ogds->length);
 1745|  1.53k|    if (length < sizeof *ogds || length - sizeof *ogds > msg->size) {
  ------------------
  |  Branch (1745:9): [True: 298, False: 1.23k]
  |  Branch (1745:34): [True: 290, False: 942]
  ------------------
 1746|    588|        VLOG_WARN_RL(&rl, "OFPST11_GROUP_DESC reply claims invalid "
  ------------------
  |  |  224|    588|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    588|    do {                                                                \
  |  |  |  |  288|    588|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    588|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 588]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    588|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 588]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1747|    588|                     "length %u", length);
 1748|    588|        return OFPERR_OFPBRC_BAD_LEN;
 1749|    588|    }
 1750|       |
 1751|    942|    bucket_list_len = ntohs(ogds->bucket_list_len);
 1752|    942|    if (length < bucket_list_len + sizeof *ogds) {
  ------------------
  |  Branch (1752:9): [True: 58, False: 884]
  ------------------
 1753|     58|        VLOG_WARN_RL(&rl, "OFPST11_GROUP_DESC reply claims invalid "
  ------------------
  |  |  224|     58|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     58|    do {                                                                \
  |  |  |  |  288|     58|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     58|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 58]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     58|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 58]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1754|     58|                     "bucket list length %u", bucket_list_len);
 1755|     58|        return OFPERR_OFPBRC_BAD_LEN;
 1756|     58|    }
 1757|    884|    error = ofputil_pull_ofp15_buckets(msg, bucket_list_len, version, gd->type,
 1758|    884|                                       &gd->buckets);
 1759|    884|    if (error) {
  ------------------
  |  Branch (1759:9): [True: 607, False: 277]
  ------------------
 1760|    607|        return error;
 1761|    607|    }
 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|    277|    error = parse_ofp15_group_properties(
 1772|    277|        msg, gd->type, OFPGC15_ADD, &gd->props,
 1773|    277|        length - sizeof *ogds - bucket_list_len);
 1774|    277|    if (error) {
  ------------------
  |  Branch (1774:9): [True: 185, False: 92]
  ------------------
 1775|    185|        ofputil_uninit_group_desc(gd);
 1776|    185|    }
 1777|    277|    return error;
 1778|    884|}
ofp-group.c:ofputil_pull_ofp15_buckets:
 1388|  16.4k|{
 1389|  16.4k|    ovs_list_init(buckets);
 1390|  23.0k|    while (buckets_length > 0) {
  ------------------
  |  Branch (1390:12): [True: 13.3k, False: 9.67k]
  ------------------
 1391|  13.3k|        struct ofputil_bucket *bucket = NULL;
 1392|  13.3k|        struct ofpbuf ofpacts;
 1393|  13.3k|        enum ofperr err = OFPERR_OFPGMFC_BAD_BUCKET;
 1394|  13.3k|        size_t ob_len, actions_len, properties_len;
 1395|  13.3k|        ovs_be32 watch_port = ofputil_port_to_ofp11(OFPP_ANY);
  ------------------
  |  |   80|  13.3k|#define OFPP_ANY OFPP_NONE
  |  |  ------------------
  |  |  |  |   47|  13.3k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|  13.3k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1396|  13.3k|        ovs_be32 watch_group = htonl(OFPG_ANY);
 1397|  13.3k|        ovs_be16 weight = htons(group_type == OFPGT11_SELECT ? 1 : 0);
  ------------------
  |  Branch (1397:27): [True: 1.12k, False: 12.2k]
  ------------------
 1398|       |
 1399|  13.3k|        ofpbuf_init(&ofpacts, 0);
 1400|       |
 1401|  13.3k|        struct ofp15_bucket *ob = ofpbuf_try_pull(msg, sizeof *ob);
 1402|  13.3k|        if (!ob) {
  ------------------
  |  Branch (1402:13): [True: 0, False: 13.3k]
  ------------------
 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|  13.3k|        ob_len = ntohs(ob->len);
 1409|  13.3k|        actions_len = ntohs(ob->action_array_len);
 1410|       |
 1411|  13.3k|        if (ob_len < sizeof *ob) {
  ------------------
  |  Branch (1411:13): [True: 289, False: 13.0k]
  ------------------
 1412|    289|            VLOG_WARN_RL(&rl, "OpenFlow message bucket length "
  ------------------
  |  |  224|    289|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    289|    do {                                                                \
  |  |  |  |  288|    289|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    289|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 289]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    289|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 289]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1413|    289|                         "%"PRIuSIZE" is not valid", ob_len);
 1414|    289|            goto err;
 1415|  13.0k|        } else if (ob_len > buckets_length) {
  ------------------
  |  Branch (1415:20): [True: 913, False: 12.1k]
  ------------------
 1416|    913|            VLOG_WARN_RL(&rl, "OpenFlow message bucket length "
  ------------------
  |  |  224|    913|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    913|    do {                                                                \
  |  |  |  |  288|    913|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    913|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 913]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    913|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 913]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1417|    913|                         "%"PRIuSIZE" exceeds remaining buckets data size %"
 1418|    913|                         PRIuSIZE, ob_len, buckets_length);
 1419|    913|            goto err;
 1420|  12.1k|        } else if (actions_len > ob_len - sizeof *ob) {
  ------------------
  |  Branch (1420:20): [True: 749, False: 11.3k]
  ------------------
 1421|    749|            VLOG_WARN_RL(&rl, "OpenFlow message bucket actions "
  ------------------
  |  |  224|    749|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    749|    do {                                                                \
  |  |  |  |  288|    749|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    749|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 749]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    749|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 749]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1422|    749|                         "length %"PRIuSIZE" exceeds remaining bucket "
 1423|    749|                         "data size %"PRIuSIZE, actions_len,
 1424|    749|                         ob_len - sizeof *ob);
 1425|    749|            goto err;
 1426|    749|        }
 1427|  11.3k|        buckets_length -= ob_len;
 1428|       |
 1429|  11.3k|        err = ofpacts_pull_openflow_actions(msg, actions_len, version,
 1430|  11.3k|                                            NULL, NULL, &ofpacts);
 1431|  11.3k|        if (err) {
  ------------------
  |  Branch (1431:13): [True: 2.96k, False: 8.41k]
  ------------------
 1432|  2.96k|            goto err;
 1433|  2.96k|        }
 1434|       |
 1435|  8.41k|        properties_len = ob_len - sizeof *ob - actions_len;
 1436|  8.41k|        struct ofpbuf properties = ofpbuf_const_initializer(
 1437|  8.41k|            ofpbuf_pull(msg, properties_len), properties_len);
 1438|  10.5k|        while (properties.size > 0) {
  ------------------
  |  Branch (1438:16): [True: 3.65k, False: 6.88k]
  ------------------
 1439|  3.65k|            struct ofpbuf payload;
 1440|  3.65k|            uint64_t type;
 1441|       |
 1442|  3.65k|            err = ofpprop_pull(&properties, &payload, &type);
 1443|  3.65k|            if (err) {
  ------------------
  |  Branch (1443:17): [True: 848, False: 2.80k]
  ------------------
 1444|    848|                goto err;
 1445|    848|            }
 1446|       |
 1447|  2.80k|            switch (type) {
 1448|  1.04k|            case OFPGBPT15_WEIGHT:
  ------------------
  |  Branch (1448:13): [True: 1.04k, False: 1.76k]
  ------------------
 1449|  1.04k|                err = ofpprop_parse_be16(&payload, &weight);
 1450|  1.04k|                break;
 1451|       |
 1452|    857|            case OFPGBPT15_WATCH_PORT:
  ------------------
  |  Branch (1452:13): [True: 857, False: 1.94k]
  ------------------
 1453|    857|                err = ofpprop_parse_be32(&payload, &watch_port);
 1454|    857|                break;
 1455|       |
 1456|    538|            case OFPGBPT15_WATCH_GROUP:
  ------------------
  |  Branch (1456:13): [True: 538, False: 2.26k]
  ------------------
 1457|    538|                err = ofpprop_parse_be32(&payload, &watch_group);
 1458|    538|                break;
 1459|       |
 1460|    368|            default:
  ------------------
  |  Branch (1460:13): [True: 368, False: 2.43k]
  ------------------
 1461|    368|                err = OFPPROP_UNKNOWN(false, "group bucket", type);
  ------------------
  |  |  144|    368|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
 1462|    368|                break;
 1463|  2.80k|            }
 1464|       |
 1465|  2.80k|            if (err) {
  ------------------
  |  Branch (1465:17): [True: 687, False: 2.11k]
  ------------------
 1466|    687|                goto err;
 1467|    687|            }
 1468|  2.80k|        }
 1469|       |
 1470|  6.88k|        bucket = xzalloc(sizeof *bucket);
 1471|       |
 1472|  6.88k|        bucket->weight = ntohs(weight);
 1473|  6.88k|        err = ofputil_port_from_ofp11(watch_port, &bucket->watch_port);
 1474|  6.88k|        if (err) {
  ------------------
  |  Branch (1474:13): [True: 227, False: 6.65k]
  ------------------
 1475|    227|            err = OFPERR_OFPGMFC_BAD_WATCH;
 1476|    227|            goto err;
 1477|    227|        }
 1478|  6.65k|        bucket->watch_group = ntohl(watch_group);
 1479|  6.65k|        bucket->bucket_id = ntohl(ob->bucket_id);
 1480|  6.65k|        if (bucket->bucket_id > OFPG15_BUCKET_MAX) {
  ------------------
  |  Branch (1480:13): [True: 107, False: 6.54k]
  ------------------
 1481|    107|            VLOG_WARN_RL(&rl, "bucket id (%u) is out of range",
  ------------------
  |  |  224|    107|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    107|    do {                                                                \
  |  |  |  |  288|    107|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    107|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 107]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    107|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 107]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1482|    107|                         bucket->bucket_id);
 1483|    107|            err = OFPERR_OFPGMFC_BAD_BUCKET;
 1484|    107|            goto err;
 1485|    107|        }
 1486|       |
 1487|  6.54k|        bucket->ofpacts = ofpbuf_steal_data(&ofpacts);
 1488|  6.54k|        bucket->ofpacts_len = ofpacts.size;
 1489|  6.54k|        ovs_list_push_back(buckets, &bucket->list_node);
 1490|       |
 1491|  6.54k|        continue;
 1492|       |
 1493|  6.78k|    err:
 1494|  6.78k|        free(bucket);
 1495|  6.78k|        ofpbuf_uninit(&ofpacts);
 1496|  6.78k|        ofputil_bucket_list_destroy(buckets);
 1497|  6.78k|        return err;
 1498|  6.65k|    }
 1499|       |
 1500|  9.67k|    if (ofputil_bucket_check_duplicate_id(buckets)) {
  ------------------
  |  Branch (1500:9): [True: 95, False: 9.57k]
  ------------------
 1501|     95|        VLOG_WARN_RL(&rl, "Duplicate bucket id");
  ------------------
  |  |  224|     95|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     95|    do {                                                                \
  |  |  |  |  288|     95|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     95|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 95]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     95|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 95]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1502|     95|        ofputil_bucket_list_destroy(buckets);
 1503|     95|        return OFPERR_OFPGMFC_BAD_BUCKET;
 1504|     95|    }
 1505|       |
 1506|  9.57k|    return 0;
 1507|  9.67k|}
ofp-group.c:parse_ofp15_group_properties:
 1649|  9.57k|{
 1650|  9.57k|    struct ofpbuf properties = ofpbuf_const_initializer(
 1651|  9.57k|        ofpbuf_pull(msg, properties_len), properties_len);
 1652|  12.3k|    while (properties.size > 0) {
  ------------------
  |  Branch (1652:12): [True: 6.03k, False: 6.28k]
  ------------------
 1653|  6.03k|        struct ofpbuf payload;
 1654|  6.03k|        enum ofperr error;
 1655|  6.03k|        uint64_t type;
 1656|       |
 1657|  6.03k|        error = ofpprop_pull(&properties, &payload, &type);
 1658|  6.03k|        if (error) {
  ------------------
  |  Branch (1658:13): [True: 428, False: 5.61k]
  ------------------
 1659|    428|            return error;
 1660|    428|        }
 1661|       |
 1662|  5.61k|        switch (type) {
 1663|    728|        case OFPPROP_EXP(NTR_VENDOR_ID, NTRT_SELECTION_METHOD):
  ------------------
  |  |   67|    728|    (((uint64_t) (EXP_ID) << 32) | (EXP_TYPE))
  ------------------
  |  Branch (1663:9): [True: 728, False: 4.88k]
  ------------------
 1664|  4.61k|        case OFPPROP_EXP(NTR_COMPAT_VENDOR_ID, NTRT_SELECTION_METHOD):
  ------------------
  |  |   67|  4.61k|    (((uint64_t) (EXP_ID) << 32) | (EXP_TYPE))
  ------------------
  |  Branch (1664:9): [True: 3.88k, False: 1.72k]
  ------------------
 1665|  4.61k|            error = parse_group_prop_ntr_selection_method(&payload, group_type,
 1666|  4.61k|                                                          group_cmd, gp);
 1667|  4.61k|            break;
 1668|       |
 1669|  1.00k|        default:
  ------------------
  |  Branch (1669:9): [True: 1.00k, False: 4.61k]
  ------------------
 1670|  1.00k|            error = OFPPROP_UNKNOWN(false, "group", type);
  ------------------
  |  |  144|  1.00k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
 1671|  1.00k|            break;
 1672|  5.61k|        }
 1673|       |
 1674|  5.61k|        if (error) {
  ------------------
  |  Branch (1674:13): [True: 2.86k, False: 2.74k]
  ------------------
 1675|  2.86k|            return error;
 1676|  2.86k|        }
 1677|  5.61k|    }
 1678|       |
 1679|  6.28k|    return 0;
 1680|  9.57k|}
ofp-group.c:parse_group_prop_ntr_selection_method:
 1559|  4.61k|{
 1560|  4.61k|    struct ntr_group_prop_selection_method *prop = payload->data;
 1561|  4.61k|    size_t fields_len, method_len;
 1562|  4.61k|    enum ofperr error;
 1563|       |
 1564|  4.61k|    switch (group_type) {
 1565|  4.14k|    case OFPGT11_SELECT:
  ------------------
  |  Branch (1565:5): [True: 4.14k, False: 469]
  ------------------
 1566|  4.14k|        break;
 1567|     32|    case OFPGT11_ALL:
  ------------------
  |  Branch (1567:5): [True: 32, False: 4.57k]
  ------------------
 1568|     78|    case OFPGT11_INDIRECT:
  ------------------
  |  Branch (1568:5): [True: 46, False: 4.56k]
  ------------------
 1569|     93|    case OFPGT11_FF:
  ------------------
  |  Branch (1569:5): [True: 15, False: 4.59k]
  ------------------
 1570|     93|        OFPPROP_LOG(&rl, false, "ntr selection method property is "
  ------------------
  |  |  139|     93|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     93|    do {                                                                \
  |  |  |  |  288|    186|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 93]
  |  |  |  |  ------------------
  |  |  |  |  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]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1571|     93|                    "only allowed for select groups");
 1572|     93|        return OFPERR_OFPBPC_BAD_VALUE;
 1573|    376|    default:
  ------------------
  |  Branch (1573:5): [True: 376, False: 4.23k]
  ------------------
 1574|    376|        return OFPERR_OFPGMFC_BAD_TYPE;
 1575|  4.61k|    }
 1576|       |
 1577|  4.14k|    switch (group_cmd) {
 1578|  3.29k|    case OFPGC15_ADD:
  ------------------
  |  Branch (1578:5): [True: 3.29k, False: 845]
  ------------------
 1579|  3.56k|    case OFPGC15_MODIFY:
  ------------------
  |  Branch (1579:5): [True: 271, False: 3.87k]
  ------------------
 1580|  3.60k|    case OFPGC15_ADD_OR_MOD:
  ------------------
  |  Branch (1580:5): [True: 36, False: 4.10k]
  ------------------
 1581|  3.60k|        break;
 1582|     61|    case OFPGC15_DELETE:
  ------------------
  |  Branch (1582:5): [True: 61, False: 4.08k]
  ------------------
 1583|    393|    case OFPGC15_INSERT_BUCKET:
  ------------------
  |  Branch (1583:5): [True: 332, False: 3.80k]
  ------------------
 1584|    397|    case OFPGC15_REMOVE_BUCKET:
  ------------------
  |  Branch (1584:5): [True: 4, False: 4.13k]
  ------------------
 1585|    397|        OFPPROP_LOG(&rl, false, "ntr selection method property is "
  ------------------
  |  |  139|    397|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    397|    do {                                                                \
  |  |  |  |  288|    794|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 397]
  |  |  |  |  ------------------
  |  |  |  |  289|    397|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 397]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    397|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 397]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1586|    397|                    "only allowed for add and delete group modifications");
 1587|    397|        return OFPERR_OFPBPC_BAD_VALUE;
 1588|    141|    default:
  ------------------
  |  Branch (1588:5): [True: 141, False: 4.00k]
  ------------------
 1589|    141|        return OFPERR_OFPGMFC_BAD_COMMAND;
 1590|  4.14k|    }
 1591|       |
 1592|  3.60k|    if (payload->size < sizeof *prop) {
  ------------------
  |  Branch (1592:9): [True: 34, False: 3.56k]
  ------------------
 1593|     34|        OFPPROP_LOG(&rl, false, "ntr selection method property "
  ------------------
  |  |  139|     34|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     34|    do {                                                                \
  |  |  |  |  288|     68|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 34]
  |  |  |  |  ------------------
  |  |  |  |  289|     34|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 34]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     34|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 34]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1594|     34|                    "length %u is not valid", payload->size);
 1595|     34|        return OFPERR_OFPBPC_BAD_LEN;
 1596|     34|    }
 1597|       |
 1598|  3.56k|    method_len = strnlen(prop->selection_method, NTR_MAX_SELECTION_METHOD_LEN);
  ------------------
  |  |   34|  3.56k|#define NTR_MAX_SELECTION_METHOD_LEN 16
  ------------------
 1599|       |
 1600|  3.56k|    if (method_len == NTR_MAX_SELECTION_METHOD_LEN) {
  ------------------
  |  |   34|  3.56k|#define NTR_MAX_SELECTION_METHOD_LEN 16
  ------------------
  |  Branch (1600:9): [True: 19, False: 3.55k]
  ------------------
 1601|     19|        OFPPROP_LOG(&rl, false,
  ------------------
  |  |  139|     19|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     19|    do {                                                                \
  |  |  |  |  288|     38|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 19]
  |  |  |  |  ------------------
  |  |  |  |  289|     19|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 19]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     19|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 19]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1602|     19|                    "ntr selection method is not null terminated");
 1603|     19|        return OFPERR_OFPBPC_BAD_VALUE;
 1604|     19|    }
 1605|       |
 1606|  3.55k|    if (strcmp("hash", prop->selection_method)
  ------------------
  |  Branch (1606:9): [True: 208, False: 3.34k]
  ------------------
 1607|    208|        && strcmp("dp_hash", prop->selection_method)) {
  ------------------
  |  Branch (1607:12): [True: 194, False: 14]
  ------------------
 1608|    194|        OFPPROP_LOG(&rl, false,
  ------------------
  |  |  139|    194|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    194|    do {                                                                \
  |  |  |  |  288|    388|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 194]
  |  |  |  |  ------------------
  |  |  |  |  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]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1609|    194|                    "ntr selection method '%s' is not supported",
 1610|    194|                    prop->selection_method);
 1611|    194|        return OFPERR_OFPBPC_BAD_VALUE;
 1612|    194|    }
 1613|       |    /* 'method_len' is now non-zero. */
 1614|       |
 1615|  3.35k|    strcpy(gp->selection_method, prop->selection_method);
 1616|  3.35k|    gp->selection_method_param = ntohll(prop->selection_method_param);
 1617|       |
 1618|  3.35k|    ofpbuf_pull(payload, sizeof *prop);
 1619|       |
 1620|  3.35k|    fields_len = ntohs(prop->length) - sizeof *prop;
 1621|  3.35k|    if (fields_len && strcmp("hash", gp->selection_method)) {
  ------------------
  |  Branch (1621:9): [True: 3.01k, False: 337]
  |  Branch (1621:23): [True: 12, False: 3.00k]
  ------------------
 1622|     12|        OFPPROP_LOG(&rl, false, "ntr selection method %s "
  ------------------
  |  |  139|     12|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     12|    do {                                                                \
  |  |  |  |  288|     24|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 12]
  |  |  |  |  ------------------
  |  |  |  |  289|     12|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 12]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     12|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 12]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1623|     12|                    "does not support fields", gp->selection_method);
 1624|     12|        return OFPERR_OFPBPC_BAD_VALUE;
 1625|     12|    }
 1626|       |
 1627|  3.34k|    if (fields_len > 0) {
  ------------------
  |  Branch (1627:9): [True: 3.00k, False: 337]
  ------------------
 1628|  3.00k|        error = oxm_pull_field_array(payload->data, fields_len,
 1629|  3.00k|                &gp->fields);
 1630|  3.00k|        if (error) {
  ------------------
  |  Branch (1630:13): [True: 596, False: 2.41k]
  ------------------
 1631|    596|            OFPPROP_LOG(&rl, false,
  ------------------
  |  |  139|    596|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    596|    do {                                                                \
  |  |  |  |  288|  1.19k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 596]
  |  |  |  |  ------------------
  |  |  |  |  289|    596|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 596]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    596|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 596]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1632|    596|                    "ntr selection method fields are invalid");
 1633|    596|            return error;
 1634|    596|        }
 1635|  3.00k|    } else {
 1636|       |        /* Selection_method "hash: w/o fields means default hash method. */
 1637|    337|        gp->fields.values_size = 0;
 1638|    337|    }
 1639|       |
 1640|  2.74k|    return 0;
 1641|  3.34k|}
ofp-group.c:ofp_print_bucket_id:
 1816|  6.85k|{
 1817|  6.85k|    if (ofp_version > OFP10_VERSION && ofp_version < OFP15_VERSION) {
  ------------------
  |  Branch (1817:9): [True: 6.84k, False: 4]
  |  Branch (1817:40): [True: 1.34k, False: 5.50k]
  ------------------
 1818|  1.34k|        return;
 1819|  1.34k|    }
 1820|       |
 1821|  5.51k|    ds_put_cstr(s, label);
 1822|       |
 1823|  5.51k|    switch (bucket_id) {
 1824|     35|    case OFPG15_BUCKET_FIRST:
  ------------------
  |  Branch (1824:5): [True: 35, False: 5.47k]
  ------------------
 1825|     35|        ds_put_cstr(s, "first");
 1826|     35|        break;
 1827|    823|    case OFPG15_BUCKET_LAST:
  ------------------
  |  Branch (1827:5): [True: 823, False: 4.68k]
  ------------------
 1828|    823|        ds_put_cstr(s, "last");
 1829|    823|        break;
 1830|    166|    case OFPG15_BUCKET_ALL:
  ------------------
  |  Branch (1830:5): [True: 166, False: 5.34k]
  ------------------
 1831|    166|        ds_put_cstr(s, "all");
 1832|    166|        break;
 1833|  4.48k|    default:
  ------------------
  |  Branch (1833:5): [True: 4.48k, False: 1.02k]
  ------------------
 1834|  4.48k|        ds_put_format(s, "%"PRIu32, bucket_id);
 1835|  4.48k|        break;
 1836|  5.51k|    }
 1837|       |
 1838|  5.51k|    ds_put_char(s, ',');
 1839|  5.51k|}
ofp-group.c:ofputil_pull_ofp11_group_mod:
 2152|  9.92k|{
 2153|  9.92k|    const struct ofp11_group_mod *ogm;
 2154|  9.92k|    enum ofperr error;
 2155|       |
 2156|  9.92k|    ogm = ofpbuf_pull(msg, sizeof *ogm);
 2157|  9.92k|    gm->command = ntohs(ogm->command);
 2158|  9.92k|    gm->type = ogm->type;
 2159|  9.92k|    gm->group_id = ntohl(ogm->group_id);
 2160|  9.92k|    gm->command_bucket_id = OFPG15_BUCKET_ALL;
 2161|       |
 2162|  9.92k|    error = ofputil_pull_ofp11_buckets(msg, msg->size, ofp_version,
 2163|  9.92k|                                       &gm->buckets);
 2164|       |
 2165|       |    /* OF1.3.5+ prescribes an error when an OFPGC_DELETE includes buckets. */
 2166|  9.92k|    if (!error
  ------------------
  |  Branch (2166:9): [True: 7.47k, False: 2.45k]
  ------------------
 2167|  7.47k|        && ofp_version >= OFP13_VERSION
  ------------------
  |  Branch (2167:12): [True: 3.96k, False: 3.50k]
  ------------------
 2168|  3.96k|        && gm->command == OFPGC11_DELETE
  ------------------
  |  Branch (2168:12): [True: 352, False: 3.61k]
  ------------------
 2169|    352|        && !ovs_list_is_empty(&gm->buckets)) {
  ------------------
  |  Branch (2169:12): [True: 207, False: 145]
  ------------------
 2170|    207|        error = OFPERR_OFPGMFC_INVALID_GROUP;
 2171|    207|        ofputil_bucket_list_destroy(&gm->buckets);
 2172|    207|    }
 2173|       |
 2174|  9.92k|    return error;
 2175|  9.92k|}
ofp-group.c:ofputil_pull_ofp15_group_mod:
 2180|  17.8k|{
 2181|  17.8k|    const struct ofp15_group_mod *ogm;
 2182|  17.8k|    uint16_t bucket_list_len;
 2183|  17.8k|    enum ofperr error = OFPERR_OFPGMFC_BAD_BUCKET;
 2184|       |
 2185|  17.8k|    ogm = ofpbuf_pull(msg, sizeof *ogm);
 2186|  17.8k|    gm->command = ntohs(ogm->command);
 2187|  17.8k|    gm->type = ogm->type;
 2188|  17.8k|    gm->group_id = ntohl(ogm->group_id);
 2189|       |
 2190|  17.8k|    gm->command_bucket_id = ntohl(ogm->command_bucket_id);
 2191|  17.8k|    switch (gm->command) {
 2192|  5.28k|    case OFPGC15_REMOVE_BUCKET:
  ------------------
  |  Branch (2192:5): [True: 5.28k, False: 12.5k]
  ------------------
 2193|  5.28k|        if (gm->command_bucket_id == OFPG15_BUCKET_ALL) {
  ------------------
  |  Branch (2193:13): [True: 422, False: 4.86k]
  ------------------
 2194|    422|            error = 0;
 2195|    422|        }
 2196|       |        /* Fall through */
 2197|  11.7k|    case OFPGC15_INSERT_BUCKET:
  ------------------
  |  Branch (2197:5): [True: 6.41k, False: 11.4k]
  ------------------
 2198|  11.7k|        if (gm->command_bucket_id <= OFPG15_BUCKET_MAX ||
  ------------------
  |  Branch (2198:13): [True: 10.1k, False: 1.52k]
  ------------------
 2199|  1.52k|            gm->command_bucket_id == OFPG15_BUCKET_FIRST
  ------------------
  |  Branch (2199:13): [True: 35, False: 1.49k]
  ------------------
 2200|  11.2k|            || gm->command_bucket_id == OFPG15_BUCKET_LAST) {
  ------------------
  |  Branch (2200:16): [True: 1.02k, False: 468]
  ------------------
 2201|  11.2k|            error = 0;
 2202|  11.2k|        }
 2203|  11.7k|        break;
 2204|       |
 2205|  4.42k|    case OFPGC11_ADD:
  ------------------
  |  Branch (2205:5): [True: 4.42k, False: 13.4k]
  ------------------
 2206|  4.74k|    case OFPGC11_MODIFY:
  ------------------
  |  Branch (2206:5): [True: 321, False: 17.5k]
  ------------------
 2207|  4.81k|    case OFPGC11_ADD_OR_MOD:
  ------------------
  |  Branch (2207:5): [True: 69, False: 17.7k]
  ------------------
 2208|  4.87k|    case OFPGC11_DELETE:
  ------------------
  |  Branch (2208:5): [True: 64, False: 17.7k]
  ------------------
 2209|  6.13k|    default:
  ------------------
  |  Branch (2209:5): [True: 1.25k, False: 16.5k]
  ------------------
 2210|  6.13k|        if (gm->command_bucket_id == OFPG15_BUCKET_ALL) {
  ------------------
  |  Branch (2210:13): [True: 4.95k, False: 1.17k]
  ------------------
 2211|  4.95k|            error = 0;
 2212|  4.95k|        }
 2213|  6.13k|        break;
 2214|  17.8k|    }
 2215|  17.8k|    if (error) {
  ------------------
  |  Branch (2215:9): [True: 1.22k, False: 16.6k]
  ------------------
 2216|  1.22k|        VLOG_WARN_RL(&rl,
  ------------------
  |  |  224|  1.22k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.22k|    do {                                                                \
  |  |  |  |  288|  1.22k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.22k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.22k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.22k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.22k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2217|  1.22k|                     "group command bucket id (%u) is out of range",
 2218|  1.22k|                     gm->command_bucket_id);
 2219|  1.22k|        return OFPERR_OFPGMFC_BAD_BUCKET;
 2220|  1.22k|    }
 2221|       |
 2222|  16.6k|    bucket_list_len = ntohs(ogm->bucket_array_len);
 2223|  16.6k|    if (bucket_list_len > msg->size) {
  ------------------
  |  Branch (2223:9): [True: 1.03k, False: 15.5k]
  ------------------
 2224|  1.03k|        return OFPERR_OFPBRC_BAD_LEN;
 2225|  1.03k|    }
 2226|  15.5k|    error = ofputil_pull_ofp15_buckets(msg, bucket_list_len, ofp_version,
 2227|  15.5k|                                       gm->type, &gm->buckets);
 2228|  15.5k|    if (error) {
  ------------------
  |  Branch (2228:9): [True: 6.27k, False: 9.30k]
  ------------------
 2229|  6.27k|        return error;
 2230|  6.27k|    }
 2231|       |
 2232|  9.30k|    error = parse_ofp15_group_properties(msg, gm->type, gm->command,
 2233|  9.30k|                                         &gm->props, msg->size);
 2234|  9.30k|    if (error) {
  ------------------
  |  Branch (2234:9): [True: 3.10k, False: 6.19k]
  ------------------
 2235|  3.10k|        ofputil_uninit_group_mod(gm);
 2236|  3.10k|    }
 2237|  9.30k|    return error;
 2238|  15.5k|}
ofp-group.c:ofputil_check_group_mod:
 2242|  13.4k|{
 2243|  13.4k|    switch (gm->type) {
 2244|  1.75k|    case OFPGT11_INDIRECT:
  ------------------
  |  Branch (2244:5): [True: 1.75k, False: 11.7k]
  ------------------
 2245|  1.75k|        if (gm->command != OFPGC11_DELETE
  ------------------
  |  Branch (2245:13): [True: 1.17k, False: 578]
  ------------------
 2246|  1.17k|            && !ovs_list_is_singleton(&gm->buckets) ) {
  ------------------
  |  Branch (2246:16): [True: 351, False: 823]
  ------------------
 2247|    351|            return OFPERR_OFPGMFC_INVALID_GROUP;
 2248|    351|        }
 2249|  1.40k|        break;
 2250|  3.61k|    case OFPGT11_ALL:
  ------------------
  |  Branch (2250:5): [True: 3.61k, False: 9.84k]
  ------------------
 2251|  7.55k|    case OFPGT11_SELECT:
  ------------------
  |  Branch (2251:5): [True: 3.93k, False: 9.52k]
  ------------------
 2252|  10.0k|    case OFPGT11_FF:
  ------------------
  |  Branch (2252:5): [True: 2.49k, False: 10.9k]
  ------------------
 2253|  10.0k|        break;
 2254|  1.65k|    default:
  ------------------
  |  Branch (2254:5): [True: 1.65k, False: 11.8k]
  ------------------
 2255|  1.65k|        return OFPERR_OFPGMFC_BAD_TYPE;
 2256|  13.4k|    }
 2257|       |
 2258|  11.4k|    switch (gm->command) {
 2259|  4.20k|    case OFPGC11_ADD:
  ------------------
  |  Branch (2259:5): [True: 4.20k, False: 7.24k]
  ------------------
 2260|  5.91k|    case OFPGC11_MODIFY:
  ------------------
  |  Branch (2260:5): [True: 1.70k, False: 9.74k]
  ------------------
 2261|  6.35k|    case OFPGC11_ADD_OR_MOD:
  ------------------
  |  Branch (2261:5): [True: 437, False: 11.0k]
  ------------------
 2262|  7.02k|    case OFPGC11_DELETE:
  ------------------
  |  Branch (2262:5): [True: 669, False: 10.7k]
  ------------------
 2263|  9.93k|    case OFPGC15_INSERT_BUCKET:
  ------------------
  |  Branch (2263:5): [True: 2.91k, False: 8.53k]
  ------------------
 2264|  9.93k|        break;
 2265|    884|    case OFPGC15_REMOVE_BUCKET:
  ------------------
  |  Branch (2265:5): [True: 884, False: 10.5k]
  ------------------
 2266|    884|        if (!ovs_list_is_empty(&gm->buckets)) {
  ------------------
  |  Branch (2266:13): [True: 198, False: 686]
  ------------------
 2267|    198|            return OFPERR_OFPGMFC_BAD_BUCKET;
 2268|    198|        }
 2269|    686|        break;
 2270|    686|    default:
  ------------------
  |  Branch (2270:5): [True: 629, False: 10.8k]
  ------------------
 2271|    629|        return OFPERR_OFPGMFC_BAD_COMMAND;
 2272|  11.4k|    }
 2273|       |
 2274|  10.6k|    struct ofputil_bucket *bucket;
 2275|  10.6k|    LIST_FOR_EACH (bucket, list_node, &gm->buckets) {
  ------------------
  |  |   76|  10.6k|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->next, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  171|  10.6k|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|  10.6k|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|  14.7k|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  185|  14.7k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 5.26k, False: 9.48k]
  |  |  |  |  |  Branch (185:6): [True: 5.26k, False: 9.48k]
  |  |  |  |  ------------------
  |  |  |  |  186|  14.7k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  5.26k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|  5.26k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|  5.26k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  14.7k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   78|  10.6k|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->next))
  |  |  ------------------
  |  |  |  |  193|  4.13k|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  4.13k|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2276|  5.26k|        if (bucket->weight && gm->type != OFPGT11_SELECT
  ------------------
  |  Branch (2276:13): [True: 389, False: 4.87k]
  |  Branch (2276:31): [True: 235, False: 154]
  ------------------
 2277|    235|            && gm->command != OFPGC15_INSERT_BUCKET) {
  ------------------
  |  Branch (2277:16): [True: 44, False: 191]
  ------------------
 2278|     44|            return OFPERR_OFPGMFC_INVALID_GROUP;
 2279|     44|        }
 2280|       |
 2281|  5.22k|        switch (gm->type) {
 2282|  2.47k|        case OFPGT11_ALL:
  ------------------
  |  Branch (2282:9): [True: 2.47k, False: 2.75k]
  ------------------
 2283|  3.21k|        case OFPGT11_INDIRECT:
  ------------------
  |  Branch (2283:9): [True: 742, False: 4.48k]
  ------------------
 2284|  3.21k|            if (ofputil_bucket_has_liveness(bucket)) {
  ------------------
  |  Branch (2284:17): [True: 234, False: 2.97k]
  ------------------
 2285|    234|                return OFPERR_OFPGMFC_WATCH_UNSUPPORTED;
 2286|    234|            }
 2287|  2.97k|            break;
 2288|  2.97k|        case OFPGT11_SELECT:
  ------------------
  |  Branch (2288:9): [True: 984, False: 4.24k]
  ------------------
 2289|    984|            break;
 2290|  1.02k|        case OFPGT11_FF:
  ------------------
  |  Branch (2290:9): [True: 1.02k, False: 4.19k]
  ------------------
 2291|  1.02k|            if (!ofputil_bucket_has_liveness(bucket)) {
  ------------------
  |  Branch (2291:17): [True: 856, False: 171]
  ------------------
 2292|    856|                return OFPERR_OFPGMFC_INVALID_GROUP;
 2293|    856|            }
 2294|    171|            break;
 2295|    171|        default:
  ------------------
  |  Branch (2295:9): [True: 0, False: 5.22k]
  ------------------
 2296|       |            /* Returning BAD TYPE to be consistent
 2297|       |             * though gm->type has been checked already. */
 2298|      0|            return OFPERR_OFPGMFC_BAD_TYPE;
 2299|  5.22k|        }
 2300|  5.22k|    }
 2301|       |
 2302|  9.48k|    return 0;
 2303|  10.6k|}

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

ofputil_wildcard_from_ofpfw10:
   67|  35.1k|{
   68|  35.1k|    BUILD_ASSERT_DECL(FLOW_WC_SEQ == 43);
  ------------------
  |  |  270|  35.1k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  ------------------
   69|       |
   70|       |    /* Initialize most of wc. */
   71|  35.1k|    flow_wildcards_init_catchall(wc);
   72|       |
   73|  35.1k|    if (!(ofpfw & OFPFW10_IN_PORT)) {
  ------------------
  |  Branch (73:9): [True: 26.0k, False: 9.09k]
  ------------------
   74|  26.0k|        wc->masks.in_port.ofp_port = u16_to_ofp(UINT16_MAX);
   75|  26.0k|    }
   76|       |
   77|  35.1k|    if (!(ofpfw & OFPFW10_NW_TOS)) {
  ------------------
  |  Branch (77:9): [True: 24.6k, False: 10.4k]
  ------------------
   78|  24.6k|        wc->masks.nw_tos |= IP_DSCP_MASK;
  ------------------
  |  |  724|  24.6k|#define IP_DSCP_MASK 0xfc
  ------------------
   79|  24.6k|    }
   80|       |
   81|  35.1k|    if (!(ofpfw & OFPFW10_NW_PROTO)) {
  ------------------
  |  Branch (81:9): [True: 26.0k, False: 9.04k]
  ------------------
   82|  26.0k|        wc->masks.nw_proto = UINT8_MAX;
   83|  26.0k|    }
   84|  35.1k|    wc->masks.nw_src = ofputil_wcbits_to_netmask(ofpfw
   85|  35.1k|                                                 >> OFPFW10_NW_SRC_SHIFT);
   86|  35.1k|    wc->masks.nw_dst = ofputil_wcbits_to_netmask(ofpfw
   87|  35.1k|                                                 >> OFPFW10_NW_DST_SHIFT);
   88|       |
   89|  35.1k|    if (!(ofpfw & OFPFW10_TP_SRC)) {
  ------------------
  |  Branch (89:9): [True: 25.3k, False: 9.75k]
  ------------------
   90|  25.3k|        wc->masks.tp_src = OVS_BE16_MAX;
  ------------------
  |  |   42|  25.3k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
   91|  25.3k|    }
   92|  35.1k|    if (!(ofpfw & OFPFW10_TP_DST)) {
  ------------------
  |  Branch (92:9): [True: 24.9k, False: 10.1k]
  ------------------
   93|  24.9k|        wc->masks.tp_dst = OVS_BE16_MAX;
  ------------------
  |  |   42|  24.9k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
   94|  24.9k|    }
   95|       |
   96|  35.1k|    if (!(ofpfw & OFPFW10_DL_SRC)) {
  ------------------
  |  Branch (96:9): [True: 26.2k, False: 8.87k]
  ------------------
   97|  26.2k|        WC_MASK_FIELD(wc, dl_src);
  ------------------
  |  |  201|  26.2k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
   98|  26.2k|    }
   99|  35.1k|    if (!(ofpfw & OFPFW10_DL_DST)) {
  ------------------
  |  Branch (99:9): [True: 24.6k, False: 10.4k]
  ------------------
  100|  24.6k|        WC_MASK_FIELD(wc, dl_dst);
  ------------------
  |  |  201|  24.6k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
  101|  24.6k|    }
  102|  35.1k|    if (!(ofpfw & OFPFW10_DL_TYPE)) {
  ------------------
  |  Branch (102:9): [True: 29.9k, False: 5.11k]
  ------------------
  103|  29.9k|        wc->masks.dl_type = OVS_BE16_MAX;
  ------------------
  |  |   42|  29.9k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  104|  29.9k|    }
  105|       |
  106|       |    /* VLAN TCI mask. */
  107|  35.1k|    if (!(ofpfw & OFPFW10_DL_VLAN_PCP)) {
  ------------------
  |  Branch (107:9): [True: 26.8k, False: 8.28k]
  ------------------
  108|  26.8k|        wc->masks.vlans[0].tci |= htons(VLAN_PCP_MASK | VLAN_CFI);
  109|  26.8k|    }
  110|  35.1k|    if (!(ofpfw & OFPFW10_DL_VLAN)) {
  ------------------
  |  Branch (110:9): [True: 24.3k, False: 10.7k]
  ------------------
  111|       |        wc->masks.vlans[0].tci |= htons(VLAN_VID_MASK | VLAN_CFI);
  112|  24.3k|    }
  113|  35.1k|}
ofputil_match_from_ofp10_match:
  119|  35.1k|{
  120|  35.1k|    uint32_t ofpfw = ntohl(ofmatch->wildcards) & OFPFW10_ALL;
  121|       |
  122|       |    /* Initialize match->wc. */
  123|  35.1k|    memset(&match->flow, 0, sizeof match->flow);
  124|  35.1k|    ofputil_wildcard_from_ofpfw10(ofpfw, &match->wc);
  125|  35.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|  35.1k|    const uint32_t ofpfw_data_bits = (OFPFW10_NW_TOS | OFPFW10_NW_PROTO
  130|  35.1k|                                      | OFPFW10_TP_SRC | OFPFW10_TP_DST
  131|  35.1k|                                      | OFPFW10_DL_SRC | OFPFW10_DL_DST
  132|  35.1k|                                      | OFPFW10_DL_TYPE
  133|  35.1k|                                      | OFPFW10_DL_VLAN | OFPFW10_DL_VLAN_PCP);
  134|  35.1k|    if ((ofpfw & ofpfw_data_bits) != ofpfw_data_bits
  ------------------
  |  Branch (134:9): [True: 32.8k, False: 2.23k]
  ------------------
  135|  2.23k|        || ofputil_wcbits_to_netmask(ofpfw >> OFPFW10_NW_SRC_SHIFT)
  ------------------
  |  Branch (135:12): [True: 273, False: 1.96k]
  ------------------
  136|  34.5k|        || ofputil_wcbits_to_netmask(ofpfw >> OFPFW10_NW_DST_SHIFT)) {
  ------------------
  |  Branch (136:12): [True: 1.43k, False: 525]
  ------------------
  137|  34.5k|        match_set_default_packet_type(match);
  138|  34.5k|    }
  139|       |
  140|       |    /* Initialize most of match->flow. */
  141|  35.1k|    match->flow.nw_src = ofmatch->nw_src;
  142|  35.1k|    match->flow.nw_dst = ofmatch->nw_dst;
  143|  35.1k|    match->flow.in_port.ofp_port = u16_to_ofp(ntohs(ofmatch->in_port));
  144|  35.1k|    match->flow.dl_type = ofputil_dl_type_from_openflow(ofmatch->dl_type);
  145|  35.1k|    match->flow.tp_src = ofmatch->tp_src;
  146|  35.1k|    match->flow.tp_dst = ofmatch->tp_dst;
  147|  35.1k|    match->flow.dl_src = ofmatch->dl_src;
  148|  35.1k|    match->flow.dl_dst = ofmatch->dl_dst;
  149|  35.1k|    match->flow.nw_tos = ofmatch->nw_tos & IP_DSCP_MASK;
  ------------------
  |  |  724|  35.1k|#define IP_DSCP_MASK 0xfc
  ------------------
  150|  35.1k|    match->flow.nw_proto = ofmatch->nw_proto;
  151|       |
  152|       |    /* Translate VLANs. */
  153|  35.1k|    if (!(ofpfw & OFPFW10_DL_VLAN) &&
  ------------------
  |  Branch (153:9): [True: 24.3k, False: 10.7k]
  ------------------
  154|  24.3k|        ofmatch->dl_vlan == htons(OFP10_VLAN_NONE)) {
  ------------------
  |  Branch (154:9): [True: 2.68k, False: 21.7k]
  ------------------
  155|       |        /* Match only packets without 802.1Q header.
  156|       |         *
  157|       |         * When OFPFW10_DL_VLAN_PCP is wildcarded, this is obviously correct.
  158|       |         *
  159|       |         * If OFPFW10_DL_VLAN_PCP is matched, the flow match is contradictory,
  160|       |         * because we can't have a specific PCP without an 802.1Q header.
  161|       |         * However, older versions of OVS treated this as matching packets
  162|       |         * withut an 802.1Q header, so we do here too. */
  163|  2.68k|        match->flow.vlans[0].tci = htons(0);
  164|  2.68k|        match->wc.masks.vlans[0].tci = htons(0xffff);
  165|  32.4k|    } else {
  166|  32.4k|        ovs_be16 vid, pcp, tci;
  167|  32.4k|        uint16_t hpcp;
  168|       |
  169|  32.4k|        vid = ofmatch->dl_vlan & htons(VLAN_VID_MASK);
  170|  32.4k|        hpcp = (ofmatch->dl_vlan_pcp << VLAN_PCP_SHIFT) & VLAN_PCP_MASK;
  ------------------
  |  |  498|  32.4k|#define VLAN_PCP_SHIFT 13
  ------------------
                      hpcp = (ofmatch->dl_vlan_pcp << VLAN_PCP_SHIFT) & VLAN_PCP_MASK;
  ------------------
  |  |  497|  32.4k|#define VLAN_PCP_MASK 0xe000
  ------------------
  171|  32.4k|        pcp = htons(hpcp);
  172|  32.4k|        tci = vid | pcp | htons(VLAN_CFI);
  173|  32.4k|        match->flow.vlans[0].tci = tci & match->wc.masks.vlans[0].tci;
  174|  32.4k|    }
  175|       |
  176|       |    /* Clean up. */
  177|  35.1k|    match_zero_wildcarded_fields(match);
  178|  35.1k|}
ofputil_pull_ofp11_match:
  262|  46.9k|{
  263|  46.9k|    struct ofp11_match_header *omh = buf->data;
  264|  46.9k|    uint16_t match_len;
  265|       |
  266|  46.9k|    if (buf->size < sizeof *omh) {
  ------------------
  |  Branch (266:9): [True: 810, False: 46.1k]
  ------------------
  267|    810|        return OFPERR_OFPBMC_BAD_LEN;
  268|    810|    }
  269|       |
  270|  46.1k|    match_len = ntohs(omh->length);
  271|       |
  272|  46.1k|    switch (ntohs(omh->type)) {
  273|  5.92k|    case OFPMT_STANDARD: {
  ------------------
  |  Branch (273:5): [True: 5.92k, False: 40.1k]
  ------------------
  274|  5.92k|        struct ofp11_match *om;
  275|       |
  276|  5.92k|        if (match_len != sizeof *om || buf->size < sizeof *om) {
  ------------------
  |  Branch (276:13): [True: 2.00k, False: 3.92k]
  |  Branch (276:40): [True: 63, False: 3.86k]
  ------------------
  277|  2.06k|            return OFPERR_OFPBMC_BAD_LEN;
  278|  2.06k|        }
  279|  3.86k|        om = ofpbuf_pull(buf, sizeof *om);
  280|  3.86k|        if (padded_match_len) {
  ------------------
  |  Branch (280:13): [True: 15, False: 3.84k]
  ------------------
  281|     15|            *padded_match_len = match_len;
  282|     15|        }
  283|  3.86k|        return ofputil_match_from_ofp11_match(om, match);
  284|  5.92k|    }
  285|       |
  286|  34.6k|    case OFPMT_OXM:
  ------------------
  |  Branch (286:5): [True: 34.6k, False: 11.4k]
  ------------------
  287|  34.6k|        if (padded_match_len) {
  ------------------
  |  Branch (287:13): [True: 9.30k, False: 25.3k]
  ------------------
  288|  9.30k|            *padded_match_len = ROUND_UP(match_len, 8);
  ------------------
  |  |  303|  9.30k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|  9.30k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  289|  9.30k|        }
  290|  34.6k|        return oxm_pull_match(buf, false, tun_table, vl_mff_map, match);
  291|       |
  292|  5.55k|    default:
  ------------------
  |  Branch (292:5): [True: 5.55k, False: 40.5k]
  ------------------
  293|  5.55k|        return OFPERR_OFPBMC_BAD_TYPE;
  294|  46.1k|    }
  295|  46.1k|}
ofputil_match_from_ofp11_match:
  302|  3.86k|{
  303|  3.86k|    uint16_t wc = ntohl(ofmatch->wildcards);
  304|  3.86k|    bool ipv4, arp, rarp;
  305|       |
  306|  3.86k|    match_init_catchall(match);
  307|  3.86k|    match->flow.tunnel.metadata.tab = NULL;
  308|       |
  309|  3.86k|    if (!(wc & OFPFW11_IN_PORT)) {
  ------------------
  |  Branch (309:9): [True: 1.49k, False: 2.36k]
  ------------------
  310|  1.49k|        ofp_port_t ofp_port;
  311|  1.49k|        enum ofperr error;
  312|       |
  313|  1.49k|        error = ofputil_port_from_ofp11(ofmatch->in_port, &ofp_port);
  314|  1.49k|        if (error) {
  ------------------
  |  Branch (314:13): [True: 103, False: 1.39k]
  ------------------
  315|    103|            return OFPERR_OFPBMC_BAD_VALUE;
  316|    103|        }
  317|  1.39k|        match_set_in_port(match, ofp_port);
  318|  1.39k|    }
  319|       |
  320|  3.75k|    struct eth_addr dl_src_mask = eth_addr_invert(ofmatch->dl_src_mask);
  321|  3.75k|    struct eth_addr dl_dst_mask = eth_addr_invert(ofmatch->dl_dst_mask);
  322|  3.75k|    if (!eth_addr_is_zero(dl_src_mask) || !eth_addr_is_zero(dl_dst_mask)) {
  ------------------
  |  Branch (322:9): [True: 3.53k, False: 220]
  |  Branch (322:43): [True: 147, False: 73]
  ------------------
  323|  3.68k|        match_set_dl_src_masked(match, ofmatch->dl_src, dl_src_mask);
  324|  3.68k|        match_set_dl_dst_masked(match, ofmatch->dl_dst, dl_dst_mask);
  325|  3.68k|        match_set_default_packet_type(match);
  326|  3.68k|    }
  327|       |
  328|  3.75k|    if (!(wc & OFPFW11_DL_VLAN)) {
  ------------------
  |  Branch (328:9): [True: 2.78k, False: 969]
  ------------------
  329|  2.78k|        if (ofmatch->dl_vlan == htons(OFPVID11_NONE)) {
  ------------------
  |  Branch (329:13): [True: 974, False: 1.81k]
  ------------------
  330|       |            /* Match only packets without a VLAN tag. */
  331|    974|            match->flow.vlans[0].tci = htons(0);
  332|    974|            match->wc.masks.vlans[0].tci = OVS_BE16_MAX;
  ------------------
  |  |   42|    974|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  333|  1.81k|        } else {
  334|  1.81k|            if (ofmatch->dl_vlan == htons(OFPVID11_ANY)) {
  ------------------
  |  Branch (334:17): [True: 332, False: 1.48k]
  ------------------
  335|       |                /* Match any packet with a VLAN tag regardless of VID. */
  336|    332|                match->flow.vlans[0].tci = htons(VLAN_CFI);
  337|    332|                match->wc.masks.vlans[0].tci = htons(VLAN_CFI);
  338|  1.48k|            } else if (ntohs(ofmatch->dl_vlan) < 4096) {
  ------------------
  |  Branch (338:24): [True: 1.40k, False: 78]
  ------------------
  339|       |                /* Match only packets with the specified VLAN VID. */
  340|  1.40k|                match->flow.vlans[0].tci = htons(VLAN_CFI) | ofmatch->dl_vlan;
  341|  1.40k|                match->wc.masks.vlans[0].tci = htons(VLAN_CFI | VLAN_VID_MASK);
  342|  1.40k|            } else {
  343|       |                /* Invalid VID. */
  344|     78|                return OFPERR_OFPBMC_BAD_VALUE;
  345|     78|            }
  346|       |
  347|  1.73k|            if (!(wc & OFPFW11_DL_VLAN_PCP)) {
  ------------------
  |  Branch (347:17): [True: 671, False: 1.06k]
  ------------------
  348|    671|                if (ofmatch->dl_vlan_pcp <= 7) {
  ------------------
  |  Branch (348:21): [True: 609, False: 62]
  ------------------
  349|    609|                    match->flow.vlans[0].tci |= htons(ofmatch->dl_vlan_pcp
  350|    609|                                                  << VLAN_PCP_SHIFT);
  351|    609|                    match->wc.masks.vlans[0].tci |= htons(VLAN_PCP_MASK);
  352|    609|                } else {
  353|       |                    /* Invalid PCP. */
  354|     62|                    return OFPERR_OFPBMC_BAD_VALUE;
  355|     62|                }
  356|    671|            }
  357|  1.73k|        }
  358|  2.64k|        match_set_default_packet_type(match);
  359|  2.64k|    }
  360|       |
  361|  3.61k|    if (!(wc & OFPFW11_DL_TYPE)) {
  ------------------
  |  Branch (361:9): [True: 3.06k, False: 554]
  ------------------
  362|  3.06k|        match_set_dl_type(match,
  363|  3.06k|                          ofputil_dl_type_from_openflow(ofmatch->dl_type));
  364|  3.06k|        match_set_default_packet_type(match);
  365|  3.06k|    }
  366|       |
  367|  3.61k|    ipv4 = match->flow.dl_type == htons(ETH_TYPE_IP);
  368|  3.61k|    arp = match->flow.dl_type == htons(ETH_TYPE_ARP);
  369|  3.61k|    rarp = match->flow.dl_type == htons(ETH_TYPE_RARP);
  370|       |
  371|  3.61k|    if (ipv4 && !(wc & OFPFW11_NW_TOS)) {
  ------------------
  |  Branch (371:9): [True: 1.23k, False: 2.38k]
  |  Branch (371:17): [True: 897, False: 338]
  ------------------
  372|    897|        if (ofmatch->nw_tos & ~IP_DSCP_MASK) {
  ------------------
  |  |  724|    897|#define IP_DSCP_MASK 0xfc
  ------------------
  |  Branch (372:13): [True: 73, False: 824]
  ------------------
  373|       |            /* Invalid TOS. */
  374|     73|            return OFPERR_OFPBMC_BAD_VALUE;
  375|     73|        }
  376|       |
  377|    824|        match_set_nw_dscp(match, ofmatch->nw_tos);
  378|    824|    }
  379|       |
  380|  3.54k|    if (ipv4 || arp || rarp) {
  ------------------
  |  Branch (380:9): [True: 1.16k, False: 2.38k]
  |  Branch (380:17): [True: 139, False: 2.24k]
  |  Branch (380:24): [True: 47, False: 2.19k]
  ------------------
  381|  1.34k|        if (!(wc & OFPFW11_NW_PROTO)) {
  ------------------
  |  Branch (381:13): [True: 1.13k, False: 211]
  ------------------
  382|  1.13k|            match_set_nw_proto(match, ofmatch->nw_proto);
  383|  1.13k|        }
  384|  1.34k|        match_set_nw_src_masked(match, ofmatch->nw_src, ~ofmatch->nw_src_mask);
  385|  1.34k|        match_set_nw_dst_masked(match, ofmatch->nw_dst, ~ofmatch->nw_dst_mask);
  386|  1.34k|    }
  387|       |
  388|  3.54k|#define OFPFW11_TP_ALL (OFPFW11_TP_SRC | OFPFW11_TP_DST)
  389|  3.54k|    if (ipv4 && (wc & OFPFW11_TP_ALL) != OFPFW11_TP_ALL) {
  ------------------
  |  |  388|  1.16k|#define OFPFW11_TP_ALL (OFPFW11_TP_SRC | OFPFW11_TP_DST)
  ------------------
                  if (ipv4 && (wc & OFPFW11_TP_ALL) != OFPFW11_TP_ALL) {
  ------------------
  |  |  388|  1.16k|#define OFPFW11_TP_ALL (OFPFW11_TP_SRC | OFPFW11_TP_DST)
  ------------------
  |  Branch (389:9): [True: 1.16k, False: 2.38k]
  |  Branch (389:17): [True: 874, False: 288]
  ------------------
  390|    874|        switch (match->flow.nw_proto) {
  391|    173|        case IPPROTO_ICMP:
  ------------------
  |  Branch (391:9): [True: 173, False: 701]
  ------------------
  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|    173|            if (!(wc & OFPFW11_TP_SRC)) {
  ------------------
  |  Branch (399:17): [True: 136, False: 37]
  ------------------
  400|    136|                uint16_t icmp_type = ntohs(ofmatch->tp_src);
  401|    136|                if (icmp_type < 0x100) {
  ------------------
  |  Branch (401:21): [True: 114, False: 22]
  ------------------
  402|    114|                    match_set_icmp_type(match, icmp_type);
  403|    114|                } else {
  404|     22|                    return OFPERR_OFPBMC_BAD_FIELD;
  405|     22|                }
  406|    136|            }
  407|    151|            if (!(wc & OFPFW11_TP_DST)) {
  ------------------
  |  Branch (407:17): [True: 73, False: 78]
  ------------------
  408|     73|                uint16_t icmp_code = ntohs(ofmatch->tp_dst);
  409|     73|                if (icmp_code < 0x100) {
  ------------------
  |  Branch (409:21): [True: 50, False: 23]
  ------------------
  410|     50|                    match_set_icmp_code(match, icmp_code);
  411|     50|                } else {
  412|     23|                    return OFPERR_OFPBMC_BAD_FIELD;
  413|     23|                }
  414|     73|            }
  415|    128|            break;
  416|       |
  417|    128|        case IPPROTO_TCP:
  ------------------
  |  Branch (417:9): [True: 6, False: 868]
  ------------------
  418|     14|        case IPPROTO_UDP:
  ------------------
  |  Branch (418:9): [True: 8, False: 866]
  ------------------
  419|    440|        case IPPROTO_SCTP:
  ------------------
  |  Branch (419:9): [True: 426, False: 448]
  ------------------
  420|    440|            if (!(wc & (OFPFW11_TP_SRC))) {
  ------------------
  |  Branch (420:17): [True: 12, False: 428]
  ------------------
  421|     12|                match_set_tp_src(match, ofmatch->tp_src);
  422|     12|            }
  423|    440|            if (!(wc & (OFPFW11_TP_DST))) {
  ------------------
  |  Branch (423:17): [True: 430, False: 10]
  ------------------
  424|    430|                match_set_tp_dst(match, ofmatch->tp_dst);
  425|    430|            }
  426|    440|            break;
  427|       |
  428|    261|        default:
  ------------------
  |  Branch (428:9): [True: 261, False: 613]
  ------------------
  429|       |            /* OF1.1 says explicitly to ignore this. */
  430|    261|            break;
  431|    874|        }
  432|    874|    }
  433|       |
  434|  3.50k|    if (eth_type_mpls(match->flow.dl_type)) {
  ------------------
  |  Branch (434:9): [True: 506, False: 2.99k]
  ------------------
  435|    506|        if (!(wc & OFPFW11_MPLS_LABEL)) {
  ------------------
  |  Branch (435:13): [True: 339, False: 167]
  ------------------
  436|    339|            match_set_mpls_label(match, 0, ofmatch->mpls_label);
  437|    339|        }
  438|    506|        if (!(wc & OFPFW11_MPLS_TC)) {
  ------------------
  |  Branch (438:13): [True: 452, False: 54]
  ------------------
  439|    452|            match_set_mpls_tc(match, 0, ofmatch->mpls_tc);
  440|    452|        }
  441|    506|    }
  442|       |
  443|  3.50k|    match_set_metadata_masked(match, ofmatch->metadata,
  444|  3.50k|                              ~ofmatch->metadata_mask);
  445|       |
  446|  3.50k|    return 0;
  447|  3.54k|}
ofputil_dl_type_from_openflow:
  632|  38.1k|{
  633|  38.1k|    return (ofp_dl_type == htons(OFP_DL_TYPE_NOT_ETH_TYPE)
  ------------------
  |  Branch (633:13): [True: 44, False: 38.1k]
  ------------------
  634|  38.1k|            ? htons(FLOW_DL_TYPE_NONE)
  635|  38.1k|            : ofp_dl_type);
  636|  38.1k|}
ofputil_decode_tlv_table_mod:
  709|  1.00k|{
  710|  1.00k|    struct ofpbuf msg = ofpbuf_const_initializer(oh, ntohs(oh->length));
  711|  1.00k|    ofpraw_pull_assert(&msg);
  712|       |
  713|  1.00k|    struct nx_tlv_table_mod *nx_ttm = ofpbuf_pull(&msg, sizeof *nx_ttm);
  714|  1.00k|    ttm->command = ntohs(nx_ttm->command);
  715|  1.00k|    if (ttm->command > NXTTMC_CLEAR) {
  ------------------
  |  Branch (715:9): [True: 239, False: 765]
  ------------------
  716|    239|        VLOG_WARN_RL(&rl, "tlv table mod command (%u) is out of range",
  ------------------
  |  |  224|    239|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    239|    do {                                                                \
  |  |  |  |  288|    239|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    239|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 239]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    239|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 239]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  717|    239|                     ttm->command);
  718|    239|        return OFPERR_NXTTMFC_BAD_COMMAND;
  719|    239|    }
  720|       |
  721|    765|    return decode_tlv_table_mappings(&msg, TUN_METADATA_NUM_OPTS,
  ------------------
  |  |   26|    765|#define TUN_METADATA_NUM_OPTS 64
  ------------------
  722|    765|                                        &ttm->mappings);
  723|  1.00k|}
ofputil_format_tlv_table_mod:
  745|    492|{
  746|    492|    ds_put_cstr(s, "\n ");
  747|       |
  748|    492|    switch (ttm->command) {
  ------------------
  |  Branch (748:13): [True: 492, False: 0]
  ------------------
  749|    234|    case NXTTMC_ADD:
  ------------------
  |  Branch (749:5): [True: 234, False: 258]
  ------------------
  750|    234|        ds_put_cstr(s, "ADD");
  751|    234|        break;
  752|    227|    case NXTTMC_DELETE:
  ------------------
  |  Branch (752:5): [True: 227, False: 265]
  ------------------
  753|    227|        ds_put_cstr(s, "DEL");
  754|    227|        break;
  755|     31|    case NXTTMC_CLEAR:
  ------------------
  |  Branch (755:5): [True: 31, False: 461]
  ------------------
  756|     31|        ds_put_cstr(s, "CLEAR");
  757|     31|        break;
  758|    492|    }
  759|       |
  760|    492|    if (ttm->command != NXTTMC_CLEAR) {
  ------------------
  |  Branch (760:9): [True: 461, False: 31]
  ------------------
  761|    461|        print_tlv_table(s, &ttm->mappings);
  762|    461|    }
  763|    492|}
ofputil_decode_tlv_table_reply:
  791|    890|{
  792|    890|    struct ofpbuf msg = ofpbuf_const_initializer(oh, ntohs(oh->length));
  793|    890|    ofpraw_pull_assert(&msg);
  794|       |
  795|    890|    struct nx_tlv_table_reply *nx_ttr = ofpbuf_pull(&msg, sizeof *nx_ttr);
  796|    890|    ttr->max_option_space = ntohl(nx_ttr->max_option_space);
  797|    890|    ttr->max_fields = ntohs(nx_ttr->max_fields);
  798|       |
  799|    890|    return decode_tlv_table_mappings(&msg, ttr->max_fields, &ttr->mappings);
  800|    890|}
ofputil_format_tlv_table_reply:
  839|    346|{
  840|    346|    ds_put_char(s, '\n');
  841|       |
  842|    346|    const struct ofputil_tlv_map *map;
  843|    346|    int allocated_space = 0;
  844|    580|    LIST_FOR_EACH (map, list_node, &ttr->mappings) {
  ------------------
  |  |   76|    346|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->next, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  171|    346|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|    346|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|    926|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  185|    926|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 580, False: 346]
  |  |  |  |  |  Branch (185:6): [True: 580, False: 346]
  |  |  |  |  ------------------
  |  |  |  |  186|    926|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|    580|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|    580|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|    580|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|    926|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   78|    580|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->next))
  |  |  ------------------
  |  |  |  |  193|    580|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|    580|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  845|    580|        allocated_space += map->option_len;
  846|    580|    }
  847|       |
  848|    346|    ds_put_format(s, " max option space=%"PRIu32" max fields=%"PRIu16"\n",
  849|    346|                  ttr->max_option_space, ttr->max_fields);
  850|    346|    ds_put_format(s, " allocated option space=%d\n", allocated_space);
  851|    346|    ds_put_char(s, '\n');
  852|    346|    print_tlv_table(s, &ttr->mappings);
  853|    346|}
ofputil_uninit_tlv_table:
  857|  1.65k|{
  858|  1.65k|    struct ofputil_tlv_map *map;
  859|       |
  860|  3.01k|    LIST_FOR_EACH_POP (map, list_node, mappings) {
  ------------------
  |  |  140|  4.66k|    while (!ovs_list_is_empty(LIST) ?                                         \
  |  |  ------------------
  |  |  |  Branch (140:12): [True: 3.01k, False: 1.65k]
  |  |  |  Branch (140:12): [True: 3.01k, False: 1.65k]
  |  |  ------------------
  |  |  141|  4.66k|           (INIT_CONTAINER(ITER, ovs_list_pop_front(LIST), MEMBER), 1) :      \
  |  |  ------------------
  |  |  |  |  150|  3.01k|    ((OBJECT) = NULL, ASSIGN_CONTAINER(OBJECT, POINTER, MEMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  |  143|  3.01k|    ((OBJECT) = OBJECT_CONTAINING(POINTER, OBJECT, MEMBER), (void) 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  134|  3.01k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  |  |  135|  3.01k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  108|  3.01k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  142|  4.66k|           (ITER = NULL, 0))
  ------------------
  861|  3.01k|        free(map);
  862|  3.01k|    }
  863|  1.65k|}
ofputil_normalize_match:
 1000|  33.4k|{
 1001|       |    ofputil_normalize_match__(match, true);
 1002|  33.4k|}
ofp-match.c:ofputil_wcbits_to_netmask:
   44|  74.3k|{
   45|  74.3k|    wcbits &= 0x3f;
   46|  74.3k|    return wcbits < 32 ? htonl(~((1u << wcbits) - 1)) : 0;
  ------------------
  |  Branch (46:12): [True: 55.2k, False: 19.1k]
  ------------------
   47|  74.3k|}
ofp-match.c:decode_tlv_table_mappings:
  672|  1.65k|{
  673|  1.65k|    ovs_list_init(mappings);
  674|       |
  675|  3.84k|    while (msg->size) {
  ------------------
  |  Branch (675:12): [True: 3.01k, False: 838]
  ------------------
  676|  3.01k|        struct nx_tlv_map *nx_map;
  677|  3.01k|        struct ofputil_tlv_map *map;
  678|       |
  679|  3.01k|        nx_map = ofpbuf_pull(msg, sizeof *nx_map);
  680|  3.01k|        map = xmalloc(sizeof *map);
  681|  3.01k|        ovs_list_push_back(mappings, &map->list_node);
  682|       |
  683|  3.01k|        map->option_class = ntohs(nx_map->option_class);
  684|  3.01k|        map->option_type = nx_map->option_type;
  685|       |
  686|  3.01k|        map->option_len = nx_map->option_len;
  687|  3.01k|        if (map->option_len % 4 || map->option_len > TLV_MAX_OPT_SIZE) {
  ------------------
  |  |   26|  2.64k|#define TLV_MAX_OPT_SIZE 124
  ------------------
  |  Branch (687:13): [True: 370, False: 2.64k]
  |  Branch (687:36): [True: 192, False: 2.44k]
  ------------------
  688|    562|            VLOG_WARN_RL(&rl, "tlv table option length (%u) is not a "
  ------------------
  |  |  224|    562|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    562|    do {                                                                \
  |  |  |  |  288|    562|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    562|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 562]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    562|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 562]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  689|    562|                         "valid option size", map->option_len);
  690|    562|            ofputil_uninit_tlv_table(mappings);
  691|    562|            return OFPERR_NXTTMFC_BAD_OPT_LEN;
  692|    562|        }
  693|       |
  694|  2.44k|        map->index = ntohs(nx_map->index);
  695|  2.44k|        if (map->index >= max_fields) {
  ------------------
  |  Branch (695:13): [True: 255, False: 2.19k]
  ------------------
  696|    255|            VLOG_WARN_RL(&rl, "tlv table field index (%u) is too large "
  ------------------
  |  |  224|    255|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    255|    do {                                                                \
  |  |  |  |  288|    255|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    255|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 255]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    255|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 255]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  697|    255|                         "(max %u)", map->index, max_fields - 1);
  698|    255|            ofputil_uninit_tlv_table(mappings);
  699|    255|            return OFPERR_NXTTMFC_BAD_FIELD_IDX;
  700|    255|        }
  701|  2.44k|    }
  702|       |
  703|    838|    return 0;
  704|  1.65k|}
ofp-match.c:print_tlv_table:
  727|    807|{
  728|    807|    struct ofputil_tlv_map *map;
  729|       |
  730|    807|    ds_put_cstr(s, " mapping table:\n");
  731|    807|    ds_put_cstr(s, "  class  type  length  match field\n");
  732|    807|    ds_put_cstr(s, " ------  ----  ------  --------------");
  733|       |
  734|  1.05k|    LIST_FOR_EACH (map, list_node, mappings) {
  ------------------
  |  |   76|    807|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->next, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  171|    807|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|    807|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|  1.85k|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  185|  1.85k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 1.05k, False: 807]
  |  |  |  |  |  Branch (185:6): [True: 1.05k, False: 807]
  |  |  |  |  ------------------
  |  |  |  |  186|  1.85k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  1.05k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|  1.05k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|  1.05k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  1.85k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   78|  1.05k|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->next))
  |  |  ------------------
  |  |  |  |  193|  1.05k|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  1.05k|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  735|  1.05k|        ds_put_format(s, "\n %#6"PRIx16"  %#4"PRIx8"  %6"PRIu8"  "
  736|       |                      "tun_metadata%"PRIu16,
  737|  1.05k|                      map->option_class, map->option_type, map->option_len,
  738|  1.05k|                      map->index);
  739|  1.05k|    }
  740|    807|}
ofp-match.c:ofputil_normalize_match__:
  867|  33.4k|{
  868|  33.4k|    enum {
  869|  33.4k|        MAY_NW_ADDR     = 1 << 0, /* nw_src, nw_dst */
  870|  33.4k|        MAY_TP_ADDR     = 1 << 1, /* tp_src, tp_dst */
  871|  33.4k|        MAY_NW_PROTO    = 1 << 2, /* nw_proto */
  872|  33.4k|        MAY_IPVx        = 1 << 3, /* tos, frag, ttl */
  873|  33.4k|        MAY_ARP_SHA     = 1 << 4, /* arp_sha */
  874|  33.4k|        MAY_ARP_THA     = 1 << 5, /* arp_tha */
  875|  33.4k|        MAY_IPV6        = 1 << 6, /* ipv6_src, ipv6_dst, ipv6_label */
  876|  33.4k|        MAY_ND_TARGET   = 1 << 7, /* nd_target */
  877|  33.4k|        MAY_MPLS        = 1 << 8, /* mpls label and tc */
  878|  33.4k|        MAY_ETHER       = 1 << 9, /* dl_src, dl_dst */
  879|  33.4k|    } may_match;
  880|       |
  881|  33.4k|    struct flow_wildcards wc = match->wc;
  882|  33.4k|    ovs_be16 dl_type;
  883|       |
  884|       |    /* Figure out what fields may be matched. */
  885|       |    /* Check the packet_type first and extract dl_type. */
  886|  33.4k|    if (wc.masks.packet_type == 0 || match_has_default_packet_type(match)) {
  ------------------
  |  Branch (886:9): [True: 507, False: 32.9k]
  |  Branch (886:38): [True: 32.9k, False: 0]
  ------------------
  887|  33.4k|        may_match = MAY_ETHER;
  888|  33.4k|        dl_type = match->flow.dl_type;
  889|  33.4k|    } 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|  33.4k|    if (dl_type == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (897:9): [True: 5.92k, False: 27.5k]
  ------------------
  898|  5.92k|        may_match |= MAY_NW_PROTO | MAY_IPVx | MAY_NW_ADDR;
  899|  5.92k|        if (match->flow.nw_proto == IPPROTO_TCP ||
  ------------------
  |  Branch (899:13): [True: 787, False: 5.13k]
  ------------------
  900|  5.13k|            match->flow.nw_proto == IPPROTO_UDP ||
  ------------------
  |  Branch (900:13): [True: 184, False: 4.95k]
  ------------------
  901|  4.95k|            match->flow.nw_proto == IPPROTO_SCTP ||
  ------------------
  |  Branch (901:13): [True: 957, False: 3.99k]
  ------------------
  902|  3.99k|            match->flow.nw_proto == IPPROTO_ICMP) {
  ------------------
  |  Branch (902:13): [True: 692, False: 3.30k]
  ------------------
  903|  2.62k|            may_match |= MAY_TP_ADDR;
  904|  2.62k|        }
  905|  27.5k|    } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (905:16): [True: 1.76k, False: 25.7k]
  ------------------
  906|  1.76k|        may_match |= MAY_NW_PROTO | MAY_IPVx | MAY_IPV6;
  907|  1.76k|        if (match->flow.nw_proto == IPPROTO_TCP ||
  ------------------
  |  Branch (907:13): [True: 175, False: 1.58k]
  ------------------
  908|  1.58k|            match->flow.nw_proto == IPPROTO_UDP ||
  ------------------
  |  Branch (908:13): [True: 316, False: 1.27k]
  ------------------
  909|  1.27k|            match->flow.nw_proto == IPPROTO_SCTP) {
  ------------------
  |  Branch (909:13): [True: 274, False: 996]
  ------------------
  910|    765|            may_match |= MAY_TP_ADDR;
  911|    996|        } else if (match->flow.nw_proto == IPPROTO_ICMPV6) {
  ------------------
  |  Branch (911:20): [True: 204, False: 792]
  ------------------
  912|    204|            may_match |= MAY_TP_ADDR;
  913|    204|            if (match->flow.tp_src == htons(ND_NEIGHBOR_SOLICIT)) {
  ------------------
  |  Branch (913:17): [True: 37, False: 167]
  ------------------
  914|     37|                may_match |= MAY_ND_TARGET | MAY_ARP_SHA;
  915|    167|            } else if (match->flow.tp_src == htons(ND_NEIGHBOR_ADVERT)) {
  ------------------
  |  Branch (915:24): [True: 86, False: 81]
  ------------------
  916|     86|                may_match |= MAY_ND_TARGET | MAY_ARP_THA;
  917|     86|            }
  918|    204|        }
  919|  25.7k|    } else if (dl_type == htons(ETH_TYPE_ARP) ||
  ------------------
  |  Branch (919:16): [True: 696, False: 25.0k]
  ------------------
  920|  25.0k|               dl_type == htons(ETH_TYPE_RARP)) {
  ------------------
  |  Branch (920:16): [True: 104, False: 24.9k]
  ------------------
  921|    800|        may_match |= MAY_NW_PROTO | MAY_NW_ADDR | MAY_ARP_SHA | MAY_ARP_THA;
  922|  24.9k|    } else if (eth_type_mpls(dl_type)) {
  ------------------
  |  Branch (922:16): [True: 204, False: 24.7k]
  ------------------
  923|    204|        may_match |= MAY_MPLS;
  924|    204|    }
  925|       |
  926|       |    /* Clear the fields that may not be matched. */
  927|  33.4k|    if (!(may_match & MAY_ETHER)) {
  ------------------
  |  Branch (927:9): [True: 0, False: 33.4k]
  ------------------
  928|      0|        wc.masks.dl_src = wc.masks.dl_dst = eth_addr_zero;
  929|      0|    }
  930|  33.4k|    if (!(may_match & MAY_NW_ADDR)) {
  ------------------
  |  Branch (930:9): [True: 26.7k, False: 6.72k]
  ------------------
  931|  26.7k|        wc.masks.nw_src = wc.masks.nw_dst = htonl(0);
  932|  26.7k|    }
  933|  33.4k|    if (!(may_match & MAY_TP_ADDR)) {
  ------------------
  |  Branch (933:9): [True: 29.8k, False: 3.58k]
  ------------------
  934|  29.8k|        wc.masks.tp_src = wc.masks.tp_dst = htons(0);
  935|  29.8k|    }
  936|  33.4k|    if (!(may_match & MAY_NW_PROTO)) {
  ------------------
  |  Branch (936:9): [True: 24.9k, False: 8.48k]
  ------------------
  937|  24.9k|        wc.masks.nw_proto = 0;
  938|  24.9k|    }
  939|  33.4k|    if (!(may_match & MAY_IPVx)) {
  ------------------
  |  Branch (939:9): [True: 25.7k, False: 7.68k]
  ------------------
  940|  25.7k|        wc.masks.nw_tos = 0;
  941|  25.7k|        wc.masks.nw_ttl = 0;
  942|  25.7k|    }
  943|  33.4k|    if (!(may_match & MAY_ARP_SHA)) {
  ------------------
  |  Branch (943:9): [True: 32.5k, False: 837]
  ------------------
  944|  32.5k|        WC_UNMASK_FIELD(&wc, arp_sha);
  ------------------
  |  |  205|  32.5k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
  945|  32.5k|    }
  946|  33.4k|    if (!(may_match & MAY_ARP_THA)) {
  ------------------
  |  Branch (946:9): [True: 32.5k, False: 886]
  ------------------
  947|  32.5k|        WC_UNMASK_FIELD(&wc, arp_tha);
  ------------------
  |  |  205|  32.5k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
  948|  32.5k|    }
  949|  33.4k|    if (!(may_match & MAY_IPV6)) {
  ------------------
  |  Branch (949:9): [True: 31.6k, False: 1.76k]
  ------------------
  950|  31.6k|        wc.masks.ipv6_src = wc.masks.ipv6_dst = in6addr_any;
  951|  31.6k|        wc.masks.ipv6_label = htonl(0);
  952|  31.6k|    }
  953|  33.4k|    if (!(may_match & MAY_ND_TARGET)) {
  ------------------
  |  Branch (953:9): [True: 33.3k, False: 123]
  ------------------
  954|  33.3k|        wc.masks.nd_target = in6addr_any;
  955|  33.3k|    }
  956|  33.4k|    if (!(may_match & MAY_MPLS)) {
  ------------------
  |  Branch (956:9): [True: 33.2k, False: 204]
  ------------------
  957|  33.2k|        memset(wc.masks.mpls_lse, 0, sizeof wc.masks.mpls_lse);
  958|  33.2k|    }
  959|       |
  960|       |    /* Log any changes. */
  961|  33.4k|    if (!flow_wildcards_equal(&wc, &match->wc)) {
  ------------------
  |  Branch (961:9): [True: 29.9k, False: 3.50k]
  ------------------
  962|  29.9k|        bool log = may_log && !VLOG_DROP_INFO(&rl);
  ------------------
  |  |  235|  59.8k|#define VLOG_DROP_INFO(RL) vlog_should_drop(&this_module, VLL_INFO, RL)
  ------------------
  |  Branch (962:20): [True: 29.9k, False: 0]
  |  Branch (962:31): [True: 0, False: 29.9k]
  ------------------
  963|  29.9k|        char *pre = (log
  ------------------
  |  Branch (963:22): [True: 0, False: 29.9k]
  ------------------
  964|  29.9k|                     ? match_to_string(match, NULL, OFP_DEFAULT_PRIORITY)
  ------------------
  |  |  138|      0|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
  965|  29.9k|                     : NULL);
  966|       |
  967|  29.9k|        match->wc = wc;
  968|  29.9k|        match_zero_wildcarded_fields(match);
  969|       |
  970|  29.9k|        if (log) {
  ------------------
  |  Branch (970:13): [True: 0, False: 29.9k]
  ------------------
  971|      0|            char *post = match_to_string(match, NULL, OFP_DEFAULT_PRIORITY);
  ------------------
  |  |  138|      0|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
  972|      0|            VLOG_INFO("normalization changed ofp_match, details:");
  ------------------
  |  |  210|      0|#define VLOG_INFO(...) VLOG(VLL_INFO, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  280|      0|    do {                                                \
  |  |  |  |  281|      0|        enum vlog_level level__ = LEVEL;                \
  |  |  |  |  282|      0|        if (this_module.min_level >= level__) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (282:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  283|      0|            vlog(&this_module, level__, __VA_ARGS__);   \
  |  |  |  |  284|      0|        }                                               \
  |  |  |  |  285|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (285:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  973|      0|            VLOG_INFO(" pre: %s", pre);
  ------------------
  |  |  210|      0|#define VLOG_INFO(...) VLOG(VLL_INFO, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  280|      0|    do {                                                \
  |  |  |  |  281|      0|        enum vlog_level level__ = LEVEL;                \
  |  |  |  |  282|      0|        if (this_module.min_level >= level__) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (282:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  283|      0|            vlog(&this_module, level__, __VA_ARGS__);   \
  |  |  |  |  284|      0|        }                                               \
  |  |  |  |  285|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (285:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  974|      0|            VLOG_INFO("post: %s", post);
  ------------------
  |  |  210|      0|#define VLOG_INFO(...) VLOG(VLL_INFO, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  280|      0|    do {                                                \
  |  |  |  |  281|      0|        enum vlog_level level__ = LEVEL;                \
  |  |  |  |  282|      0|        if (this_module.min_level >= level__) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (282:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  283|      0|            vlog(&this_module, level__, __VA_ARGS__);   \
  |  |  |  |  284|      0|        }                                               \
  |  |  |  |  285|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (285:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  975|      0|            free(pre);
  976|      0|            free(post);
  977|      0|        }
  978|  29.9k|    }
  979|  33.4k|}

ofputil_format_meter_id:
   34|  4.85k|{
   35|  4.85k|    if (meter_id <= OFPM13_MAX) {
  ------------------
  |  Branch (35:9): [True: 3.13k, False: 1.72k]
  ------------------
   36|  3.13k|        ds_put_format(s, "meter%c%"PRIu32, separator, meter_id);
   37|  3.13k|    } else {
   38|  1.72k|        const char *name;
   39|  1.72k|        switch (meter_id) {
   40|    113|        case OFPM13_SLOWPATH:
  ------------------
  |  Branch (40:9): [True: 113, False: 1.60k]
  ------------------
   41|    113|            name = "slowpath";
   42|    113|            break;
   43|     58|        case OFPM13_CONTROLLER:
  ------------------
  |  Branch (43:9): [True: 58, False: 1.66k]
  ------------------
   44|     58|            name = "controller";
   45|     58|            break;
   46|    483|        case OFPM13_ALL:
  ------------------
  |  Branch (46:9): [True: 483, False: 1.23k]
  ------------------
   47|    483|            name = "all";
   48|    483|            break;
   49|  1.06k|        default:
  ------------------
  |  Branch (49:9): [True: 1.06k, False: 654]
  ------------------
   50|  1.06k|            name = "unknown";
   51|  1.72k|        }
   52|  1.72k|        ds_put_format(s, "meter%c%s", separator, name);
   53|  1.72k|    }
   54|  4.85k|}
ofputil_format_meter_band:
   59|  2.54k|{
   60|  2.54k|    ds_put_cstr(s, "\ntype=");
   61|  2.54k|    switch (mb->type) {
   62|  2.46k|    case OFPMBT13_DROP:
  ------------------
  |  Branch (62:5): [True: 2.46k, False: 73]
  ------------------
   63|  2.46k|        ds_put_cstr(s, "drop");
   64|  2.46k|        break;
   65|     73|    case OFPMBT13_DSCP_REMARK:
  ------------------
  |  Branch (65:5): [True: 73, False: 2.46k]
  ------------------
   66|     73|        ds_put_cstr(s, "dscp_remark");
   67|     73|        break;
   68|      0|    default:
  ------------------
  |  Branch (68:5): [True: 0, False: 2.54k]
  ------------------
   69|      0|        ds_put_format(s, "%u", mb->type);
   70|  2.54k|    }
   71|       |
   72|  2.54k|    ds_put_format(s, " rate=%"PRIu32, mb->rate);
   73|       |
   74|  2.54k|    if (flags & OFPMF13_BURST) {
  ------------------
  |  Branch (74:9): [True: 242, False: 2.29k]
  ------------------
   75|    242|        ds_put_format(s, " burst_size=%"PRIu32, mb->burst_size);
   76|    242|    }
   77|  2.54k|    if (mb->type == OFPMBT13_DSCP_REMARK) {
  ------------------
  |  Branch (77:9): [True: 73, False: 2.46k]
  ------------------
   78|       |        ds_put_format(s, " prec_level=%"PRIu8, mb->prec_level);
   79|     73|    }
   80|  2.54k|}
ofputil_decode_meter_mod:
  126|  7.33k|{
  127|  7.33k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  128|  7.33k|    ofpraw_pull_assert(&b);
  129|  7.33k|    const struct ofp13_meter_mod *omm = ofpbuf_pull(&b, sizeof *omm);
  130|       |
  131|       |    /* Translate the message. */
  132|  7.33k|    mm->command = ntohs(omm->command);
  133|  7.33k|    if (mm->command != OFPMC13_ADD &&
  ------------------
  |  Branch (133:9): [True: 4.29k, False: 3.03k]
  ------------------
  134|  4.29k|        mm->command != OFPMC13_MODIFY &&
  ------------------
  |  Branch (134:9): [True: 1.29k, False: 2.99k]
  ------------------
  135|  1.29k|        mm->command != OFPMC13_DELETE) {
  ------------------
  |  Branch (135:9): [True: 1.07k, False: 219]
  ------------------
  136|  1.07k|        return OFPERR_OFPMMFC_BAD_COMMAND;
  137|  1.07k|    }
  138|  6.25k|    mm->meter.meter_id = ntohl(omm->meter_id);
  139|       |
  140|  6.25k|    if (mm->command == OFPMC13_DELETE) {
  ------------------
  |  Branch (140:9): [True: 219, False: 6.03k]
  ------------------
  141|    219|        mm->meter.flags = 0;
  142|    219|        mm->meter.n_bands = 0;
  143|    219|        mm->meter.bands = NULL;
  144|  6.03k|    } else {
  145|  6.03k|        enum ofperr error;
  146|       |
  147|  6.03k|        mm->meter.flags = ntohs(omm->flags);
  148|  6.03k|        if (mm->meter.flags & OFPMF13_KBPS &&
  ------------------
  |  Branch (148:13): [True: 2.10k, False: 3.92k]
  ------------------
  149|  2.10k|            mm->meter.flags & OFPMF13_PKTPS) {
  ------------------
  |  Branch (149:13): [True: 1.79k, False: 309]
  ------------------
  150|  1.79k|            return OFPERR_OFPMMFC_BAD_FLAGS;
  151|  1.79k|        }
  152|       |
  153|  4.23k|        error = ofputil_pull_bands(&b, b.size, &mm->meter.n_bands, bands);
  154|  4.23k|        if (error) {
  ------------------
  |  Branch (154:13): [True: 2.77k, False: 1.46k]
  ------------------
  155|  2.77k|            return error;
  156|  2.77k|        }
  157|  1.46k|        mm->meter.bands = bands->data;
  158|  1.46k|    }
  159|  1.67k|    return 0;
  160|  6.25k|}
ofputil_decode_meter_request:
  164|  1.31k|{
  165|  1.31k|    const struct ofp13_meter_multipart_request *omr = ofpmsg_body(oh);
  166|       |    *meter_id = ntohl(omr->meter_id);
  167|  1.31k|}
ofputil_decode_meter_config:
  289|  2.30k|{
  290|  2.30k|    const struct ofp13_meter_config *omc;
  291|  2.30k|    enum ofperr err;
  292|       |
  293|       |    /* Pull OpenFlow headers for the first call. */
  294|  2.30k|    if (!msg->header) {
  ------------------
  |  Branch (294:9): [True: 1.27k, False: 1.02k]
  ------------------
  295|  1.27k|        ofpraw_pull_assert(msg);
  296|  1.27k|    }
  297|       |
  298|  2.30k|    if (!msg->size) {
  ------------------
  |  Branch (298:9): [True: 747, False: 1.55k]
  ------------------
  299|    747|        return EOF;
  300|    747|    }
  301|       |
  302|  1.55k|    omc = ofpbuf_try_pull(msg, sizeof *omc);
  303|  1.55k|    if (!omc) {
  ------------------
  |  Branch (303:9): [True: 0, False: 1.55k]
  ------------------
  304|      0|        VLOG_WARN_RL(&rl, "OFPMP_METER_CONFIG reply has %"PRIu32" leftover "
  ------------------
  |  |  224|      0|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|      0|    do {                                                                \
  |  |  |  |  288|      0|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|      0|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  305|      0|                     "bytes at end", msg->size);
  306|      0|        return OFPERR_OFPBRC_BAD_LEN;
  307|      0|    }
  308|       |
  309|  1.55k|    ofpbuf_clear(bands);
  310|  1.55k|    err = ofputil_pull_bands(msg, ntohs(omc->length) - sizeof *omc,
  311|  1.55k|                             &mc->n_bands, bands);
  312|  1.55k|    if (err) {
  ------------------
  |  Branch (312:9): [True: 530, False: 1.02k]
  ------------------
  313|    530|        return err;
  314|    530|    }
  315|  1.02k|    mc->meter_id = ntohl(omc->meter_id);
  316|  1.02k|    mc->flags = ntohs(omc->flags);
  317|  1.02k|    mc->bands = bands->data;
  318|       |
  319|  1.02k|    return 0;
  320|  1.55k|}
ofputil_format_meter_config:
  347|  2.70k|{
  348|  2.70k|    uint16_t i;
  349|       |
  350|  2.70k|    ofputil_format_meter_id(s, mc->meter_id, '=');
  351|  2.70k|    ds_put_char(s, ' ');
  352|       |
  353|  2.70k|    ofp_print_meter_flags(s, mc->flags);
  354|       |
  355|  2.70k|    ds_put_cstr(s, "bands=");
  356|  5.24k|    for (i = 0; i < mc->n_bands; ++i) {
  ------------------
  |  Branch (356:17): [True: 2.54k, False: 2.70k]
  ------------------
  357|  2.54k|        ofputil_format_meter_band(s, mc->flags, &mc->bands[i]);
  358|  2.54k|    }
  359|  2.70k|    ds_put_char(s, '\n');
  360|  2.70k|}
ofputil_decode_meter_stats:
  404|  2.05k|{
  405|  2.05k|    const struct ofp13_meter_stats *oms;
  406|  2.05k|    enum ofperr err;
  407|       |
  408|       |    /* Pull OpenFlow headers for the first call. */
  409|  2.05k|    if (!msg->header) {
  ------------------
  |  Branch (409:9): [True: 1.22k, False: 836]
  ------------------
  410|  1.22k|        ofpraw_pull_assert(msg);
  411|  1.22k|    }
  412|       |
  413|  2.05k|    if (!msg->size) {
  ------------------
  |  Branch (413:9): [True: 353, False: 1.70k]
  ------------------
  414|    353|        return EOF;
  415|    353|    }
  416|       |
  417|  1.70k|    oms = ofpbuf_try_pull(msg, sizeof *oms);
  418|  1.70k|    if (!oms) {
  ------------------
  |  Branch (418:9): [True: 440, False: 1.26k]
  ------------------
  419|    440|        VLOG_WARN_RL(&rl, "OFPMP_METER reply has %"PRIu32" leftover bytes "
  ------------------
  |  |  224|    440|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    440|    do {                                                                \
  |  |  |  |  288|    440|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    440|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 440]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    440|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 440]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  420|    440|                     "at end", msg->size);
  421|    440|        return OFPERR_OFPBRC_BAD_LEN;
  422|    440|    }
  423|       |
  424|  1.26k|    ofpbuf_clear(bands);
  425|  1.26k|    err = ofputil_pull_band_stats(msg, ntohs(oms->len) - sizeof *oms,
  426|  1.26k|                                  &ms->n_bands, bands);
  427|  1.26k|    if (err) {
  ------------------
  |  Branch (427:9): [True: 428, False: 836]
  ------------------
  428|    428|        return err;
  429|    428|    }
  430|    836|    ms->meter_id = ntohl(oms->meter_id);
  431|    836|    ms->flow_count = ntohl(oms->flow_count);
  432|    836|    ms->packet_in_count = ntohll(oms->packet_in_count);
  433|    836|    ms->byte_in_count = ntohll(oms->byte_in_count);
  434|    836|    ms->duration_sec = ntohl(oms->duration_sec);
  435|    836|    ms->duration_nsec = ntohl(oms->duration_nsec);
  436|    836|    ms->bands = bands->data;
  437|       |
  438|    836|    return 0;
  439|  1.26k|}
ofputil_format_meter_stats:
  443|    836|{
  444|    836|    uint16_t i;
  445|       |
  446|    836|    ofputil_format_meter_id(s, ms->meter_id, ':');
  447|    836|    ds_put_char(s, ' ');
  448|    836|    ds_put_format(s, "flow_count:%"PRIu32" ", ms->flow_count);
  449|    836|    ds_put_format(s, "packet_in_count:%"PRIu64" ", ms->packet_in_count);
  450|    836|    ds_put_format(s, "byte_in_count:%"PRIu64" ", ms->byte_in_count);
  451|    836|    ds_put_cstr(s, "duration:");
  452|    836|    ofp_print_duration(s, ms->duration_sec, ms->duration_nsec);
  453|    836|    ds_put_char(s, ' ');
  454|       |
  455|    836|    ds_put_cstr(s, "bands:\n");
  456|  1.85k|    for (i = 0; i < ms->n_bands; ++i) {
  ------------------
  |  Branch (456:17): [True: 1.01k, False: 836]
  ------------------
  457|  1.01k|        ds_put_format(s, "%d: ", i);
  458|  1.01k|        ds_put_format(s, "packet_count:%"PRIu64" ", ms->bands[i].packet_count);
  459|  1.01k|        ds_put_format(s, "byte_count:%"PRIu64"\n", ms->bands[i].byte_count);
  460|  1.01k|    }
  461|    836|}
ofputil_decode_meter_features:
  466|    303|{
  467|    303|    const struct ofp13_meter_features *omf = ofpmsg_body(oh);
  468|       |
  469|    303|    mf->max_meters = ntohl(omf->max_meter);
  470|    303|    mf->band_types = ntohl(omf->band_types);
  471|       |    mf->capabilities = ntohl(omf->capabilities);
  472|    303|    mf->max_bands = omf->max_bands;
  473|    303|    mf->max_color = omf->max_color;
  474|    303|}
ofputil_format_meter_features:
  524|    303|{
  525|    303|    ds_put_format(s, "\nmax_meter:%"PRIu32, mf->max_meters);
  526|    303|    ds_put_format(s, " max_bands:%"PRIu8, mf->max_bands);
  527|    303|    ds_put_format(s, " max_color:%"PRIu8"\n", mf->max_color);
  528|       |
  529|    303|    ds_put_cstr(s, "band_types: ");
  530|    303|    ofp_print_bit_names(s, mf->band_types,
  531|    303|                        ofputil_meter_band_types_to_name, ' ');
  532|    303|    ds_put_char(s, '\n');
  533|       |
  534|    303|    ds_put_cstr(s, "capabilities: ");
  535|    303|    ofp_print_bit_names(s, mf->capabilities,
  536|    303|                        ofputil_meter_capabilities_to_name, ' ');
  537|    303|    ds_put_char(s, '\n');
  538|    303|}
ofputil_format_meter_mod:
  797|  1.67k|{
  798|  1.67k|    switch (mm->command) {
  799|    940|    case OFPMC13_ADD:
  ------------------
  |  Branch (799:5): [True: 940, False: 739]
  ------------------
  800|    940|        ds_put_cstr(s, " ADD ");
  801|    940|        break;
  802|    520|    case OFPMC13_MODIFY:
  ------------------
  |  Branch (802:5): [True: 520, False: 1.15k]
  ------------------
  803|    520|        ds_put_cstr(s, " MOD ");
  804|    520|        break;
  805|    219|    case OFPMC13_DELETE:
  ------------------
  |  Branch (805:5): [True: 219, False: 1.46k]
  ------------------
  806|    219|        ds_put_cstr(s, " DEL ");
  807|    219|        break;
  808|      0|    default:
  ------------------
  |  Branch (808:5): [True: 0, False: 1.67k]
  ------------------
  809|      0|        ds_put_format(s, " cmd:%d ", mm->command);
  810|  1.67k|    }
  811|       |
  812|  1.67k|    ofputil_format_meter_config(s, &mm->meter);
  813|  1.67k|}
ofp-meter.c:ofputil_pull_bands:
   85|  5.79k|{
   86|  5.79k|    const struct ofp13_meter_band_header *ombh;
   87|  5.79k|    struct ofputil_meter_band *mb;
   88|  5.79k|    uint16_t n = 0;
   89|       |
   90|  5.79k|    ombh = ofpbuf_try_pull(msg, len);
   91|  5.79k|    if (!ombh) {
  ------------------
  |  Branch (91:9): [True: 190, False: 5.60k]
  ------------------
   92|    190|        return OFPERR_OFPBRC_BAD_LEN;
   93|    190|    }
   94|       |
   95|  8.59k|    while (len >= sizeof (struct ofp13_meter_band_drop)) {
  ------------------
  |  Branch (95:12): [True: 4.46k, False: 4.13k]
  ------------------
   96|  4.46k|        size_t ombh_len = ntohs(ombh->len);
   97|       |        /* All supported band types have the same length. */
   98|  4.46k|        if (ombh_len != sizeof (struct ofp13_meter_band_drop)) {
  ------------------
  |  Branch (98:13): [True: 846, False: 3.61k]
  ------------------
   99|    846|            return OFPERR_OFPBRC_BAD_LEN;
  100|    846|        }
  101|  3.61k|        mb = ofpbuf_put_uninit(bands, sizeof *mb);
  102|  3.61k|        mb->type = ntohs(ombh->type);
  103|  3.61k|        if (mb->type != OFPMBT13_DROP && mb->type != OFPMBT13_DSCP_REMARK) {
  ------------------
  |  Branch (103:13): [True: 819, False: 2.79k]
  |  Branch (103:42): [True: 621, False: 198]
  ------------------
  104|    621|            return OFPERR_OFPMMFC_BAD_BAND;
  105|    621|        }
  106|  2.99k|        mb->rate = ntohl(ombh->rate);
  107|  2.99k|        mb->burst_size = ntohl(ombh->burst_size);
  108|  2.99k|        mb->prec_level = (mb->type == OFPMBT13_DSCP_REMARK) ?
  ------------------
  |  Branch (108:26): [True: 198, False: 2.79k]
  ------------------
  109|  2.79k|            ((struct ofp13_meter_band_dscp_remark *)ombh)->prec_level : 0;
  110|  2.99k|        n++;
  111|  2.99k|        len -= ombh_len;
  112|  2.99k|        ombh = ALIGNED_CAST(struct ofp13_meter_band_header *,
  ------------------
  |  |  434|  2.99k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  113|  2.99k|                            (char *) ombh + ombh_len);
  114|  2.99k|    }
  115|  4.13k|    if (len) {
  ------------------
  |  Branch (115:9): [True: 1.65k, False: 2.48k]
  ------------------
  116|  1.65k|        return OFPERR_OFPBRC_BAD_LEN;
  117|  1.65k|    }
  118|  2.48k|    *n_bands = n;
  119|  2.48k|    return 0;
  120|  4.13k|}
ofp-meter.c:ofp_print_meter_flags:
  324|  2.70k|{
  325|  2.70k|    if (flags & OFPMF13_KBPS) {
  ------------------
  |  Branch (325:9): [True: 1.07k, False: 1.62k]
  ------------------
  326|  1.07k|        ds_put_cstr(s, "kbps ");
  327|  1.07k|    }
  328|  2.70k|    if (flags & OFPMF13_PKTPS) {
  ------------------
  |  Branch (328:9): [True: 1.16k, False: 1.54k]
  ------------------
  329|  1.16k|        ds_put_cstr(s, "pktps ");
  330|  1.16k|    }
  331|  2.70k|    if (flags & OFPMF13_BURST) {
  ------------------
  |  Branch (331:9): [True: 507, False: 2.19k]
  ------------------
  332|    507|        ds_put_cstr(s, "burst ");
  333|    507|    }
  334|  2.70k|    if (flags & OFPMF13_STATS) {
  ------------------
  |  Branch (334:9): [True: 1.15k, False: 1.55k]
  ------------------
  335|  1.15k|        ds_put_cstr(s, "stats ");
  336|  1.15k|    }
  337|       |
  338|  2.70k|    flags &= ~(OFPMF13_KBPS | OFPMF13_PKTPS | OFPMF13_BURST | OFPMF13_STATS);
  339|  2.70k|    if (flags) {
  ------------------
  |  Branch (339:9): [True: 1.67k, False: 1.03k]
  ------------------
  340|  1.67k|        ds_put_format(s, "flags:0x%x ", (unsigned)flags);
  341|  1.67k|    }
  342|  2.70k|}
ofp-meter.c:ofputil_pull_band_stats:
  365|  1.26k|{
  366|  1.26k|    const struct ofp13_meter_band_stats *ombs;
  367|  1.26k|    struct ofputil_meter_band_stats *mbs;
  368|  1.26k|    uint16_t n, i;
  369|       |
  370|  1.26k|    ombs = ofpbuf_try_pull(msg, len);
  371|  1.26k|    if (!ombs) {
  ------------------
  |  Branch (371:9): [True: 320, False: 944]
  ------------------
  372|    320|        return OFPERR_OFPBRC_BAD_LEN;
  373|    320|    }
  374|       |
  375|    944|    n = len / sizeof *ombs;
  376|    944|    if (len != n * sizeof *ombs) {
  ------------------
  |  Branch (376:9): [True: 108, False: 836]
  ------------------
  377|    108|        return OFPERR_OFPBRC_BAD_LEN;
  378|    108|    }
  379|       |
  380|    836|    mbs = ofpbuf_put_uninit(bands, len);
  381|       |
  382|  1.85k|    for (i = 0; i < n; ++i) {
  ------------------
  |  Branch (382:17): [True: 1.01k, False: 836]
  ------------------
  383|  1.01k|        mbs[i].packet_count = ntohll(ombs[i].packet_band_count);
  384|  1.01k|        mbs[i].byte_count = ntohll(ombs[i].byte_band_count);
  385|  1.01k|    }
  386|    836|    *n_bands = n;
  387|    836|    return 0;
  388|    944|}
ofp-meter.c:ofputil_meter_band_types_to_name:
  497|  2.88k|{
  498|  2.88k|    switch (bit) {
  ------------------
  |  Branch (498:13): [True: 171, False: 2.71k]
  ------------------
  499|    136|    case 1 << OFPMBT13_DROP:          return "drop";
  ------------------
  |  Branch (499:5): [True: 136, False: 2.74k]
  ------------------
  500|     35|    case 1 << OFPMBT13_DSCP_REMARK:   return "dscp_remark";
  ------------------
  |  Branch (500:5): [True: 35, False: 2.84k]
  ------------------
  501|  2.88k|    }
  502|       |
  503|  2.71k|    return NULL;
  504|  2.88k|}
ofp-meter.c:ofputil_meter_capabilities_to_name:
  508|  3.00k|{
  509|  3.00k|    enum ofp13_meter_flags flag = bit;
  510|       |
  511|  3.00k|    switch (flag) {
  ------------------
  |  Branch (511:13): [True: 436, False: 2.56k]
  ------------------
  512|    139|    case OFPMF13_KBPS:    return "kbps";
  ------------------
  |  Branch (512:5): [True: 139, False: 2.86k]
  ------------------
  513|    130|    case OFPMF13_PKTPS:   return "pktps";
  ------------------
  |  Branch (513:5): [True: 130, False: 2.87k]
  ------------------
  514|    131|    case OFPMF13_BURST:   return "burst";
  ------------------
  |  Branch (514:5): [True: 131, False: 2.87k]
  ------------------
  515|     36|    case OFPMF13_STATS:   return "stats";
  ------------------
  |  Branch (515:5): [True: 36, False: 2.96k]
  ------------------
  516|  3.00k|    }
  517|       |
  518|  2.56k|    return NULL;
  519|  3.00k|}

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

ofphdrs_len:
  368|  9.29k|{
  369|  9.29k|    if (hdrs->type == OFPT_VENDOR) {
  ------------------
  |  |   32|  9.29k|#define OFPT_VENDOR 4
  ------------------
  |  Branch (369:9): [True: 426, False: 8.87k]
  ------------------
  370|    426|        return sizeof(struct ofp_vendor_header);
  371|    426|    }
  372|       |
  373|  8.87k|    switch ((enum ofp_version) hdrs->version) {
  ------------------
  |  Branch (373:13): [True: 7.87k, False: 996]
  ------------------
  374|  1.06k|    case OFP10_VERSION:
  ------------------
  |  Branch (374:5): [True: 1.06k, False: 7.80k]
  ------------------
  375|  1.06k|        if (hdrs->type == OFPT10_STATS_REQUEST ||
  ------------------
  |  |   33|  2.13k|#define OFPT10_STATS_REQUEST 16
  ------------------
  |  Branch (375:13): [True: 1.03k, False: 36]
  ------------------
  376|  1.04k|            hdrs->type == OFPT10_STATS_REPLY) {
  ------------------
  |  |   34|     36|#define OFPT10_STATS_REPLY 17
  ------------------
  |  Branch (376:13): [True: 17, False: 19]
  ------------------
  377|  1.04k|            return (hdrs->stat == OFPST_VENDOR
  ------------------
  |  |   37|  1.04k|#define OFPST_VENDOR 0xffff
  ------------------
  |  Branch (377:21): [True: 21, False: 1.02k]
  ------------------
  378|  1.04k|                    ? sizeof(struct nicira10_stats_msg)
  379|  1.04k|                    : sizeof(struct ofp10_stats_msg));
  380|  1.04k|        }
  381|     19|        break;
  382|       |
  383|    719|    case OFP11_VERSION:
  ------------------
  |  Branch (383:5): [True: 719, False: 8.15k]
  ------------------
  384|  1.61k|    case OFP12_VERSION:
  ------------------
  |  Branch (384:5): [True: 898, False: 7.97k]
  ------------------
  385|  3.19k|    case OFP13_VERSION:
  ------------------
  |  Branch (385:5): [True: 1.57k, False: 7.29k]
  ------------------
  386|  5.58k|    case OFP14_VERSION:
  ------------------
  |  Branch (386:5): [True: 2.39k, False: 6.48k]
  ------------------
  387|  6.80k|    case OFP15_VERSION:
  ------------------
  |  Branch (387:5): [True: 1.22k, False: 7.64k]
  ------------------
  388|  6.80k|        if (hdrs->type == OFPT11_STATS_REQUEST ||
  ------------------
  |  |   35|  13.6k|#define OFPT11_STATS_REQUEST 18
  ------------------
  |  Branch (388:13): [True: 4.65k, False: 2.15k]
  ------------------
  389|  5.57k|            hdrs->type == OFPT11_STATS_REPLY) {
  ------------------
  |  |   36|  2.15k|#define OFPT11_STATS_REPLY 19
  ------------------
  |  Branch (389:13): [True: 918, False: 1.23k]
  ------------------
  390|  5.57k|            return (hdrs->stat == OFPST_VENDOR
  ------------------
  |  |   37|  5.57k|#define OFPST_VENDOR 0xffff
  ------------------
  |  Branch (390:21): [True: 28, False: 5.54k]
  ------------------
  391|  5.57k|                    ? sizeof(struct ofp11_vendor_stats_msg)
  392|  5.57k|                    : sizeof(struct ofp11_stats_msg));
  393|  5.57k|        }
  394|  1.23k|        break;
  395|  8.87k|    }
  396|       |
  397|  2.24k|    return sizeof(struct ofp_header);
  398|  8.87k|}
ofpraw_decode:
  409|  1.52M|{
  410|       |    struct ofpbuf msg = ofpbuf_const_initializer(oh, ntohs(oh->length));
  411|  1.52M|    return ofpraw_pull(raw, &msg);
  412|  1.52M|}
ofpraw_decode_assert:
  422|  15.7k|{
  423|  15.7k|    enum ofpraw raw;
  424|  15.7k|    ovs_assert(!ofpraw_decode(&raw, oh));
  ------------------
  |  |   62|  15.7k|#define ovs_assert ovs_ignore
  ------------------
  425|  15.7k|    return raw;
  426|  15.7k|}
ofpraw_pull:
  485|  2.49M|{
  486|       |    /* Set default outputs. */
  487|  2.49M|    msg->header = msg->data;
  488|  2.49M|    msg->msg = msg->header;
  489|  2.49M|    *rawp = 0;
  490|       |
  491|  2.49M|    struct ofphdrs hdrs;
  492|  2.49M|    enum ofperr error = ofphdrs_decode(&hdrs, msg->data, msg->size);
  493|  2.49M|    if (error) {
  ------------------
  |  Branch (493:9): [True: 30.3k, False: 2.46M]
  ------------------
  494|  30.3k|        return error;
  495|  30.3k|    }
  496|       |
  497|  2.46M|    enum ofpraw raw;
  498|  2.46M|    error = ofpraw_from_ofphdrs(&raw, &hdrs);
  499|  2.46M|    if (error) {
  ------------------
  |  Branch (499:9): [True: 316k, False: 2.15M]
  ------------------
  500|   316k|        return error;
  501|   316k|    }
  502|       |
  503|  2.15M|    const struct raw_info *info = raw_info_get(raw);
  504|  2.15M|    const struct raw_instance *instance = raw_instance_get(info, hdrs.version);
  505|  2.15M|    error = ofpraw_check_length(info, instance, msg->size);
  506|  2.15M|    if (error) {
  ------------------
  |  Branch (506:9): [True: 52.7k, False: 2.09M]
  ------------------
  507|  52.7k|        return error;
  508|  52.7k|    }
  509|       |
  510|  2.09M|    msg->header = ofpbuf_pull(msg, instance->hdrs_len);
  511|  2.09M|    msg->msg = msg->data;
  512|  2.09M|    *rawp = raw;
  513|  2.09M|    return 0;
  514|  2.15M|}
ofpraw_pull_assert:
  524|   449k|{
  525|   449k|    enum ofpraw raw;
  526|   449k|    ovs_assert(!ofpraw_pull(&raw, msg));
  ------------------
  |  |   62|   449k|#define ovs_assert ovs_ignore
  ------------------
  527|   449k|    return raw;
  528|   449k|}
ofpraw_decode_partial:
  543|  6.85k|{
  544|  6.85k|    struct ofphdrs hdrs;
  545|  6.85k|    enum ofperr error;
  546|       |
  547|  6.85k|    error = ofphdrs_decode(&hdrs, oh, length);
  548|  6.85k|    if (!error) {
  ------------------
  |  Branch (548:9): [True: 6.78k, False: 76]
  ------------------
  549|  6.78k|        error = ofpraw_from_ofphdrs(raw, &hdrs);
  550|  6.78k|    }
  551|       |
  552|  6.85k|    if (error) {
  ------------------
  |  Branch (552:9): [True: 3.82k, False: 3.03k]
  ------------------
  553|  3.82k|        *raw = 0;
  554|  3.82k|    }
  555|  6.85k|    return error;
  556|  6.85k|}
ofpraw_get_name:
  782|  1.00M|{
  783|  1.00M|    return raw_info_get(raw)->name;
  784|  1.00M|}
ofptype_decode:
  828|  3.02k|{
  829|  3.02k|    enum ofperr error;
  830|  3.02k|    enum ofpraw raw;
  831|       |
  832|  3.02k|    error = ofpraw_decode(&raw, oh);
  833|  3.02k|    *typep = error ? 0 : ofptype_from_ofpraw(raw);
  ------------------
  |  Branch (833:14): [True: 278, False: 2.74k]
  ------------------
  834|  3.02k|    return error;
  835|  3.02k|}
ofptype_from_ofpraw:
  867|  1.00M|{
  868|  1.00M|    return raw_info_get(raw)->type;
  869|  1.00M|}
ofpmsg_body:
  891|  7.83k|{
  892|  7.83k|    struct ofphdrs hdrs;
  893|       |
  894|       |    ofphdrs_decode_assert(&hdrs, oh, ntohs(oh->length));
  895|  7.83k|    return (const uint8_t *) oh + ofphdrs_len(&hdrs);
  896|  7.83k|}
ofpmsg_is_stat_request:
  901|  66.4k|{
  902|  66.4k|    return ofp_is_stat_request(oh->version, oh->type);
  903|  66.4k|}
ofpmsg_is_stat:
  915|  1.00M|{
  916|  1.00M|    return ofp_is_stat(oh->version, oh->type);
  917|  1.00M|}
ofpmp_flags:
 1049|  77.5k|{
 1050|       |    return ntohs(*ofpmp_flags__(oh));
 1051|  77.5k|}
ofp-msgs.c:ofphdrs_decode:
  215|  2.51M|{
  216|  2.51M|    memset(hdrs, 0, sizeof *hdrs);
  217|  2.51M|    if (length < sizeof *oh) {
  ------------------
  |  Branch (217:9): [True: 0, False: 2.51M]
  ------------------
  218|      0|        return OFPERR_OFPBRC_BAD_LEN;
  219|      0|    }
  220|       |
  221|       |    /* Get base message version and type (OFPT_*). */
  222|  2.51M|    hdrs->version = oh->version;
  223|  2.51M|    hdrs->type = oh->type;
  224|       |
  225|  2.51M|    if (hdrs->type == OFPT_VENDOR) {
  ------------------
  |  |   32|  2.51M|#define OFPT_VENDOR 4
  ------------------
  |  Branch (225:9): [True: 90.3k, False: 2.42M]
  ------------------
  226|       |        /* Get vendor. */
  227|  90.3k|        const struct ofp_vendor_header *ovh;
  228|       |
  229|  90.3k|        if (length < sizeof *ovh) {
  ------------------
  |  Branch (229:13): [True: 15.8k, False: 74.5k]
  ------------------
  230|  15.8k|            return OFPERR_OFPBRC_BAD_LEN;
  231|  15.8k|        }
  232|       |
  233|  74.5k|        ovh = (const struct ofp_vendor_header *) oh;
  234|  74.5k|        hdrs->vendor = ntohl(ovh->vendor);
  235|  74.5k|        if (hdrs->vendor == NX_VENDOR_ID || hdrs->vendor == ONF_VENDOR_ID) {
  ------------------
  |  |  110|   149k|#define NX_VENDOR_ID    0x00002320 /* Nicira. */
  ------------------
                      if (hdrs->vendor == NX_VENDOR_ID || hdrs->vendor == ONF_VENDOR_ID) {
  ------------------
  |  |  111|  5.80k|#define ONF_VENDOR_ID   0x4f4e4600 /* Open Networking Foundation. */
  ------------------
  |  Branch (235:13): [True: 68.6k, False: 5.80k]
  |  Branch (235:45): [True: 167, False: 5.63k]
  ------------------
  236|  68.8k|            hdrs->subtype = ntohl(ovh->subtype);
  237|  68.8k|        } else {
  238|  5.63k|            log_bad_vendor(hdrs->vendor);
  239|  5.63k|            return OFPERR_OFPBRC_BAD_VENDOR;
  240|  5.63k|        }
  241|  2.42M|    } else if (hdrs->version == OFP10_VERSION
  ------------------
  |  Branch (241:16): [True: 401k, False: 2.02M]
  ------------------
  242|   401k|               && (hdrs->type == OFPT10_STATS_REQUEST ||
  ------------------
  |  |   33|   803k|#define OFPT10_STATS_REQUEST 16
  ------------------
  |  Branch (242:20): [True: 13.9k, False: 387k]
  ------------------
  243|   387k|                   hdrs->type == OFPT10_STATS_REPLY)) {
  ------------------
  |  |   34|   387k|#define OFPT10_STATS_REPLY 17
  ------------------
  |  Branch (243:20): [True: 59.7k, False: 327k]
  ------------------
  244|  73.7k|        const struct ofp10_stats_msg *osm;
  245|       |
  246|       |        /* Get statistic type (OFPST_*). */
  247|  73.7k|        if (length < sizeof *osm) {
  ------------------
  |  Branch (247:13): [True: 777, False: 72.9k]
  ------------------
  248|    777|            return OFPERR_OFPBRC_BAD_LEN;
  249|    777|        }
  250|  72.9k|        osm = (const struct ofp10_stats_msg *) oh;
  251|  72.9k|        hdrs->stat = ntohs(osm->type);
  252|       |
  253|  72.9k|        if (hdrs->stat == OFPST_VENDOR) {
  ------------------
  |  |   37|  72.9k|#define OFPST_VENDOR 0xffff
  ------------------
  |  Branch (253:13): [True: 32.2k, False: 40.7k]
  ------------------
  254|       |            /* Get vendor. */
  255|  32.2k|            const struct ofp10_vendor_stats_msg *ovsm;
  256|       |
  257|  32.2k|            if (length < sizeof *ovsm) {
  ------------------
  |  Branch (257:17): [True: 67, False: 32.1k]
  ------------------
  258|     67|                return OFPERR_OFPBRC_BAD_LEN;
  259|     67|            }
  260|       |
  261|  32.1k|            ovsm = (const struct ofp10_vendor_stats_msg *) oh;
  262|  32.1k|            hdrs->vendor = ntohl(ovsm->vendor);
  263|  32.1k|            if (hdrs->vendor == NX_VENDOR_ID) {
  ------------------
  |  |  110|  32.1k|#define NX_VENDOR_ID    0x00002320 /* Nicira. */
  ------------------
  |  Branch (263:17): [True: 31.8k, False: 330]
  ------------------
  264|       |                /* Get Nicira statistic type (NXST_*). */
  265|  31.8k|                const struct nicira10_stats_msg *nsm;
  266|       |
  267|  31.8k|                if (length < sizeof *nsm) {
  ------------------
  |  Branch (267:21): [True: 68, False: 31.7k]
  ------------------
  268|     68|                    return OFPERR_OFPBRC_BAD_LEN;
  269|     68|                }
  270|  31.7k|                nsm = (const struct nicira10_stats_msg *) oh;
  271|  31.7k|                hdrs->subtype = ntohl(nsm->subtype);
  272|  31.7k|            } else {
  273|    330|                log_bad_vendor(hdrs->vendor);
  274|    330|                return OFPERR_OFPBRC_BAD_VENDOR;
  275|    330|            }
  276|  32.1k|        }
  277|  2.34M|    } else if (hdrs->version != OFP10_VERSION
  ------------------
  |  Branch (277:16): [True: 2.02M, False: 327k]
  ------------------
  278|  2.02M|               && (hdrs->type == OFPT11_STATS_REQUEST ||
  ------------------
  |  |   35|  4.04M|#define OFPT11_STATS_REQUEST 18
  ------------------
  |  Branch (278:20): [True: 35.5k, False: 1.98M]
  ------------------
  279|  1.98M|                   hdrs->type == OFPT11_STATS_REPLY)) {
  ------------------
  |  |   36|  1.98M|#define OFPT11_STATS_REPLY 19
  ------------------
  |  Branch (279:20): [True: 160k, False: 1.82M]
  ------------------
  280|   195k|        const struct ofp11_stats_msg *osm;
  281|       |
  282|       |        /* Get statistic type (OFPST_*). */
  283|   195k|        if (length < sizeof *osm) {
  ------------------
  |  Branch (283:13): [True: 5.77k, False: 189k]
  ------------------
  284|  5.77k|            return OFPERR_OFPBRC_BAD_LEN;
  285|  5.77k|        }
  286|   189k|        osm = (const struct ofp11_stats_msg *) oh;
  287|   189k|        hdrs->stat = ntohs(osm->type);
  288|       |
  289|   189k|        if (hdrs->stat == OFPST_VENDOR) {
  ------------------
  |  |   37|   189k|#define OFPST_VENDOR 0xffff
  ------------------
  |  Branch (289:13): [True: 2.31k, False: 187k]
  ------------------
  290|       |            /* Get vendor. */
  291|  2.31k|            const struct ofp11_vendor_stats_msg *ovsm;
  292|       |
  293|  2.31k|            if (length < sizeof *ovsm) {
  ------------------
  |  Branch (293:17): [True: 1.80k, False: 508]
  ------------------
  294|  1.80k|                return OFPERR_OFPBRC_BAD_LEN;
  295|  1.80k|            }
  296|       |
  297|    508|            ovsm = (const struct ofp11_vendor_stats_msg *) oh;
  298|    508|            hdrs->vendor = ntohl(ovsm->vendor);
  299|    508|            if (hdrs->vendor == NX_VENDOR_ID ||
  ------------------
  |  |  110|  1.01k|#define NX_VENDOR_ID    0x00002320 /* Nicira. */
  ------------------
  |  Branch (299:17): [True: 392, False: 116]
  ------------------
  300|    410|                hdrs->vendor == ONF_VENDOR_ID) {
  ------------------
  |  |  111|    116|#define ONF_VENDOR_ID   0x4f4e4600 /* Open Networking Foundation. */
  ------------------
  |  Branch (300:17): [True: 18, False: 98]
  ------------------
  301|    410|                hdrs->subtype = ntohl(ovsm->subtype);
  302|    410|            } else {
  303|     98|                log_bad_vendor(hdrs->vendor);
  304|     98|                return OFPERR_OFPBRC_BAD_VENDOR;
  305|     98|            }
  306|    508|        }
  307|   189k|    }
  308|       |
  309|  2.48M|    return 0;
  310|  2.51M|}
ofp-msgs.c:log_bad_vendor:
  206|  6.06k|{
  207|  6.06k|    static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 1);
  ------------------
  |  |  110|  6.06k|        {                                                                 \
  |  |  111|  6.06k|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|  24.2k|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [True: 0, Folded]
  |  |  |  |  |  Branch (37:48): [Folded, False: 6.06k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  6.06k|            0,                              /* first_dropped */           \
  |  |  113|  6.06k|            0,                              /* last_dropped */            \
  |  |  114|  6.06k|            0,                              /* n_dropped */               \
  |  |  115|  6.06k|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  6.06k|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  6.06k|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  6.06k|        }
  ------------------
  208|       |
  209|  6.06k|    VLOG_WARN_RL(&rl, "OpenFlow message has unknown vendor %#"PRIx32, vendor);
  ------------------
  |  |  224|  6.06k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  6.06k|    do {                                                                \
  |  |  |  |  288|  6.06k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  6.06k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 6.06k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  6.06k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 6.06k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  210|  6.06k|}
ofp-msgs.c:ofpraw_check_length:
  434|  2.15M|{
  435|  2.15M|    static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
  ------------------
  |  |  110|  2.15M|        {                                                                 \
  |  |  111|  2.15M|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|  8.61M|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [True: 0, Folded]
  |  |  |  |  |  Branch (37:48): [Folded, False: 2.15M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  2.15M|            0,                              /* first_dropped */           \
  |  |  113|  2.15M|            0,                              /* last_dropped */            \
  |  |  114|  2.15M|            0,                              /* n_dropped */               \
  |  |  115|  2.15M|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  2.15M|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  2.15M|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  2.15M|        }
  ------------------
  436|       |
  437|  2.15M|    unsigned int min_len = instance->hdrs_len + info->min_body;
  438|  2.15M|    switch (info->extra_multiple) {
  439|  64.2k|    case 0:
  ------------------
  |  Branch (439:5): [True: 64.2k, False: 2.08M]
  ------------------
  440|  64.2k|        if (len != min_len) {
  ------------------
  |  Branch (440:13): [True: 17.8k, False: 46.4k]
  ------------------
  441|  17.8k|            VLOG_WARN_RL(&rl, "received %s with incorrect length %u (expected "
  ------------------
  |  |  224|  17.8k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  17.8k|    do {                                                                \
  |  |  |  |  288|  17.8k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  17.8k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 17.8k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  17.8k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 17.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  442|  17.8k|                         "length %u)", info->name, len, min_len);
  443|  17.8k|            return OFPERR_OFPBRC_BAD_LEN;
  444|  17.8k|        }
  445|  46.4k|        break;
  446|       |
  447|  1.52M|    case 1:
  ------------------
  |  Branch (447:5): [True: 1.52M, False: 624k]
  ------------------
  448|  1.52M|        if (len < min_len) {
  ------------------
  |  Branch (448:13): [True: 23.4k, False: 1.50M]
  ------------------
  449|  23.4k|            VLOG_WARN_RL(&rl, "received %s with incorrect length %u (expected "
  ------------------
  |  |  224|  23.4k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  23.4k|    do {                                                                \
  |  |  |  |  288|  23.4k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  23.4k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 23.4k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  23.4k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 23.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  450|  23.4k|                         "length at least %u bytes)",
  451|  23.4k|                         info->name, len, min_len);
  452|  23.4k|            return OFPERR_OFPBRC_BAD_LEN;
  453|  23.4k|        }
  454|  1.50M|        break;
  455|       |
  456|  1.50M|    default:
  ------------------
  |  Branch (456:5): [True: 559k, False: 1.59M]
  ------------------
  457|   559k|        if (len < min_len || (len - min_len) % info->extra_multiple) {
  ------------------
  |  Branch (457:13): [True: 9.45k, False: 550k]
  |  Branch (457:30): [True: 2.07k, False: 548k]
  ------------------
  458|  11.5k|            VLOG_WARN_RL(&rl, "received %s with incorrect length %u (must be "
  ------------------
  |  |  224|  11.5k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  11.5k|    do {                                                                \
  |  |  |  |  288|  11.5k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  11.5k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 11.5k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  11.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 11.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  459|  11.5k|                         "exactly %u bytes or longer by an integer multiple "
  460|  11.5k|                         "of %u bytes)",
  461|  11.5k|                         info->name, len, min_len, info->extra_multiple);
  462|  11.5k|            return OFPERR_OFPBRC_BAD_LEN;
  463|  11.5k|        }
  464|   548k|        break;
  465|  2.15M|    }
  466|       |
  467|  2.09M|    return 0;
  468|  2.15M|}
ofp-msgs.c:ofphdrs_decode_assert:
  315|  7.83k|{
  316|  7.83k|    ovs_assert(!ofphdrs_decode(hdrs, oh, length));
  ------------------
  |  |   62|  7.83k|#define ovs_assert ovs_ignore
  ------------------
  317|  7.83k|}
ofp-msgs.c:ofp_is_stat_request:
  321|  1.38M|{
  322|  1.38M|    switch (version) {
  ------------------
  |  Branch (322:13): [True: 1.06M, False: 322k]
  ------------------
  323|   203k|    case OFP10_VERSION:
  ------------------
  |  Branch (323:5): [True: 203k, False: 1.18M]
  ------------------
  324|   203k|        return type == OFPT10_STATS_REQUEST;
  ------------------
  |  |   33|   203k|#define OFPT10_STATS_REQUEST 16
  ------------------
  325|  84.3k|    case OFP11_VERSION:
  ------------------
  |  Branch (325:5): [True: 84.3k, False: 1.29M]
  ------------------
  326|   288k|    case OFP12_VERSION:
  ------------------
  |  Branch (326:5): [True: 204k, False: 1.17M]
  ------------------
  327|   398k|    case OFP13_VERSION:
  ------------------
  |  Branch (327:5): [True: 109k, False: 1.27M]
  ------------------
  328|   594k|    case OFP14_VERSION:
  ------------------
  |  Branch (328:5): [True: 196k, False: 1.18M]
  ------------------
  329|   857k|    case OFP15_VERSION:
  ------------------
  |  Branch (329:5): [True: 262k, False: 1.12M]
  ------------------
  330|   857k|        return type == OFPT11_STATS_REQUEST;
  ------------------
  |  |   35|   857k|#define OFPT11_STATS_REQUEST 18
  ------------------
  331|  1.38M|    }
  332|       |
  333|   322k|    return false;
  334|  1.38M|}
ofp-msgs.c:ofp_is_stat_reply:
  338|  1.29M|{
  339|  1.29M|    switch (version) {
  ------------------
  |  Branch (339:13): [True: 971k, False: 322k]
  ------------------
  340|   184k|    case OFP10_VERSION:
  ------------------
  |  Branch (340:5): [True: 184k, False: 1.11M]
  ------------------
  341|   184k|        return type == OFPT10_STATS_REPLY;
  ------------------
  |  |   34|   184k|#define OFPT10_STATS_REPLY 17
  ------------------
  342|  78.7k|    case OFP11_VERSION:
  ------------------
  |  Branch (342:5): [True: 78.7k, False: 1.21M]
  ------------------
  343|   277k|    case OFP12_VERSION:
  ------------------
  |  Branch (343:5): [True: 198k, False: 1.09M]
  ------------------
  344|   385k|    case OFP13_VERSION:
  ------------------
  |  Branch (344:5): [True: 108k, False: 1.18M]
  ------------------
  345|   560k|    case OFP14_VERSION:
  ------------------
  |  Branch (345:5): [True: 175k, False: 1.11M]
  ------------------
  346|   787k|    case OFP15_VERSION:
  ------------------
  |  Branch (346:5): [True: 226k, False: 1.06M]
  ------------------
  347|   787k|        return type == OFPT11_STATS_REPLY;
  ------------------
  |  |   36|   787k|#define OFPT11_STATS_REPLY 19
  ------------------
  348|  1.29M|    }
  349|       |
  350|   322k|    return false;
  351|  1.29M|}
ofp-msgs.c:ofp_is_stat:
  355|  1.31M|{
  356|  1.31M|    return (ofp_is_stat_request(version, type) ||
  ------------------
  |  Branch (356:13): [True: 22.9k, False: 1.29M]
  ------------------
  357|  1.29M|            ofp_is_stat_reply(version, type));
  ------------------
  |  Branch (357:13): [True: 65.1k, False: 1.22M]
  ------------------
  358|  1.31M|}
ofp-msgs.c:ofpmp_flags__:
 1028|  77.5k|{
 1029|  77.5k|    switch ((enum ofp_version)oh->version) {
 1030|  15.3k|    case OFP10_VERSION:
  ------------------
  |  Branch (1030:5): [True: 15.3k, False: 62.1k]
  ------------------
 1031|  15.3k|        return &((struct ofp10_stats_msg *) oh)->flags;
 1032|  4.08k|    case OFP11_VERSION:
  ------------------
  |  Branch (1032:5): [True: 4.08k, False: 73.4k]
  ------------------
 1033|  7.06k|    case OFP12_VERSION:
  ------------------
  |  Branch (1033:5): [True: 2.98k, False: 74.5k]
  ------------------
 1034|  10.1k|    case OFP13_VERSION:
  ------------------
  |  Branch (1034:5): [True: 3.06k, False: 74.4k]
  ------------------
 1035|  25.0k|    case OFP14_VERSION:
  ------------------
  |  Branch (1035:5): [True: 14.9k, False: 62.6k]
  ------------------
 1036|  62.1k|    case OFP15_VERSION:
  ------------------
  |  Branch (1036:5): [True: 37.1k, False: 40.4k]
  ------------------
 1037|  62.1k|        return &((struct ofp11_stats_msg *) oh)->flags;
 1038|      0|    default:
  ------------------
  |  Branch (1038:5): [True: 0, False: 77.5k]
  ------------------
 1039|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1040|  77.5k|    }
 1041|  77.5k|}
ofp-msgs.c:raw_info_get:
 1307|  4.15M|{
 1308|  4.15M|    ofpmsgs_init();
 1309|       |
 1310|  4.15M|    ovs_assert(raw < ARRAY_SIZE(raw_infos));
  ------------------
  |  |   62|  4.15M|#define ovs_assert ovs_ignore
  ------------------
                  ovs_assert(raw < ARRAY_SIZE(raw_infos));
  ------------------
  |  |  297|  4.15M|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   46|  4.15M|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|  4.15M|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   47|  4.15M|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.15M|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|  4.15M|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1311|  4.15M|    return &raw_infos[raw];
 1312|  4.15M|}
ofp-msgs.c:ofpmsgs_init:
 1363|  6.63M|{
 1364|  6.63M|    static struct ovsthread_once once = OVSTHREAD_ONCE_INITIALIZER;
  ------------------
  |  |  134|  6.63M|    {                                           \
  |  |  135|  6.63M|        false,                                  \
  |  |  136|  6.63M|        OVS_MUTEX_INITIALIZER,                  \
  |  |  ------------------
  |  |  |  |   45|  6.63M|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  6.63M|                                "<unlocked>" }
  |  |  ------------------
  |  |  137|  6.63M|    }
  ------------------
 1365|  6.63M|    const struct raw_info *info;
 1366|       |
 1367|  6.63M|    if (!ovsthread_once_start(&once)) {
  ------------------
  |  Branch (1367:9): [True: 6.63M, False: 1]
  ------------------
 1368|  6.63M|        return;
 1369|  6.63M|    }
 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|  2.47M|{
  194|  2.47M|    BUILD_ASSERT_DECL(sizeof *hdrs % 4 == 0);
  ------------------
  |  |  270|  2.47M|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  ------------------
  195|  2.47M|    return hash_bytes32((const uint32_t *) hdrs, sizeof *hdrs, 0);
  196|  2.47M|}
ofp-msgs.c:raw_instance_get:
 1316|  2.15M|{
 1317|  2.15M|    ovs_assert(version >= info->min_version && version <= info->max_version);
  ------------------
  |  |   62|  2.15M|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (1317:16): [True: 2.15M, False: 0]
  |  Branch (1317:48): [True: 2.15M, False: 0]
  ------------------
 1318|  2.15M|    return &info->instances[version - info->min_version];
 1319|  2.15M|}
ofp-msgs.c:ofpraw_from_ofphdrs:
 1323|  2.47M|{
 1324|  2.47M|    static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 1);
  ------------------
  |  |  110|  2.47M|        {                                                                 \
  |  |  111|  2.47M|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|  9.90M|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [True: 0, Folded]
  |  |  |  |  |  Branch (37:48): [Folded, False: 2.47M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  2.47M|            0,                              /* first_dropped */           \
  |  |  113|  2.47M|            0,                              /* last_dropped */            \
  |  |  114|  2.47M|            0,                              /* n_dropped */               \
  |  |  115|  2.47M|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  2.47M|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  2.47M|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  2.47M|        }
  ------------------
 1325|       |
 1326|  2.47M|    struct raw_instance *raw_hdrs;
 1327|  2.47M|    uint32_t hash;
 1328|       |
 1329|  2.47M|    ofpmsgs_init();
 1330|       |
 1331|  2.47M|    hash = ofphdrs_hash(hdrs);
 1332|  2.47M|    HMAP_FOR_EACH_WITH_HASH (raw_hdrs, hmap_node, hash, &raw_instance_map) {
  ------------------
  |  |  138|  2.47M|    for (INIT_MULTIVAR(NODE, MEMBER, hmap_first_with_hash(HMAP, HASH),        \
  |  |  ------------------
  |  |  |  |  171|  2.47M|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|  2.47M|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  139|  2.47M|                       struct hmap_node);                                     \
  |  |  140|  2.47M|         CONDITION_MULTIVAR(NODE, MEMBER, ITER_VAR(NODE) != NULL);            \
  |  |  ------------------
  |  |  |  |  185|  2.47M|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 2.15M, False: 319k]
  |  |  |  |  |  Branch (185:6): [True: 2.15M, False: 319k]
  |  |  |  |  ------------------
  |  |  |  |  186|  2.47M|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  2.15M|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|  2.15M|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|  2.15M|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  2.47M|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |  141|  2.47M|         UPDATE_MULTIVAR(NODE, hmap_next_with_hash(ITER_VAR(NODE))))
  |  |  ------------------
  |  |  |  |  193|    323|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|    323|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1333|  2.15M|        if (ofphdrs_equal(hdrs, &raw_hdrs->hdrs)) {
  ------------------
  |  Branch (1333:13): [True: 2.15M, False: 323]
  ------------------
 1334|  2.15M|            *raw = raw_hdrs->raw;
 1335|  2.15M|            return 0;
 1336|  2.15M|        }
 1337|  2.15M|    }
 1338|       |
 1339|   319k|    if (!VLOG_DROP_WARN(&rl)) {
  ------------------
  |  |  234|   319k|#define VLOG_DROP_WARN(RL) vlog_should_drop(&this_module, VLL_WARN, RL)
  ------------------
  |  Branch (1339:9): [True: 0, False: 319k]
  ------------------
 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|   319k|    return (hdrs->vendor ? OFPERR_OFPBRC_BAD_SUBTYPE
  ------------------
  |  Branch (1356:13): [True: 2.84k, False: 317k]
  ------------------
 1357|   319k|            : ofphdrs_is_stat(hdrs) ? OFPERR_OFPBRC_BAD_STAT
  ------------------
  |  Branch (1357:15): [True: 10.5k, False: 306k]
  ------------------
 1358|   317k|            : OFPERR_OFPBRC_BAD_TYPE);
 1359|  2.47M|}
ofp-msgs.c:ofphdrs_equal:
  200|  2.15M|{
  201|  2.15M|    return !memcmp(a, b, sizeof *a);
  202|  2.15M|}
ofp-msgs.c:ofphdrs_is_stat:
  362|   317k|{
  363|   317k|    return ofp_is_stat(hdrs->version, hdrs->type);
  364|   317k|}

ofputil_packet_in_format_to_string:
   41|    264|{
   42|    264|    switch (format) {
   43|    249|    case OFPUTIL_PACKET_IN_STD:
  ------------------
  |  Branch (43:5): [True: 249, False: 15]
  ------------------
   44|    249|        return "standard";
   45|     11|    case OFPUTIL_PACKET_IN_NXT:
  ------------------
  |  Branch (45:5): [True: 11, False: 253]
  ------------------
   46|     11|        return "nxt_packet_in";
   47|      4|    case OFPUTIL_PACKET_IN_NXT2:
  ------------------
  |  Branch (47:5): [True: 4, False: 260]
  ------------------
   48|      4|        return "nxt_packet_in2";
   49|      0|    default:
  ------------------
  |  Branch (49:5): [True: 0, False: 264]
  ------------------
   50|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
   51|    264|    }
   52|    264|}
ofputil_decode_set_packet_in_format:
   81|    381|{
   82|    381|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
   83|    381|    ovs_assert(ofpraw_pull_assert(&b) == OFPRAW_NXT_SET_PACKET_IN_FORMAT);
  ------------------
  |  |   62|    381|#define ovs_assert ovs_ignore
  ------------------
   84|    381|    ovs_be32 *spifp = ofpbuf_pull(&b, sizeof *spifp);
   85|    381|    uint32_t spif = ntohl(*spifp);
   86|       |
   87|    381|    switch (spif) {
   88|    249|    case OFPUTIL_PACKET_IN_STD:
  ------------------
  |  Branch (88:5): [True: 249, False: 132]
  ------------------
   89|    260|    case OFPUTIL_PACKET_IN_NXT:
  ------------------
  |  Branch (89:5): [True: 11, False: 370]
  ------------------
   90|    264|    case OFPUTIL_PACKET_IN_NXT2:
  ------------------
  |  Branch (90:5): [True: 4, False: 377]
  ------------------
   91|    264|        *format = spif;
   92|    264|        return 0;
   93|       |
   94|    117|    default:
  ------------------
  |  Branch (94:5): [True: 117, False: 264]
  ------------------
   95|    117|        VLOG_WARN_RL(&rl, "NXT_SET_PACKET_IN_FORMAT message specified invalid "
  ------------------
  |  |  224|    117|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    117|    do {                                                                \
  |  |  |  |  288|    117|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    117|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 117]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    117|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 117]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   96|    117|                     "packet-in format %"PRIu32, spif);
   97|    117|        return OFPERR_OFPBRC_EPERM;
   98|    381|    }
   99|    381|}
ofputil_decode_packet_in:
  233|  89.9k|{
  234|  89.9k|    uint32_t buffer_id;
  235|  89.9k|    size_t total_len;
  236|       |
  237|  89.9k|    memset(pin, 0, sizeof *pin);
  238|  89.9k|    pin->cookie = OVS_BE64_MAX;
  ------------------
  |  |   44|  89.9k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  239|  89.9k|    if (continuation) {
  ------------------
  |  Branch (239:9): [True: 89.9k, False: 0]
  ------------------
  240|  89.9k|        ofpbuf_use_const(continuation, NULL, 0);
  241|  89.9k|    }
  242|       |
  243|  89.9k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  244|  89.9k|    enum ofpraw raw = ofpraw_pull_assert(&b);
  245|  89.9k|    if (raw == OFPRAW_OFPT13_PACKET_IN || raw == OFPRAW_OFPT12_PACKET_IN) {
  ------------------
  |  Branch (245:9): [True: 509, False: 89.4k]
  |  Branch (245:43): [True: 53.6k, False: 35.7k]
  ------------------
  246|  54.1k|        const struct ofp12_packet_in *opi = ofpbuf_pull(&b, sizeof *opi);
  247|  54.1k|        const ovs_be64 *cookie = (raw == OFPRAW_OFPT13_PACKET_IN
  ------------------
  |  Branch (247:35): [True: 509, False: 53.6k]
  ------------------
  248|  54.1k|                                  ? ofpbuf_pull(&b, sizeof *cookie)
  249|  54.1k|                                  : NULL);
  250|  54.1k|        enum ofperr error = oxm_pull_match_loose(&b, false, tun_table,
  251|  54.1k|                                                 &pin->flow_metadata);
  252|  54.1k|        pin->flow_metadata.flow.tunnel.metadata.tab = tun_table;
  253|  54.1k|        if (error) {
  ------------------
  |  Branch (253:13): [True: 28.5k, False: 25.6k]
  ------------------
  254|  28.5k|            return error;
  255|  28.5k|        }
  256|       |
  257|  25.6k|        if (!ofpbuf_try_pull(&b, 2)) {
  ------------------
  |  Branch (257:13): [True: 2.47k, False: 23.1k]
  ------------------
  258|  2.47k|            return OFPERR_OFPBRC_BAD_LEN;
  259|  2.47k|        }
  260|       |
  261|  23.1k|        pin->reason = opi->reason;
  262|  23.1k|        pin->table_id = opi->table_id;
  263|  23.1k|        buffer_id = ntohl(opi->buffer_id);
  264|  23.1k|        total_len = ntohs(opi->total_len);
  265|  23.1k|        if (cookie) {
  ------------------
  |  Branch (265:13): [True: 238, False: 22.9k]
  ------------------
  266|    238|            pin->cookie = *cookie;
  267|    238|        }
  268|       |
  269|  23.1k|        pin->packet = b.data;
  270|  23.1k|        pin->packet_len = b.size;
  271|  35.7k|    } else if (raw == OFPRAW_OFPT10_PACKET_IN) {
  ------------------
  |  Branch (271:16): [True: 21.3k, False: 14.4k]
  ------------------
  272|  21.3k|        const struct ofp10_packet_in *opi;
  273|       |
  274|  21.3k|        opi = ofpbuf_pull(&b, offsetof(struct ofp10_packet_in, data));
  275|       |
  276|  21.3k|        pin->packet = CONST_CAST(uint8_t *, opi->data);
  ------------------
  |  |   85|  21.3k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  21.3k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  21.3k|     (TYPE) (POINTER))
  ------------------
  277|  21.3k|        pin->packet_len = b.size;
  278|       |
  279|  21.3k|        match_init_catchall(&pin->flow_metadata);
  280|  21.3k|        match_set_in_port(&pin->flow_metadata,
  281|  21.3k|                          u16_to_ofp(ntohs(opi->in_port)));
  282|  21.3k|        pin->reason = opi->reason;
  283|  21.3k|        buffer_id = ntohl(opi->buffer_id);
  284|  21.3k|        total_len = ntohs(opi->total_len);
  285|  21.3k|    } else if (raw == OFPRAW_OFPT11_PACKET_IN) {
  ------------------
  |  Branch (285:16): [True: 526, False: 13.8k]
  ------------------
  286|    526|        const struct ofp11_packet_in *opi;
  287|    526|        ofp_port_t in_port;
  288|    526|        enum ofperr error;
  289|       |
  290|    526|        opi = ofpbuf_pull(&b, sizeof *opi);
  291|       |
  292|    526|        pin->packet = b.data;
  293|    526|        pin->packet_len = b.size;
  294|       |
  295|    526|        buffer_id = ntohl(opi->buffer_id);
  296|    526|        error = ofputil_port_from_ofp11(opi->in_port, &in_port);
  297|    526|        if (error) {
  ------------------
  |  Branch (297:13): [True: 306, False: 220]
  ------------------
  298|    306|            return error;
  299|    306|        }
  300|    220|        match_init_catchall(&pin->flow_metadata);
  301|    220|        match_set_in_port(&pin->flow_metadata, in_port);
  302|    220|        total_len = ntohs(opi->total_len);
  303|    220|        pin->reason = opi->reason;
  304|    220|        pin->table_id = opi->table_id;
  305|  13.8k|    } else if (raw == OFPRAW_NXT_PACKET_IN) {
  ------------------
  |  Branch (305:16): [True: 5.07k, False: 8.80k]
  ------------------
  306|  5.07k|        const struct nx_packet_in *npi;
  307|  5.07k|        int error;
  308|       |
  309|  5.07k|        npi = ofpbuf_pull(&b, sizeof *npi);
  310|  5.07k|        error = nx_pull_match_loose(&b, ntohs(npi->match_len),
  311|  5.07k|                                    &pin->flow_metadata, NULL, NULL, false,
  312|  5.07k|                                    NULL);
  313|  5.07k|        if (error) {
  ------------------
  |  Branch (313:13): [True: 1.12k, False: 3.95k]
  ------------------
  314|  1.12k|            return error;
  315|  1.12k|        }
  316|       |
  317|  3.95k|        if (!ofpbuf_try_pull(&b, 2)) {
  ------------------
  |  Branch (317:13): [True: 37, False: 3.91k]
  ------------------
  318|     37|            return OFPERR_OFPBRC_BAD_LEN;
  319|     37|        }
  320|       |
  321|  3.91k|        pin->reason = npi->reason;
  322|  3.91k|        pin->table_id = npi->table_id;
  323|  3.91k|        pin->cookie = npi->cookie;
  324|       |
  325|  3.91k|        buffer_id = ntohl(npi->buffer_id);
  326|  3.91k|        total_len = ntohs(npi->total_len);
  327|       |
  328|  3.91k|        pin->packet = b.data;
  329|  3.91k|        pin->packet_len = b.size;
  330|  8.80k|    } else if (raw == OFPRAW_NXT_PACKET_IN2 || raw == OFPRAW_NXT_RESUME) {
  ------------------
  |  Branch (330:16): [True: 5.41k, False: 3.38k]
  |  Branch (330:48): [True: 3.38k, False: 0]
  ------------------
  331|  8.80k|        enum ofperr error = decode_nx_packet_in2(oh, loose, tun_table,
  332|  8.80k|                                                 vl_mff_map, pin, &total_len,
  333|  8.80k|                                                 &buffer_id, continuation);
  334|  8.80k|        if (error) {
  ------------------
  |  Branch (334:13): [True: 3.20k, False: 5.59k]
  ------------------
  335|  3.20k|            return error;
  336|  3.20k|        }
  337|  8.80k|    } else {
  338|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  339|      0|    }
  340|       |
  341|  54.2k|    if (total_lenp) {
  ------------------
  |  Branch (341:9): [True: 54.2k, False: 0]
  ------------------
  342|  54.2k|        *total_lenp = total_len;
  343|  54.2k|    }
  344|  54.2k|    if (buffer_idp) {
  ------------------
  |  Branch (344:9): [True: 54.2k, False: 0]
  ------------------
  345|  54.2k|        *buffer_idp = buffer_id;
  346|  54.2k|    }
  347|       |
  348|  54.2k|    return 0;
  349|  89.9k|}
ofputil_packet_in_reason_to_string:
  710|  62.0k|{
  711|  62.0k|    switch (reason) {
  712|  18.0k|    case OFPR_NO_MATCH:
  ------------------
  |  Branch (712:5): [True: 18.0k, False: 44.0k]
  ------------------
  713|  18.0k|        return "no_match";
  714|  2.44k|    case OFPR_ACTION:
  ------------------
  |  Branch (714:5): [True: 2.44k, False: 59.6k]
  ------------------
  715|  2.44k|        return "action";
  716|  1.78k|    case OFPR_INVALID_TTL:
  ------------------
  |  Branch (716:5): [True: 1.78k, False: 60.3k]
  ------------------
  717|  1.78k|        return "invalid_ttl";
  718|  1.58k|    case OFPR_ACTION_SET:
  ------------------
  |  Branch (718:5): [True: 1.58k, False: 60.5k]
  ------------------
  719|  1.58k|        return "action_set";
  720|  4.72k|    case OFPR_GROUP:
  ------------------
  |  Branch (720:5): [True: 4.72k, False: 57.3k]
  ------------------
  721|  4.72k|        return "group";
  722|    736|    case OFPR_PACKET_OUT:
  ------------------
  |  Branch (722:5): [True: 736, False: 61.3k]
  ------------------
  723|    736|        return "packet_out";
  724|  1.72k|    case OFPR_EXPLICIT_MISS:
  ------------------
  |  Branch (724:5): [True: 1.72k, False: 60.3k]
  ------------------
  725|  2.68k|    case OFPR_IMPLICIT_MISS:
  ------------------
  |  Branch (725:5): [True: 957, False: 61.1k]
  ------------------
  726|  2.68k|        return "";
  727|       |
  728|    214|    case OFPR_N_REASONS:
  ------------------
  |  Branch (728:5): [True: 214, False: 61.8k]
  ------------------
  729|  30.0k|    default:
  ------------------
  |  Branch (729:5): [True: 29.8k, False: 32.2k]
  ------------------
  730|  30.0k|        snprintf(reasonbuf, bufsize, "%d", (int) reason);
  731|  30.0k|        return reasonbuf;
  732|  62.0k|    }
  733|  62.0k|}
ofputil_decode_packet_in_private:
  818|  89.9k|{
  819|  89.9k|    memset(pin, 0, sizeof *pin);
  820|       |
  821|  89.9k|    struct ofpbuf continuation;
  822|  89.9k|    enum ofperr error;
  823|  89.9k|    error = ofputil_decode_packet_in(oh, loose, tun_table, vl_mff_map,
  824|  89.9k|                                     &pin->base, total_len, buffer_id,
  825|  89.9k|                                     &continuation);
  826|  89.9k|    if (error) {
  ------------------
  |  Branch (826:9): [True: 35.6k, False: 54.2k]
  ------------------
  827|  35.6k|        return error;
  828|  35.6k|    }
  829|       |
  830|  54.2k|    struct ofpbuf actions, action_set;
  831|  54.2k|    ofpbuf_init(&actions, 0);
  832|  54.2k|    ofpbuf_init(&action_set, 0);
  833|       |
  834|  54.2k|    uint8_t table_id = 0;
  835|  54.2k|    ovs_be64 cookie = 0;
  836|       |
  837|  54.2k|    struct ofpbuf stack;
  838|  54.2k|    ofpbuf_init(&stack, 0);
  839|       |
  840|  63.2k|    while (continuation.size > 0) {
  ------------------
  |  Branch (840:12): [True: 11.3k, False: 51.8k]
  ------------------
  841|  11.3k|        struct ofpbuf payload;
  842|  11.3k|        uint64_t type;
  843|       |
  844|  11.3k|        error = ofpprop_pull(&continuation, &payload, &type);
  845|  11.3k|        if (error) {
  ------------------
  |  Branch (845:13): [True: 1.07k, False: 10.2k]
  ------------------
  846|  1.07k|            break;
  847|  1.07k|        }
  848|       |
  849|  10.2k|        switch (type) {
  850|  1.22k|        case NXCPT_BRIDGE:
  ------------------
  |  Branch (850:9): [True: 1.22k, False: 9.03k]
  ------------------
  851|  1.22k|            error = ofpprop_parse_uuid(&payload, &pin->bridge);
  852|  1.22k|            break;
  853|       |
  854|  2.56k|        case NXCPT_STACK:
  ------------------
  |  Branch (854:9): [True: 2.56k, False: 7.69k]
  ------------------
  855|  2.56k|            error = parse_stack_prop(&payload, &stack);
  856|  2.56k|            break;
  857|       |
  858|    483|        case NXCPT_MIRRORS:
  ------------------
  |  Branch (858:9): [True: 483, False: 9.77k]
  ------------------
  859|    483|            error = ofpprop_parse_u32(&payload, &pin->mirrors);
  860|    483|            break;
  861|       |
  862|    634|        case NXCPT_CONNTRACKED:
  ------------------
  |  Branch (862:9): [True: 634, False: 9.62k]
  ------------------
  863|    634|            pin->conntracked = true;
  864|    634|            break;
  865|       |
  866|    333|        case NXCPT_TABLE_ID:
  ------------------
  |  Branch (866:9): [True: 333, False: 9.92k]
  ------------------
  867|    333|            error = ofpprop_parse_u8(&payload, &table_id);
  868|    333|            break;
  869|       |
  870|    115|        case NXCPT_COOKIE:
  ------------------
  |  Branch (870:9): [True: 115, False: 10.1k]
  ------------------
  871|    115|            error = ofpprop_parse_be64(&payload, &cookie);
  872|    115|            break;
  873|       |
  874|  1.89k|        case NXCPT_ACTIONS: {
  ------------------
  |  Branch (874:9): [True: 1.89k, False: 8.37k]
  ------------------
  875|  1.89k|            struct ofpact_unroll_xlate *unroll
  876|  1.89k|                = ofpact_put_UNROLL_XLATE(&actions);
  877|  1.89k|            unroll->rule_table_id = table_id;
  878|  1.89k|            unroll->rule_cookie = cookie;
  879|  1.89k|            error = parse_actions_property(&payload, oh->version, &actions);
  880|  1.89k|            break;
  881|      0|        }
  882|       |
  883|  1.36k|        case NXCPT_ACTION_SET:
  ------------------
  |  Branch (883:9): [True: 1.36k, False: 8.89k]
  ------------------
  884|  1.36k|            error = parse_actions_property(&payload, oh->version, &action_set);
  885|  1.36k|            break;
  886|       |
  887|    230|        case NXCPT_ODP_PORT: {
  ------------------
  |  Branch (887:9): [True: 230, False: 10.0k]
  ------------------
  888|    230|            uint32_t value;
  889|    230|            error = ofpprop_parse_u32(&payload, &value);
  890|    230|            if (!error) {
  ------------------
  |  Branch (890:17): [True: 177, False: 53]
  ------------------
  891|    177|                pin->odp_port = u32_to_odp(value);
  892|    177|            }
  893|    230|            break;
  894|      0|         }
  895|       |
  896|  1.42k|        default:
  ------------------
  |  Branch (896:9): [True: 1.42k, False: 8.83k]
  ------------------
  897|  1.42k|            error = OFPPROP_UNKNOWN(loose, "continuation", type);
  ------------------
  |  |  144|  1.42k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  898|  1.42k|            break;
  899|  10.2k|        }
  900|  10.2k|        if (error) {
  ------------------
  |  Branch (900:13): [True: 1.34k, False: 8.91k]
  ------------------
  901|  1.34k|            break;
  902|  1.34k|        }
  903|  10.2k|    }
  904|       |
  905|  54.2k|    pin->actions_len = actions.size;
  906|  54.2k|    pin->actions = ofpbuf_steal_data(&actions);
  907|  54.2k|    pin->action_set_len = action_set.size;
  908|  54.2k|    pin->action_set = ofpbuf_steal_data(&action_set);
  909|  54.2k|    pin->stack_size = stack.size;
  910|  54.2k|    pin->stack = ofpbuf_steal_data(&stack);
  911|       |
  912|  54.2k|    if (error) {
  ------------------
  |  Branch (912:9): [True: 2.41k, False: 51.8k]
  ------------------
  913|  2.41k|        ofputil_packet_in_private_destroy(pin);
  914|  2.41k|    }
  915|       |
  916|  54.2k|    return error;
  917|  54.2k|}
ofputil_packet_in_private_format:
  926|  51.8k|{
  927|  51.8k|    char reasonbuf[OFPUTIL_PACKET_IN_REASON_BUFSIZE];
  928|  51.8k|    const struct ofputil_packet_in *public = &pin->base;
  929|       |
  930|  51.8k|    if (public->table_id
  ------------------
  |  Branch (930:9): [True: 16.1k, False: 35.7k]
  ------------------
  931|  35.7k|        || ofputil_table_map_get_name(table_map, public->table_id)) {
  ------------------
  |  Branch (931:12): [True: 0, False: 35.7k]
  ------------------
  932|  16.1k|        ds_put_format(s, " table_id=");
  933|  16.1k|        ofputil_format_table(public->table_id, table_map, s);
  934|  16.1k|    }
  935|       |
  936|  51.8k|    if (public->cookie != OVS_BE64_MAX) {
  ------------------
  |  |   44|  51.8k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  |  Branch (936:9): [True: 4.15k, False: 47.7k]
  ------------------
  937|  4.15k|        ds_put_format(s, " cookie=0x%"PRIx64, ntohll(public->cookie));
  938|  4.15k|    }
  939|       |
  940|  51.8k|    ds_put_format(s, " total_len=%"PRIuSIZE" ", total_len);
  941|       |
  942|  51.8k|    match_format(&public->flow_metadata, port_map, s, OFP_DEFAULT_PRIORITY);
  ------------------
  |  |  138|  51.8k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
  943|       |
  944|  51.8k|    ds_put_format(s, " (via %s)",
  945|  51.8k|                  ofputil_packet_in_reason_to_string(public->reason,
  946|  51.8k|                                                     reasonbuf,
  947|  51.8k|                                                     sizeof reasonbuf));
  948|       |
  949|  51.8k|    ds_put_format(s, " data_len=%"PRIuSIZE, public->packet_len);
  ------------------
  |  |  120|  51.8k|#define PRIuSIZE "zu"
  ------------------
  950|  51.8k|    if (buffer_id == UINT32_MAX) {
  ------------------
  |  Branch (950:9): [True: 3.90k, False: 47.9k]
  ------------------
  951|  3.90k|        ds_put_format(s, " (unbuffered)");
  952|  3.90k|        if (total_len != public->packet_len) {
  ------------------
  |  Branch (952:13): [True: 1.88k, False: 2.01k]
  ------------------
  953|  1.88k|            ds_put_format(s, " (***total_len != data_len***)");
  954|  1.88k|        }
  955|  47.9k|    } else {
  956|  47.9k|        ds_put_format(s, " buffer=0x%08"PRIx32, buffer_id);
  957|  47.9k|        if (total_len < public->packet_len) {
  ------------------
  |  Branch (957:13): [True: 1.58k, False: 46.4k]
  ------------------
  958|  1.58k|            ds_put_format(s, " (***total_len < data_len***)");
  959|  1.58k|        }
  960|  47.9k|    }
  961|  51.8k|    ds_put_char(s, '\n');
  962|       |
  963|  51.8k|    if (public->userdata_len) {
  ------------------
  |  Branch (963:9): [True: 784, False: 51.0k]
  ------------------
  964|    784|        ds_put_cstr(s, " userdata=");
  965|    784|        ds_put_hex_with_delimiter(s, pin->base.userdata,
  966|    784|                                  pin->base.userdata_len, ".");
  967|    784|        ds_put_char(s, '\n');
  968|    784|    }
  969|       |
  970|  51.8k|    if (!uuid_is_zero(&pin->bridge)) {
  ------------------
  |  Branch (970:9): [True: 559, False: 51.3k]
  ------------------
  971|    559|        ds_put_format(s, " continuation.bridge="UUID_FMT"\n",
  972|    559|                      UUID_ARGS(&pin->bridge));
  ------------------
  |  |   39|    559|    ((unsigned int) ((UUID)->parts[0])),            \
  |  |   40|    559|    ((unsigned int) ((UUID)->parts[1] >> 16)),      \
  |  |   41|    559|    ((unsigned int) ((UUID)->parts[1] & 0xffff)),   \
  |  |   42|    559|    ((unsigned int) ((UUID)->parts[2] >> 16)),      \
  |  |   43|    559|    ((unsigned int) ((UUID)->parts[2] & 0xffff)),   \
  |  |   44|    559|    ((unsigned int) ((UUID)->parts[3]))
  ------------------
  973|    559|    }
  974|       |
  975|  51.8k|    if (pin->stack_size) {
  ------------------
  |  Branch (975:9): [True: 1.01k, False: 50.8k]
  ------------------
  976|  1.01k|        ds_put_cstr(s, " continuation.stack=(top)");
  977|       |
  978|  1.01k|        struct ofpbuf pin_stack;
  979|  1.01k|        ofpbuf_use_const(&pin_stack, pin->stack, pin->stack_size);
  980|       |
  981|  3.02k|        while (pin_stack.size) {
  ------------------
  |  Branch (981:16): [True: 2.01k, False: 1.01k]
  ------------------
  982|  2.01k|            uint8_t len;
  983|  2.01k|            uint8_t *val = nx_stack_pop(&pin_stack, &len);
  984|  2.01k|            union mf_subvalue value;
  985|       |
  986|  2.01k|            ds_put_char(s, ' ');
  987|  2.01k|            memset(&value, 0, sizeof value - len);
  988|  2.01k|            memcpy(&value.u8[sizeof value - len], val, len);
  989|  2.01k|            mf_subvalue_format(&value, s);
  990|  2.01k|        }
  991|  1.01k|        ds_put_cstr(s, " (bottom)\n");
  992|  1.01k|    }
  993|       |
  994|  51.8k|    if (pin->mirrors) {
  ------------------
  |  Branch (994:9): [True: 27, False: 51.8k]
  ------------------
  995|     27|        ds_put_format(s, " continuation.mirrors=0x%"PRIx32"\n",
  996|     27|                      pin->mirrors);
  997|     27|    }
  998|       |
  999|  51.8k|    if (pin->conntracked) {
  ------------------
  |  Branch (999:9): [True: 295, False: 51.5k]
  ------------------
 1000|    295|        ds_put_cstr(s, " continuation.conntracked=true\n");
 1001|    295|    }
 1002|       |
 1003|  51.8k|    struct ofpact_format_params fp = {
 1004|  51.8k|        .port_map = port_map,
 1005|  51.8k|        .table_map = table_map,
 1006|  51.8k|        .s = s,
 1007|  51.8k|    };
 1008|       |
 1009|  51.8k|    if (pin->actions_len) {
  ------------------
  |  Branch (1009:9): [True: 1.08k, False: 50.7k]
  ------------------
 1010|  1.08k|        ds_put_cstr(s, " continuation.actions=");
 1011|  1.08k|        ofpacts_format(pin->actions, pin->actions_len, &fp);
 1012|  1.08k|        ds_put_char(s, '\n');
 1013|  1.08k|    }
 1014|       |
 1015|  51.8k|    if (pin->action_set_len) {
  ------------------
  |  Branch (1015:9): [True: 887, False: 50.9k]
  ------------------
 1016|    887|        ds_put_cstr(s, " continuation.action_set=");
 1017|    887|        ofpacts_format(pin->action_set, pin->action_set_len, &fp);
 1018|    887|        ds_put_char(s, '\n');
 1019|    887|    }
 1020|       |
 1021|  51.8k|    if (pin->odp_port) {
  ------------------
  |  Branch (1021:9): [True: 176, False: 51.7k]
  ------------------
 1022|    176|        ds_put_format(s, " continuation.odp_port=%"PRIu32, pin->odp_port);
 1023|    176|        ds_put_char(s, '\n');
 1024|    176|    }
 1025|       |
 1026|  51.8k|    if (verbosity > 0) {
  ------------------
  |  Branch (1026:9): [True: 51.8k, False: 0]
  ------------------
 1027|  51.8k|        char *packet = ofp_packet_to_string(
 1028|  51.8k|            public->packet, public->packet_len,
 1029|  51.8k|            public->flow_metadata.flow.packet_type);
 1030|  51.8k|        ds_put_cstr(s, packet);
 1031|  51.8k|        free(packet);
 1032|  51.8k|    }
 1033|  51.8k|    if (verbosity > 2) {
  ------------------
  |  Branch (1033:9): [True: 0, False: 51.8k]
  ------------------
 1034|       |        ds_put_hex_dump(s, public->packet, public->packet_len, 0, false);
 1035|      0|    }
 1036|  51.8k|}
ofputil_packet_in_private_destroy:
 1046|  54.2k|{
 1047|  54.2k|    if (pin) {
  ------------------
  |  Branch (1047:9): [True: 54.2k, False: 0]
  ------------------
 1048|  54.2k|        free(pin->stack);
 1049|  54.2k|        free(pin->actions);
 1050|  54.2k|        free(pin->action_set);
 1051|  54.2k|    }
 1052|  54.2k|}
ofputil_decode_packet_out:
 1070|   136k|{
 1071|   136k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
 1072|   136k|    enum ofpraw raw = ofpraw_pull_assert(&b);
 1073|       |
 1074|   136k|    ofpbuf_clear(ofpacts);
 1075|   136k|    match_init_catchall(&po->flow_metadata);
 1076|   136k|    if (raw == OFPRAW_OFPT15_PACKET_OUT) {
  ------------------
  |  Branch (1076:9): [True: 58.8k, False: 77.7k]
  ------------------
 1077|  58.8k|        enum ofperr error;
 1078|  58.8k|        const struct ofp15_packet_out *opo = ofpbuf_pull(&b, sizeof *opo);
 1079|       |
 1080|  58.8k|        po->buffer_id = ntohl(opo->buffer_id);
 1081|  58.8k|        error = oxm_pull_match_loose(&b, true, tun_table, &po->flow_metadata);
 1082|  58.8k|        if (error) {
  ------------------
  |  Branch (1082:13): [True: 43.0k, False: 15.7k]
  ------------------
 1083|  43.0k|            return error;
 1084|  43.0k|        }
 1085|       |
 1086|  15.7k|        if (!po->flow_metadata.wc.masks.in_port.ofp_port) {
  ------------------
  |  Branch (1086:13): [True: 14.5k, False: 1.28k]
  ------------------
 1087|  14.5k|            return OFPERR_OFPBRC_BAD_PORT;
 1088|  14.5k|        }
 1089|       |
 1090|  1.28k|        error = ofpacts_pull_openflow_actions(&b, ntohs(opo->actions_len),
 1091|  1.28k|                                              oh->version, NULL, NULL,
 1092|  1.28k|                                              ofpacts);
 1093|  1.28k|        if (error) {
  ------------------
  |  Branch (1093:13): [True: 255, False: 1.03k]
  ------------------
 1094|    255|            return error;
 1095|    255|        }
 1096|  77.7k|    } else if (raw == OFPRAW_OFPT11_PACKET_OUT) {
  ------------------
  |  Branch (1096:16): [True: 40.1k, False: 37.6k]
  ------------------
 1097|  40.1k|        enum ofperr error;
 1098|  40.1k|        ofp_port_t in_port;
 1099|  40.1k|        const struct ofp11_packet_out *opo = ofpbuf_pull(&b, sizeof *opo);
 1100|       |
 1101|  40.1k|        po->buffer_id = ntohl(opo->buffer_id);
 1102|  40.1k|        error = ofputil_port_from_ofp11(opo->in_port, &in_port);
 1103|  40.1k|        if (error) {
  ------------------
  |  Branch (1103:13): [True: 3.01k, False: 37.0k]
  ------------------
 1104|  3.01k|            return error;
 1105|  3.01k|        }
 1106|  37.0k|        match_set_packet_type(&po->flow_metadata, htonl(PT_ETH));
 1107|  37.0k|        match_set_in_port(&po->flow_metadata, in_port);
 1108|       |
 1109|  37.0k|        error = ofpacts_pull_openflow_actions(&b, ntohs(opo->actions_len),
 1110|  37.0k|                                              oh->version, NULL, NULL,
 1111|  37.0k|                                              ofpacts);
 1112|  37.0k|        if (error) {
  ------------------
  |  Branch (1112:13): [True: 27.9k, False: 9.15k]
  ------------------
 1113|  27.9k|            return error;
 1114|  27.9k|        }
 1115|  37.6k|    } else if (raw == OFPRAW_OFPT10_PACKET_OUT) {
  ------------------
  |  Branch (1115:16): [True: 37.6k, False: 0]
  ------------------
 1116|  37.6k|        enum ofperr error;
 1117|  37.6k|        const struct ofp10_packet_out *opo = ofpbuf_pull(&b, sizeof *opo);
 1118|       |
 1119|  37.6k|        po->buffer_id = ntohl(opo->buffer_id);
 1120|  37.6k|        match_set_packet_type(&po->flow_metadata, htonl(PT_ETH));
 1121|  37.6k|        match_set_in_port(&po->flow_metadata, u16_to_ofp(ntohs(opo->in_port)));
 1122|       |
 1123|  37.6k|        error = ofpacts_pull_openflow_actions(&b, ntohs(opo->actions_len),
 1124|  37.6k|                                              oh->version, NULL, NULL,
 1125|  37.6k|                                              ofpacts);
 1126|  37.6k|        if (error) {
  ------------------
  |  Branch (1126:13): [True: 28.1k, False: 9.53k]
  ------------------
 1127|  28.1k|            return error;
 1128|  28.1k|        }
 1129|  37.6k|    } else {
 1130|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1131|      0|    }
 1132|       |
 1133|  19.7k|    ofp_port_t in_port = po->flow_metadata.flow.in_port.ofp_port;
 1134|  19.7k|    if (ofp_to_u16(in_port) >= ofp_to_u16(OFPP_MAX)
  ------------------
  |  |   33|  19.7k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|  19.7k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1134:9): [True: 3.57k, False: 16.1k]
  ------------------
 1135|  19.7k|        && in_port != OFPP_LOCAL
  ------------------
  |  |   46|  3.57k|#define OFPP_LOCAL      OFP_PORT_C(0xfffe) /* Local openflow "port". */
  |  |  ------------------
  |  |  |  |  157|  23.2k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1135:12): [True: 3.54k, False: 32]
  ------------------
 1136|  19.7k|        && in_port != OFPP_NONE
  ------------------
  |  |   47|  3.54k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|  23.2k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1136:12): [True: 3.39k, False: 153]
  ------------------
 1137|  3.39k|        && in_port != OFPP_CONTROLLER) {
  ------------------
  |  |   45|  3.39k|#define OFPP_CONTROLLER OFP_PORT_C(0xfffd) /* Send to controller. */
  |  |  ------------------
  |  |  |  |  157|  3.39k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1137:12): [True: 214, False: 3.17k]
  ------------------
 1138|    214|        VLOG_WARN_RL(&rl, "packet-out has bad input port %#"PRIx32,
  ------------------
  |  |  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]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1139|    214|                     po->flow_metadata.flow.in_port.ofp_port);
 1140|    214|        return OFPERR_OFPBRC_BAD_PORT;
 1141|    214|    }
 1142|       |
 1143|  19.5k|    po->ofpacts = ofpacts->data;
 1144|  19.5k|    po->ofpacts_len = ofpacts->size;
 1145|       |
 1146|  19.5k|    if (po->buffer_id == UINT32_MAX) {
  ------------------
  |  Branch (1146:9): [True: 965, False: 18.5k]
  ------------------
 1147|    965|        po->packet = b.data;
 1148|    965|        po->packet_len = b.size;
 1149|  18.5k|    } else {
 1150|  18.5k|        po->packet = NULL;
 1151|  18.5k|        po->packet_len = 0;
 1152|  18.5k|    }
 1153|       |
 1154|  19.5k|    return 0;
 1155|  19.7k|}
ofputil_packet_out_format:
 1243|  19.5k|{
 1244|  19.5k|    ds_put_char(s, ' ');
 1245|  19.5k|    match_format(&po->flow_metadata, port_map, s, OFP_DEFAULT_PRIORITY);
  ------------------
  |  |  138|  19.5k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
 1246|       |
 1247|  19.5k|    ds_put_cstr(s, " actions=");
 1248|  19.5k|    struct ofpact_format_params fp = {
 1249|  19.5k|        .port_map = port_map,
 1250|  19.5k|        .table_map = table_map,
 1251|  19.5k|        .s = s,
 1252|  19.5k|    };
 1253|  19.5k|    ofpacts_format(po->ofpacts, po->ofpacts_len, &fp);
 1254|       |
 1255|  19.5k|    if (po->buffer_id == UINT32_MAX) {
  ------------------
  |  Branch (1255:9): [True: 965, False: 18.5k]
  ------------------
 1256|    965|        ds_put_format(s, " data_len=%"PRIuSIZE, po->packet_len);
  ------------------
  |  |  120|    965|#define PRIuSIZE "zu"
  ------------------
 1257|    965|        if (verbosity > 0 && po->packet_len > 0) {
  ------------------
  |  Branch (1257:13): [True: 965, False: 0]
  |  Branch (1257:30): [True: 865, False: 100]
  ------------------
 1258|    865|            ovs_be32 po_packet_type = po->flow_metadata.flow.packet_type;
 1259|    865|            char *packet = ofp_packet_to_string(po->packet, po->packet_len,
 1260|    865|                                                po_packet_type);
 1261|    865|            ds_put_char(s, '\n');
 1262|    865|            ds_put_cstr(s, packet);
 1263|    865|            free(packet);
 1264|    865|        }
 1265|    965|        if (verbosity > 2) {
  ------------------
  |  Branch (1265:13): [True: 0, False: 965]
  ------------------
 1266|      0|            ds_put_hex_dump(s, po->packet, po->packet_len, 0, false);
 1267|      0|        }
 1268|  18.5k|    } else {
 1269|       |        ds_put_format(s, " buffer=0x%08"PRIx32, po->buffer_id);
 1270|  18.5k|    }
 1271|  19.5k|}
ofp-packet.c:decode_nx_packet_in2:
  110|  8.80k|{
  111|  8.80k|    *total_len = 0;
  112|  8.80k|    *buffer_id = UINT32_MAX;
  113|       |
  114|  8.80k|    struct ofpbuf properties;
  115|  8.80k|    ofpbuf_use_const(&properties, oh, ntohs(oh->length));
  116|  8.80k|    ofpraw_pull_assert(&properties);
  117|       |
  118|  31.3k|    while (properties.size > 0) {
  ------------------
  |  Branch (118:12): [True: 24.1k, False: 7.22k]
  ------------------
  119|  24.1k|        struct ofpbuf payload;
  120|  24.1k|        uint64_t type;
  121|       |
  122|  24.1k|        enum ofperr error = ofpprop_pull(&properties, &payload, &type);
  123|  24.1k|        if (error) {
  ------------------
  |  Branch (123:13): [True: 993, False: 23.1k]
  ------------------
  124|    993|            return error;
  125|    993|        }
  126|       |
  127|  23.1k|        switch (type) {
  128|  6.26k|        case NXPINT_PACKET:
  ------------------
  |  Branch (128:9): [True: 6.26k, False: 16.8k]
  ------------------
  129|  6.26k|            pin->packet = payload.msg;
  130|  6.26k|            pin->packet_len = ofpbuf_msgsize(&payload);
  131|  6.26k|            break;
  132|       |
  133|  2.18k|        case NXPINT_FULL_LEN: {
  ------------------
  |  Branch (133:9): [True: 2.18k, False: 20.9k]
  ------------------
  134|  2.18k|            uint32_t u32;
  135|  2.18k|            error = ofpprop_parse_u32(&payload, &u32);
  136|  2.18k|            if (!error) {
  ------------------
  |  Branch (136:17): [True: 2.03k, False: 155]
  ------------------
  137|  2.03k|                *total_len = u32;
  138|  2.03k|            }
  139|  2.18k|            break;
  140|      0|        }
  141|       |
  142|    716|        case NXPINT_BUFFER_ID:
  ------------------
  |  Branch (142:9): [True: 716, False: 22.4k]
  ------------------
  143|    716|            error = ofpprop_parse_u32(&payload, buffer_id);
  144|    716|            break;
  145|       |
  146|     13|        case NXPINT_TABLE_ID:
  ------------------
  |  Branch (146:9): [True: 13, False: 23.1k]
  ------------------
  147|     13|            error = ofpprop_parse_u8(&payload, &pin->table_id);
  148|     13|            break;
  149|       |
  150|    107|        case NXPINT_COOKIE:
  ------------------
  |  Branch (150:9): [True: 107, False: 23.0k]
  ------------------
  151|    107|            error = ofpprop_parse_be64(&payload, &pin->cookie);
  152|    107|            break;
  153|       |
  154|    148|        case NXPINT_REASON: {
  ------------------
  |  Branch (154:9): [True: 148, False: 23.0k]
  ------------------
  155|    148|            uint8_t reason;
  156|    148|            error = ofpprop_parse_u8(&payload, &reason);
  157|    148|            if (!error) {
  ------------------
  |  Branch (157:17): [True: 114, False: 34]
  ------------------
  158|    114|                pin->reason = reason;
  159|    114|            }
  160|    148|            break;
  161|      0|        }
  162|       |
  163|  3.96k|        case NXPINT_METADATA:
  ------------------
  |  Branch (163:9): [True: 3.96k, False: 19.1k]
  ------------------
  164|  3.96k|            error = oxm_decode_match(payload.msg, ofpbuf_msgsize(&payload),
  165|  3.96k|                                     loose, tun_table, vl_mff_map,
  166|  3.96k|                                     &pin->flow_metadata);
  167|  3.96k|            pin->flow_metadata.flow.tunnel.metadata.tab = tun_table;
  168|  3.96k|            break;
  169|       |
  170|  1.01k|        case NXPINT_USERDATA:
  ------------------
  |  Branch (170:9): [True: 1.01k, False: 22.1k]
  ------------------
  171|  1.01k|            pin->userdata = payload.msg;
  172|  1.01k|            pin->userdata_len = ofpbuf_msgsize(&payload);
  173|  1.01k|            break;
  174|       |
  175|  5.73k|        case NXPINT_CONTINUATION:
  ------------------
  |  Branch (175:9): [True: 5.73k, False: 17.4k]
  ------------------
  176|  5.73k|            if (continuation) {
  ------------------
  |  Branch (176:17): [True: 5.73k, False: 0]
  ------------------
  177|  5.73k|                error = ofpprop_parse_nested(&payload, continuation);
  178|  5.73k|            }
  179|  5.73k|            break;
  180|       |
  181|  3.01k|        default:
  ------------------
  |  Branch (181:9): [True: 3.01k, False: 20.1k]
  ------------------
  182|  3.01k|            error = OFPPROP_UNKNOWN(loose, "NX_PACKET_IN2", type);
  ------------------
  |  |  144|  3.01k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  183|  3.01k|            break;
  184|  23.1k|        }
  185|  23.1k|        if (error) {
  ------------------
  |  Branch (185:13): [True: 583, False: 22.5k]
  ------------------
  186|    583|            return error;
  187|    583|        }
  188|  23.1k|    }
  189|       |
  190|  7.22k|    if (!pin->packet_len) {
  ------------------
  |  Branch (190:9): [True: 1.55k, False: 5.67k]
  ------------------
  191|  1.55k|        VLOG_WARN_RL(&rl, "NXT_PACKET_IN2 lacks packet");
  ------------------
  |  |  224|  1.55k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.55k|    do {                                                                \
  |  |  |  |  288|  1.55k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.55k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.55k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.55k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.55k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  192|  1.55k|        return OFPERR_OFPBRC_BAD_LEN;
  193|  5.67k|    } else if (!*total_len) {
  ------------------
  |  Branch (193:16): [True: 3.73k, False: 1.93k]
  ------------------
  194|  3.73k|        *total_len = pin->packet_len;
  195|  3.73k|    } else if (*total_len < pin->packet_len) {
  ------------------
  |  Branch (195:16): [True: 73, False: 1.86k]
  ------------------
  196|     73|        VLOG_WARN_RL(&rl, "NXT_PACKET_IN2 claimed full_len < len");
  ------------------
  |  |  224|     73|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     73|    do {                                                                \
  |  |  |  |  288|     73|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     73|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 73]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     73|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 73]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  197|     73|        return OFPERR_OFPBRC_BAD_LEN;
  198|     73|    }
  199|       |
  200|  5.59k|    return 0;
  201|  7.22k|}
ofp-packet.c:parse_stack_prop:
  776|  2.56k|{
  777|  2.56k|    unsigned int len = ofpbuf_msgsize(property);
  778|  2.56k|    if (len > sizeof(union mf_subvalue)) {
  ------------------
  |  Branch (778:9): [True: 66, False: 2.49k]
  ------------------
  779|     66|        VLOG_WARN_RL(&rl, "NXCPT_STACK property has bad length %u",
  ------------------
  |  |  224|     66|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     66|    do {                                                                \
  |  |  |  |  288|     66|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     66|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 66]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     66|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 66]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  780|     66|                     len);
  781|     66|        return OFPERR_OFPBPC_BAD_LEN;
  782|     66|    }
  783|  2.49k|    nx_stack_push_bottom(stack, property->msg, len);
  784|  2.49k|    return 0;
  785|  2.56k|}
ofp-packet.c:parse_actions_property:
  790|  3.25k|{
  791|  3.25k|    if (!ofpbuf_try_pull(property, ROUND_UP(ofpbuf_headersize(property), 8))) {
  ------------------
  |  |  303|  3.25k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|  3.25k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (791:9): [True: 196, False: 3.05k]
  ------------------
  792|    196|        VLOG_WARN_RL(&rl, "actions property has bad length %"PRIu32,
  ------------------
  |  |  224|    196|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    196|    do {                                                                \
  |  |  |  |  288|    196|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    196|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 196]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    196|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 196]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  793|    196|                     property->size);
  794|    196|        return OFPERR_OFPBPC_BAD_LEN;
  795|    196|    }
  796|       |
  797|  3.05k|    return ofpacts_pull_openflow_actions(property, property->size,
  798|  3.05k|                                         version, NULL, NULL, ofpacts);
  799|  3.25k|}

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

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

ofpprop_pull__:
   75|   108k|{
   76|   108k|    struct ofp_prop_header *oph;
   77|   108k|    unsigned int padded_len;
   78|   108k|    unsigned int len;
   79|       |
   80|   108k|    if (msg->size < sizeof *oph) {
  ------------------
  |  Branch (80:9): [True: 174, False: 108k]
  ------------------
   81|    174|        return OFPERR_OFPBPC_BAD_LEN;
   82|    174|    }
   83|       |
   84|   108k|    oph = msg->data;
   85|   108k|    len = ntohs(oph->len);
   86|   108k|    padded_len = ROUND_UP(len, alignment);
  ------------------
  |  |  303|   108k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|   108k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
   87|   108k|    if (len < sizeof *oph || padded_len > msg->size) {
  ------------------
  |  Branch (87:9): [True: 3.57k, False: 104k]
  |  Branch (87:30): [True: 9.46k, False: 95.4k]
  ------------------
   88|  13.0k|        return OFPERR_OFPBPC_BAD_LEN;
   89|  13.0k|    }
   90|       |
   91|  95.4k|    uint16_t type = ntohs(oph->type);
   92|  95.4k|    if (type < min_exp) {
  ------------------
  |  Branch (92:9): [True: 84.6k, False: 10.8k]
  ------------------
   93|  84.6k|        *typep = type;
   94|  84.6k|    } else {
   95|  10.8k|        struct ofp_prop_experimenter *ope = msg->data;
   96|  10.8k|        if (len < sizeof *ope) {
  ------------------
  |  Branch (96:13): [True: 76, False: 10.7k]
  ------------------
   97|     76|            return OFPERR_OFPBPC_BAD_LEN;
   98|     76|        }
   99|       |
  100|  10.7k|        if (!ope->experimenter) {
  ------------------
  |  Branch (100:13): [True: 100, False: 10.6k]
  ------------------
  101|       |            /* Reject experimenter 0 because it yields ambiguity with standard
  102|       |             * property types. */
  103|    100|            return OFPERR_OFPBPC_BAD_EXPERIMENTER;
  104|    100|        }
  105|       |
  106|  10.6k|        *typep = OFPPROP_EXP(ntohl(ope->experimenter), ntohl(ope->exp_type));
  ------------------
  |  |   67|  10.6k|    (((uint64_t) (EXP_ID) << 32) | (EXP_TYPE))
  ------------------
  107|  10.6k|    }
  108|       |
  109|  95.2k|    if (property) {
  ------------------
  |  Branch (109:9): [True: 93.0k, False: 2.25k]
  ------------------
  110|  93.0k|        ofpbuf_use_const(property, msg->data, len);
  111|  93.0k|        property->header = property->data;
  112|  93.0k|        property->msg = ((uint8_t *) property->data
  113|  93.0k|                         + (type < min_exp
  ------------------
  |  Branch (113:29): [True: 82.3k, False: 10.6k]
  ------------------
  114|  93.0k|                            ? sizeof(struct ofp_prop_header)
  115|  93.0k|                            : sizeof(struct ofp_prop_experimenter)));
  116|  93.0k|    }
  117|  95.2k|    ofpbuf_pull(msg, padded_len);
  118|  95.2k|    return 0;
  119|  95.4k|}
ofpprop_pull:
  136|  96.3k|{
  137|  96.3k|    return ofpprop_pull__(msg, property, 8, 0xffff, typep);
  138|  96.3k|}
ofpprop_parse_be16:
  145|  2.26k|{
  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|  2.26k|    ovs_be16 *p = property->msg;
  150|  2.26k|    if (ofpbuf_msgsize(property) < sizeof *p) {
  ------------------
  |  Branch (150:9): [True: 293, False: 1.97k]
  ------------------
  151|    293|        return OFPERR_OFPBPC_BAD_LEN;
  152|    293|    }
  153|  1.97k|    *value = *p;
  154|  1.97k|    return 0;
  155|  2.26k|}
ofpprop_parse_be32:
  162|  5.60k|{
  163|  5.60k|    ovs_be32 *p = property->msg;
  164|  5.60k|    if (ofpbuf_msgsize(property) != sizeof *p) {
  ------------------
  |  Branch (164:9): [True: 176, False: 5.43k]
  ------------------
  165|    176|        return OFPERR_OFPBPC_BAD_LEN;
  166|    176|    }
  167|  5.43k|    *value = *p;
  168|  5.43k|    return 0;
  169|  5.60k|}
ofpprop_parse_be64:
  176|    222|{
  177|    222|    ovs_be64 *p;
  178|    222|    size_t be64_offset = ROUND_UP(ofpbuf_headersize(property), 8);
  ------------------
  |  |  303|    222|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|    222|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  179|    222|    if (property->size != be64_offset + sizeof *p) {
  ------------------
  |  Branch (179:9): [True: 98, False: 124]
  ------------------
  180|     98|        return OFPERR_OFPBPC_BAD_LEN;
  181|     98|    }
  182|       |
  183|    124|    p = ALIGNED_CAST(ovs_be64 *, (char *) property->data + be64_offset);
  ------------------
  |  |  434|    124|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  184|    124|    *value = *p;
  185|    124|    return 0;
  186|    222|}
ofpprop_parse_be128:
  193|    718|{
  194|    718|    ovs_32aligned_be128 *p = property->msg;
  195|       |
  196|    718|    if (ofpbuf_msgsize(property) != sizeof *p) {
  ------------------
  |  Branch (196:9): [True: 11, False: 707]
  ------------------
  197|     11|        return OFPERR_OFPBPC_BAD_LEN;
  198|     11|    }
  199|    707|    *value = get_32aligned_be128(p);
  200|    707|    return 0;
  201|    718|}
ofpprop_parse_u8:
  208|  1.19k|{
  209|       |    /* OpenFlow 1.5 and earlier don't have any 8-bit properties, but it uses
  210|       |     * 8-byte properties for 16-bit values, which doesn't really make sense.
  211|       |     * Be forgiving by allowing any size payload as long as it's at least big
  212|       |     * enough. */
  213|  1.19k|    uint8_t *p = property->msg;
  214|  1.19k|    if (ofpbuf_msgsize(property) < sizeof *p) {
  ------------------
  |  Branch (214:9): [True: 307, False: 885]
  ------------------
  215|    307|        return OFPERR_OFPBPC_BAD_LEN;
  216|    307|    }
  217|    885|    *value = *p;
  218|    885|    return 0;
  219|  1.19k|}
ofpprop_parse_u16:
  226|  2.22k|{
  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|  2.22k|    ovs_be16 *p = property->msg;
  231|  2.22k|    if (ofpbuf_msgsize(property) < sizeof *p) {
  ------------------
  |  Branch (231:9): [True: 87, False: 2.14k]
  ------------------
  232|     87|        return OFPERR_OFPBPC_BAD_LEN;
  233|     87|    }
  234|  2.14k|    *value = ntohs(*p);
  235|  2.14k|    return 0;
  236|  2.22k|}
ofpprop_parse_u32:
  243|  5.68k|{
  244|  5.68k|    ovs_be32 *p = property->msg;
  245|  5.68k|    if (ofpbuf_msgsize(property) != sizeof *p) {
  ------------------
  |  Branch (245:9): [True: 232, False: 5.45k]
  ------------------
  246|    232|        return OFPERR_OFPBPC_BAD_LEN;
  247|    232|    }
  248|  5.45k|    *value = ntohl(*p);
  249|  5.45k|    return 0;
  250|  5.68k|}
ofpprop_parse_u128:
  274|    718|{
  275|    718|    enum ofperr error = ofpprop_parse_be128(property, (ovs_be128 *) value);
  276|       |
  277|    718|    if (!error) {
  ------------------
  |  Branch (277:9): [True: 707, False: 11]
  ------------------
  278|    707|        *value = ntoh128(*(ovs_be128 *) value);
  279|    707|    }
  280|       |
  281|    718|    return error;
  282|    718|}
ofpprop_parse_uuid:
  289|  1.22k|{
  290|  1.22k|    struct uuid *p = property->msg;
  291|  1.22k|    if (ofpbuf_msgsize(property) != sizeof *p) {
  ------------------
  |  Branch (291:9): [True: 664, False: 559]
  ------------------
  292|    664|        return OFPERR_OFPBPC_BAD_LEN;
  293|    664|    }
  294|    559|    *uuid = *p;
  295|    559|    return 0;
  296|  1.22k|}
ofpprop_parse_nested:
  308|  11.3k|{
  309|  11.3k|    size_t nested_offset = ROUND_UP(ofpbuf_headersize(property), 8);
  ------------------
  |  |  303|  11.3k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|  11.3k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  310|  11.3k|    if (property->size < nested_offset) {
  ------------------
  |  Branch (310:9): [True: 37, False: 11.3k]
  ------------------
  311|     37|        return OFPERR_OFPBPC_BAD_LEN;
  312|     37|    }
  313|       |
  314|  11.3k|    ofpbuf_use_const(nested, property->data, property->size);
  315|  11.3k|    ofpbuf_pull(nested, nested_offset);
  316|  11.3k|    return 0;
  317|  11.3k|}
ofpprop_unknown:
  528|  15.4k|{
  529|  15.4k|    bool is_experimenter = ofpprop_is_experimenter(type);
  530|       |
  531|  15.4k|    static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 5);
  ------------------
  |  |  110|  15.4k|        {                                                                 \
  |  |  111|  15.4k|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|  61.9k|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [True: 0, Folded]
  |  |  |  |  |  Branch (37:48): [Folded, False: 15.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  15.4k|            0,                              /* first_dropped */           \
  |  |  113|  15.4k|            0,                              /* last_dropped */            \
  |  |  114|  15.4k|            0,                              /* n_dropped */               \
  |  |  115|  15.4k|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  15.4k|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  15.4k|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  15.4k|        }
  ------------------
  532|  15.4k|    enum vlog_level level = loose ? VLL_DBG : VLL_WARN;
  ------------------
  |  Branch (532:29): [True: 12.2k, False: 3.24k]
  ------------------
  533|  15.4k|    if (!is_experimenter) {
  ------------------
  |  Branch (533:9): [True: 13.9k, False: 1.49k]
  ------------------
  534|  13.9k|        vlog_rate_limit(module, level, &rl, "unknown %s property type %"PRId64,
  535|  13.9k|                        msg, type);
  536|  13.9k|    } else {
  537|  1.49k|        vlog_rate_limit(module, level, &rl,
  538|  1.49k|                        "unknown %s property type for exp_id 0x%"PRIx32", "
  539|  1.49k|                        "exp_type %"PRId32, msg,
  540|  1.49k|                        ofpprop_type_to_exp_id(type),
  541|  1.49k|                        ofpprop_type_to_exp_type(type));
  542|  1.49k|    }
  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|  15.4k|    return (loose ? 0
  ------------------
  |  Branch (548:13): [True: 12.2k, False: 3.24k]
  ------------------
  549|  15.4k|            : is_experimenter ? OFPERR_OFPBPC_BAD_EXP_TYPE
  ------------------
  |  Branch (549:15): [True: 384, False: 2.86k]
  ------------------
  550|  3.24k|            : OFPERR_OFPBPC_BAD_TYPE);
  551|  15.4k|}
ofp-prop.c:ofpprop_type_to_exp_id:
   45|  1.49k|{
   46|  1.49k|    return type >> 32;
   47|  1.49k|}
ofp-prop.c:ofpprop_type_to_exp_type:
   51|  1.49k|{
   52|       |    return type & UINT32_MAX;
   53|  1.49k|}

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

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

ofputil_pull_switch_features:
   71|  2.71k|{
   72|  2.71k|    const struct ofp_header *oh = b->data;
   73|  2.71k|    enum ofpraw raw = ofpraw_pull_assert(b);
   74|  2.71k|    const struct ofp_switch_features *osf = ofpbuf_pull(b, sizeof *osf);
   75|  2.71k|    features->datapath_id = ntohll(osf->datapath_id);
   76|  2.71k|    features->n_buffers = ntohl(osf->n_buffers);
   77|  2.71k|    features->n_tables = osf->n_tables;
   78|  2.71k|    features->auxiliary_id = 0;
   79|       |
   80|  2.71k|    features->capabilities = ntohl(osf->capabilities) &
   81|  2.71k|        ofputil_capabilities_mask(oh->version);
   82|       |
   83|  2.71k|    if (raw == OFPRAW_OFPT10_FEATURES_REPLY) {
  ------------------
  |  Branch (83:9): [True: 1.07k, False: 1.63k]
  ------------------
   84|  1.07k|        if (osf->capabilities & htonl(OFPC10_STP)) {
  ------------------
  |  Branch (84:13): [True: 372, False: 707]
  ------------------
   85|    372|            features->capabilities |= OFPUTIL_C_STP;
   86|    372|        }
   87|  1.07k|        features->ofpacts = ofpact_bitmap_from_openflow(osf->actions,
   88|  1.07k|                                                        OFP10_VERSION);
   89|  1.63k|    } else if (raw == OFPRAW_OFPT11_FEATURES_REPLY
  ------------------
  |  Branch (89:16): [True: 505, False: 1.12k]
  ------------------
   90|  1.63k|               || raw == OFPRAW_OFPT13_FEATURES_REPLY) {
  ------------------
  |  Branch (90:19): [True: 1.12k, False: 0]
  ------------------
   91|  1.63k|        if (osf->capabilities & htonl(OFPC11_GROUP_STATS)) {
  ------------------
  |  Branch (91:13): [True: 807, False: 824]
  ------------------
   92|    807|            features->capabilities |= OFPUTIL_C_GROUP_STATS;
   93|    807|        }
   94|  1.63k|        features->ofpacts = 0;
   95|  1.63k|        if (raw == OFPRAW_OFPT13_FEATURES_REPLY) {
  ------------------
  |  Branch (95:13): [True: 1.12k, False: 505]
  ------------------
   96|  1.12k|            features->auxiliary_id = osf->auxiliary_id;
   97|  1.12k|        }
   98|  1.63k|    } else {
   99|      0|        return OFPERR_OFPBRC_BAD_VERSION;
  100|      0|    }
  101|       |
  102|  2.71k|    return 0;
  103|  2.71k|}
ofputil_switch_features_format:
  255|  2.71k|{
  256|  2.71k|    ds_put_format(s, " dpid:%016"PRIx64"\n", features->datapath_id);
  257|       |
  258|  2.71k|    ds_put_format(s, "n_tables:%"PRIu8", n_buffers:%"PRIu32,
  259|  2.71k|                  features->n_tables, features->n_buffers);
  260|  2.71k|    if (features->auxiliary_id) {
  ------------------
  |  Branch (260:9): [True: 534, False: 2.17k]
  ------------------
  261|    534|        ds_put_format(s, ", auxiliary_id:%"PRIu8, features->auxiliary_id);
  262|    534|    }
  263|  2.71k|    ds_put_char(s, '\n');
  264|       |
  265|  2.71k|    ds_put_cstr(s, "capabilities: ");
  266|  2.71k|    ofp_print_bit_names(s, features->capabilities,
  267|  2.71k|                        ofputil_capabilities_to_name, ' ');
  268|  2.71k|    ds_put_char(s, '\n');
  269|       |
  270|  2.71k|    if (features->ofpacts) {
  ------------------
  |  Branch (270:9): [True: 1.03k, False: 1.67k]
  ------------------
  271|  1.03k|        ds_put_cstr(s, "actions: ");
  272|  1.03k|        ofpact_bitmap_format(features->ofpacts, s);
  273|  1.03k|        ds_put_char(s, '\n');
  274|  1.03k|    }
  275|  2.71k|}
ofputil_frag_handling_to_string:
  279|  2.93k|{
  280|  2.93k|    switch (frag) {
  ------------------
  |  Branch (280:13): [True: 2.93k, False: 0]
  ------------------
  281|    730|    case OFPUTIL_FRAG_NORMAL:   return "normal";
  ------------------
  |  Branch (281:5): [True: 730, False: 2.20k]
  ------------------
  282|    230|    case OFPUTIL_FRAG_DROP:     return "drop";
  ------------------
  |  Branch (282:5): [True: 230, False: 2.70k]
  ------------------
  283|  1.89k|    case OFPUTIL_FRAG_REASM:    return "reassemble";
  ------------------
  |  Branch (283:5): [True: 1.89k, False: 1.03k]
  ------------------
  284|     78|    case OFPUTIL_FRAG_NX_MATCH: return "nx-match";
  ------------------
  |  Branch (284:5): [True: 78, False: 2.85k]
  ------------------
  285|  2.93k|    }
  286|       |
  287|      0|    OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  288|  2.93k|}
ofputil_decode_get_config_reply:
  339|  2.42k|{
  340|  2.42k|    ofputil_decode_switch_config(oh, config);
  341|  2.42k|}
ofputil_decode_set_config:
  346|  1.50k|{
  347|  1.50k|    return (ofputil_decode_switch_config(oh, config)
  ------------------
  |  Branch (347:13): [True: 504, False: 1.00k]
  ------------------
  348|  1.50k|            ? 0
  349|  1.50k|            : OFPERR_OFPSCFC_BAD_FLAGS);
  350|  1.50k|}
ofputil_switch_config_format:
  386|  2.93k|{
  387|  2.93k|    ds_put_format(s, " frags=%s",
  388|  2.93k|                  ofputil_frag_handling_to_string(config->frag));
  389|       |
  390|  2.93k|    if (config->invalid_ttl_to_controller > 0) {
  ------------------
  |  Branch (390:9): [True: 196, False: 2.73k]
  ------------------
  391|    196|        ds_put_format(s, " invalid_ttl_to_controller");
  392|    196|    }
  393|       |
  394|  2.93k|    ds_put_format(s, " miss_send_len=%"PRIu16"\n", config->miss_send_len);
  395|  2.93k|}
ofp-switch.c:ofputil_capabilities_mask:
   44|  2.71k|{
   45|       |    /* Handle capabilities whose bit is unique for all OpenFlow versions */
   46|  2.71k|    switch (ofp_version) {
   47|  1.07k|    case OFP10_VERSION:
  ------------------
  |  Branch (47:5): [True: 1.07k, False: 1.63k]
  ------------------
   48|  1.16k|    case OFP11_VERSION:
  ------------------
  |  Branch (48:5): [True: 86, False: 2.62k]
  ------------------
   49|  1.16k|        return OFPC_COMMON | OFPC_ARP_MATCH_IP;
  ------------------
  |  |   30|  1.16k|#define OFPC_COMMON (OFPC_FLOW_STATS | OFPC_TABLE_STATS | OFPC_PORT_STATS | \
  |  |   31|  1.16k|                     OFPC_IP_REASM | OFPC_QUEUE_STATS)
  ------------------
   50|    419|    case OFP12_VERSION:
  ------------------
  |  Branch (50:5): [True: 419, False: 2.29k]
  ------------------
   51|    453|    case OFP13_VERSION:
  ------------------
  |  Branch (51:5): [True: 34, False: 2.67k]
  ------------------
   52|    453|        return OFPC_COMMON | OFPC12_PORT_BLOCKED;
  ------------------
  |  |   30|    453|#define OFPC_COMMON (OFPC_FLOW_STATS | OFPC_TABLE_STATS | OFPC_PORT_STATS | \
  |  |   31|    453|                     OFPC_IP_REASM | OFPC_QUEUE_STATS)
  ------------------
   53|     95|    case OFP14_VERSION:
  ------------------
  |  Branch (53:5): [True: 95, False: 2.61k]
  ------------------
   54|  1.09k|    case OFP15_VERSION:
  ------------------
  |  Branch (54:5): [True: 997, False: 1.71k]
  ------------------
   55|  1.09k|        return OFPC_COMMON | OFPC12_PORT_BLOCKED | OFPC14_BUNDLES
  ------------------
  |  |   30|  1.09k|#define OFPC_COMMON (OFPC_FLOW_STATS | OFPC_TABLE_STATS | OFPC_PORT_STATS | \
  |  |   31|  1.09k|                     OFPC_IP_REASM | OFPC_QUEUE_STATS)
  ------------------
   56|  1.09k|            | OFPC14_FLOW_MONITORING;
   57|      0|    default:
  ------------------
  |  Branch (57:5): [True: 0, False: 2.71k]
  ------------------
   58|       |        /* Caller needs to check osf->header.version itself */
   59|      0|        return 0;
   60|  2.71k|    }
   61|  2.71k|}
ofp-switch.c:ofputil_capabilities_to_name:
  232|  6.83k|{
  233|  6.83k|    enum ofputil_capabilities capabilities = bit;
  234|       |
  235|  6.83k|    switch (capabilities) {
  ------------------
  |  Branch (235:13): [True: 6.83k, False: 0]
  ------------------
  236|  1.13k|    case OFPUTIL_C_FLOW_STATS:   return "FLOW_STATS";
  ------------------
  |  Branch (236:5): [True: 1.13k, False: 5.70k]
  ------------------
  237|    861|    case OFPUTIL_C_TABLE_STATS:  return "TABLE_STATS";
  ------------------
  |  Branch (237:5): [True: 861, False: 5.97k]
  ------------------
  238|    972|    case OFPUTIL_C_PORT_STATS:   return "PORT_STATS";
  ------------------
  |  Branch (238:5): [True: 972, False: 5.86k]
  ------------------
  239|  1.02k|    case OFPUTIL_C_IP_REASM:     return "IP_REASM";
  ------------------
  |  Branch (239:5): [True: 1.02k, False: 5.81k]
  ------------------
  240|    531|    case OFPUTIL_C_QUEUE_STATS:  return "QUEUE_STATS";
  ------------------
  |  Branch (240:5): [True: 531, False: 6.30k]
  ------------------
  241|    292|    case OFPUTIL_C_ARP_MATCH_IP: return "ARP_MATCH_IP";
  ------------------
  |  Branch (241:5): [True: 292, False: 6.54k]
  ------------------
  242|    372|    case OFPUTIL_C_STP:          return "STP";
  ------------------
  |  Branch (242:5): [True: 372, False: 6.46k]
  ------------------
  243|    807|    case OFPUTIL_C_GROUP_STATS:  return "GROUP_STATS";
  ------------------
  |  Branch (243:5): [True: 807, False: 6.03k]
  ------------------
  244|    169|    case OFPUTIL_C_PORT_BLOCKED: return "PORT_BLOCKED";
  ------------------
  |  Branch (244:5): [True: 169, False: 6.67k]
  ------------------
  245|    541|    case OFPUTIL_C_BUNDLES:      return "BUNDLES";
  ------------------
  |  Branch (245:5): [True: 541, False: 6.29k]
  ------------------
  246|    132|    case OFPUTIL_C_FLOW_MONITORING: return "FLOW_MONITORING";
  ------------------
  |  Branch (246:5): [True: 132, False: 6.70k]
  ------------------
  247|  6.83k|    }
  248|       |
  249|      0|    return NULL;
  250|  6.83k|}
ofp-switch.c:ofputil_decode_switch_config:
  316|  3.93k|{
  317|  3.93k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  318|  3.93k|    ofpraw_pull_assert(&b);
  319|       |
  320|  3.93k|    const struct ofp_switch_config *osc = ofpbuf_pull(&b, sizeof *osc);
  321|  3.93k|    config->frag = ntohs(osc->flags) & OFPC_FRAG_MASK;
  322|  3.93k|    config->miss_send_len = ntohs(osc->miss_send_len);
  323|       |
  324|  3.93k|    ovs_be16 valid_mask = htons(OFPC_FRAG_MASK);
  325|  3.93k|    if (oh->version < OFP13_VERSION) {
  ------------------
  |  Branch (325:9): [True: 889, False: 3.04k]
  ------------------
  326|    889|        const ovs_be16 ttl_bit = htons(OFPC_INVALID_TTL_TO_CONTROLLER);
  327|    889|        valid_mask |= ttl_bit;
  328|    889|        config->invalid_ttl_to_controller = (osc->flags & ttl_bit) != 0;
  329|  3.04k|    } else {
  330|  3.04k|        config->invalid_ttl_to_controller = -1;
  331|  3.04k|    }
  332|       |
  333|  3.93k|    return !(osc->flags & ~valid_mask);
  334|  3.93k|}

ofputil_table_miss_to_string:
   46|  23.0k|{
   47|  23.0k|    switch (miss) {
   48|      0|    case OFPUTIL_TABLE_MISS_DEFAULT: return "default";
  ------------------
  |  Branch (48:5): [True: 0, False: 23.0k]
  ------------------
   49|  17.3k|    case OFPUTIL_TABLE_MISS_CONTROLLER: return "controller";
  ------------------
  |  Branch (49:5): [True: 17.3k, False: 5.69k]
  ------------------
   50|  3.08k|    case OFPUTIL_TABLE_MISS_CONTINUE: return "continue";
  ------------------
  |  Branch (50:5): [True: 3.08k, False: 19.9k]
  ------------------
   51|  2.61k|    case OFPUTIL_TABLE_MISS_DROP: return "drop";
  ------------------
  |  Branch (51:5): [True: 2.61k, False: 20.4k]
  ------------------
   52|      0|    default: return "***error***";
  ------------------
  |  Branch (52:5): [True: 0, False: 23.0k]
  ------------------
   53|  23.0k|    }
   54|  23.0k|}
ofputil_table_eviction_to_string:
   58|  2.80k|{
   59|  2.80k|    switch (eviction) {
   60|      0|    case OFPUTIL_TABLE_EVICTION_DEFAULT: return "default";
  ------------------
  |  Branch (60:5): [True: 0, False: 2.80k]
  ------------------
   61|    764|    case OFPUTIL_TABLE_EVICTION_ON: return "on";
  ------------------
  |  Branch (61:5): [True: 764, False: 2.03k]
  ------------------
   62|  1.79k|    case OFPUTIL_TABLE_EVICTION_OFF: return "off";
  ------------------
  |  Branch (62:5): [True: 1.79k, False: 1.00k]
  ------------------
   63|    244|    default: return "***error***";
  ------------------
  |  Branch (63:5): [True: 244, False: 2.55k]
  ------------------
   64|  2.80k|    }
   65|  2.80k|}
ofputil_table_vacancy_to_string:
   69|  2.80k|{
   70|  2.80k|    switch (vacancy) {
   71|      0|    case OFPUTIL_TABLE_VACANCY_DEFAULT: return "default";
  ------------------
  |  Branch (71:5): [True: 0, False: 2.80k]
  ------------------
   72|  1.16k|    case OFPUTIL_TABLE_VACANCY_ON: return "on";
  ------------------
  |  Branch (72:5): [True: 1.16k, False: 1.63k]
  ------------------
   73|  1.63k|    case OFPUTIL_TABLE_VACANCY_OFF: return "off";
  ------------------
  |  Branch (73:5): [True: 1.63k, False: 1.16k]
  ------------------
   74|      0|    default: return "***error***";
  ------------------
  |  Branch (74:5): [True: 0, False: 2.80k]
  ------------------
   75|  2.80k|    }
   76|  2.80k|}
ofputil_table_map_get_name:
  123|   111k|{
  124|   111k|    struct namemap_node *node
  125|   111k|        = map ? namemap_find_by_number(&map->map, table_id) : NULL;
  ------------------
  |  Branch (125:11): [True: 0, False: 111k]
  ------------------
  126|   111k|    return node && !node->duplicate ? node->name : NULL;
  ------------------
  |  Branch (126:12): [True: 0, False: 111k]
  |  Branch (126:20): [True: 0, False: 0]
  ------------------
  127|   111k|}
ofputil_format_table:
  201|  62.6k|{
  202|  62.6k|    const char *table_name = ofputil_table_map_get_name(table_map, table);
  203|  62.6k|    if (table_name) {
  ------------------
  |  Branch (203:9): [True: 0, False: 62.6k]
  ------------------
  204|      0|        namemap_put_name(table_name, s);
  205|  62.6k|    } else {
  206|       |        ds_put_format(s, "%"PRIu8, table);
  207|  62.6k|    }
  208|  62.6k|}
ofputil_decode_table_features:
  375|  9.66k|{
  376|  9.66k|    bool loose = raw_properties != NULL;
  377|       |
  378|  9.66k|    memset(tf, 0, sizeof *tf);
  379|       |
  380|  9.66k|    if (!msg->header) {
  ------------------
  |  Branch (380:9): [True: 8.54k, False: 1.11k]
  ------------------
  381|  8.54k|        ofpraw_pull_assert(msg);
  382|  8.54k|    }
  383|       |
  384|  9.66k|    if (!msg->size) {
  ------------------
  |  Branch (384:9): [True: 252, False: 9.40k]
  ------------------
  385|    252|        return EOF;
  386|    252|    }
  387|       |
  388|  9.40k|    const struct ofp_header *oh = msg->header;
  389|  9.40k|    struct ofp13_table_features *otf = msg->data;
  390|  9.40k|    if (msg->size < sizeof *otf) {
  ------------------
  |  Branch (390:9): [True: 1.56k, False: 7.84k]
  ------------------
  391|  1.56k|        return OFPERR_OFPBPC_BAD_LEN;
  392|  1.56k|    }
  393|       |
  394|  7.84k|    unsigned int len = ntohs(otf->length);
  395|  7.84k|    if (len < sizeof *otf || len % 8 || len > msg->size) {
  ------------------
  |  Branch (395:9): [True: 245, False: 7.60k]
  |  Branch (395:30): [True: 127, False: 7.47k]
  |  Branch (395:41): [True: 303, False: 7.17k]
  ------------------
  396|    675|        return OFPERR_OFPBPC_BAD_LEN;
  397|    675|    }
  398|       |
  399|  7.17k|    if (oh->version >= OFP15_VERSION) {
  ------------------
  |  Branch (399:9): [True: 6.02k, False: 1.14k]
  ------------------
  400|  6.02k|        if (!ofp15_table_features_command_is_valid(otf->command)) {
  ------------------
  |  Branch (400:13): [True: 106, False: 5.92k]
  ------------------
  401|    106|            return OFPERR_OFPTFFC_BAD_COMMAND;
  402|    106|        }
  403|  5.92k|        tf->command = otf->command;
  404|  5.92k|    } else {
  405|  1.14k|        tf->command = OFPTFC15_REPLACE;
  406|  1.14k|    }
  407|       |
  408|  7.06k|    tf->table_id = otf->table_id;
  409|  7.06k|    if (tf->table_id == OFPTT_ALL) {
  ------------------
  |  Branch (409:9): [True: 34, False: 7.03k]
  ------------------
  410|     34|        return OFPERR_OFPTFFC_BAD_TABLE;
  411|     34|    }
  412|       |
  413|  7.03k|    ovs_strlcpy_arrays(tf->name, otf->name);
  ------------------
  |  |  209|  7.03k|    ovs_strlcpy(DST, SRC, MIN(ARRAY_SIZE(DST), ARRAY_SIZE(SRC)))
  |  |  ------------------
  |  |  |  |   91|  7.03k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:20): [Folded, False: 7.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  414|  7.03k|    tf->metadata_match = otf->metadata_match;
  415|  7.03k|    tf->metadata_write = otf->metadata_write;
  416|  7.03k|    tf->miss_config = OFPUTIL_TABLE_MISS_DEFAULT;
  417|  7.03k|    if (oh->version >= OFP14_VERSION) {
  ------------------
  |  Branch (417:9): [True: 6.99k, False: 33]
  ------------------
  418|  6.99k|        uint32_t caps = ntohl(otf->capabilities);
  419|  6.99k|        tf->supports_eviction = (caps & OFPTC14_EVICTION) != 0;
  420|  6.99k|        tf->supports_vacancy_events = (caps & OFPTC14_VACANCY_EVENTS) != 0;
  421|  6.99k|    } else {
  422|     33|        tf->supports_eviction = -1;
  423|     33|        tf->supports_vacancy_events = -1;
  424|     33|    }
  425|  7.03k|    tf->max_entries = ntohl(otf->max_entries);
  426|       |
  427|  7.03k|    struct ofpbuf properties = ofpbuf_const_initializer(ofpbuf_pull(msg, len),
  428|  7.03k|                                                        len);
  429|  7.03k|    ofpbuf_pull(&properties, sizeof *otf);
  430|  7.03k|    tf->any_properties = properties.size > 0;
  431|  7.03k|    if (raw_properties) {
  ------------------
  |  Branch (431:9): [True: 7.03k, False: 0]
  ------------------
  432|  7.03k|        *raw_properties = properties;
  433|  7.03k|    }
  434|  7.03k|    uint32_t seen = 0;
  435|  15.7k|    while (properties.size > 0) {
  ------------------
  |  Branch (435:12): [True: 13.3k, False: 2.40k]
  ------------------
  436|  13.3k|        struct ofpbuf payload;
  437|  13.3k|        enum ofperr error;
  438|  13.3k|        uint64_t type;
  439|       |
  440|  13.3k|        error = pull_table_feature_property(&properties, &payload, &type);
  441|  13.3k|        if (error) {
  ------------------
  |  Branch (441:13): [True: 1.53k, False: 11.7k]
  ------------------
  442|  1.53k|            return error;
  443|  1.53k|        }
  444|       |
  445|  11.7k|        if (type < 32) {
  ------------------
  |  Branch (445:13): [True: 9.21k, False: 2.57k]
  ------------------
  446|  9.21k|            uint32_t bit = 1u << type;
  447|  9.21k|            if (seen & bit) {
  ------------------
  |  Branch (447:17): [True: 242, False: 8.97k]
  ------------------
  448|    242|                return OFPERR_OFPTFFC_BAD_FEATURES;
  449|    242|            }
  450|  8.97k|            seen |= bit;
  451|  8.97k|        }
  452|       |
  453|  11.5k|        switch ((enum ofp13_table_feature_prop_type) type) {
  454|    673|        case OFPTFPT13_INSTRUCTIONS:
  ------------------
  |  Branch (454:9): [True: 673, False: 10.8k]
  ------------------
  455|    673|            error = parse_instruction_ids(&payload, loose,
  456|    673|                                          &tf->nonmiss.instructions);
  457|    673|            break;
  458|  1.44k|        case OFPTFPT13_INSTRUCTIONS_MISS:
  ------------------
  |  Branch (458:9): [True: 1.44k, False: 10.1k]
  ------------------
  459|  1.44k|            error = parse_instruction_ids(&payload, loose,
  460|  1.44k|                                          &tf->miss.instructions);
  461|  1.44k|            break;
  462|       |
  463|  1.76k|        case OFPTFPT13_NEXT_TABLES:
  ------------------
  |  Branch (463:9): [True: 1.76k, False: 9.78k]
  ------------------
  464|  1.76k|            error = parse_table_features_next_table(&payload,
  465|  1.76k|                                                    tf->nonmiss.next);
  466|  1.76k|            break;
  467|    616|        case OFPTFPT13_NEXT_TABLES_MISS:
  ------------------
  |  Branch (467:9): [True: 616, False: 10.9k]
  ------------------
  468|    616|            error = parse_table_features_next_table(&payload, tf->miss.next);
  469|    616|            break;
  470|       |
  471|     94|        case OFPTFPT13_WRITE_ACTIONS:
  ------------------
  |  Branch (471:9): [True: 94, False: 11.4k]
  ------------------
  472|     94|            error = parse_action_bitmap(&payload, oh->version,
  473|     94|                                        &tf->nonmiss.write.ofpacts);
  474|     94|            break;
  475|     17|        case OFPTFPT13_WRITE_ACTIONS_MISS:
  ------------------
  |  Branch (475:9): [True: 17, False: 11.5k]
  ------------------
  476|     17|            error = parse_action_bitmap(&payload, oh->version,
  477|     17|                                        &tf->miss.write.ofpacts);
  478|     17|            break;
  479|       |
  480|    768|        case OFPTFPT13_APPLY_ACTIONS:
  ------------------
  |  Branch (480:9): [True: 768, False: 10.7k]
  ------------------
  481|    768|            error = parse_action_bitmap(&payload, oh->version,
  482|    768|                                        &tf->nonmiss.apply.ofpacts);
  483|    768|            break;
  484|    636|        case OFPTFPT13_APPLY_ACTIONS_MISS:
  ------------------
  |  Branch (484:9): [True: 636, False: 10.9k]
  ------------------
  485|    636|            error = parse_action_bitmap(&payload, oh->version,
  486|    636|                                        &tf->miss.apply.ofpacts);
  487|    636|            break;
  488|       |
  489|    572|        case OFPTFPT13_MATCH:
  ------------------
  |  Branch (489:9): [True: 572, False: 10.9k]
  ------------------
  490|    572|            error = parse_oxms(&payload, loose, &tf->match, &tf->mask);
  491|    572|            break;
  492|    387|        case OFPTFPT13_WILDCARDS:
  ------------------
  |  Branch (492:9): [True: 387, False: 11.1k]
  ------------------
  493|    387|            error = parse_oxms(&payload, loose, &tf->wildcard, NULL);
  494|    387|            break;
  495|       |
  496|    429|        case OFPTFPT13_WRITE_SETFIELD:
  ------------------
  |  Branch (496:9): [True: 429, False: 11.1k]
  ------------------
  497|    429|            error = parse_oxms(&payload, loose,
  498|    429|                               &tf->nonmiss.write.set_fields, NULL);
  499|    429|            break;
  500|    521|        case OFPTFPT13_WRITE_SETFIELD_MISS:
  ------------------
  |  Branch (500:9): [True: 521, False: 11.0k]
  ------------------
  501|    521|            error = parse_oxms(&payload, loose,
  502|    521|                               &tf->miss.write.set_fields, NULL);
  503|    521|            break;
  504|    444|        case OFPTFPT13_APPLY_SETFIELD:
  ------------------
  |  Branch (504:9): [True: 444, False: 11.1k]
  ------------------
  505|    444|            error = parse_oxms(&payload, loose,
  506|    444|                               &tf->nonmiss.apply.set_fields, NULL);
  507|    444|            break;
  508|    602|        case OFPTFPT13_APPLY_SETFIELD_MISS:
  ------------------
  |  Branch (508:9): [True: 602, False: 10.9k]
  ------------------
  509|    602|            error = parse_oxms(&payload, loose,
  510|    602|                               &tf->miss.apply.set_fields, NULL);
  511|    602|            break;
  512|       |
  513|      0|        case OFPTFPT13_EXPERIMENTER:
  ------------------
  |  Branch (513:9): [True: 0, False: 11.5k]
  ------------------
  514|      0|        case OFPTFPT13_EXPERIMENTER_MISS:
  ------------------
  |  Branch (514:9): [True: 0, False: 11.5k]
  ------------------
  515|  2.57k|        default:
  ------------------
  |  Branch (515:9): [True: 2.57k, False: 8.97k]
  ------------------
  516|  2.57k|            error = OFPPROP_UNKNOWN(loose, "table features", type);
  ------------------
  |  |  144|  2.57k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  517|  2.57k|            break;
  518|  11.5k|        }
  519|  11.5k|        if (error) {
  ------------------
  |  Branch (519:13): [True: 2.84k, False: 8.70k]
  ------------------
  520|  2.84k|            return error;
  521|  2.84k|        }
  522|  11.5k|    }
  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|  2.40k|    unsigned int missing = (seen & OFPTFPT13_REQUIRED) ^ OFPTFPT13_REQUIRED;
  ------------------
  |  |  276|  2.40k|#define OFPTFPT13_REQUIRED ((1u << OFPTFPT13_INSTRUCTIONS) |    \
  |  |  277|  2.40k|                            (1u << OFPTFPT13_NEXT_TABLES) |     \
  |  |  278|  2.40k|                            (1u << OFPTFPT13_WRITE_ACTIONS) |   \
  |  |  279|  2.40k|                            (1u << OFPTFPT13_APPLY_ACTIONS) |   \
  |  |  280|  2.40k|                            (1u << OFPTFPT13_MATCH) |           \
  |  |  281|  2.40k|                            (1u << OFPTFPT13_WILDCARDS) |       \
  |  |  282|  2.40k|                            (1u << OFPTFPT13_WRITE_SETFIELD) |  \
  |  |  283|  2.40k|                            (1u << OFPTFPT13_APPLY_SETFIELD))
  ------------------
                  unsigned int missing = (seen & OFPTFPT13_REQUIRED) ^ OFPTFPT13_REQUIRED;
  ------------------
  |  |  276|  2.40k|#define OFPTFPT13_REQUIRED ((1u << OFPTFPT13_INSTRUCTIONS) |    \
  |  |  277|  2.40k|                            (1u << OFPTFPT13_NEXT_TABLES) |     \
  |  |  278|  2.40k|                            (1u << OFPTFPT13_WRITE_ACTIONS) |   \
  |  |  279|  2.40k|                            (1u << OFPTFPT13_APPLY_ACTIONS) |   \
  |  |  280|  2.40k|                            (1u << OFPTFPT13_MATCH) |           \
  |  |  281|  2.40k|                            (1u << OFPTFPT13_WILDCARDS) |       \
  |  |  282|  2.40k|                            (1u << OFPTFPT13_WRITE_SETFIELD) |  \
  |  |  283|  2.40k|                            (1u << OFPTFPT13_APPLY_SETFIELD))
  ------------------
  527|  2.40k|    if (missing && (tf->any_properties || oh->version < OFP15_VERSION)) {
  ------------------
  |  Branch (527:9): [True: 2.40k, False: 0]
  |  Branch (527:21): [True: 961, False: 1.44k]
  |  Branch (527:43): [True: 329, False: 1.11k]
  ------------------
  528|  1.29k|        VLOG_WARN_RL(&rl,
  ------------------
  |  |  224|  1.29k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.29k|    do {                                                                \
  |  |  |  |  288|  1.29k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.29k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.29k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.29k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.29k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  529|  1.29k|                     "table features message missing %u required "
  530|  1.29k|                     "properties, including property %d",
  531|  1.29k|                     count_1bits(missing), rightmost_1bit_idx(missing));
  532|  1.29k|        return OFPERR_OFPTFFC_BAD_FEATURES;
  533|  1.29k|    }
  534|       |
  535|       |    /* Copy nonmiss to miss when appropriate. */
  536|  1.11k|    if (tf->any_properties) {
  ------------------
  |  Branch (536:9): [True: 0, False: 1.11k]
  ------------------
  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|  1.11k|    bitmap_or(tf->match.bm, tf->mask.bm, MFF_N_IDS);
  568|  1.11k|    bitmap_or(tf->wildcard.bm, tf->mask.bm, MFF_N_IDS);
  569|  1.11k|    bitmap_and(tf->wildcard.bm, tf->match.bm, MFF_N_IDS);
  570|       |
  571|  1.11k|    return 0;
  572|  2.40k|}
ofputil_decode_table_desc:
  729|  3.40k|{
  730|  3.40k|    memset(td, 0, sizeof *td);
  731|       |
  732|  3.40k|    if (!msg->header) {
  ------------------
  |  Branch (732:9): [True: 1.98k, False: 1.42k]
  ------------------
  733|  1.98k|        ofpraw_pull_assert(msg);
  734|  1.98k|    }
  735|       |
  736|  3.40k|    if (!msg->size) {
  ------------------
  |  Branch (736:9): [True: 489, False: 2.91k]
  ------------------
  737|    489|        return EOF;
  738|    489|    }
  739|       |
  740|  2.91k|    struct ofp14_table_desc *otd = ofpbuf_try_pull(msg, sizeof *otd);
  741|  2.91k|    if (!otd) {
  ------------------
  |  Branch (741:9): [True: 0, False: 2.91k]
  ------------------
  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|  2.91k|    td->table_id = otd->table_id;
  748|  2.91k|    size_t length = ntohs(otd->length);
  749|  2.91k|    if (length < sizeof *otd || length - sizeof *otd > msg->size) {
  ------------------
  |  Branch (749:9): [True: 370, False: 2.54k]
  |  Branch (749:33): [True: 697, False: 1.84k]
  ------------------
  750|  1.06k|        VLOG_WARN_RL(&rl, "OFP14_TABLE_DESC reply claims invalid "
  ------------------
  |  |  224|  1.06k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.06k|    do {                                                                \
  |  |  |  |  288|  1.06k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.06k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.06k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.06k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.06k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  751|  1.06k|                     "length %"PRIuSIZE, length);
  752|  1.06k|        return OFPERR_OFPBRC_BAD_LEN;
  753|  1.06k|    }
  754|  1.84k|    length -= sizeof *otd;
  755|       |
  756|  1.84k|    td->eviction = ofputil_decode_table_eviction(otd->config, version);
  757|  1.84k|    td->vacancy = ofputil_decode_table_vacancy(otd->config, version);
  758|  1.84k|    td->eviction_flags = UINT32_MAX;
  759|       |
  760|  1.84k|    struct ofpbuf properties = ofpbuf_const_initializer(
  761|  1.84k|        ofpbuf_pull(msg, length), length);
  762|  2.18k|    while (properties.size > 0) {
  ------------------
  |  Branch (762:12): [True: 927, False: 1.26k]
  ------------------
  763|    927|        struct ofpbuf payload;
  764|    927|        enum ofperr error;
  765|    927|        uint64_t type;
  766|       |
  767|    927|        error = ofpprop_pull(&properties, &payload, &type);
  768|    927|        if (error) {
  ------------------
  |  Branch (768:13): [True: 156, False: 771]
  ------------------
  769|    156|            return error;
  770|    156|        }
  771|       |
  772|    771|        switch (type) {
  773|    161|        case OFPTMPT14_EVICTION:
  ------------------
  |  Branch (773:9): [True: 161, False: 610]
  ------------------
  774|    161|            error = ofpprop_parse_u32(&payload, &td->eviction_flags);
  775|    161|            break;
  776|       |
  777|    453|        case OFPTMPT14_VACANCY:
  ------------------
  |  Branch (777:9): [True: 453, False: 318]
  ------------------
  778|    453|            error = parse_table_desc_vacancy_property(&payload, td);
  779|    453|            break;
  780|       |
  781|    157|        default:
  ------------------
  |  Branch (781:9): [True: 157, False: 614]
  ------------------
  782|    157|            error = OFPPROP_UNKNOWN(true, "table_desc", type);
  ------------------
  |  |  144|    157|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  783|    157|            break;
  784|    771|        }
  785|       |
  786|    771|        if (error) {
  ------------------
  |  Branch (786:13): [True: 428, False: 343]
  ------------------
  787|    428|            return error;
  788|    428|        }
  789|    771|    }
  790|       |
  791|  1.26k|    return 0;
  792|  1.84k|}
ofputil_table_desc_format:
  875|  1.26k|{
  876|  1.26k|    ds_put_format(s, "\n  table ");
  877|  1.26k|    ofputil_format_table(td->table_id, table_map, s);
  878|  1.26k|    ds_put_cstr(s, ":\n");
  879|  1.26k|    ds_put_format(s, "   eviction=%s eviction_flags=",
  880|  1.26k|                  ofputil_table_eviction_to_string(td->eviction));
  881|  1.26k|    ofputil_put_eviction_flags(s, td->eviction_flags);
  882|  1.26k|    ds_put_char(s, '\n');
  883|  1.26k|    ds_put_format(s, "   vacancy=%s",
  884|  1.26k|                  ofputil_table_vacancy_to_string(td->vacancy));
  885|  1.26k|    if (td->vacancy == OFPUTIL_TABLE_VACANCY_ON) {
  ------------------
  |  Branch (885:9): [True: 716, False: 544]
  ------------------
  886|    716|        ds_put_format(s, " vacancy_down=%"PRIu8"%%",
  887|    716|                      td->table_vacancy.vacancy_down);
  888|    716|        ds_put_format(s, " vacancy_up=%"PRIu8"%%",
  889|    716|                      td->table_vacancy.vacancy_up);
  890|    716|        ds_put_format(s, " vacancy=%"PRIu8"%%",
  891|    716|                      td->table_vacancy.vacancy);
  892|    716|    }
  893|  1.26k|    ds_put_char(s, '\n');
  894|  1.26k|}
ofputil_decode_table_mod:
 1055|  4.50k|{
 1056|  4.50k|    memset(pm, 0, sizeof *pm);
 1057|  4.50k|    pm->miss = OFPUTIL_TABLE_MISS_DEFAULT;
 1058|  4.50k|    pm->eviction = OFPUTIL_TABLE_EVICTION_DEFAULT;
 1059|  4.50k|    pm->eviction_flags = UINT32_MAX;
 1060|  4.50k|    pm->vacancy = OFPUTIL_TABLE_VACANCY_DEFAULT;
 1061|       |
 1062|  4.50k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
 1063|  4.50k|    enum ofpraw raw = ofpraw_pull_assert(&b);
 1064|  4.50k|    if (raw == OFPRAW_OFPT11_TABLE_MOD) {
  ------------------
  |  Branch (1064:9): [True: 564, False: 3.93k]
  ------------------
 1065|    564|        const struct ofp11_table_mod *otm = b.data;
 1066|       |
 1067|    564|        pm->table_id = otm->table_id;
 1068|    564|        pm->miss = ofputil_decode_table_miss(otm->config, oh->version);
 1069|  3.93k|    } else if (raw == OFPRAW_OFPT14_TABLE_MOD) {
  ------------------
  |  Branch (1069:16): [True: 3.93k, False: 0]
  ------------------
 1070|  3.93k|        const struct ofp14_table_mod *otm = ofpbuf_pull(&b, sizeof *otm);
 1071|       |
 1072|  3.93k|        pm->table_id = otm->table_id;
 1073|  3.93k|        pm->miss = ofputil_decode_table_miss(otm->config, oh->version);
 1074|  3.93k|        pm->eviction = ofputil_decode_table_eviction(otm->config, oh->version);
 1075|  3.93k|        pm->vacancy = ofputil_decode_table_vacancy(otm->config, oh->version);
 1076|  4.27k|        while (b.size > 0) {
  ------------------
  |  Branch (1076:16): [True: 2.72k, False: 1.54k]
  ------------------
 1077|  2.72k|            struct ofpbuf property;
 1078|  2.72k|            enum ofperr error;
 1079|  2.72k|            uint64_t type;
 1080|       |
 1081|  2.72k|            error = ofpprop_pull(&b, &property, &type);
 1082|  2.72k|            if (error) {
  ------------------
  |  Branch (1082:17): [True: 464, False: 2.26k]
  ------------------
 1083|    464|                return error;
 1084|    464|            }
 1085|       |
 1086|  2.26k|            switch (type) {
 1087|    261|            case OFPTMPT14_EVICTION:
  ------------------
  |  Branch (1087:13): [True: 261, False: 2.00k]
  ------------------
 1088|    261|                error = ofpprop_parse_u32(&property, &pm->eviction);
 1089|    261|                break;
 1090|       |
 1091|  1.52k|            case OFPTMPT14_VACANCY:
  ------------------
  |  Branch (1091:13): [True: 1.52k, False: 741]
  ------------------
 1092|  1.52k|                error = parse_table_mod_vacancy_property(&property, pm);
 1093|  1.52k|                break;
 1094|       |
 1095|    480|            default:
  ------------------
  |  Branch (1095:13): [True: 480, False: 1.78k]
  ------------------
 1096|    480|                error = OFPERR_OFPBRC_BAD_TYPE;
 1097|    480|                break;
 1098|  2.26k|            }
 1099|       |
 1100|  2.26k|            if (error) {
  ------------------
  |  Branch (1100:17): [True: 1.93k, False: 333]
  ------------------
 1101|  1.93k|                return error;
 1102|  1.93k|            }
 1103|  2.26k|        }
 1104|  3.93k|    } else {
 1105|      0|        return OFPERR_OFPBRC_BAD_TYPE;
 1106|      0|    }
 1107|       |
 1108|  2.10k|    return 0;
 1109|  4.50k|}
ofputil_table_mod_format:
 1171|  2.10k|{
 1172|  2.10k|    if (tm->table_id == 0xff) {
  ------------------
  |  Branch (1172:9): [True: 954, False: 1.15k]
  ------------------
 1173|    954|        ds_put_cstr(s, " table_id: ALL_TABLES");
 1174|  1.15k|    } else {
 1175|  1.15k|        ds_put_format(s, " table_id=");
 1176|  1.15k|        ofputil_format_table(tm->table_id, table_map, s);
 1177|  1.15k|    }
 1178|       |
 1179|  2.10k|    if (tm->miss != OFPUTIL_TABLE_MISS_DEFAULT) {
  ------------------
  |  Branch (1179:9): [True: 465, False: 1.64k]
  ------------------
 1180|    465|        ds_put_format(s, ", flow_miss_config=%s",
 1181|    465|                      ofputil_table_miss_to_string(tm->miss));
 1182|    465|    }
 1183|  2.10k|    if (tm->eviction != OFPUTIL_TABLE_EVICTION_DEFAULT) {
  ------------------
  |  Branch (1183:9): [True: 1.54k, False: 564]
  ------------------
 1184|  1.54k|        ds_put_format(s, ", eviction=%s",
 1185|  1.54k|                      ofputil_table_eviction_to_string(tm->eviction));
 1186|  1.54k|    }
 1187|  2.10k|    if (tm->eviction_flags != UINT32_MAX) {
  ------------------
  |  Branch (1187:9): [True: 0, False: 2.10k]
  ------------------
 1188|      0|        ds_put_cstr(s, "eviction_flags=");
 1189|      0|        ofputil_put_eviction_flags(s, tm->eviction_flags);
 1190|      0|    }
 1191|  2.10k|    if (tm->vacancy != OFPUTIL_TABLE_VACANCY_DEFAULT) {
  ------------------
  |  Branch (1191:9): [True: 1.54k, False: 564]
  ------------------
 1192|  1.54k|        ds_put_format(s, ", vacancy=%s",
 1193|  1.54k|                      ofputil_table_vacancy_to_string(tm->vacancy));
 1194|  1.54k|        if (tm->vacancy == OFPUTIL_TABLE_VACANCY_ON) {
  ------------------
  |  Branch (1194:13): [True: 450, False: 1.09k]
  ------------------
 1195|    450|            ds_put_format(s, " vacancy:%"PRIu8""
 1196|    450|                          ",%"PRIu8"", tm->table_vacancy.vacancy_down,
 1197|    450|                          tm->table_vacancy.vacancy_up);
 1198|    450|        }
 1199|  1.54k|    }
 1200|  2.10k|}
ofputil_table_features_format:
 1707|  34.6k|{
 1708|  34.6k|    if (!prev_features && features->command != OFPTFC15_REPLACE) {
  ------------------
  |  Branch (1708:9): [True: 4.72k, False: 29.9k]
  |  Branch (1708:27): [True: 139, False: 4.59k]
  ------------------
 1709|    139|        ds_put_format(s, "\n  command: %s",
 1710|    139|                      ofp15_table_features_command_to_string(
 1711|    139|                          features->command));
 1712|    139|    }
 1713|       |
 1714|  34.6k|    int table = features->table_id;
 1715|  34.6k|    int prev_table = prev_features ? prev_features->table_id : 0;
  ------------------
  |  Branch (1715:22): [True: 29.9k, False: 4.72k]
  ------------------
 1716|       |
 1717|  34.6k|    bool same_stats = !stats || (prev_stats
  ------------------
  |  Branch (1717:23): [True: 1.11k, False: 33.5k]
  |  Branch (1717:34): [True: 29.1k, False: 4.37k]
  ------------------
 1718|  29.1k|                                 && table_stats_equal(stats, prev_stats));
  ------------------
  |  Branch (1718:37): [True: 5.24k, False: 23.9k]
  ------------------
 1719|  34.6k|    bool same_features = prev_features && table_features_equal(features,
  ------------------
  |  Branch (1719:26): [True: 29.9k, False: 4.72k]
  |  Branch (1719:43): [True: 6.22k, False: 23.7k]
  ------------------
 1720|  29.9k|                                                               prev_features);
 1721|  34.6k|    if (same_stats && same_features && !features->name[0]) {
  ------------------
  |  Branch (1721:9): [True: 6.35k, False: 28.3k]
  |  Branch (1721:23): [True: 2.58k, False: 3.77k]
  |  Branch (1721:40): [True: 1.46k, False: 1.12k]
  ------------------
 1722|  1.46k|        if (*first_ditto < 0) {
  ------------------
  |  Branch (1722:13): [True: 800, False: 664]
  ------------------
 1723|    800|            *first_ditto = table;
 1724|    800|        }
 1725|  1.46k|        *last_ditto = table;
 1726|  1.46k|        return;
 1727|  1.46k|    }
 1728|  33.2k|    ofputil_table_features_format_finish(s, *first_ditto, *last_ditto);
 1729|  33.2k|    *first_ditto = -1;
 1730|       |
 1731|  33.2k|    ds_put_format(s, "\n  table %d", table);
 1732|  33.2k|    if (features->name[0]) {
  ------------------
  |  Branch (1732:9): [True: 21.0k, False: 12.1k]
  ------------------
 1733|  21.0k|        ds_put_format(s, " (\"%s\")", features->name);
 1734|  21.0k|    }
 1735|  33.2k|    ds_put_char(s, ':');
 1736|       |
 1737|  33.2k|    if (same_stats && same_features) {
  ------------------
  |  Branch (1737:9): [True: 4.89k, False: 28.3k]
  |  Branch (1737:23): [True: 1.12k, False: 3.77k]
  ------------------
 1738|  1.12k|        ds_put_cstr(s, " ditto");
 1739|  1.12k|        return;
 1740|  1.12k|    }
 1741|  32.0k|    ds_put_char(s, '\n');
 1742|  32.0k|    if (stats) {
  ------------------
  |  Branch (1742:9): [True: 31.1k, False: 948]
  ------------------
 1743|  31.1k|        ds_put_format(s, "    active=%"PRIu32", ", stats->active_count);
 1744|  31.1k|        ds_put_format(s, "lookup=%"PRIu64", ", stats->lookup_count);
 1745|  31.1k|        ds_put_format(s, "matched=%"PRIu64"\n", stats->matched_count);
 1746|  31.1k|    }
 1747|  32.0k|    if (same_features) {
  ------------------
  |  Branch (1747:9): [True: 3.64k, False: 28.4k]
  ------------------
 1748|  3.64k|        if (!table_features_empty(features)) {
  ------------------
  |  Branch (1748:13): [True: 1.79k, False: 1.85k]
  ------------------
 1749|  1.79k|            ds_put_cstr(s, "    (same features)\n");
 1750|  1.79k|        }
 1751|  3.64k|        return;
 1752|  3.64k|    }
 1753|  28.4k|    if (features->metadata_match || features->metadata_write) {
  ------------------
  |  Branch (1753:9): [True: 17.1k, False: 11.2k]
  |  Branch (1753:37): [True: 937, False: 10.3k]
  ------------------
 1754|  18.0k|        ds_put_format(s, "    metadata: match=%#"PRIx64" write=%#"PRIx64"\n",
 1755|  18.0k|                      ntohll(features->metadata_match),
 1756|  18.0k|                      ntohll(features->metadata_write));
 1757|  18.0k|    }
 1758|       |
 1759|  28.4k|    if (features->miss_config != OFPUTIL_TABLE_MISS_DEFAULT) {
  ------------------
  |  Branch (1759:9): [True: 22.6k, False: 5.84k]
  ------------------
 1760|  22.6k|        ds_put_format(s, "    config=%s\n",
 1761|  22.6k|                      ofputil_table_miss_to_string(features->miss_config));
 1762|  22.6k|    }
 1763|       |
 1764|  28.4k|    if (features->supports_eviction >= 0) {
  ------------------
  |  Branch (1764:9): [True: 948, False: 27.5k]
  ------------------
 1765|    948|        ds_put_format(s, "    eviction: %ssupported\n",
 1766|    948|                      features->supports_eviction ? "" : "not ");
  ------------------
  |  Branch (1766:23): [True: 277, False: 671]
  ------------------
 1767|       |
 1768|    948|    }
 1769|  28.4k|    if (features->supports_vacancy_events >= 0) {
  ------------------
  |  Branch (1769:9): [True: 948, False: 27.5k]
  ------------------
 1770|    948|        ds_put_format(s, "    vacancy events: %ssupported\n",
 1771|    948|                      features->supports_vacancy_events ? "" : "not ");
  ------------------
  |  Branch (1771:23): [True: 683, False: 265]
  ------------------
 1772|       |
 1773|    948|    }
 1774|       |
 1775|  28.4k|    if (features->max_entries) {
  ------------------
  |  Branch (1775:9): [True: 25.2k, False: 3.23k]
  ------------------
 1776|  25.2k|        ds_put_format(s, "    max_entries=%"PRIu32"\n", features->max_entries);
 1777|  25.2k|    }
 1778|       |
 1779|  28.4k|    const struct ofputil_table_instruction_features *prev_nonmiss
 1780|  28.4k|        = prev_features ? &prev_features->nonmiss : NULL;
  ------------------
  |  Branch (1780:11): [True: 23.7k, False: 4.72k]
  ------------------
 1781|  28.4k|    const struct ofputil_table_instruction_features *prev_miss
 1782|  28.4k|        = prev_features ? &prev_features->miss : NULL;
  ------------------
  |  Branch (1782:11): [True: 23.7k, False: 4.72k]
  ------------------
 1783|  28.4k|    if (prev_features
  ------------------
  |  Branch (1783:9): [True: 23.7k, False: 4.72k]
  ------------------
 1784|  23.7k|        && table_instruction_features_equal(&features->nonmiss, table,
  ------------------
  |  Branch (1784:12): [True: 6.26k, False: 17.4k]
  ------------------
 1785|  23.7k|                                            prev_nonmiss, prev_table)
 1786|  6.26k|        && table_instruction_features_equal(&features->miss, table,
  ------------------
  |  Branch (1786:12): [True: 6.26k, False: 0]
  ------------------
 1787|  6.26k|                                            prev_miss, prev_table)) {
 1788|  6.26k|        if (!table_instruction_features_empty(&features->nonmiss)) {
  ------------------
  |  Branch (1788:13): [True: 2.04k, False: 4.22k]
  ------------------
 1789|  2.04k|            ds_put_cstr(s, "    (same instructions)\n");
 1790|  2.04k|        }
 1791|  22.1k|    } else if (!table_instruction_features_equal(&features->nonmiss, table,
  ------------------
  |  Branch (1791:16): [True: 0, False: 22.1k]
  ------------------
 1792|  22.1k|                                                 &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|  22.1k|    } else if (!table_instruction_features_empty(&features->nonmiss)) {
  ------------------
  |  Branch (1797:16): [True: 20.2k, False: 1.92k]
  ------------------
 1798|  20.2k|        ds_put_cstr(s, "    instructions (table miss and others):\n");
 1799|  20.2k|        print_table_instruction_features(s, &features->nonmiss, prev_nonmiss);
 1800|  20.2k|    }
 1801|       |
 1802|  28.4k|    if (!bitmap_is_all_zeros(features->match.bm, MFF_N_IDS)) {
  ------------------
  |  Branch (1802:9): [True: 25.7k, False: 2.66k]
  ------------------
 1803|  25.7k|        if (prev_features
  ------------------
  |  Branch (1803:13): [True: 22.1k, False: 3.65k]
  ------------------
 1804|  22.1k|            && bitmap_equal(features->match.bm, prev_features->match.bm,
  ------------------
  |  Branch (1804:16): [True: 5.42k, False: 16.7k]
  ------------------
 1805|  22.1k|                            MFF_N_IDS)) {
 1806|  5.42k|            ds_put_cstr(s, "    (same matching)\n");
 1807|  20.3k|        } else {
 1808|  20.3k|            ds_put_cstr(s, "    matching:\n");
 1809|       |
 1810|  20.3k|            print_matches(s, features, true, true, "arbitrary mask");
 1811|  20.3k|            print_matches(s, features, false, true, "exact match or wildcard");
 1812|  20.3k|            print_matches(s, features, false, false, "must exact match");
 1813|  20.3k|        }
 1814|  25.7k|    }
 1815|  28.4k|}
ofputil_table_features_format_finish:
 1820|  46.4k|{
 1821|  46.4k|    if (first_ditto < 0) {
  ------------------
  |  Branch (1821:9): [True: 45.6k, False: 800]
  ------------------
 1822|  45.6k|        return;
 1823|  45.6k|    }
 1824|       |
 1825|    800|    ds_put_char(s, '\n');
 1826|    800|    if (first_ditto == last_ditto) {
  ------------------
  |  Branch (1826:9): [True: 725, False: 75]
  ------------------
 1827|    725|        ds_put_format(s, "  table %d: ditto\n", first_ditto);
 1828|    725|    } else {
 1829|     75|        ds_put_format(s, "  tables %d...%d: ditto\n", first_ditto, last_ditto);
 1830|     75|    }
 1831|    800|}
ofputil_decode_table_stats_reply:
 2256|  38.2k|{
 2257|  38.2k|    const struct ofp_header *oh;
 2258|       |
 2259|  38.2k|    if (!msg->header) {
  ------------------
  |  Branch (2259:9): [True: 0, False: 38.2k]
  ------------------
 2260|      0|        ofpraw_pull_assert(msg);
 2261|      0|    }
 2262|  38.2k|    oh = msg->header;
 2263|       |
 2264|  38.2k|    if (!msg->size) {
  ------------------
  |  Branch (2264:9): [True: 4.73k, False: 33.5k]
  ------------------
 2265|  4.73k|        return EOF;
 2266|  4.73k|    }
 2267|       |
 2268|  33.5k|    memset(stats, 0, sizeof *stats);
 2269|  33.5k|    memset(features, 0, sizeof *features);
 2270|  33.5k|    features->supports_eviction = -1;
 2271|  33.5k|    features->supports_vacancy_events = -1;
 2272|       |
 2273|  33.5k|    switch ((enum ofp_version) oh->version) {
 2274|  6.00k|    case OFP10_VERSION:
  ------------------
  |  Branch (2274:5): [True: 6.00k, False: 27.5k]
  ------------------
 2275|  6.00k|        return ofputil_decode_ofp10_table_stats(msg, stats, features);
 2276|       |
 2277|  5.75k|    case OFP11_VERSION:
  ------------------
  |  Branch (2277:5): [True: 5.75k, False: 27.8k]
  ------------------
 2278|  5.75k|        return ofputil_decode_ofp11_table_stats(msg, stats, features);
 2279|       |
 2280|  18.5k|    case OFP12_VERSION:
  ------------------
  |  Branch (2280:5): [True: 18.5k, False: 15.0k]
  ------------------
 2281|  18.5k|        return ofputil_decode_ofp12_table_stats(msg, stats, features);
 2282|       |
 2283|    544|    case OFP13_VERSION:
  ------------------
  |  Branch (2283:5): [True: 544, False: 33.0k]
  ------------------
 2284|  1.03k|    case OFP14_VERSION:
  ------------------
  |  Branch (2284:5): [True: 494, False: 33.0k]
  ------------------
 2285|  3.25k|    case OFP15_VERSION:
  ------------------
  |  Branch (2285:5): [True: 2.21k, False: 31.3k]
  ------------------
 2286|  3.25k|        return ofputil_decode_ofp13_table_stats(msg, stats, features);
 2287|       |
 2288|      0|    default:
  ------------------
  |  Branch (2288:5): [True: 0, False: 33.5k]
  ------------------
 2289|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 2290|  33.5k|    }
 2291|  33.5k|}
ofp_table_reason_to_string:
 2299|    753|{
 2300|    753|    switch (reason) {
 2301|    388|    case OFPTR_VACANCY_DOWN:
  ------------------
  |  Branch (2301:5): [True: 388, False: 365]
  ------------------
 2302|    388|        return "vacancy_down";
 2303|       |
 2304|    365|    case OFPTR_VACANCY_UP:
  ------------------
  |  Branch (2304:5): [True: 365, False: 388]
  ------------------
 2305|    365|        return "vacancy_up";
 2306|       |
 2307|      0|    default:
  ------------------
  |  Branch (2307:5): [True: 0, False: 753]
  ------------------
 2308|      0|        snprintf(reasonbuf, bufsize, "%d", (int) reason);
 2309|      0|        return reasonbuf;
 2310|    753|    }
 2311|    753|}
ofputil_decode_table_status:
 2373|    506|{
 2374|    506|    const struct ofp14_table_status *ots;
 2375|    506|    struct ofpbuf b;
 2376|    506|    enum ofperr error;
 2377|    506|    enum ofpraw raw;
 2378|       |
 2379|    506|    ofpbuf_use_const(&b, oh, ntohs(oh->length));
 2380|    506|    raw = ofpraw_pull_assert(&b);
 2381|    506|    ots = ofpbuf_pull(&b, sizeof *ots);
 2382|       |
 2383|    506|    if (raw == OFPRAW_OFPT14_TABLE_STATUS) {
  ------------------
  |  Branch (2383:9): [True: 506, False: 0]
  ------------------
 2384|    506|        if (ots->reason != OFPTR_VACANCY_DOWN
  ------------------
  |  Branch (2384:13): [True: 397, False: 109]
  ------------------
 2385|    397|            && ots->reason != OFPTR_VACANCY_UP) {
  ------------------
  |  Branch (2385:16): [True: 244, False: 153]
  ------------------
 2386|    244|            return OFPERR_OFPBPC_BAD_VALUE;
 2387|    244|        }
 2388|    262|        ts->reason = ots->reason;
 2389|       |
 2390|    262|        error = ofputil_decode_table_desc(&b, &ts->desc, oh->version);
 2391|    262|        return error;
 2392|    506|    } else {
 2393|      0|        return OFPERR_OFPBRC_BAD_VERSION;
 2394|      0|    }
 2395|    506|}
ofputil_format_table_status:
 2401|    102|{
 2402|    102|    if (ts->reason == OFPTR_VACANCY_DOWN) {
  ------------------
  |  Branch (2402:9): [True: 35, False: 67]
  ------------------
 2403|     35|        ds_put_format(string, " reason=VACANCY_DOWN");
 2404|     67|    } else if (ts->reason == OFPTR_VACANCY_UP) {
  ------------------
  |  Branch (2404:16): [True: 67, False: 0]
  ------------------
 2405|     67|        ds_put_format(string, " reason=VACANCY_UP");
 2406|     67|    }
 2407|       |
 2408|    102|    ds_put_format(string, "\ntable_desc:-");
 2409|    102|    ofputil_table_desc_format(string, &ts->desc, table_map);
 2410|    102|}
ofp-table.c:ofp15_table_features_command_is_valid:
   80|  6.02k|{
   81|  6.02k|    switch (cmd) {
   82|  4.86k|    case OFPTFC15_REPLACE:
  ------------------
  |  Branch (82:5): [True: 4.86k, False: 1.16k]
  ------------------
   83|  4.97k|    case OFPTFC15_MODIFY:
  ------------------
  |  Branch (83:5): [True: 103, False: 5.92k]
  ------------------
   84|  5.85k|    case OFPTFC15_ENABLE:
  ------------------
  |  Branch (84:5): [True: 882, False: 5.14k]
  ------------------
   85|  5.92k|    case OFPTFC15_DISABLE:
  ------------------
  |  Branch (85:5): [True: 69, False: 5.95k]
  ------------------
   86|  5.92k|        return true;
   87|       |
   88|    106|    default:
  ------------------
  |  Branch (88:5): [True: 106, False: 5.92k]
  ------------------
   89|       |        return false;
   90|  6.02k|    }
   91|  6.02k|}
ofp-table.c:pull_table_feature_property:
  235|  13.3k|{
  236|  13.3k|    enum ofperr error;
  237|       |
  238|  13.3k|    error = ofpprop_pull(msg, payload, typep);
  239|  13.3k|    if (payload && !error) {
  ------------------
  |  Branch (239:9): [True: 13.3k, False: 0]
  |  Branch (239:20): [True: 11.7k, False: 1.53k]
  ------------------
  240|  11.7k|        ofpbuf_pull(payload, (char *)payload->msg - (char *)payload->header);
  241|  11.7k|    }
  242|  13.3k|    return error;
  243|  13.3k|}
ofp-table.c:parse_instruction_ids:
  270|  2.11k|{
  271|  2.11k|    *insts = 0;
  272|  3.41k|    while (payload->size > 0) {
  ------------------
  |  Branch (272:12): [True: 2.16k, False: 1.25k]
  ------------------
  273|  2.16k|        enum ovs_instruction_type inst;
  274|  2.16k|        enum ofperr error;
  275|  2.16k|        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|  2.16k|        error = ofpprop_pull__(payload, NULL, 1, 0x10000, &ofpit);
  287|  2.16k|        if (error) {
  ------------------
  |  Branch (287:13): [True: 866, False: 1.29k]
  ------------------
  288|    866|            return error;
  289|    866|        }
  290|       |
  291|  1.29k|        error = ovs_instruction_type_from_inst_type(&inst, ofpit);
  292|  1.29k|        if (!error) {
  ------------------
  |  Branch (292:13): [True: 247, False: 1.04k]
  ------------------
  293|    247|            *insts |= 1u << inst;
  294|  1.04k|        } else if (!loose) {
  ------------------
  |  Branch (294:20): [True: 0, False: 1.04k]
  ------------------
  295|      0|            return error;
  296|      0|        }
  297|  1.29k|    }
  298|  1.25k|    return 0;
  299|  2.11k|}
ofp-table.c:parse_table_features_next_table:
  304|  2.38k|{
  305|  2.38k|    size_t i;
  306|       |
  307|  2.38k|    memset(next_tables, 0, bitmap_n_bytes(255));
  308|  24.1k|    for (i = 0; i < payload->size; i++) {
  ------------------
  |  Branch (308:17): [True: 22.2k, False: 1.83k]
  ------------------
  309|  22.2k|        uint8_t id = ((const uint8_t *) payload->data)[i];
  310|  22.2k|        if (id >= 255) {
  ------------------
  |  Branch (310:13): [True: 548, False: 21.7k]
  ------------------
  311|    548|            return OFPERR_OFPBPC_BAD_VALUE;
  312|    548|        }
  313|  21.7k|        bitmap_set1(next_tables, id);
  314|  21.7k|    }
  315|  1.83k|    return 0;
  316|  2.38k|}
ofp-table.c:parse_action_bitmap:
  248|  1.51k|{
  249|  1.51k|    uint32_t types = 0;
  250|       |
  251|  2.47k|    while (payload->size > 0) {
  ------------------
  |  Branch (251:12): [True: 1.68k, False: 786]
  ------------------
  252|  1.68k|        enum ofperr error;
  253|  1.68k|        uint64_t type;
  254|       |
  255|  1.68k|        error = ofpprop_pull__(payload, NULL, 1, 0x10000, &type);
  256|  1.68k|        if (error) {
  ------------------
  |  Branch (256:13): [True: 729, False: 956]
  ------------------
  257|    729|            return error;
  258|    729|        }
  259|    956|        if (type < CHAR_BIT * sizeof types) {
  ------------------
  |  Branch (259:13): [True: 822, False: 134]
  ------------------
  260|    822|            types |= 1u << type;
  261|    822|        }
  262|    956|    }
  263|       |
  264|    786|    *ofpacts = ofpact_bitmap_from_openflow(htonl(types), ofp_version);
  265|    786|    return 0;
  266|  1.51k|}
ofp-table.c:parse_oxms:
  321|  2.95k|{
  322|  2.95k|    struct mf_bitmap exact = MF_BITMAP_INITIALIZER;
  ------------------
  |  | 2053|  2.95k|#define MF_BITMAP_INITIALIZER { { [0] = 0 } }
  ------------------
  323|  2.95k|    struct mf_bitmap masked = MF_BITMAP_INITIALIZER;
  ------------------
  |  | 2053|  2.95k|#define MF_BITMAP_INITIALIZER { { [0] = 0 } }
  ------------------
  324|       |
  325|  32.1k|    while (payload->size > 0) {
  ------------------
  |  Branch (325:12): [True: 29.3k, False: 2.85k]
  ------------------
  326|  29.3k|        const struct mf_field *field;
  327|  29.3k|        enum ofperr error;
  328|  29.3k|        bool hasmask;
  329|       |
  330|  29.3k|        error = nx_pull_header(payload, NULL, &field, &hasmask);
  331|  29.3k|        if (!error) {
  ------------------
  |  Branch (331:13): [True: 999, False: 28.3k]
  ------------------
  332|    999|            bitmap_set1(hasmask ? masked.bm : exact.bm, field->id);
  ------------------
  |  Branch (332:25): [True: 836, False: 163]
  ------------------
  333|  28.3k|        } else if (error != OFPERR_OFPBMC_BAD_FIELD || !loose) {
  ------------------
  |  Branch (333:20): [True: 98, False: 28.2k]
  |  Branch (333:56): [True: 0, False: 28.2k]
  ------------------
  334|     98|            return error;
  335|     98|        }
  336|  29.3k|    }
  337|  2.85k|    if (exactp) {
  ------------------
  |  Branch (337:9): [True: 2.85k, False: 0]
  ------------------
  338|  2.85k|        *exactp = exact;
  339|  2.85k|    } 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|  2.85k|    if (maskedp) {
  ------------------
  |  Branch (342:9): [True: 564, False: 2.29k]
  ------------------
  343|    564|        *maskedp = masked;
  344|  2.29k|    } else if (!bitmap_is_all_zeros(masked.bm, MFF_N_IDS)) {
  ------------------
  |  Branch (344:16): [True: 604, False: 1.68k]
  ------------------
  345|    604|        return OFPERR_OFPBMC_BAD_MASK;
  346|    604|    }
  347|  2.25k|    return 0;
  348|  2.85k|}
ofp-table.c:parse_table_desc_vacancy_property:
  708|    453|{
  709|    453|    struct ofp14_table_mod_prop_vacancy *otv = property->data;
  710|       |
  711|    453|    if (property->size != sizeof *otv) {
  ------------------
  |  Branch (711:9): [True: 426, False: 27]
  ------------------
  712|    426|        return OFPERR_OFPBPC_BAD_LEN;
  713|    426|    }
  714|       |
  715|     27|    td->table_vacancy.vacancy_down = otv->vacancy_down;
  716|     27|    td->table_vacancy.vacancy_up = otv->vacancy_up;
  717|     27|    td->table_vacancy.vacancy = otv->vacancy;
  718|     27|    return 0;
  719|    453|}
ofp-table.c:ofputil_put_eviction_flags:
  863|  1.26k|{
  864|  1.26k|    if (eviction_flags != UINT32_MAX) {
  ------------------
  |  Branch (864:9): [True: 151, False: 1.10k]
  ------------------
  865|    151|        ofp_print_bit_names(string, eviction_flags,
  866|    151|                            ofputil_eviction_flag_to_string, '|');
  867|  1.10k|    } else {
  868|  1.10k|        ds_put_cstr(string, "(default)");
  869|  1.10k|    }
  870|  1.26k|}
ofp-table.c:ofputil_eviction_flag_to_string:
  847|  3.74k|{
  848|  3.74k|    enum ofp14_table_mod_prop_eviction_flag eviction_flag = bit;
  849|       |
  850|  3.74k|    switch (eviction_flag) {
  ------------------
  |  Branch (850:13): [True: 380, False: 3.36k]
  ------------------
  851|    133|    case OFPTMPEF14_OTHER:      return "OTHER";
  ------------------
  |  Branch (851:5): [True: 133, False: 3.61k]
  ------------------
  852|    137|    case OFPTMPEF14_IMPORTANCE: return "IMPORTANCE";
  ------------------
  |  Branch (852:5): [True: 137, False: 3.61k]
  ------------------
  853|    110|    case OFPTMPEF14_LIFETIME:   return "LIFETIME";
  ------------------
  |  Branch (853:5): [True: 110, False: 3.63k]
  ------------------
  854|  3.74k|    }
  855|       |
  856|  3.36k|    return NULL;
  857|  3.74k|}
ofp-table.c:ofputil_decode_table_vacancy:
  941|  5.78k|{
  942|  5.78k|    return (version < OFP14_VERSION ? OFPUTIL_TABLE_VACANCY_DEFAULT
  ------------------
  |  Branch (942:13): [True: 0, False: 5.78k]
  ------------------
  943|  5.78k|            : config & htonl(OFPTC14_VACANCY_EVENTS) ? OFPUTIL_TABLE_VACANCY_ON
  ------------------
  |  Branch (943:15): [True: 2.94k, False: 2.83k]
  ------------------
  944|  5.78k|            : OFPUTIL_TABLE_VACANCY_OFF);
  945|  5.78k|}
ofp-table.c:ofputil_decode_table_eviction:
  956|  5.78k|{
  957|  5.78k|    return (version < OFP14_VERSION ? OFPUTIL_TABLE_EVICTION_DEFAULT
  ------------------
  |  Branch (957:13): [True: 0, False: 5.78k]
  ------------------
  958|  5.78k|            : config & htonl(OFPTC14_EVICTION) ? OFPUTIL_TABLE_EVICTION_ON
  ------------------
  |  Branch (958:15): [True: 2.06k, False: 3.71k]
  ------------------
  959|  5.78k|            : OFPUTIL_TABLE_EVICTION_OFF);
  960|  5.78k|}
ofp-table.c:ofputil_decode_table_miss:
 1027|  28.8k|{
 1028|  28.8k|    uint32_t config = ntohl(config_);
 1029|       |
 1030|  28.8k|    if (version == OFP11_VERSION || version == OFP12_VERSION) {
  ------------------
  |  Branch (1030:9): [True: 6.18k, False: 22.6k]
  |  Branch (1030:37): [True: 18.5k, False: 4.03k]
  ------------------
 1031|  24.7k|        switch (config & OFPTC11_TABLE_MISS_MASK) {
 1032|  14.1k|        case OFPTC11_TABLE_MISS_CONTROLLER:
  ------------------
  |  Branch (1032:9): [True: 14.1k, False: 10.6k]
  ------------------
 1033|  14.1k|            return OFPUTIL_TABLE_MISS_CONTROLLER;
 1034|       |
 1035|  3.53k|        case OFPTC11_TABLE_MISS_CONTINUE:
  ------------------
  |  Branch (1035:9): [True: 3.53k, False: 21.2k]
  ------------------
 1036|  3.53k|            return OFPUTIL_TABLE_MISS_CONTINUE;
 1037|       |
 1038|  2.88k|        case OFPTC11_TABLE_MISS_DROP:
  ------------------
  |  Branch (1038:9): [True: 2.88k, False: 21.8k]
  ------------------
 1039|  2.88k|            return OFPUTIL_TABLE_MISS_DROP;
 1040|       |
 1041|  4.20k|        default:
  ------------------
  |  Branch (1041:9): [True: 4.20k, False: 20.5k]
  ------------------
 1042|  4.20k|            VLOG_WARN_RL(&rl, "bad table miss config %d", config);
  ------------------
  |  |  224|  4.20k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  4.20k|    do {                                                                \
  |  |  |  |  288|  4.20k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  4.20k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 4.20k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  4.20k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 4.20k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1043|  4.20k|            return OFPUTIL_TABLE_MISS_CONTROLLER;
 1044|  24.7k|        }
 1045|  24.7k|    } else {
 1046|  4.03k|        return OFPUTIL_TABLE_MISS_DEFAULT;
 1047|  4.03k|    }
 1048|  28.8k|}
ofp-table.c:parse_table_mod_vacancy_property:
  904|  1.52k|{
  905|  1.52k|    struct ofp14_table_mod_prop_vacancy *otv = property->data;
  906|       |
  907|  1.52k|    if (property->size != sizeof *otv) {
  ------------------
  |  Branch (907:9): [True: 161, False: 1.36k]
  ------------------
  908|    161|        return OFPERR_OFPBPC_BAD_LEN;
  909|    161|    }
  910|  1.36k|    tm->table_vacancy.vacancy_down = otv->vacancy_down;
  911|  1.36k|    tm->table_vacancy.vacancy_up = otv->vacancy_up;
  912|  1.36k|    if (tm->table_vacancy.vacancy_down > tm->table_vacancy.vacancy_up) {
  ------------------
  |  Branch (912:9): [True: 296, False: 1.06k]
  ------------------
  913|    296|        OFPPROP_LOG(&rl, false,
  ------------------
  |  |  139|    296|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    296|    do {                                                                \
  |  |  |  |  288|    592|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 296]
  |  |  |  |  ------------------
  |  |  |  |  289|    296|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 296]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    296|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 296]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  914|    296|                    "Value of vacancy_down is greater than vacancy_up");
  915|    296|        return OFPERR_OFPBPC_BAD_VALUE;
  916|    296|    }
  917|  1.06k|    if (tm->table_vacancy.vacancy_down > 100 ||
  ------------------
  |  Branch (917:9): [True: 401, False: 665]
  ------------------
  918|    759|        tm->table_vacancy.vacancy_up > 100) {
  ------------------
  |  Branch (918:9): [True: 358, False: 307]
  ------------------
  919|    759|        OFPPROP_LOG(&rl, false, "Vacancy threshold percentage "
  ------------------
  |  |  139|    759|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    759|    do {                                                                \
  |  |  |  |  288|  1.51k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 759]
  |  |  |  |  ------------------
  |  |  |  |  289|    759|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 759]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    759|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 759]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  920|    759|                    "should not be greater than 100");
  921|    759|        return OFPERR_OFPBPC_BAD_VALUE;
  922|    759|    }
  923|    307|    tm->table_vacancy.vacancy = otv->vacancy;
  924|    307|    if (tm->table_vacancy.vacancy) {
  ------------------
  |  Branch (924:9): [True: 221, False: 86]
  ------------------
  925|    221|        OFPPROP_LOG(&rl, false,
  ------------------
  |  |  139|    221|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    221|    do {                                                                \
  |  |  |  |  288|    442|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 221]
  |  |  |  |  ------------------
  |  |  |  |  289|    221|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 221]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    221|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 221]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  926|    221|                    "Vacancy value should be zero for table-mod messages");
  927|    221|        return OFPERR_OFPBPC_BAD_VALUE;
  928|    221|    }
  929|     86|    return 0;
  930|    307|}
ofp-table.c:ofp15_table_features_command_to_string:
   95|    139|{
   96|    139|    switch (cmd) {
   97|      0|    case OFPTFC15_REPLACE: return "replace";
  ------------------
  |  Branch (97:5): [True: 0, False: 139]
  ------------------
   98|     26|    case OFPTFC15_MODIFY: return "modify";
  ------------------
  |  Branch (98:5): [True: 26, False: 113]
  ------------------
   99|     49|    case OFPTFC15_ENABLE: return "enable";
  ------------------
  |  Branch (99:5): [True: 49, False: 90]
  ------------------
  100|     64|    case OFPTFC15_DISABLE: return "disable";
  ------------------
  |  Branch (100:5): [True: 64, False: 75]
  ------------------
  101|      0|    default: return "***bad command***";
  ------------------
  |  Branch (101:5): [True: 0, False: 139]
  ------------------
  102|    139|    }
  103|    139|}
ofp-table.c:table_stats_equal:
 1693|  29.1k|{
 1694|  29.1k|    return (a->active_count == b->active_count
  ------------------
  |  Branch (1694:13): [True: 10.9k, False: 18.2k]
  ------------------
 1695|  10.9k|            && a->lookup_count == b->lookup_count
  ------------------
  |  Branch (1695:16): [True: 7.00k, False: 3.95k]
  ------------------
 1696|  7.00k|            && a->matched_count == b->matched_count);
  ------------------
  |  Branch (1696:16): [True: 5.24k, False: 1.76k]
  ------------------
 1697|  29.1k|}
ofp-table.c:table_features_equal:
 1662|  29.9k|{
 1663|  29.9k|    return (a->metadata_match == b->metadata_match
  ------------------
  |  Branch (1663:13): [True: 18.3k, False: 11.6k]
  ------------------
 1664|  18.3k|            && a->metadata_write == b->metadata_write
  ------------------
  |  Branch (1664:16): [True: 16.4k, False: 1.85k]
  ------------------
 1665|  16.4k|            && a->miss_config == b->miss_config
  ------------------
  |  Branch (1665:16): [True: 15.0k, False: 1.39k]
  ------------------
 1666|  15.0k|            && a->supports_eviction == b->supports_eviction
  ------------------
  |  Branch (1666:16): [True: 15.0k, False: 58]
  ------------------
 1667|  15.0k|            && a->supports_vacancy_events == b->supports_vacancy_events
  ------------------
  |  Branch (1667:16): [True: 14.9k, False: 58]
  ------------------
 1668|  14.9k|            && a->max_entries == b->max_entries
  ------------------
  |  Branch (1668:16): [True: 9.20k, False: 5.75k]
  ------------------
 1669|  9.20k|            && table_instruction_features_equal(&a->nonmiss, a->table_id,
  ------------------
  |  Branch (1669:16): [True: 7.00k, False: 2.19k]
  ------------------
 1670|  9.20k|                                                &b->nonmiss, b->table_id)
 1671|  7.00k|            && table_instruction_features_equal(&a->miss, a->table_id,
  ------------------
  |  Branch (1671:16): [True: 7.00k, False: 0]
  ------------------
 1672|  7.00k|                                                &b->miss, b->table_id)
 1673|  7.00k|            && bitmap_equal(a->match.bm, b->match.bm, MFF_N_IDS));
  ------------------
  |  Branch (1673:16): [True: 6.22k, False: 782]
  ------------------
 1674|  29.9k|}
ofp-table.c:table_features_empty:
 1678|  3.64k|{
 1679|  3.64k|    return (!tf->metadata_match
  ------------------
  |  Branch (1679:13): [True: 3.10k, False: 538]
  ------------------
 1680|  3.10k|            && !tf->metadata_write
  ------------------
  |  Branch (1680:16): [True: 3.05k, False: 54]
  ------------------
 1681|  3.05k|            && tf->miss_config == OFPUTIL_TABLE_MISS_DEFAULT
  ------------------
  |  Branch (1681:16): [True: 2.86k, False: 188]
  ------------------
 1682|  2.86k|            && tf->supports_eviction < 0
  ------------------
  |  Branch (1682:16): [True: 2.86k, False: 0]
  ------------------
 1683|  2.86k|            && tf->supports_vacancy_events < 0
  ------------------
  |  Branch (1683:16): [True: 2.86k, False: 0]
  ------------------
 1684|  2.86k|            && !tf->max_entries
  ------------------
  |  Branch (1684:16): [True: 2.09k, False: 769]
  ------------------
 1685|  2.09k|            && table_instruction_features_empty(&tf->nonmiss)
  ------------------
  |  Branch (1685:16): [True: 2.09k, False: 0]
  ------------------
 1686|  2.09k|            && table_instruction_features_empty(&tf->miss)
  ------------------
  |  Branch (1686:16): [True: 2.09k, False: 0]
  ------------------
 1687|  2.09k|            && bitmap_is_all_zeros(tf->match.bm, MFF_N_IDS));
  ------------------
  |  Branch (1687:16): [True: 1.85k, False: 243]
  ------------------
 1688|  3.64k|}
ofp-table.c:table_instruction_features_equal:
 1641|  68.3k|{
 1642|  68.3k|    return (table_instruction_features_next_equal(a->next, a_table_id,
  ------------------
  |  Branch (1642:13): [True: 68.3k, False: 0]
  ------------------
 1643|  68.3k|                                                  b->next, b_table_id)
 1644|  68.3k|            && a->instructions == b->instructions
  ------------------
  |  Branch (1644:16): [True: 57.9k, False: 10.4k]
  ------------------
 1645|  57.9k|            && table_action_features_equal(&a->write, &b->write)
  ------------------
  |  Branch (1645:16): [True: 51.1k, False: 6.86k]
  ------------------
 1646|  51.1k|            && table_action_features_equal(&a->apply, &b->apply));
  ------------------
  |  Branch (1646:16): [True: 48.7k, False: 2.37k]
  ------------------
 1647|  68.3k|}
ofp-table.c:table_instruction_features_next_equal:
 1615|  69.1k|{
 1616|  69.1k|    if (b_table_id == a_table_id + 1
  ------------------
  |  Branch (1616:9): [True: 1.46k, False: 67.6k]
  ------------------
 1617|  1.46k|        && bitmap_is_set(a, b_table_id)
  ------------------
  |  Branch (1617:12): [True: 0, False: 1.46k]
  ------------------
 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|  69.1k|    } else if (a_table_id == b_table_id + 1) {
  ------------------
  |  Branch (1629:16): [True: 743, False: 68.3k]
  ------------------
 1630|    743|        return table_instruction_features_next_equal(b, b_table_id,
 1631|    743|                                                     a, a_table_id);
 1632|  68.3k|    } else {
 1633|  68.3k|        return bitmap_equal(a, b, 255);
 1634|  68.3k|    }
 1635|  69.1k|}
ofp-table.c:table_action_features_equal:
 1511|   149k|{
 1512|   149k|    return (a->ofpacts == b->ofpacts
  ------------------
  |  Branch (1512:13): [True: 119k, False: 29.6k]
  ------------------
 1513|   119k|            && bitmap_equal(a->set_fields.bm, b->set_fields.bm, MFF_N_IDS));
  ------------------
  |  Branch (1513:16): [True: 109k, False: 10.2k]
  ------------------
 1514|   149k|}
ofp-table.c:table_instruction_features_empty:
 1652|  32.6k|{
 1653|  32.6k|    return (bitmap_is_all_zeros(tif->next, 255)
  ------------------
  |  Branch (1653:13): [True: 32.6k, False: 0]
  ------------------
 1654|  32.6k|            && !tif->instructions
  ------------------
  |  Branch (1654:16): [True: 18.5k, False: 14.1k]
  ------------------
 1655|  18.5k|            && table_action_features_empty(&tif->write)
  ------------------
  |  Branch (1655:16): [True: 11.3k, False: 7.13k]
  ------------------
 1656|  11.3k|            && table_action_features_empty(&tif->apply));
  ------------------
  |  Branch (1656:16): [True: 10.3k, False: 1.05k]
  ------------------
 1657|  32.6k|}
ofp-table.c:table_action_features_empty:
 1518|  29.9k|{
 1519|  29.9k|    return !taf->ofpacts && bitmap_is_all_zeros(taf->set_fields.bm, MFF_N_IDS);
  ------------------
  |  Branch (1519:12): [True: 23.3k, False: 6.51k]
  |  Branch (1519:29): [True: 21.7k, False: 1.67k]
  ------------------
 1520|  29.9k|}
ofp-table.c:print_table_instruction_features:
 1527|  20.2k|{
 1528|  20.2k|    int start, end;
 1529|       |
 1530|  20.2k|    if (!bitmap_is_all_zeros(tif->next, 255)) {
  ------------------
  |  Branch (1530:9): [True: 0, False: 20.2k]
  ------------------
 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.2k|    if (tif->instructions) {
  ------------------
  |  Branch (1548:9): [True: 13.1k, False: 7.14k]
  ------------------
 1549|  13.1k|        if (prev_tif && tif->instructions == prev_tif->instructions) {
  ------------------
  |  Branch (1549:13): [True: 11.0k, False: 2.11k]
  |  Branch (1549:25): [True: 3.42k, False: 7.57k]
  ------------------
 1550|  3.42k|            ds_put_cstr(s, "      (same instructions)\n");
 1551|  9.69k|        } else {
 1552|  9.69k|            ds_put_cstr(s, "      instructions: ");
 1553|  9.69k|            int i;
 1554|       |
 1555|   319k|            for (i = 0; i < 32; i++) {
  ------------------
  |  Branch (1555:25): [True: 310k, False: 9.69k]
  ------------------
 1556|   310k|                if (tif->instructions & (1u << i)) {
  ------------------
  |  Branch (1556:21): [True: 28.5k, False: 281k]
  ------------------
 1557|  28.5k|                    const char *name = ovs_instruction_name_from_type(i);
 1558|  28.5k|                    if (name) {
  ------------------
  |  Branch (1558:25): [True: 28.5k, False: 0]
  ------------------
 1559|  28.5k|                        ds_put_cstr(s, name);
 1560|  28.5k|                    } else {
 1561|      0|                        ds_put_format(s, "%d", i);
 1562|      0|                    }
 1563|  28.5k|                    ds_put_char(s, ' ');
 1564|  28.5k|                }
 1565|   310k|            }
 1566|  9.69k|            ds_chomp(s, ' ');
 1567|  9.69k|            ds_put_char(s, '\n');
 1568|  9.69k|        }
 1569|  13.1k|    }
 1570|       |
 1571|  20.2k|    if (prev_tif
  ------------------
  |  Branch (1571:9): [True: 17.2k, False: 3.00k]
  ------------------
 1572|  17.2k|        && table_action_features_equal(&tif->write, &prev_tif->write)
  ------------------
  |  Branch (1572:12): [True: 3.39k, False: 13.8k]
  ------------------
 1573|  3.39k|        && table_action_features_equal(&tif->apply, &prev_tif->apply)
  ------------------
  |  Branch (1573:12): [True: 904, False: 2.49k]
  ------------------
 1574|    904|        && !bitmap_is_all_zeros(tif->write.set_fields.bm, MFF_N_IDS)) {
  ------------------
  |  Branch (1574:12): [True: 687, False: 217]
  ------------------
 1575|    687|        ds_put_cstr(s, "      (same actions)\n");
 1576|  19.5k|    } else if (!table_action_features_equal(&tif->write, &tif->apply)) {
  ------------------
  |  Branch (1576:16): [True: 14.2k, False: 5.29k]
  ------------------
 1577|  14.2k|        ds_put_cstr(s, "      Write-Actions features:\n");
 1578|  14.2k|        print_table_action_features(s, &tif->write);
 1579|  14.2k|        ds_put_cstr(s, "      Apply-Actions features:\n");
 1580|  14.2k|        print_table_action_features(s, &tif->apply);
 1581|  14.2k|    } else if (tif->write.ofpacts
  ------------------
  |  Branch (1581:16): [True: 5.01k, False: 284]
  ------------------
 1582|  5.10k|               || !bitmap_is_all_zeros(tif->write.set_fields.bm, MFF_N_IDS)) {
  ------------------
  |  Branch (1582:19): [True: 91, False: 193]
  ------------------
 1583|  5.10k|        ds_put_cstr(s, "      Write-Actions and Apply-Actions features:\n");
 1584|  5.10k|        print_table_action_features(s, &tif->write);
 1585|  5.10k|    }
 1586|  20.2k|}
ofp-table.c:print_table_action_features:
 1494|  33.6k|{
 1495|  33.6k|    if (taf->ofpacts) {
  ------------------
  |  Branch (1495:9): [True: 26.8k, False: 6.83k]
  ------------------
 1496|  26.8k|        ds_put_cstr(s, "        actions: ");
 1497|  26.8k|        ofpact_bitmap_format(taf->ofpacts, s);
 1498|  26.8k|        ds_put_char(s, '\n');
 1499|  26.8k|    }
 1500|       |
 1501|  33.6k|    if (!bitmap_is_all_zeros(taf->set_fields.bm, MFF_N_IDS)) {
  ------------------
  |  Branch (1501:9): [True: 25.9k, False: 7.67k]
  ------------------
 1502|  25.9k|        ds_put_cstr(s, "        supported on Set-Field:");
 1503|  25.9k|        print_mf_bitmap(s, &taf->set_fields);
 1504|  25.9k|        ds_put_char(s, '\n');
 1505|  25.9k|    }
 1506|  33.6k|}
ofp-table.c:print_mf_bitmap:
 1476|  57.0k|{
 1477|  57.0k|    const char *ids[MFF_N_IDS];
 1478|  57.0k|    size_t n = 0;
 1479|       |
 1480|  57.0k|    int i;
 1481|   519k|    BITMAP_FOR_EACH_1 (i, MFF_N_IDS, mfb->bm) {
  ------------------
  |  |  281|  57.0k|    BITMAP_FOR_EACH_1_RANGE(IDX, 0, SIZE, BITMAP)
  |  |  ------------------
  |  |  |  |  278|   576k|    for ((IDX) = bitmap_scan(BITMAP, true, BEGIN, END); (IDX) < (END);   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (278:57): [True: 519k, False: 57.0k]
  |  |  |  |  ------------------
  |  |  |  |  279|   519k|         (IDX) = bitmap_scan(BITMAP, true, (IDX) + 1, END))
  |  |  ------------------
  ------------------
 1482|   519k|        ids[n++] = mf_from_id(i)->name;
 1483|   519k|    }
 1484|       |
 1485|  57.0k|    if (n > 0) {
  ------------------
  |  Branch (1485:9): [True: 57.0k, False: 0]
  ------------------
 1486|  57.0k|        ds_put_char(s, ' ');
 1487|  57.0k|        print_names(s, ids, n, 0);
 1488|  57.0k|    }
 1489|  57.0k|}
ofp-table.c:print_names:
 1439|   191k|{
 1440|   191k|    int group = 0;
 1441|   844k|    while (n > 0) {
  ------------------
  |  Branch (1441:12): [True: 653k, False: 191k]
  ------------------
 1442|   653k|        if (group++) {
  ------------------
  |  Branch (1442:13): [True: 462k, False: 191k]
  ------------------
 1443|   462k|            ds_put_char(s, prefix_len ? ',' : ' ');
  ------------------
  |  Branch (1443:28): [True: 172k, False: 290k]
  ------------------
 1444|   462k|        }
 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|   653k|        size_t extra_prefix_len;
 1453|   653k|        size_t prefix_run = count_common_prefix_run(ids, n, prefix_len,
 1454|   653k|                                                    &extra_prefix_len);
 1455|   653k|        size_t suffix_run = count_sequential_suffix_run(ids, n);
 1456|   653k|        size_t run = MAX(prefix_run, suffix_run);
  ------------------
  |  |   95|   653k|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (95:20): [True: 134k, False: 519k]
  |  |  ------------------
  ------------------
 1457|   653k|        if (suffix_run >= prefix_run) {
  ------------------
  |  Branch (1457:13): [True: 519k, False: 134k]
  ------------------
 1458|   519k|            ds_put_format(s, "%s", ids[0] + prefix_len);
 1459|   519k|            if (run > 1) {
  ------------------
  |  Branch (1459:17): [True: 0, False: 519k]
  ------------------
 1460|      0|                ds_put_format(s, "...%s", ids[run - 1] + prefix_len);
 1461|      0|            }
 1462|   519k|        } else {
 1463|   134k|            ds_put_format(s, "%.*s{", (int) extra_prefix_len,
 1464|   134k|                          ids[0] + prefix_len);
 1465|   134k|            print_names(s, ids, run, prefix_len + extra_prefix_len);
 1466|   134k|            ds_put_char(s, '}');
 1467|   134k|        }
 1468|       |
 1469|   653k|        ids += run;
 1470|   653k|        n -= run;
 1471|   653k|    }
 1472|   191k|}
ofp-table.c:count_common_prefix_run:
 1400|   653k|{
 1401|   653k|    *extra_prefix_lenp = 0;
 1402|   653k|    if (n < 2) {
  ------------------
  |  Branch (1402:9): [True: 170k, False: 483k]
  ------------------
 1403|   170k|        return n;
 1404|   170k|    }
 1405|       |
 1406|   483k|    size_t extra_prefix_len = count_common_prefix(ids[0] + prefix_len,
 1407|   483k|                                                  ids[1] + prefix_len);
 1408|   483k|    if (!extra_prefix_len) {
  ------------------
  |  Branch (1408:9): [True: 349k, False: 134k]
  ------------------
 1409|   349k|        return 1;
 1410|   349k|    }
 1411|       |
 1412|   134k|    size_t i = 2;
 1413|   172k|    while (i < n) {
  ------------------
  |  Branch (1413:12): [True: 151k, False: 20.4k]
  ------------------
 1414|   151k|        size_t next = count_common_prefix(ids[0] + prefix_len,
 1415|   151k|                                          ids[i] + prefix_len);
 1416|   151k|        if (!next) {
  ------------------
  |  Branch (1416:13): [True: 113k, False: 38.4k]
  ------------------
 1417|   113k|            break;
 1418|   113k|        } else if (next < extra_prefix_len) {
  ------------------
  |  Branch (1418:20): [True: 0, False: 38.4k]
  ------------------
 1419|      0|            extra_prefix_len = next;
 1420|      0|        }
 1421|  38.4k|        i++;
 1422|  38.4k|    }
 1423|   134k|    *extra_prefix_lenp = extra_prefix_len;
 1424|   134k|    return i;
 1425|   483k|}
ofp-table.c:count_common_prefix:
 1378|   635k|{
 1379|   635k|    size_t retval = 0;
 1380|  1.44M|    for (size_t i = 0; ; i++) {
 1381|  1.44M|        if (a[i] != b[i] || !a[i]) {
  ------------------
  |  Branch (1381:13): [True: 635k, False: 814k]
  |  Branch (1381:29): [True: 0, False: 814k]
  ------------------
 1382|   635k|            return retval;
 1383|   814k|        } else if (a[i] == '_') {
  ------------------
  |  Branch (1383:20): [True: 172k, False: 641k]
  ------------------
 1384|   172k|            retval = i + 1;
 1385|   172k|        }
 1386|  1.44M|    }
 1387|   635k|}
ofp-table.c:count_sequential_suffix_run:
 1365|   653k|{
 1366|   653k|    for (size_t i = 1; ; i++) {
 1367|   653k|        if (i >= n || !are_names_sequential(ids[i - 1], ids[i])) {
  ------------------
  |  Branch (1367:13): [True: 170k, False: 483k]
  |  Branch (1367:23): [True: 483k, False: 0]
  ------------------
 1368|       |            /* "x0...x1" is worse than "x0 x1", so suppress it. */
 1369|   653k|            return i == 2 ? 1 : i;
  ------------------
  |  Branch (1369:20): [True: 0, False: 653k]
  ------------------
 1370|   653k|        }
 1371|   653k|    }
 1372|   653k|}
ofp-table.c:are_names_sequential:
 1345|   483k|{
 1346|       |    /* Skip common prefix. */
 1347|  1.83M|    for (; *a == *b; a++, b++) {
  ------------------
  |  Branch (1347:12): [True: 1.35M, False: 483k]
  ------------------
 1348|  1.35M|        if (!*a) {
  ------------------
  |  Branch (1348:13): [True: 0, False: 1.35M]
  ------------------
 1349|       |            /* 'a' and 'b' are the same.  Weird, but not sequential. */
 1350|      0|            return false;
 1351|      0|        }
 1352|  1.35M|    }
 1353|       |
 1354|   483k|    return (is_all_digits(a)
  ------------------
  |  Branch (1354:13): [True: 0, False: 483k]
  ------------------
 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|   483k|}
ofp-table.c:is_all_digits:
 1337|   483k|{
 1338|   483k|    return s[0] && s[strspn(s, "0123456789")] == '\0';
  ------------------
  |  Branch (1338:12): [True: 483k, False: 0]
  |  Branch (1338:20): [True: 0, False: 483k]
  ------------------
 1339|   483k|}
ofp-table.c:print_matches:
 1591|  61.0k|{
 1592|  61.0k|    const struct mf_bitmap m = mask ? f->mask : mf_bitmap_not(f->mask);
  ------------------
  |  Branch (1592:32): [True: 20.3k, False: 40.7k]
  ------------------
 1593|  61.0k|    const struct mf_bitmap w = wc ? f->wildcard : mf_bitmap_not(f->wildcard);
  ------------------
  |  Branch (1593:32): [True: 40.7k, False: 20.3k]
  ------------------
 1594|  61.0k|    const struct mf_bitmap bm = mf_bitmap_and(f->match, mf_bitmap_and(m, w));
 1595|       |
 1596|  61.0k|    if (!bitmap_is_all_zeros(bm.bm, MFF_N_IDS)) {
  ------------------
  |  Branch (1596:9): [True: 31.0k, False: 30.0k]
  ------------------
 1597|  31.0k|        ds_put_format(s, "      %s:", title);
 1598|  31.0k|        print_mf_bitmap(s, &bm);
 1599|  31.0k|        ds_put_char(s, '\n');
 1600|  31.0k|    }
 1601|  61.0k|}
ofp-table.c:ofputil_decode_ofp10_table_stats:
 2128|  6.00k|{
 2129|  6.00k|    struct ofp10_table_stats *ots;
 2130|       |
 2131|  6.00k|    ots = ofpbuf_try_pull(msg, sizeof *ots);
 2132|  6.00k|    if (!ots) {
  ------------------
  |  Branch (2132:9): [True: 0, False: 6.00k]
  ------------------
 2133|      0|        return OFPERR_OFPBRC_BAD_LEN;
 2134|      0|    }
 2135|       |
 2136|  6.00k|    features->table_id = ots->table_id;
 2137|  6.00k|    ovs_strlcpy_arrays(features->name, ots->name);
  ------------------
  |  |  209|  6.00k|    ovs_strlcpy(DST, SRC, MIN(ARRAY_SIZE(DST), ARRAY_SIZE(SRC)))
  |  |  ------------------
  |  |  |  |   91|  6.00k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:20): [Folded, False: 6.00k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2138|  6.00k|    features->max_entries = ntohl(ots->max_entries);
 2139|  6.00k|    features->match = features->wildcard = mf_bitmap_from_of10(ots->wildcards);
 2140|       |
 2141|  6.00k|    stats->table_id = ots->table_id;
 2142|  6.00k|    stats->active_count = ntohl(ots->active_count);
 2143|  6.00k|    stats->lookup_count = ntohll(get_32aligned_be64(&ots->lookup_count));
 2144|  6.00k|    stats->matched_count = ntohll(get_32aligned_be64(&ots->matched_count));
 2145|       |
 2146|  6.00k|    return 0;
 2147|  6.00k|}
ofp-table.c:mf_bitmap_from_of10:
 1927|  6.00k|{
 1928|  6.00k|    struct mf_bitmap fields = MF_BITMAP_INITIALIZER;
  ------------------
  |  | 2053|  6.00k|#define MF_BITMAP_INITIALIZER { { [0] = 0 } }
  ------------------
 1929|  6.00k|    const struct ofp10_wc_map *p;
 1930|  6.00k|    uint32_t wc10 = ntohl(wc10_);
 1931|       |
 1932|  78.0k|    for (p = ofp10_wc_map; p < &ofp10_wc_map[ARRAY_SIZE(ofp10_wc_map)]; p++) {
  ------------------
  |  |  297|  78.0k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   46|  78.0k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|  78.0k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   47|  78.0k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  78.0k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|  78.0k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1932:28): [True: 72.0k, False: 6.00k]
  ------------------
 1933|  72.0k|        if (wc10 & p->wc10) {
  ------------------
  |  Branch (1933:13): [True: 24.5k, False: 47.4k]
  ------------------
 1934|  24.5k|            bitmap_set1(fields.bm, p->mf);
 1935|  24.5k|        }
 1936|  72.0k|    }
 1937|  6.00k|    return fields;
 1938|  6.00k|}
ofp-table.c:ofputil_decode_ofp11_table_stats:
 2153|  5.75k|{
 2154|  5.75k|    struct ofp11_table_stats *ots;
 2155|       |
 2156|  5.75k|    ots = ofpbuf_try_pull(msg, sizeof *ots);
 2157|  5.75k|    if (!ots) {
  ------------------
  |  Branch (2157:9): [True: 0, False: 5.75k]
  ------------------
 2158|      0|        return OFPERR_OFPBRC_BAD_LEN;
 2159|      0|    }
 2160|       |
 2161|  5.75k|    features->table_id = ots->table_id;
 2162|  5.75k|    ovs_strlcpy_arrays(features->name, ots->name);
  ------------------
  |  |  209|  5.75k|    ovs_strlcpy(DST, SRC, MIN(ARRAY_SIZE(DST), ARRAY_SIZE(SRC)))
  |  |  ------------------
  |  |  |  |   91|  5.75k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:20): [Folded, False: 5.75k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2163|  5.75k|    features->max_entries = ntohl(ots->max_entries);
 2164|  5.75k|    features->nonmiss.instructions = ovsinst_bitmap_from_openflow(
 2165|  5.75k|        ots->instructions, OFP11_VERSION);
 2166|  5.75k|    features->nonmiss.write.ofpacts = ofpact_bitmap_from_openflow(
 2167|  5.75k|        ots->write_actions, OFP11_VERSION);
 2168|  5.75k|    features->nonmiss.apply.ofpacts = ofpact_bitmap_from_openflow(
 2169|  5.75k|        ots->write_actions, OFP11_VERSION);
 2170|  5.75k|    features->miss = features->nonmiss;
 2171|  5.75k|    features->miss_config = ofputil_decode_table_miss(ots->config,
 2172|  5.75k|                                                      OFP11_VERSION);
 2173|  5.75k|    features->match = mf_bitmap_from_of11(ots->match);
 2174|  5.75k|    features->wildcard = mf_bitmap_from_of11(ots->wildcards);
 2175|  5.75k|    bitmap_or(features->match.bm, features->wildcard.bm, MFF_N_IDS);
 2176|       |
 2177|  5.75k|    stats->table_id = ots->table_id;
 2178|  5.75k|    stats->active_count = ntohl(ots->active_count);
 2179|  5.75k|    stats->lookup_count = ntohll(ots->lookup_count);
 2180|  5.75k|    stats->matched_count = ntohll(ots->matched_count);
 2181|       |
 2182|  5.75k|    return 0;
 2183|  5.75k|}
ofp-table.c:mf_bitmap_from_of11:
 1998|  11.5k|{
 1999|  11.5k|    struct mf_bitmap fields = MF_BITMAP_INITIALIZER;
  ------------------
  |  | 2053|  11.5k|#define MF_BITMAP_INITIALIZER { { [0] = 0 } }
  ------------------
 2000|  11.5k|    const struct ofp11_wc_map *p;
 2001|  11.5k|    uint32_t wc11 = ntohl(wc11_);
 2002|       |
 2003|   184k|    for (p = ofp11_wc_map; p < &ofp11_wc_map[ARRAY_SIZE(ofp11_wc_map)]; p++) {
  ------------------
  |  |  297|   184k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   46|   184k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|   184k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   47|   184k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   184k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|   184k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2003:28): [True: 172k, False: 11.5k]
  ------------------
 2004|   172k|        if (wc11 & p->wc11) {
  ------------------
  |  Branch (2004:13): [True: 77.0k, False: 95.6k]
  ------------------
 2005|  77.0k|            bitmap_set1(fields.bm, p->mf);
 2006|  77.0k|        }
 2007|   172k|    }
 2008|  11.5k|    return fields;
 2009|  11.5k|}
ofp-table.c:ofputil_decode_ofp12_table_stats:
 2189|  18.5k|{
 2190|  18.5k|    struct ofp12_table_stats *ots;
 2191|       |
 2192|  18.5k|    ots = ofpbuf_try_pull(msg, sizeof *ots);
 2193|  18.5k|    if (!ots) {
  ------------------
  |  Branch (2193:9): [True: 0, False: 18.5k]
  ------------------
 2194|      0|        return OFPERR_OFPBRC_BAD_LEN;
 2195|      0|    }
 2196|       |
 2197|  18.5k|    features->table_id = ots->table_id;
 2198|  18.5k|    ovs_strlcpy_arrays(features->name, ots->name);
  ------------------
  |  |  209|  18.5k|    ovs_strlcpy(DST, SRC, MIN(ARRAY_SIZE(DST), ARRAY_SIZE(SRC)))
  |  |  ------------------
  |  |  |  |   91|  18.5k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:20): [Folded, False: 18.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2199|  18.5k|    features->metadata_match = ots->metadata_match;
 2200|  18.5k|    features->metadata_write = ots->metadata_write;
 2201|  18.5k|    features->miss_config = ofputil_decode_table_miss(ots->config,
 2202|  18.5k|                                                      OFP12_VERSION);
 2203|  18.5k|    features->max_entries = ntohl(ots->max_entries);
 2204|       |
 2205|  18.5k|    features->nonmiss.instructions = ovsinst_bitmap_from_openflow(
 2206|  18.5k|        ots->instructions, OFP12_VERSION);
 2207|  18.5k|    features->nonmiss.write.ofpacts = ofpact_bitmap_from_openflow(
 2208|  18.5k|        ots->write_actions, OFP12_VERSION);
 2209|  18.5k|    features->nonmiss.apply.ofpacts = ofpact_bitmap_from_openflow(
 2210|  18.5k|        ots->apply_actions, OFP12_VERSION);
 2211|  18.5k|    features->nonmiss.write.set_fields = oxm_bitmap_to_mf_bitmap(
 2212|  18.5k|        ots->write_setfields, OFP12_VERSION);
 2213|  18.5k|    features->nonmiss.apply.set_fields = oxm_bitmap_to_mf_bitmap(
 2214|  18.5k|        ots->apply_setfields, OFP12_VERSION);
 2215|  18.5k|    features->miss = features->nonmiss;
 2216|       |
 2217|  18.5k|    features->match = oxm_bitmap_to_mf_bitmap(ots->match, OFP12_VERSION);
 2218|  18.5k|    features->wildcard = oxm_bitmap_to_mf_bitmap(ots->wildcards,
 2219|  18.5k|                                                 OFP12_VERSION);
 2220|  18.5k|    bitmap_or(features->match.bm, features->wildcard.bm, MFF_N_IDS);
 2221|       |
 2222|  18.5k|    stats->table_id = ots->table_id;
 2223|  18.5k|    stats->active_count = ntohl(ots->active_count);
 2224|  18.5k|    stats->lookup_count = ntohll(ots->lookup_count);
 2225|  18.5k|    stats->matched_count = ntohll(ots->matched_count);
 2226|       |
 2227|  18.5k|    return 0;
 2228|  18.5k|}
ofp-table.c:ofputil_decode_ofp13_table_stats:
 2234|  3.25k|{
 2235|  3.25k|    struct ofp13_table_stats *ots;
 2236|       |
 2237|  3.25k|    ots = ofpbuf_try_pull(msg, sizeof *ots);
 2238|  3.25k|    if (!ots) {
  ------------------
  |  Branch (2238:9): [True: 0, False: 3.25k]
  ------------------
 2239|      0|        return OFPERR_OFPBRC_BAD_LEN;
 2240|      0|    }
 2241|       |
 2242|  3.25k|    features->table_id = ots->table_id;
 2243|       |
 2244|  3.25k|    stats->table_id = ots->table_id;
 2245|  3.25k|    stats->active_count = ntohl(ots->active_count);
 2246|  3.25k|    stats->lookup_count = ntohll(ots->lookup_count);
 2247|  3.25k|    stats->matched_count = ntohll(ots->matched_count);
 2248|       |
 2249|  3.25k|    return 0;
 2250|  3.25k|}

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

ofpbuf_use_const:
  114|   238k|{
  115|   238k|    ofpbuf_use__(b, CONST_CAST(void *, data), size, size, OFPBUF_STACK);
  ------------------
  |  |   85|   238k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   238k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   238k|     (TYPE) (POINTER))
  ------------------
  116|   238k|}
ofpbuf_use_data:
  132|  71.3k|{
  133|  71.3k|    ofpbuf_use__(b, CONST_CAST(void *, data), size, size, OFPBUF_STUB);
  ------------------
  |  |   85|  71.3k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  71.3k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  71.3k|     (TYPE) (POINTER))
  ------------------
  134|  71.3k|}
ofpbuf_init:
  140|   800k|{
  141|   800k|    ofpbuf_use(b, size ? xmalloc(size) : NULL, size);
  ------------------
  |  Branch (141:19): [True: 338k, False: 461k]
  ------------------
  142|   800k|}
ofpbuf_uninit:
  147|   739k|{
  148|   739k|    if (b) {
  ------------------
  |  Branch (148:9): [True: 739k, False: 0]
  ------------------
  149|   739k|        if (b->source == OFPBUF_MALLOC) {
  ------------------
  |  Branch (149:13): [True: 627k, False: 111k]
  ------------------
  150|   627k|            free(b->base);
  151|   627k|        }
  152|   739k|    }
  153|   739k|}
ofpbuf_prealloc_tailroom:
  306|   354k|{
  307|   354k|    if (size > ofpbuf_tailroom(b)) {
  ------------------
  |  Branch (307:9): [True: 59.9k, False: 294k]
  ------------------
  308|  59.9k|        ofpbuf_resize__(b, ofpbuf_headroom(b), MAX(size, 64));
  ------------------
  |  |   95|  59.9k|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (95:20): [True: 12.0k, False: 47.8k]
  |  |  ------------------
  ------------------
  309|  59.9k|    }
  310|   354k|}
ofpbuf_prealloc_headroom:
  317|  68.6k|{
  318|  68.6k|    if (size > ofpbuf_headroom(b)) {
  ------------------
  |  Branch (318:9): [True: 56.0k, False: 12.5k]
  ------------------
  319|  56.0k|        ofpbuf_resize__(b, MAX(size, 64), ofpbuf_tailroom(b));
  ------------------
  |  |   95|  56.0k|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (95:20): [True: 992, False: 55.0k]
  |  |  ------------------
  ------------------
  320|  56.0k|    }
  321|  68.6k|}
ofpbuf_trim:
  336|   325k|{
  337|   325k|    if (b->source == OFPBUF_MALLOC
  ------------------
  |  Branch (337:9): [True: 325k, False: 0]
  ------------------
  338|   325k|        && (ofpbuf_headroom(b) || ofpbuf_tailroom(b))) {
  ------------------
  |  Branch (338:13): [True: 53.5k, False: 271k]
  |  Branch (338:35): [True: 996, False: 270k]
  ------------------
  339|  54.5k|        ofpbuf_resize__(b, 0, 0);
  340|  54.5k|    }
  341|   325k|}
ofpbuf_padto:
  368|  53.8k|{
  369|  53.8k|    if (b->size < length) {
  ------------------
  |  Branch (369:9): [True: 12.3k, False: 41.4k]
  ------------------
  370|  12.3k|        ofpbuf_put_zeros(b, length - b->size);
  371|  12.3k|    }
  372|  53.8k|}
ofpbuf_put_uninit:
  401|   354k|{
  402|   354k|    void *p;
  403|   354k|    ofpbuf_prealloc_tailroom(b, size);
  404|   354k|    p = ofpbuf_tail(b);
  405|   354k|    b->size += size;
  406|   354k|    return p;
  407|   354k|}
ofpbuf_put_zeros:
  414|  73.6k|{
  415|  73.6k|    void *dst = ofpbuf_put_uninit(b, size);
  416|  73.6k|    nullable_memset(dst, 0, size);
  417|  73.6k|    return dst;
  418|  73.6k|}
ofpbuf_put:
  425|  95.4k|{
  426|  95.4k|    if (!size) {
  ------------------
  |  Branch (426:9): [True: 11.6k, False: 83.7k]
  ------------------
  427|  11.6k|        return ofpbuf_tail(b);
  428|  11.6k|    }
  429|       |
  430|  83.7k|    void *dst = ofpbuf_put_uninit(b, size);
  431|  83.7k|    memcpy(dst, p, size);
  432|  83.7k|    return dst;
  433|  95.4k|}
ofpbuf_push_uninit:
  481|   344k|{
  482|   344k|    if (!size) {
  ------------------
  |  Branch (482:9): [True: 276k, False: 68.6k]
  ------------------
  483|   276k|        return b->data;
  484|   276k|    }
  485|       |
  486|  68.6k|    ofpbuf_prealloc_headroom(b, size);
  487|  68.6k|    b->data = (char*)b->data - size;
  488|  68.6k|    b->size += size;
  489|  68.6k|    return b->data;
  490|   344k|}
ofpbuf_push:
  508|   330k|{
  509|   330k|    void *dst = ofpbuf_push_uninit(b, size);
  510|   330k|    memcpy(dst, p, size);
  511|   330k|    return dst;
  512|   330k|}
ofpbuf_steal_data:
  537|   172k|{
  538|   172k|    void *p;
  539|       |
  540|   172k|    if (b->source == OFPBUF_MALLOC && b->data == b->base) {
  ------------------
  |  Branch (540:9): [True: 172k, False: 0]
  |  Branch (540:39): [True: 171k, False: 1.43k]
  ------------------
  541|   171k|        p = b->data;
  542|   171k|    } else {
  543|  1.43k|        p = xmemdup(b->data, b->size);
  544|  1.43k|        if (b->source == OFPBUF_MALLOC) {
  ------------------
  |  Branch (544:13): [True: 1.43k, False: 0]
  ------------------
  545|  1.43k|            free(b->base);
  546|  1.43k|        }
  547|  1.43k|    }
  548|   172k|    b->base = NULL;
  549|   172k|    b->data = NULL;
  550|   172k|    b->header = NULL;
  551|       |    b->msg = NULL;
  552|   172k|    return p;
  553|   172k|}
ofpbuf.c:ofpbuf_use__:
   37|  1.11M|{
   38|  1.11M|    b->base = base;
   39|  1.11M|    b->data = base;
   40|  1.11M|    b->size = size;
   41|       |
   42|  1.11M|    ofpbuf_init__(b, allocated, source);
   43|  1.11M|}
ofpbuf.c:ofpbuf_init__:
   26|  1.11M|{
   27|  1.11M|    b->allocated = allocated;
   28|  1.11M|    b->source = source;
   29|  1.11M|    b->header = NULL;
   30|       |    b->msg = NULL;
   31|  1.11M|    ovs_list_poison(&b->list_node);
   32|  1.11M|}
ofpbuf.c:ofpbuf_use:
   51|   800k|{
   52|   800k|    ofpbuf_use__(b, base, allocated, 0, OFPBUF_MALLOC);
   53|   800k|}
ofpbuf.c:ofpbuf_resize__:
  252|   170k|{
  253|   170k|    void *new_base, *new_data;
  254|   170k|    size_t new_allocated;
  255|       |
  256|   170k|    new_allocated = new_headroom + b->size + new_tailroom;
  257|       |
  258|   170k|    switch (b->source) {
  259|   170k|    case OFPBUF_MALLOC:
  ------------------
  |  Branch (259:5): [True: 170k, False: 0]
  ------------------
  260|   170k|        if (new_headroom == ofpbuf_headroom(b)) {
  ------------------
  |  Branch (260:13): [True: 60.9k, False: 109k]
  ------------------
  261|  60.9k|            new_base = xrealloc(b->base, new_allocated);
  262|   109k|        } else {
  263|   109k|            new_base = xmalloc(new_allocated);
  264|   109k|            ofpbuf_copy__(b, new_base, new_headroom, new_tailroom);
  265|   109k|            free(b->base);
  266|   109k|        }
  267|   170k|        break;
  268|       |
  269|      0|    case OFPBUF_STACK:
  ------------------
  |  Branch (269:5): [True: 0, False: 170k]
  ------------------
  270|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  271|       |
  272|      0|    case OFPBUF_STUB:
  ------------------
  |  Branch (272:5): [True: 0, False: 170k]
  ------------------
  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: 170k]
  ------------------
  279|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  280|   170k|    }
  281|       |
  282|   170k|    b->allocated = new_allocated;
  283|   170k|    b->base = new_base;
  284|       |
  285|   170k|    new_data = (char *) new_base + new_headroom;
  286|   170k|    if (b->data != new_data) {
  ------------------
  |  Branch (286:9): [True: 164k, False: 6.26k]
  ------------------
  287|   164k|        if (b->header) {
  ------------------
  |  Branch (287:13): [True: 46.2k, False: 118k]
  ------------------
  288|  46.2k|            ptrdiff_t header_offset = (char *) b->header - (char *) b->data;
  289|       |
  290|  46.2k|            b->header = (char *) new_data + header_offset;
  291|  46.2k|        }
  292|   164k|        if (b->msg) {
  ------------------
  |  Branch (292:13): [True: 0, False: 164k]
  ------------------
  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|   164k|        b->data = new_data;
  298|   164k|    }
  299|   170k|}
ofpbuf.c:ofpbuf_copy__:
  236|   109k|{
  237|   109k|    const uint8_t *old_base = b->base;
  238|   109k|    size_t old_headroom = ofpbuf_headroom(b);
  239|   109k|    size_t old_tailroom = ofpbuf_tailroom(b);
  240|   109k|    size_t copy_headroom = MIN(old_headroom, new_headroom);
  ------------------
  |  |   91|   109k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (91:20): [True: 56.0k, False: 53.5k]
  |  |  ------------------
  ------------------
  241|   109k|    size_t copy_tailroom = MIN(old_tailroom, new_tailroom);
  ------------------
  |  |   91|   109k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (91:20): [True: 0, False: 109k]
  |  |  ------------------
  ------------------
  242|       |
  243|   109k|    memcpy(&new_base[new_headroom - copy_headroom],
  244|   109k|           &old_base[old_headroom - copy_headroom],
  245|   109k|           copy_headroom + b->size + copy_tailroom);
  246|   109k|}

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|  7.30M|    {                                                                   \
  247|  7.30M|        return NAME##_get_unsafe();                                     \
  248|  7.30M|    }
util.c:counter_util_xalloc_get_unsafe:
  239|  7.30M|    {                                                                   \
  240|  7.30M|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|  7.30M|        return &var;                                                    \
  242|  7.30M|    }                                                                   \
flow.c:counter_flow_extract_get:
  246|  52.7k|    {                                                                   \
  247|  52.7k|        return NAME##_get_unsafe();                                     \
  248|  52.7k|    }
flow.c:counter_flow_extract_get_unsafe:
  239|  52.7k|    {                                                                   \
  240|  52.7k|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|  52.7k|        return &var;                                                    \
  242|  52.7k|    }                                                                   \
flow.c:counter_miniflow_extract_ipv4_pkt_len_error_get:
  246|    177|    {                                                                   \
  247|    177|        return NAME##_get_unsafe();                                     \
  248|    177|    }
flow.c:counter_miniflow_extract_ipv4_pkt_len_error_get_unsafe:
  239|    177|    {                                                                   \
  240|    177|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|    177|        return &var;                                                    \
  242|    177|    }                                                                   \
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|    459|    {                                                                   \
  247|    459|        return NAME##_get_unsafe();                                     \
  248|    459|    }
flow.c:counter_miniflow_extract_ipv6_pkt_len_error_get_unsafe:
  239|    459|    {                                                                   \
  240|    459|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|    459|        return &var;                                                    \
  242|    459|    }                                                                   \
flow.c:counter_miniflow_extract_ipv6_pkt_too_short_get:
  246|    341|    {                                                                   \
  247|    341|        return NAME##_get_unsafe();                                     \
  248|    341|    }
flow.c:counter_miniflow_extract_ipv6_pkt_too_short_get_unsafe:
  239|    341|    {                                                                   \
  240|    341|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|    341|        return &var;                                                    \
  242|    341|    }                                                                   \
flow.c:counter_miniflow_malloc_get:
  246|  26.5k|    {                                                                   \
  247|  26.5k|        return NAME##_get_unsafe();                                     \
  248|  26.5k|    }
flow.c:counter_miniflow_malloc_get_unsafe:
  239|  26.5k|    {                                                                   \
  240|  26.5k|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|  26.5k|        return &var;                                                    \
  242|  26.5k|    }                                                                   \
hmap.c:counter_hmap_pathological_get:
  246|      6|    {                                                                   \
  247|      6|        return NAME##_get_unsafe();                                     \
  248|      6|    }
hmap.c:counter_hmap_pathological_get_unsafe:
  239|      6|    {                                                                   \
  240|      6|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|      6|        return &var;                                                    \
  242|      6|    }                                                                   \
hmap.c:counter_hmap_expand_get:
  246|     28|    {                                                                   \
  247|     28|        return NAME##_get_unsafe();                                     \
  248|     28|    }
hmap.c:counter_hmap_expand_get_unsafe:
  239|     28|    {                                                                   \
  240|     28|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|     28|        return &var;                                                    \
  242|     28|    }                                                                   \

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

set_mpls_lse_ttl:
  337|    232|{
  338|    232|    *lse &= ~htonl(MPLS_TTL_MASK);
  339|       |    *lse |= htonl((ttl << MPLS_TTL_SHIFT) & MPLS_TTL_MASK);
  340|    232|}
set_mpls_lse_tc:
  345|    564|{
  346|    564|    *lse &= ~htonl(MPLS_TC_MASK);
  347|       |    *lse |= htonl((tc << MPLS_TC_SHIFT) & MPLS_TC_MASK);
  348|    564|}
set_mpls_lse_label:
  353|  1.53k|{
  354|  1.53k|    *lse &= ~htonl(MPLS_LABEL_MASK);
  355|       |    *lse |= htonl((ntohl(label) << MPLS_LABEL_SHIFT) & MPLS_LABEL_MASK);
  356|  1.53k|}
set_mpls_lse_bos:
  361|    125|{
  362|    125|    *lse &= ~htonl(MPLS_BOS_MASK);
  363|       |    *lse |= htonl((bos << MPLS_BOS_SHIFT) & MPLS_BOS_MASK);
  364|    125|}
eth_format_masked:
  590|   119k|{
  591|   119k|    ds_put_format(s, ETH_ADDR_FMT, ETH_ADDR_ARGS(eth));
  ------------------
  |  |  370|   119k|    "%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8
  ------------------
                  ds_put_format(s, ETH_ADDR_FMT, ETH_ADDR_ARGS(eth));
  ------------------
  |  |  371|   119k|#define ETH_ADDR_ARGS(EA) ETH_ADDR_BYTES_ARGS((EA).ea)
  |  |  ------------------
  |  |  |  |  373|   119k|         (EAB)[0], (EAB)[1], (EAB)[2], (EAB)[3], (EAB)[4], (EAB)[5]
  |  |  ------------------
  ------------------
  592|   119k|    if (mask && !eth_mask_is_exact(*mask)) {
  ------------------
  |  Branch (592:9): [True: 119k, False: 50]
  |  Branch (592:17): [True: 3.60k, False: 116k]
  ------------------
  593|  3.60k|        ds_put_format(s, "/"ETH_ADDR_FMT, ETH_ADDR_ARGS(*mask));
  ------------------
  |  |  370|  3.60k|    "%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8
  ------------------
                      ds_put_format(s, "/"ETH_ADDR_FMT, ETH_ADDR_ARGS(*mask));
  ------------------
  |  |  371|  3.60k|#define ETH_ADDR_ARGS(EA) ETH_ADDR_BYTES_ARGS((EA).ea)
  |  |  ------------------
  |  |  |  |  373|  3.60k|         (EAB)[0], (EAB)[1], (EAB)[2], (EAB)[3], (EAB)[4], (EAB)[5]
  |  |  ------------------
  ------------------
  594|  3.60k|    }
  595|   119k|}
ip_count_cidr_bits:
  677|  5.20k|{
  678|       |    return 32 - ctz32(ntohl(netmask));
  679|  5.20k|}
ip_format_masked:
  683|  15.5k|{
  684|  15.5k|    ds_put_format(s, IP_FMT, IP_ARGS(ip));
  ------------------
  |  |  628|  15.5k|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
                  ds_put_format(s, IP_FMT, IP_ARGS(ip));
  ------------------
  |  |  630|  15.5k|    ntohl(ip) >> 24,                            \
  |  |  631|  15.5k|    (ntohl(ip) >> 16) & 0xff,                   \
  |  |  632|  15.5k|    (ntohl(ip) >> 8) & 0xff,                    \
  |  |  633|  15.5k|    ntohl(ip) & 0xff
  ------------------
  685|  15.5k|    if (mask != OVS_BE32_MAX) {
  ------------------
  |  |   43|  15.5k|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  |  Branch (685:9): [True: 6.64k, False: 8.94k]
  ------------------
  686|  6.64k|        if (ip_is_cidr(mask)) {
  ------------------
  |  Branch (686:13): [True: 5.20k, False: 1.44k]
  ------------------
  687|  5.20k|            ds_put_format(s, "/%d", ip_count_cidr_bits(mask));
  688|  5.20k|        } else {
  689|  1.44k|            ds_put_format(s, "/"IP_FMT, IP_ARGS(mask));
  ------------------
  |  |  628|  1.44k|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
                          ds_put_format(s, "/"IP_FMT, IP_ARGS(mask));
  ------------------
  |  |  630|  1.44k|    ntohl(ip) >> 24,                            \
  |  |  631|  1.44k|    (ntohl(ip) >> 16) & 0xff,                   \
  |  |  632|  1.44k|    (ntohl(ip) >> 8) & 0xff,                    \
  |  |  633|  1.44k|    ntohl(ip) & 0xff
  ------------------
  690|  1.44k|        }
  691|  6.64k|    }
  692|  15.5k|}
ipv6_format_addr:
  903|  47.7k|{
  904|  47.7k|    char *dst;
  905|       |
  906|  47.7k|    ds_reserve(s, s->length + INET6_ADDRSTRLEN);
  907|       |
  908|  47.7k|    dst = s->string + s->length;
  909|  47.7k|    inet_ntop(AF_INET6, addr, dst, INET6_ADDRSTRLEN);
  910|  47.7k|    s->length += strlen(dst);
  911|  47.7k|}
ipv6_format_mapped:
  930|  12.5k|{
  931|  12.5k|    if (IN6_IS_ADDR_V4MAPPED(addr)) {
  ------------------
  |  Branch (931:9): [True: 543, False: 11.9k]
  ------------------
  932|    543|        ds_put_format(s, IP_FMT, addr->s6_addr[12], addr->s6_addr[13],
  ------------------
  |  |  628|    543|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
  933|    543|                                 addr->s6_addr[14], addr->s6_addr[15]);
  934|  11.9k|    } else {
  935|  11.9k|        ipv6_format_addr(addr, s);
  936|  11.9k|    }
  937|  12.5k|}
ipv6_format_masked:
  942|  34.8k|{
  943|  34.8k|    ipv6_format_addr(addr, s);
  944|  34.8k|    if (mask && !ipv6_mask_is_exact(mask)) {
  ------------------
  |  Branch (944:9): [True: 34.8k, False: 40]
  |  Branch (944:17): [True: 1.38k, False: 33.4k]
  ------------------
  945|  1.38k|        if (ipv6_is_cidr(mask)) {
  ------------------
  |  Branch (945:13): [True: 486, False: 897]
  ------------------
  946|    486|            int cidr_bits = ipv6_count_cidr_bits(mask);
  947|    486|            ds_put_format(s, "/%d", cidr_bits);
  948|    897|        } else {
  949|    897|            ds_put_char(s, '/');
  950|    897|            ipv6_format_addr(mask, s);
  951|    897|        }
  952|  1.38k|    }
  953|  34.8k|}
ipv6_addr_bitand:
  980|  3.61k|{
  981|  3.61k|   struct in6_addr dst;
  982|  14.4k|   IPV6_FOR_EACH (i) {
  ------------------
  |  |  972|  18.0k|#define IPV6_FOR_EACH(VAR) for (int VAR = 0; VAR < 4; VAR++)
  |  |  ------------------
  |  |  |  Branch (972:46): [True: 14.4k, False: 3.61k]
  |  |  ------------------
  ------------------
  983|  14.4k|       dst.s6_addrX[i] = a->s6_addrX[i] & b->s6_addrX[i];
  ------------------
  |  |  971|  14.4k|#define s6_addrX s6_addr32
  ------------------
                     dst.s6_addrX[i] = a->s6_addrX[i] & b->s6_addrX[i];
  ------------------
  |  |  971|  14.4k|#define s6_addrX s6_addr32
  ------------------
                     dst.s6_addrX[i] = a->s6_addrX[i] & b->s6_addrX[i];
  ------------------
  |  |  971|  14.4k|#define s6_addrX s6_addr32
  ------------------
  984|  14.4k|   }
  985|  3.61k|   return dst;
  986|  3.61k|}
ipv6_is_zero:
 1000|  6.78k|{
 1001|  15.1k|   IPV6_FOR_EACH (i) {
  ------------------
  |  |  972|  15.7k|#define IPV6_FOR_EACH(VAR) for (int VAR = 0; VAR < 4; VAR++)
  |  |  ------------------
  |  |  |  Branch (972:46): [True: 15.1k, False: 595]
  |  |  ------------------
  ------------------
 1002|  15.1k|       if (a->s6_addrX[i]) {
  ------------------
  |  |  971|  15.1k|#define s6_addrX s6_addr32
  ------------------
  |  Branch (1002:12): [True: 6.18k, False: 9.00k]
  ------------------
 1003|  6.18k|           return false;
 1004|  6.18k|       }
 1005|  15.1k|   }
 1006|    595|   return true;
 1007|  6.78k|}
ipv6_count_cidr_bits:
 1039|    486|{
 1040|    486|    int i;
 1041|    486|    int count = 0;
 1042|    486|    const uint8_t *netmaskp = &netmask->s6_addr[0];
 1043|       |
 1044|  3.85k|    for (i=0; i<16; i++) {
  ------------------
  |  Branch (1044:15): [True: 3.85k, False: 0]
  ------------------
 1045|  3.85k|        if (netmaskp[i] == 0xff) {
  ------------------
  |  Branch (1045:13): [True: 3.37k, False: 486]
  ------------------
 1046|  3.37k|            count += 8;
 1047|  3.37k|        } else {
 1048|    486|            uint8_t nm;
 1049|       |
 1050|  1.13k|            for(nm = netmaskp[i]; nm; nm <<= 1) {
  ------------------
  |  Branch (1050:35): [True: 653, False: 486]
  ------------------
 1051|    653|                count++;
 1052|    653|            }
 1053|    486|            break;
 1054|    486|        }
 1055|       |
 1056|  3.85k|    }
 1057|       |
 1058|    486|    return count;
 1059|    486|}
ipv6_is_cidr:
 1065|  1.38k|{
 1066|  1.38k|    const uint8_t *netmaskp = &netmask->s6_addr[0];
 1067|  1.38k|    int i;
 1068|       |
 1069|  6.16k|    for (i=0; i<16; i++) {
  ------------------
  |  Branch (1069:15): [True: 5.67k, False: 486]
  ------------------
 1070|  5.67k|        if (netmaskp[i] != 0xff) {
  ------------------
  |  Branch (1070:13): [True: 1.38k, False: 4.29k]
  ------------------
 1071|  1.38k|            uint8_t x = ~netmaskp[i];
 1072|  1.38k|            if (x & (x + 1)) {
  ------------------
  |  Branch (1072:17): [True: 151, False: 1.23k]
  ------------------
 1073|    151|                return false;
 1074|    151|            }
 1075|  8.05k|            while (++i < 16) {
  ------------------
  |  Branch (1075:20): [True: 7.56k, False: 486]
  ------------------
 1076|  7.56k|                if (netmaskp[i]) {
  ------------------
  |  Branch (1076:21): [True: 746, False: 6.82k]
  ------------------
 1077|    746|                    return false;
 1078|    746|                }
 1079|  7.56k|            }
 1080|  1.23k|        }
 1081|  5.67k|    }
 1082|       |
 1083|    486|    return true;
 1084|  1.38k|}
packet_tcp_flag_to_string:
 1717|  30.5k|{
 1718|  30.5k|    switch (flag) {
 1719|  1.40k|    case TCP_FIN:
  ------------------
  |  |  893|  1.40k|#define TCP_FIN 0x001
  ------------------
  |  Branch (1719:5): [True: 1.40k, False: 29.1k]
  ------------------
 1720|  1.40k|        return "fin";
 1721|  1.06k|    case TCP_SYN:
  ------------------
  |  |  894|  1.06k|#define TCP_SYN 0x002
  ------------------
  |  Branch (1721:5): [True: 1.06k, False: 29.4k]
  ------------------
 1722|  1.06k|        return "syn";
 1723|  3.94k|    case TCP_RST:
  ------------------
  |  |  895|  3.94k|#define TCP_RST 0x004
  ------------------
  |  Branch (1723:5): [True: 3.94k, False: 26.6k]
  ------------------
 1724|  3.94k|        return "rst";
 1725|    757|    case TCP_PSH:
  ------------------
  |  |  896|    757|#define TCP_PSH 0x008
  ------------------
  |  Branch (1725:5): [True: 757, False: 29.8k]
  ------------------
 1726|    757|        return "psh";
 1727|  3.91k|    case TCP_ACK:
  ------------------
  |  |  897|  3.91k|#define TCP_ACK 0x010
  ------------------
  |  Branch (1727:5): [True: 3.91k, False: 26.6k]
  ------------------
 1728|  3.91k|        return "ack";
 1729|  4.05k|    case TCP_URG:
  ------------------
  |  |  898|  4.05k|#define TCP_URG 0x020
  ------------------
  |  Branch (1729:5): [True: 4.05k, False: 26.5k]
  ------------------
 1730|  4.05k|        return "urg";
 1731|  1.31k|    case TCP_ECE:
  ------------------
  |  |  899|  1.31k|#define TCP_ECE 0x040
  ------------------
  |  Branch (1731:5): [True: 1.31k, False: 29.2k]
  ------------------
 1732|  1.31k|        return "ece";
 1733|    588|    case TCP_CWR:
  ------------------
  |  |  900|    588|#define TCP_CWR 0x080
  ------------------
  |  Branch (1733:5): [True: 588, False: 29.9k]
  ------------------
 1734|    588|        return "cwr";
 1735|  4.21k|    case TCP_NS:
  ------------------
  |  |  901|  4.21k|#define TCP_NS  0x100
  ------------------
  |  Branch (1735:5): [True: 4.21k, False: 26.3k]
  ------------------
 1736|  4.21k|        return "ns";
 1737|    421|    case 0x200:
  ------------------
  |  Branch (1737:5): [True: 421, False: 30.1k]
  ------------------
 1738|    421|        return "[200]";
 1739|  4.09k|    case 0x400:
  ------------------
  |  Branch (1739:5): [True: 4.09k, False: 26.4k]
  ------------------
 1740|  4.09k|        return "[400]";
 1741|  4.04k|    case 0x800:
  ------------------
  |  Branch (1741:5): [True: 4.04k, False: 26.5k]
  ------------------
 1742|  4.04k|        return "[800]";
 1743|    743|    default:
  ------------------
  |  Branch (1743:5): [True: 743, False: 29.8k]
  ------------------
 1744|       |        return NULL;
 1745|  30.5k|    }
 1746|  30.5k|}

dp-packet.c:pkt_metadata_init:
  165|  52.7k|{
  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|  52.7k|    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|  52.7k|    md->tunnel.ip_dst = 0;
  179|  52.7k|    md->tunnel.ipv6_dst = in6addr_any;
  180|  52.7k|    md->in_port.odp_port = port;
  181|  52.7k|    md->orig_in_port = port;
  182|       |    md->conn = NULL;
  183|  52.7k|}
flow.c:flow_tnl_dst_is_set:
   51|   105k|{
   52|   105k|    return tnl->ip_dst || ipv6_addr_is_set(&tnl->ipv6_dst);
  ------------------
  |  Branch (52:12): [True: 0, False: 105k]
  |  Branch (52:27): [True: 0, False: 105k]
  ------------------
   53|   105k|}
flow.c:eth_type_vlan:
  429|  25.6k|{
  430|  25.6k|    return eth_type == htons(ETH_TYPE_VLAN_8021Q) ||
  ------------------
  |  Branch (430:12): [True: 205, False: 25.4k]
  ------------------
  431|  25.4k|        eth_type == htons(ETH_TYPE_VLAN_8021AD);
  ------------------
  |  Branch (431:9): [True: 1.35k, False: 24.1k]
  ------------------
  432|  25.6k|}
flow.c:pt_ns_type_be:
 1577|  60.4k|{
 1578|  60.4k|    return be32_to_be16(packet_type);
 1579|  60.4k|}
flow.c:eth_type_mpls:
  423|  68.7k|{
  424|  68.7k|    return eth_type == htons(ETH_TYPE_MPLS) ||
  ------------------
  |  Branch (424:12): [True: 122, False: 68.6k]
  ------------------
  425|  68.6k|        eth_type == htons(ETH_TYPE_MPLS_MCAST);
  ------------------
  |  Branch (425:9): [True: 794, False: 67.8k]
  ------------------
  426|  68.7k|}
flow.c:eth_addr_is_zero:
  246|    158|{
  247|    158|    return !(a.be16[0] | a.be16[1] | a.be16[2]);
  248|    158|}
flow.c:ipv6_addr_is_set:
 1205|   105k|static inline bool ipv6_addr_is_set(const struct in6_addr *addr) {
 1206|   105k|    return !ipv6_addr_equals(addr, &in6addr_any);
 1207|   105k|}
flow.c:ipv6_addr_equals:
 1184|   105k|{
 1185|   105k|#ifdef IN6_ARE_ADDR_EQUAL
 1186|   105k|    return IN6_ARE_ADDR_EQUAL(a, b);
 1187|       |#else
 1188|       |    return !memcmp(a, b, sizeof(*a));
 1189|       |#endif
 1190|   105k|}
flow.c:pt_ns:
 1570|  40.8k|{
 1571|       |    return ntohl(packet_type) >> 16;
 1572|  40.8k|}
flow.c:pt_ns_type:
 1584|  40.3k|{
 1585|       |    return ntohs(pt_ns_type_be(packet_type));
 1586|  40.3k|}
match.c:ipv6_mask_is_any:
 1193|   696k|static inline bool ipv6_mask_is_any(const struct in6_addr *mask) {
 1194|   696k|    return ipv6_addr_equals(mask, &in6addr_any);
 1195|   696k|}
match.c:ipv6_addr_equals:
 1184|   696k|{
 1185|   696k|#ifdef IN6_ARE_ADDR_EQUAL
 1186|   696k|    return IN6_ARE_ADDR_EQUAL(a, b);
 1187|       |#else
 1188|       |    return !memcmp(a, b, sizeof(*a));
 1189|       |#endif
 1190|   696k|}
match.c:pt_ns:
 1570|  39.9k|{
 1571|       |    return ntohl(packet_type) >> 16;
 1572|  39.9k|}
match.c:pt_ns_type_be:
 1577|  28.3k|{
 1578|  28.3k|    return be32_to_be16(packet_type);
 1579|  28.3k|}
match.c:vlan_tci_to_vid:
  507|  13.8k|{
  508|  13.8k|    return (ntohs(vlan_tci) & VLAN_VID_MASK) >> VLAN_VID_SHIFT;
  ------------------
  |  |  494|  13.8k|#define VLAN_VID_MASK 0x0fff
  ------------------
                  return (ntohs(vlan_tci) & VLAN_VID_MASK) >> VLAN_VID_SHIFT;
  ------------------
  |  |  495|  13.8k|#define VLAN_VID_SHIFT 0
  ------------------
  509|  13.8k|}
match.c:vlan_tci_to_pcp:
  515|  14.8k|{
  516|  14.8k|    return (ntohs(vlan_tci) & VLAN_PCP_MASK) >> VLAN_PCP_SHIFT;
  ------------------
  |  |  497|  14.8k|#define VLAN_PCP_MASK 0xe000
  ------------------
                  return (ntohs(vlan_tci) & VLAN_PCP_MASK) >> VLAN_PCP_SHIFT;
  ------------------
  |  |  498|  14.8k|#define VLAN_PCP_SHIFT 13
  ------------------
  517|  14.8k|}
match.c:eth_addr_is_zero:
  246|   334k|{
  247|   334k|    return !(a.be16[0] | a.be16[1] | a.be16[2]);
  248|   334k|}
match.c:mpls_lse_to_label:
  568|    763|{
  569|    763|    return (ntohl(mpls_lse) & MPLS_LABEL_MASK) >> MPLS_LABEL_SHIFT;
  ------------------
  |  |  554|    763|#define MPLS_LABEL_MASK     0xfffff000
  ------------------
                  return (ntohl(mpls_lse) & MPLS_LABEL_MASK) >> MPLS_LABEL_SHIFT;
  ------------------
  |  |  555|    763|#define MPLS_LABEL_SHIFT    12
  ------------------
  570|    763|}
match.c:mpls_lse_to_tc:
  576|    748|{
  577|    748|    return (ntohl(mpls_lse) & MPLS_TC_MASK) >> MPLS_TC_SHIFT;
  ------------------
  |  |  551|    748|#define MPLS_TC_MASK        0x00000e00
  ------------------
                  return (ntohl(mpls_lse) & MPLS_TC_MASK) >> MPLS_TC_SHIFT;
  ------------------
  |  |  552|    748|#define MPLS_TC_SHIFT       9
  ------------------
  578|    748|}
match.c:mpls_lse_to_ttl:
  584|    461|{
  585|    461|    return (ntohl(mpls_lse) & MPLS_TTL_MASK) >> MPLS_TTL_SHIFT;
  ------------------
  |  |  545|    461|#define MPLS_TTL_MASK       0x000000ff
  ------------------
                  return (ntohl(mpls_lse) & MPLS_TTL_MASK) >> MPLS_TTL_SHIFT;
  ------------------
  |  |  546|    461|#define MPLS_TTL_SHIFT      0
  ------------------
  586|    461|}
match.c:mpls_lse_to_bos:
  624|    486|{
  625|       |    return (mpls_lse & htonl(MPLS_BOS_MASK)) != 0;
  626|    486|}
match.c:dl_type_is_ip_any:
 1256|   165k|{
 1257|   165k|    return dl_type == htons(ETH_TYPE_IP)
  ------------------
  |  Branch (1257:12): [True: 6.05k, False: 159k]
  ------------------
 1258|   159k|        || dl_type == htons(ETH_TYPE_IPV6);
  ------------------
  |  Branch (1258:12): [True: 16.8k, False: 142k]
  ------------------
 1259|   165k|}
meta-flow.c:ipv6_mask_is_any:
 1193|  6.58k|static inline bool ipv6_mask_is_any(const struct in6_addr *mask) {
 1194|  6.58k|    return ipv6_addr_equals(mask, &in6addr_any);
 1195|  6.58k|}
meta-flow.c:ipv6_addr_equals:
 1184|  6.58k|{
 1185|  6.58k|#ifdef IN6_ARE_ADDR_EQUAL
 1186|  6.58k|    return IN6_ARE_ADDR_EQUAL(a, b);
 1187|       |#else
 1188|       |    return !memcmp(a, b, sizeof(*a));
 1189|       |#endif
 1190|  6.58k|}
meta-flow.c:eth_addr_is_zero:
  246|  4.74k|{
  247|  4.74k|    return !(a.be16[0] | a.be16[1] | a.be16[2]);
  248|  4.74k|}
meta-flow.c:pt_ns:
 1570|  13.4k|{
 1571|       |    return ntohl(packet_type) >> 16;
 1572|  13.4k|}
meta-flow.c:pt_ns_type_be:
 1577|  10.1k|{
 1578|  10.1k|    return be32_to_be16(packet_type);
 1579|  10.1k|}
meta-flow.c:eth_type_mpls:
  423|    114|{
  424|    114|    return eth_type == htons(ETH_TYPE_MPLS) ||
  ------------------
  |  Branch (424:12): [True: 3, False: 111]
  ------------------
  425|    111|        eth_type == htons(ETH_TYPE_MPLS_MCAST);
  ------------------
  |  Branch (425:9): [True: 53, False: 58]
  ------------------
  426|    114|}
meta-flow.c:ip_is_cidr:
  664|    344|{
  665|       |    uint32_t x = ~ntohl(netmask);
  666|    344|    return !(x & (x + 1));
  667|    344|}
meta-flow.c:dl_type_is_ip_any:
 1256|  4.37k|{
 1257|  4.37k|    return dl_type == htons(ETH_TYPE_IP)
  ------------------
  |  Branch (1257:12): [True: 273, False: 4.10k]
  ------------------
 1258|  4.10k|        || dl_type == htons(ETH_TYPE_IPV6);
  ------------------
  |  Branch (1258:12): [True: 2.73k, False: 1.36k]
  ------------------
 1259|  4.37k|}
ofp-actions.c:eth_type_vlan:
  429|  2.19k|{
  430|  2.19k|    return eth_type == htons(ETH_TYPE_VLAN_8021Q) ||
  ------------------
  |  Branch (430:12): [True: 150, False: 2.04k]
  ------------------
  431|  2.04k|        eth_type == htons(ETH_TYPE_VLAN_8021AD);
  ------------------
  |  Branch (431:9): [True: 1.77k, False: 271]
  ------------------
  432|  2.19k|}
ofp-actions.c:eth_type_mpls:
  423|  12.2k|{
  424|  12.2k|    return eth_type == htons(ETH_TYPE_MPLS) ||
  ------------------
  |  Branch (424:12): [True: 2.26k, False: 9.98k]
  ------------------
  425|  9.98k|        eth_type == htons(ETH_TYPE_MPLS_MCAST);
  ------------------
  |  Branch (425:9): [True: 2.30k, False: 7.68k]
  ------------------
  426|  12.2k|}
ofp-actions.c:ipv6_mask_is_any:
 1193|  3.31k|static inline bool ipv6_mask_is_any(const struct in6_addr *mask) {
 1194|  3.31k|    return ipv6_addr_equals(mask, &in6addr_any);
 1195|  3.31k|}
ofp-actions.c:ipv6_addr_equals:
 1184|  3.31k|{
 1185|  3.31k|#ifdef IN6_ARE_ADDR_EQUAL
 1186|  3.31k|    return IN6_ARE_ADDR_EQUAL(a, b);
 1187|       |#else
 1188|       |    return !memcmp(a, b, sizeof(*a));
 1189|       |#endif
 1190|  3.31k|}
ofp-actions.c:pt_ns:
 1570|  18.4k|{
 1571|       |    return ntohl(packet_type) >> 16;
 1572|  18.4k|}
ofp-actions.c:pt_ns_type_be:
 1577|  12.3k|{
 1578|  12.3k|    return be32_to_be16(packet_type);
 1579|  12.3k|}
ofp-actions.c:dl_type_is_ip_any:
 1256|  16.3k|{
 1257|  16.3k|    return dl_type == htons(ETH_TYPE_IP)
  ------------------
  |  Branch (1257:12): [True: 6.77k, False: 9.56k]
  ------------------
 1258|  9.56k|        || dl_type == htons(ETH_TYPE_IPV6);
  ------------------
  |  Branch (1258:12): [True: 1.55k, False: 8.00k]
  ------------------
 1259|  16.3k|}
ofp-actions.c:pt_ns_type:
 1584|  6.57k|{
 1585|       |    return ntohs(pt_ns_type_be(packet_type));
 1586|  6.57k|}
ofp-flow.c:ipv6_addr_is_set:
 1205|   106k|static inline bool ipv6_addr_is_set(const struct in6_addr *addr) {
 1206|   106k|    return !ipv6_addr_equals(addr, &in6addr_any);
 1207|   106k|}
ofp-flow.c:ipv6_addr_equals:
 1184|   106k|{
 1185|   106k|#ifdef IN6_ARE_ADDR_EQUAL
 1186|   106k|    return IN6_ARE_ADDR_EQUAL(a, b);
 1187|       |#else
 1188|       |    return !memcmp(a, b, sizeof(*a));
 1189|       |#endif
 1190|   106k|}
ofp-match.c:eth_addr_is_zero:
  246|  3.97k|{
  247|  3.97k|    return !(a.be16[0] | a.be16[1] | a.be16[2]);
  248|  3.97k|}
ofp-match.c:eth_addr_invert:
  301|  7.51k|{
  302|  7.51k|    struct eth_addr dst;
  303|       |
  304|  30.0k|    for (int i = 0; i < ARRAY_SIZE(src.be16); i++) {
  ------------------
  |  |  297|  30.0k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   46|  30.0k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|  30.0k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   47|  30.0k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  30.0k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|  30.0k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (304:21): [True: 22.5k, False: 7.51k]
  ------------------
  305|  22.5k|        dst.be16[i] = ~src.be16[i];
  306|  22.5k|    }
  307|       |
  308|  7.51k|    return dst;
  309|  7.51k|}
ofp-match.c:eth_type_mpls:
  423|  28.4k|{
  424|  28.4k|    return eth_type == htons(ETH_TYPE_MPLS) ||
  ------------------
  |  Branch (424:12): [True: 355, False: 28.0k]
  ------------------
  425|  28.0k|        eth_type == htons(ETH_TYPE_MPLS_MCAST);
  ------------------
  |  Branch (425:9): [True: 355, False: 27.7k]
  ------------------
  426|  28.4k|}
packets.c:eth_mask_is_exact:
  255|   119k|{
  256|       |    return (a.be16[0] & a.be16[1] & a.be16[2]) == htons(0xffff);
  257|   119k|}
packets.c:ip_is_cidr:
  664|  6.64k|{
  665|       |    uint32_t x = ~ntohl(netmask);
  666|  6.64k|    return !(x & (x + 1));
  667|  6.64k|}
packets.c:ipv6_mask_is_exact:
 1197|  34.8k|static inline bool ipv6_mask_is_exact(const struct in6_addr *mask) {
 1198|  34.8k|    return ipv6_addr_equals(mask, &in6addr_exact);
 1199|  34.8k|}
packets.c:ipv6_addr_equals:
 1184|  34.8k|{
 1185|  34.8k|#ifdef IN6_ARE_ADDR_EQUAL
 1186|  34.8k|    return IN6_ARE_ADDR_EQUAL(a, b);
 1187|       |#else
 1188|       |    return !memcmp(a, b, sizeof(*a));
 1189|       |#endif
 1190|  34.8k|}

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

ofp-print.c:get_16aligned_be32:
  246|    590|{
  247|       |#ifdef WORDS_BIGENDIAN
  248|       |    return ((ovs_be32) x->hi << 16) | x->lo;
  249|       |#else
  250|    590|    return ((ovs_be32) x->lo << 16) | x->hi;
  251|    590|#endif
  252|    590|}
ofp-queue.c:get_32aligned_be64:
  270|  34.5k|{
  271|       |#ifdef WORDS_BIGENDIAN
  272|       |    return ((ovs_be64) x->hi << 32) | x->lo;
  273|       |#else
  274|  34.5k|    return ((ovs_be64) x->lo << 32) | x->hi;
  275|  34.5k|#endif
  276|  34.5k|}
ofp-table.c:get_32aligned_be64:
  270|  12.0k|{
  271|       |#ifdef WORDS_BIGENDIAN
  272|       |    return ((ovs_be64) x->hi << 32) | x->lo;
  273|       |#else
  274|  12.0k|    return ((ovs_be64) x->lo << 32) | x->hi;
  275|  12.0k|#endif
  276|  12.0k|}
flow.c:get_16aligned_be32:
  246|  20.0k|{
  247|       |#ifdef WORDS_BIGENDIAN
  248|       |    return ((ovs_be32) x->hi << 16) | x->lo;
  249|       |#else
  250|  20.0k|    return ((ovs_be32) x->lo << 16) | x->hi;
  251|  20.0k|#endif
  252|  20.0k|}
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|   336k|get_unaligned_##ABBREV(const TYPE *p)           \
   75|   336k|{                                               \
   76|   336k|    return unaligned_##ABBREV(p)->x;            \
   77|   336k|}                                               \
nx-match.c:unaligned_be32:
   68|   336k|unaligned_##ABBREV(const TYPE *p)               \
   69|   336k|{                                               \
   70|   336k|    return (struct unaligned_##ABBREV *) p;     \
   71|   336k|}                                               \
nx-match.c:get_unaligned_be64:
   74|  12.6k|get_unaligned_##ABBREV(const TYPE *p)           \
   75|  12.6k|{                                               \
   76|  12.6k|    return unaligned_##ABBREV(p)->x;            \
   77|  12.6k|}                                               \
nx-match.c:unaligned_be64:
   68|  12.6k|unaligned_##ABBREV(const TYPE *p)               \
   69|  12.6k|{                                               \
   70|  12.6k|    return (struct unaligned_##ABBREV *) p;     \
   71|  12.6k|}                                               \
ofp-actions.c:get_unaligned_be32:
   74|  25.2k|get_unaligned_##ABBREV(const TYPE *p)           \
   75|  25.2k|{                                               \
   76|  25.2k|    return unaligned_##ABBREV(p)->x;            \
   77|  25.2k|}                                               \
ofp-actions.c:unaligned_be32:
   68|  25.2k|unaligned_##ABBREV(const TYPE *p)               \
   69|  25.2k|{                                               \
   70|  25.2k|    return (struct unaligned_##ABBREV *) p;     \
   71|  25.2k|}                                               \
ofp-flow.c:get_32aligned_be64:
  270|  1.21k|{
  271|       |#ifdef WORDS_BIGENDIAN
  272|       |    return ((ovs_be64) x->hi << 32) | x->lo;
  273|       |#else
  274|  1.21k|    return ((ovs_be64) x->lo << 32) | x->hi;
  275|  1.21k|#endif
  276|  1.21k|}
ofp-port.c:get_unaligned_be64:
   74|  28.8k|get_unaligned_##ABBREV(const TYPE *p)           \
   75|  28.8k|{                                               \
   76|  28.8k|    return unaligned_##ABBREV(p)->x;            \
   77|  28.8k|}                                               \
ofp-port.c:unaligned_be64:
   68|  28.8k|unaligned_##ABBREV(const TYPE *p)               \
   69|  28.8k|{                                               \
   70|  28.8k|    return (struct unaligned_##ABBREV *) p;     \
   71|  28.8k|}                                               \
ofp-port.c:get_32aligned_be64:
  270|  92.1k|{
  271|       |#ifdef WORDS_BIGENDIAN
  272|       |    return ((ovs_be64) x->hi << 32) | x->lo;
  273|       |#else
  274|  92.1k|    return ((ovs_be64) x->lo << 32) | x->hi;
  275|  92.1k|#endif
  276|  92.1k|}
ofp-prop.c:get_32aligned_be128:
  294|    707|{
  295|    707|    ovs_be128 u;
  296|    707|    u.be32[0] = x->be32[0];
  297|    707|    u.be32[1] = x->be32[1];
  298|    707|    u.be32[2] = x->be32[2];
  299|    707|    u.be32[3] = x->be32[3];
  300|    707|    return u;
  301|    707|}
ox-stat.c:get_unaligned_be64:
   74|    913|get_unaligned_##ABBREV(const TYPE *p)           \
   75|    913|{                                               \
   76|    913|    return unaligned_##ABBREV(p)->x;            \
   77|    913|}                                               \
ox-stat.c:unaligned_be64:
   68|    913|unaligned_##ABBREV(const TYPE *p)               \
   69|    913|{                                               \
   70|    913|    return (struct unaligned_##ABBREV *) p;     \
   71|    913|}                                               \
ox-stat.c:get_unaligned_be32:
   74|  2.76k|get_unaligned_##ABBREV(const TYPE *p)           \
   75|  2.76k|{                                               \
   76|  2.76k|    return unaligned_##ABBREV(p)->x;            \
   77|  2.76k|}                                               \
ox-stat.c:unaligned_be32:
   68|  2.76k|unaligned_##ABBREV(const TYPE *p)               \
   69|  2.76k|{                                               \
   70|  2.76k|    return (struct unaligned_##ABBREV *) p;     \
   71|  2.76k|}                                               \

xcalloc__:
  121|  14.9k|{
  122|  14.9k|    void *p = count && size ? calloc(count, size) : malloc(1);
  ------------------
  |  Branch (122:15): [True: 14.9k, False: 66]
  |  Branch (122:24): [True: 14.9k, False: 0]
  ------------------
  123|  14.9k|    if (p == NULL) {
  ------------------
  |  Branch (123:9): [True: 0, False: 14.9k]
  ------------------
  124|      0|        out_of_memory();
  125|      0|    }
  126|  14.9k|    return p;
  127|  14.9k|}
xzalloc__:
  131|  10.4k|{
  132|  10.4k|    return xcalloc__(1, size);
  133|  10.4k|}
xmalloc__:
  137|   489k|{
  138|   489k|    void *p = malloc(size ? size : 1);
  ------------------
  |  Branch (138:22): [True: 488k, False: 1.22k]
  ------------------
  139|   489k|    if (p == NULL) {
  ------------------
  |  Branch (139:9): [True: 0, False: 489k]
  ------------------
  140|      0|        out_of_memory();
  141|      0|    }
  142|   489k|    return p;
  143|   489k|}
xrealloc__:
  147|  6.80M|{
  148|  6.80M|    p = realloc(p, size ? size : 1);
  ------------------
  |  Branch (148:20): [True: 6.80M, False: 0]
  ------------------
  149|  6.80M|    if (p == NULL) {
  ------------------
  |  Branch (149:9): [True: 0, False: 6.80M]
  ------------------
  150|      0|        out_of_memory();
  151|      0|    }
  152|  6.80M|    return p;
  153|  6.80M|}
xcalloc:
  157|  4.52k|{
  158|  4.52k|    COVERAGE_INC(util_xalloc);
  ------------------
  |  |   83|  4.52k|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  4.52k|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  159|  4.52k|    return xcalloc__(count, size);
  160|  4.52k|}
xzalloc:
  164|  10.4k|{
  165|  10.4k|    COVERAGE_INC(util_xalloc);
  ------------------
  |  |   83|  10.4k|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  10.4k|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  166|  10.4k|    return xzalloc__(size);
  167|  10.4k|}
xmalloc:
  171|   489k|{
  172|   489k|    COVERAGE_INC(util_xalloc);
  ------------------
  |  |   83|   489k|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|   489k|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  173|   489k|    return xmalloc__(size);
  174|   489k|}
xrealloc:
  178|  6.80M|{
  179|  6.80M|    COVERAGE_INC(util_xalloc);
  ------------------
  |  |   83|  6.80M|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  6.80M|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  180|  6.80M|    return xrealloc__(p, size);
  181|  6.80M|}
xmemdup:
  185|  2.56k|{
  186|  2.56k|    void *p = xmalloc(size);
  187|  2.56k|    nullable_memcpy(p, p_, size);
  188|  2.56k|    return p;
  189|  2.56k|}
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|  5.04k|{
  221|  5.04k|    va_list args2;
  222|  5.04k|    size_t needed;
  223|  5.04k|    char *s;
  224|       |
  225|  5.04k|    ovs_assert(format);
  ------------------
  |  |   62|  5.04k|#define ovs_assert ovs_ignore
  ------------------
  226|       |
  227|  5.04k|    va_copy(args2, args);
  228|  5.04k|    needed = vsnprintf(NULL, 0, format, args);
  229|       |
  230|  5.04k|    s = xmalloc(needed + 1);
  231|       |
  232|  5.04k|    vsnprintf(s, needed + 1, format, args2);
  233|  5.04k|    va_end(args2);
  234|       |
  235|  5.04k|    return s;
  236|  5.04k|}
x2nrealloc:
  240|  26.0k|{
  241|  26.0k|    *n = *n == 0 ? 1 : 2 * *n;
  ------------------
  |  Branch (241:10): [True: 12.4k, False: 13.5k]
  ------------------
  242|  26.0k|    return xrealloc(p, *n * s);
  243|  26.0k|}
ovs_strlcpy:
  381|  61.9k|{
  382|  61.9k|    if (size > 0) {
  ------------------
  |  Branch (382:9): [True: 61.9k, False: 0]
  ------------------
  383|  61.9k|        size_t len = strnlen(src, size - 1);
  384|  61.9k|        memcpy(dst, src, len);
  385|  61.9k|        dst[len] = '\0';
  386|  61.9k|    }
  387|  61.9k|}
ovs_ignore:
 1265|  24.0M|void ovs_ignore(bool x OVS_UNUSED) { }
is_all_byte:
 1356|   406k|{
 1357|   406k|    const uint8_t *p = p_;
 1358|   406k|    size_t i;
 1359|       |
 1360|  9.15M|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (1360:17): [True: 8.95M, False: 203k]
  ------------------
 1361|  8.95M|        if (p[i] != byte) {
  ------------------
  |  Branch (1361:13): [True: 203k, False: 8.74M]
  ------------------
 1362|   203k|            return false;
 1363|   203k|        }
 1364|  8.95M|    }
 1365|   203k|    return true;
 1366|   406k|}
is_all_zeros:
 1371|   179k|{
 1372|   179k|    return is_all_byte(p, n, 0);
 1373|   179k|}
is_all_ones:
 1378|   226k|{
 1379|   226k|    return is_all_byte(p, n, 0xff);
 1380|   226k|}
bitwise_copy:
 1414|  23.4k|{
 1415|  23.4k|    const uint8_t *src = src_;
 1416|  23.4k|    uint8_t *dst = dst_;
 1417|       |
 1418|  23.4k|    src += src_len - (src_ofs / 8 + 1);
 1419|  23.4k|    src_ofs %= 8;
 1420|       |
 1421|  23.4k|    dst += dst_len - (dst_ofs / 8 + 1);
 1422|  23.4k|    dst_ofs %= 8;
 1423|       |
 1424|  23.4k|    if (src_ofs == 0 && dst_ofs == 0) {
  ------------------
  |  Branch (1424:9): [True: 22.9k, False: 488]
  |  Branch (1424:25): [True: 11.6k, False: 11.2k]
  ------------------
 1425|  11.6k|        unsigned int n_bytes = n_bits / 8;
 1426|  11.6k|        if (n_bytes) {
  ------------------
  |  Branch (1426:13): [True: 8.05k, False: 3.61k]
  ------------------
 1427|  8.05k|            dst -= n_bytes - 1;
 1428|  8.05k|            src -= n_bytes - 1;
 1429|  8.05k|            memcpy(dst, src, n_bytes);
 1430|       |
 1431|  8.05k|            n_bits %= 8;
 1432|  8.05k|            src--;
 1433|  8.05k|            dst--;
 1434|  8.05k|        }
 1435|  11.6k|        if (n_bits) {
  ------------------
  |  Branch (1435:13): [True: 6.57k, False: 5.10k]
  ------------------
 1436|  6.57k|            uint8_t mask = (1 << n_bits) - 1;
 1437|  6.57k|            *dst = (*dst & ~mask) | (*src & mask);
 1438|  6.57k|        }
 1439|  11.7k|    } else {
 1440|  68.9k|        while (n_bits > 0) {
  ------------------
  |  Branch (1440:16): [True: 57.2k, False: 11.7k]
  ------------------
 1441|  57.2k|            unsigned int max_copy = 8 - MAX(src_ofs, dst_ofs);
  ------------------
  |  |   95|  57.2k|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (95:20): [True: 25.3k, False: 31.8k]
  |  |  ------------------
  ------------------
 1442|  57.2k|            unsigned int chunk = MIN(n_bits, max_copy);
  ------------------
  |  |   91|  57.2k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (91:20): [True: 9.64k, False: 47.5k]
  |  |  ------------------
  ------------------
 1443|  57.2k|            uint8_t mask = ((1 << chunk) - 1) << dst_ofs;
 1444|       |
 1445|  57.2k|            *dst &= ~mask;
 1446|  57.2k|            *dst |= ((*src >> src_ofs) << dst_ofs) & mask;
 1447|       |
 1448|  57.2k|            src_ofs += chunk;
 1449|  57.2k|            if (src_ofs == 8) {
  ------------------
  |  Branch (1449:17): [True: 21.2k, False: 36.0k]
  ------------------
 1450|  21.2k|                src--;
 1451|  21.2k|                src_ofs = 0;
 1452|  21.2k|            }
 1453|  57.2k|            dst_ofs += chunk;
 1454|  57.2k|            if (dst_ofs == 8) {
  ------------------
  |  Branch (1454:17): [True: 26.3k, False: 30.8k]
  ------------------
 1455|  26.3k|                dst--;
 1456|  26.3k|                dst_ofs = 0;
 1457|  26.3k|            }
 1458|  57.2k|            n_bits -= chunk;
 1459|  57.2k|        }
 1460|  11.7k|    }
 1461|  23.4k|}
bitwise_one:
 1526|  17.8k|{
 1527|  17.8k|    uint8_t *dst = dst_;
 1528|       |
 1529|  17.8k|    if (!n_bits) {
  ------------------
  |  Branch (1529:9): [True: 0, False: 17.8k]
  ------------------
 1530|      0|        return;
 1531|      0|    }
 1532|       |
 1533|  17.8k|    dst += dst_len - (dst_ofs / 8 + 1);
 1534|  17.8k|    dst_ofs %= 8;
 1535|       |
 1536|  17.8k|    if (dst_ofs) {
  ------------------
  |  Branch (1536:9): [True: 10.1k, False: 7.62k]
  ------------------
 1537|  10.1k|        unsigned int chunk = MIN(n_bits, 8 - dst_ofs);
  ------------------
  |  |   91|  10.1k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (91:20): [True: 759, False: 9.43k]
  |  |  ------------------
  ------------------
 1538|       |
 1539|  10.1k|        *dst |= ((1 << chunk) - 1) << dst_ofs;
 1540|       |
 1541|  10.1k|        n_bits -= chunk;
 1542|  10.1k|        if (!n_bits) {
  ------------------
  |  Branch (1542:13): [True: 1.07k, False: 9.12k]
  ------------------
 1543|  1.07k|            return;
 1544|  1.07k|        }
 1545|       |
 1546|  9.12k|        dst--;
 1547|  9.12k|    }
 1548|       |
 1549|  38.7k|    while (n_bits >= 8) {
  ------------------
  |  Branch (1549:12): [True: 21.9k, False: 16.7k]
  ------------------
 1550|  21.9k|        *dst-- = 0xff;
 1551|  21.9k|        n_bits -= 8;
 1552|  21.9k|    }
 1553|       |
 1554|  16.7k|    if (n_bits) {
  ------------------
  |  Branch (1554:9): [True: 12.7k, False: 4.04k]
  ------------------
 1555|  12.7k|        *dst |= (1 << n_bits) - 1;
 1556|  12.7k|    }
 1557|  16.7k|}
bitwise_scan:
 1630|  4.54k|{
 1631|  4.54k|    unsigned int ofs;
 1632|       |
 1633|  1.12M|    for (ofs = start; ofs < end; ofs++) {
  ------------------
  |  Branch (1633:23): [True: 1.12M, False: 2.06k]
  ------------------
 1634|  1.12M|        if (bitwise_get_bit(p, len, ofs) == target) {
  ------------------
  |  Branch (1634:13): [True: 2.47k, False: 1.12M]
  ------------------
 1635|  2.47k|            break;
 1636|  2.47k|        }
 1637|  1.12M|    }
 1638|  4.54k|    return ofs;
 1639|  4.54k|}
bitwise_put:
 1719|  3.91k|{
 1720|  3.91k|    ovs_be64 n_value = htonll(value);
 1721|  3.91k|    bitwise_copy(&n_value, sizeof n_value, 0,
 1722|  3.91k|                 dst, dst_len, dst_ofs,
 1723|  3.91k|                 n_bits);
 1724|  3.91k|}
bitwise_get:
 1742|  1.67k|{
 1743|  1.67k|    ovs_be64 value = htonll(0);
 1744|       |
 1745|  1.67k|    bitwise_copy(src, src_len, src_ofs,
 1746|  1.67k|                 &value, sizeof value, 0,
 1747|  1.67k|                 n_bits);
 1748|  1.67k|    return ntohll(value);
 1749|  1.67k|}
bitwise_get_bit:
 1765|  1.12M|{
 1766|  1.12M|    const uint8_t *src = src_;
 1767|       |
 1768|  1.12M|    return (src[len - (ofs / 8 + 1)] & (1u << (ofs % 8))) != 0;
 1769|  1.12M|}

ofp-protocol.c:rightmost_1bit:
  382|  63.7k|{
  383|  63.7k|    return x & -x;
  384|  63.7k|}
ofp-protocol.c:zero_rightmost_1bit:
  390|   351k|{
  391|   351k|    return x & (x - 1);
  392|   351k|}
ofp-protocol.c:raw_ctz:
  261|   351k|{
  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|   351k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 351k, False: 0]
  |  Branch (265:54): [True: 351k, False: 0]
  ------------------
  266|   351k|            ? __builtin_ctz(n)
  267|   351k|            : __builtin_ctzll(n));
  268|   351k|}
ofp-table.c:raw_ctz:
  261|   605k|{
  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|   605k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 0, False: 605k]
  |  Branch (265:54): [True: 0, False: 0]
  ------------------
  266|   605k|            ? __builtin_ctz(n)
  267|   605k|            : __builtin_ctzll(n));
  268|   605k|}
ofpbuf.c:nullable_memset:
  198|  73.6k|{
  199|  73.6k|    if (n) {
  ------------------
  |  Branch (199:9): [True: 73.5k, False: 63]
  ------------------
  200|  73.5k|        memset(dst, c, n);
  201|  73.5k|    }
  202|  73.6k|}
util.c:nullable_memcpy:
  188|  2.56k|{
  189|  2.56k|    if (n) {
  ------------------
  |  Branch (189:9): [True: 2.56k, False: 0]
  ------------------
  190|  2.56k|        memcpy(dst, src, n);
  191|  2.56k|    }
  192|  2.56k|}
flow.c:ovs_u128_is_zero:
  488|  52.7k|{
  489|  52.7k|    return !(val.u64.hi || val.u64.lo);
  ------------------
  |  Branch (489:14): [True: 0, False: 52.7k]
  |  Branch (489:28): [True: 0, False: 52.7k]
  ------------------
  490|  52.7k|}
flow.c:rightmost_1bit:
  382|  55.9k|{
  383|  55.9k|    return x & -x;
  384|  55.9k|}
flow.c:count_1bits:
  332|  53.0k|{
  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|  53.0k|    const uint64_t h55 = UINT64_C(0x5555555555555555);
  341|  53.0k|    const uint64_t h33 = UINT64_C(0x3333333333333333);
  342|  53.0k|    const uint64_t h0F = UINT64_C(0x0F0F0F0F0F0F0F0F);
  343|       |    const uint64_t h01 = UINT64_C(0x0101010101010101);
  344|  53.0k|    x -= (x >> 1) & h55;               /* Count of each 2 bits in-place. */
  345|  53.0k|    x = (x & h33) + ((x >> 2) & h33);  /* Count of each 4 bits in-place. */
  346|  53.0k|    x = (x + (x >> 4)) & h0F;          /* Count of each 8 bits in-place. */
  347|  53.0k|    return (x * h01) >> 56;            /* Sum of all bytes. */
  348|  53.0k|#endif
  349|  53.0k|}
flow.c:raw_ctz:
  261|   640k|{
  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|   640k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 0, False: 640k]
  |  Branch (265:54): [True: 0, False: 0]
  ------------------
  266|   640k|            ? __builtin_ctz(n)
  267|   640k|            : __builtin_ctzll(n));
  268|   640k|}
flow.c:zero_rightmost_1bit:
  390|   640k|{
  391|   640k|    return x & (x - 1);
  392|   640k|}
match.c:ovs_u128_and:
  515|  6.73k|{
  516|  6.73k|    ovs_u128 dst;
  517|       |
  518|  6.73k|    dst.u64.hi = a.u64.hi & b.u64.hi;
  519|  6.73k|    dst.u64.lo = a.u64.lo & b.u64.lo;
  520|       |
  521|  6.73k|    return dst;
  522|  6.73k|}
match.c:ovs_u128_is_zero:
  488|   165k|{
  489|   165k|    return !(val.u64.hi || val.u64.lo);
  ------------------
  |  Branch (489:14): [True: 778, False: 165k]
  |  Branch (489:28): [True: 318, False: 164k]
  ------------------
  490|   165k|}
meta-flow.c:ovs_u128_is_zero:
  488|  7.46k|{
  489|  7.46k|    return !(val.u64.hi || val.u64.lo);
  ------------------
  |  Branch (489:14): [True: 116, False: 7.34k]
  |  Branch (489:28): [True: 4, False: 7.34k]
  ------------------
  490|  7.46k|}
meta-flow.c:raw_ctz:
  261|  5.28k|{
  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|  5.28k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 0, False: 5.28k]
  |  Branch (265:54): [True: 0, False: 0]
  ------------------
  266|  5.28k|            ? __builtin_ctz(n)
  267|  5.28k|            : __builtin_ctzll(n));
  268|  5.28k|}
nx-match.c:raw_ctz:
  261|  7.02k|{
  262|       |    /* With GCC 4.7 on 32-bit x86, if a 32-bit integer is passed as 'n', using
  263|       |     * a plain __builtin_ctzll() here always generates an out-of-line function
  264|       |     * call.  The test below helps it to emit a single 'bsf' instruction. */
  265|  7.02k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 0, False: 7.02k]
  |  Branch (265:54): [True: 0, False: 0]
  ------------------
  266|  7.02k|            ? __builtin_ctz(n)
  267|  7.02k|            : __builtin_ctzll(n));
  268|  7.02k|}
ofp-actions.c:log_2_ceil:
  322|  1.22k|{
  323|  1.22k|    return log_2_floor(n) + !is_pow2(n);
  324|  1.22k|}
ofp-actions.c:log_2_floor:
  314|  1.22k|{
  315|  1.22k|    return 63 - raw_clz64(n);
  316|  1.22k|}
ofp-actions.c:raw_clz64:
  272|  1.22k|{
  273|  1.22k|    return __builtin_clzll(n);
  274|  1.22k|}
ofp-actions.c:rightmost_1bit_idx:
  398|   159k|{
  399|   159k|    return ctz64(x);
  400|   159k|}
ofp-actions.c:ctz64:
  291|   159k|{
  292|   159k|    return n ? raw_ctz(n) : 64;
  ------------------
  |  Branch (292:12): [True: 159k, False: 0]
  ------------------
  293|   159k|}
ofp-actions.c:raw_ctz:
  261|   159k|{
  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|   159k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 0, False: 159k]
  |  Branch (265:54): [True: 0, False: 0]
  ------------------
  266|   159k|            ? __builtin_ctz(n)
  267|   159k|            : __builtin_ctzll(n));
  268|   159k|}
ofp-actions.c:zero_rightmost_1bit:
  390|   159k|{
  391|   159k|    return x & (x - 1);
  392|   159k|}
ofp-ct.c:ovs_u128_is_zero:
  488|  3.13k|{
  489|  3.13k|    return !(val.u64.hi || val.u64.lo);
  ------------------
  |  Branch (489:14): [True: 650, False: 2.48k]
  |  Branch (489:28): [True: 49, False: 2.43k]
  ------------------
  490|  3.13k|}
ofp-ct.c:ovs_u128_is_ones:
  495|    699|{
  496|    699|    return ovs_u128_equals(val, OVS_U128_MAX);
  497|    699|}
ofp-ct.c:ovs_u128_equals:
  481|    699|{
  482|    699|    return (a.u64.hi == b.u64.hi) && (a.u64.lo == b.u64.lo);
  ------------------
  |  Branch (482:12): [True: 333, False: 366]
  |  Branch (482:38): [True: 142, False: 191]
  ------------------
  483|    699|}
ofp-group.c:count_1bits:
  332|  10.8k|{
  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|  10.8k|    const uint64_t h55 = UINT64_C(0x5555555555555555);
  341|  10.8k|    const uint64_t h33 = UINT64_C(0x3333333333333333);
  342|  10.8k|    const uint64_t h0F = UINT64_C(0x0F0F0F0F0F0F0F0F);
  343|       |    const uint64_t h01 = UINT64_C(0x0101010101010101);
  344|  10.8k|    x -= (x >> 1) & h55;               /* Count of each 2 bits in-place. */
  345|  10.8k|    x = (x & h33) + ((x >> 2) & h33);  /* Count of each 4 bits in-place. */
  346|  10.8k|    x = (x + (x >> 4)) & h0F;          /* Count of each 8 bits in-place. */
  347|  10.8k|    return (x * h01) >> 56;            /* Sum of all bytes. */
  348|  10.8k|#endif
  349|  10.8k|}
packets.c:ctz32:
  284|  5.20k|{
  285|  5.20k|    return n ? raw_ctz(n) : 32;
  ------------------
  |  Branch (285:12): [True: 5.20k, False: 0]
  ------------------
  286|  5.20k|}
packets.c:raw_ctz:
  261|  5.20k|{
  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|  5.20k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 5.20k, False: 0]
  |  Branch (265:54): [True: 5.20k, False: 0]
  ------------------
  266|  5.20k|            ? __builtin_ctz(n)
  267|  5.20k|            : __builtin_ctzll(n));
  268|  5.20k|}
tun-metadata.c:raw_ctz:
  261|  5.83k|{
  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|  5.83k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 0, False: 5.83k]
  |  Branch (265:54): [True: 0, False: 0]
  ------------------
  266|  5.83k|            ? __builtin_ctz(n)
  267|  5.83k|            : __builtin_ctzll(n));
  268|  5.83k|}
tun-metadata.c:zero_rightmost_1bit:
  390|  5.83k|{
  391|  5.83k|    return x & (x - 1);
  392|  5.83k|}

uuid_is_zero:
  204|  51.8k|{
  205|  51.8k|    return (!uuid->parts[0] && !uuid->parts[1]
  ------------------
  |  Branch (205:13): [True: 51.8k, False: 73]
  |  Branch (205:32): [True: 51.4k, False: 318]
  ------------------
  206|  51.4k|            && !uuid->parts[2] && !uuid->parts[3]);
  ------------------
  |  Branch (206:16): [True: 51.3k, False: 151]
  |  Branch (206:35): [True: 51.3k, False: 17]
  ------------------
  207|  51.8k|}

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

