ofp-print.c:ds_put_char:
   94|  1.15M|{
   95|  1.15M|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 1.13M, False: 19.9k]
  ------------------
   96|  1.13M|        ds->string[ds->length++] = c;
   97|  1.13M|        ds->string[ds->length] = '\0';
   98|  1.13M|    } else {
   99|  19.9k|        ds_put_char__(ds, c);
  100|  19.9k|    }
  101|  1.15M|}
ofp-queue.c:ds_put_char:
   94|  40.0k|{
   95|  40.0k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 38.1k, False: 1.89k]
  ------------------
   96|  38.1k|        ds->string[ds->length++] = c;
   97|  38.1k|        ds->string[ds->length] = '\0';
   98|  38.1k|    } else {
   99|  1.89k|        ds_put_char__(ds, c);
  100|  1.89k|    }
  101|  40.0k|}
ofp-switch.c:ds_put_char:
   94|  10.9k|{
   95|  10.9k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 10.7k, False: 198]
  ------------------
   96|  10.7k|        ds->string[ds->length++] = c;
   97|  10.7k|        ds->string[ds->length] = '\0';
   98|  10.7k|    } else {
   99|    198|        ds_put_char__(ds, c);
  100|    198|    }
  101|  10.9k|}
ofp-table.c:ds_put_char:
   94|   603k|{
   95|   603k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 598k, False: 4.92k]
  ------------------
   96|   598k|        ds->string[ds->length++] = c;
   97|   598k|        ds->string[ds->length] = '\0';
   98|   598k|    } else {
   99|  4.92k|        ds_put_char__(ds, c);
  100|  4.92k|    }
  101|   603k|}
dynamic-string.c:ds_put_char:
   94|  70.8M|{
   95|  70.8M|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 70.3M, False: 450k]
  ------------------
   96|  70.3M|        ds->string[ds->length++] = c;
   97|  70.3M|        ds->string[ds->length] = '\0';
   98|  70.3M|    } else {
   99|   450k|        ds_put_char__(ds, c);
  100|   450k|    }
  101|  70.8M|}
flow.c:ds_put_char:
   94|  43.8k|{
   95|  43.8k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 42.4k, False: 1.40k]
  ------------------
   96|  42.4k|        ds->string[ds->length++] = c;
   97|  42.4k|        ds->string[ds->length] = '\0';
   98|  42.4k|    } else {
   99|  1.40k|        ds_put_char__(ds, c);
  100|  1.40k|    }
  101|  43.8k|}
match.c:ds_put_char:
   94|   403k|{
   95|   403k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 395k, False: 8.52k]
  ------------------
   96|   395k|        ds->string[ds->length++] = c;
   97|   395k|        ds->string[ds->length] = '\0';
   98|   395k|    } else {
   99|  8.52k|        ds_put_char__(ds, c);
  100|  8.52k|    }
  101|   403k|}
meta-flow.c:ds_put_char:
   94|    711|{
   95|    711|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 643, False: 68]
  ------------------
   96|    643|        ds->string[ds->length++] = c;
   97|    643|        ds->string[ds->length] = '\0';
   98|    643|    } else {
   99|     68|        ds_put_char__(ds, c);
  100|     68|    }
  101|    711|}
netdev.c:ds_put_char:
   94|  53.5k|{
   95|  53.5k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 53.4k, False: 108]
  ------------------
   96|  53.4k|        ds->string[ds->length++] = c;
   97|  53.4k|        ds->string[ds->length] = '\0';
   98|  53.4k|    } else {
   99|    108|        ds_put_char__(ds, c);
  100|    108|    }
  101|  53.5k|}
nx-match.c:ds_put_char:
   94|  12.0k|{
   95|  12.0k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 11.3k, False: 710]
  ------------------
   96|  11.3k|        ds->string[ds->length++] = c;
   97|  11.3k|        ds->string[ds->length] = '\0';
   98|  11.3k|    } else {
   99|    710|        ds_put_char__(ds, c);
  100|    710|    }
  101|  12.0k|}
ofp-actions.c:ds_put_char:
   94|  86.1k|{
   95|  86.1k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 81.6k, False: 4.46k]
  ------------------
   96|  81.6k|        ds->string[ds->length++] = c;
   97|  81.6k|        ds->string[ds->length] = '\0';
   98|  81.6k|    } else {
   99|  4.46k|        ds_put_char__(ds, c);
  100|  4.46k|    }
  101|  86.1k|}
ofp-bundle.c:ds_put_char:
   94|  7.94k|{
   95|  7.94k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 7.94k, False: 0]
  ------------------
   96|  7.94k|        ds->string[ds->length++] = c;
   97|  7.94k|        ds->string[ds->length] = '\0';
   98|  7.94k|    } else {
   99|      0|        ds_put_char__(ds, c);
  100|      0|    }
  101|  7.94k|}
ofp-connection.c:ds_put_char:
   94|   148k|{
   95|   148k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 147k, False: 916]
  ------------------
   96|   147k|        ds->string[ds->length++] = c;
   97|   147k|        ds->string[ds->length] = '\0';
   98|   147k|    } else {
   99|    916|        ds_put_char__(ds, c);
  100|    916|    }
  101|   148k|}
ofp-ct.c:ds_put_char:
   94|  3.18k|{
   95|  3.18k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 2.75k, False: 430]
  ------------------
   96|  2.75k|        ds->string[ds->length++] = c;
   97|  2.75k|        ds->string[ds->length] = '\0';
   98|  2.75k|    } else {
   99|    430|        ds_put_char__(ds, c);
  100|    430|    }
  101|  3.18k|}
ofp-flow.c:ds_put_char:
   94|   171k|{
   95|   171k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 163k, False: 8.59k]
  ------------------
   96|   163k|        ds->string[ds->length++] = c;
   97|   163k|        ds->string[ds->length] = '\0';
   98|   163k|    } else {
   99|  8.59k|        ds_put_char__(ds, c);
  100|  8.59k|    }
  101|   171k|}
ofp-group.c:ds_put_char:
   94|  60.0k|{
   95|  60.0k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 54.0k, False: 6.02k]
  ------------------
   96|  54.0k|        ds->string[ds->length++] = c;
   97|  54.0k|        ds->string[ds->length] = '\0';
   98|  54.0k|    } else {
   99|  6.02k|        ds_put_char__(ds, c);
  100|  6.02k|    }
  101|  60.0k|}
ofp-ipfix.c:ds_put_char:
   94|  22.7k|{
   95|  22.7k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 22.1k, False: 626]
  ------------------
   96|  22.1k|        ds->string[ds->length++] = c;
   97|  22.1k|        ds->string[ds->length] = '\0';
   98|  22.1k|    } else {
   99|    626|        ds_put_char__(ds, c);
  100|    626|    }
  101|  22.7k|}
ofp-match.c:ds_put_char:
   94|  2.23k|{
   95|  2.23k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 2.23k, False: 0]
  ------------------
   96|  2.23k|        ds->string[ds->length++] = c;
   97|  2.23k|        ds->string[ds->length] = '\0';
   98|  2.23k|    } else {
   99|      0|        ds_put_char__(ds, c);
  100|      0|    }
  101|  2.23k|}
ofp-meter.c:ds_put_char:
   94|  10.2k|{
   95|  10.2k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 8.27k, False: 1.95k]
  ------------------
   96|  8.27k|        ds->string[ds->length++] = c;
   97|  8.27k|        ds->string[ds->length] = '\0';
   98|  8.27k|    } else {
   99|  1.95k|        ds_put_char__(ds, c);
  100|  1.95k|    }
  101|  10.2k|}
ofp-monitor.c:ds_put_char:
   94|  8.98k|{
   95|  8.98k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 8.28k, False: 699]
  ------------------
   96|  8.28k|        ds->string[ds->length++] = c;
   97|  8.28k|        ds->string[ds->length] = '\0';
   98|  8.28k|    } else {
   99|    699|        ds_put_char__(ds, c);
  100|    699|    }
  101|  8.98k|}
ofp-packet.c:ds_put_char:
   94|  92.9k|{
   95|  92.9k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 89.0k, False: 3.82k]
  ------------------
   96|  89.0k|        ds->string[ds->length++] = c;
   97|  89.0k|        ds->string[ds->length] = '\0';
   98|  89.0k|    } else {
   99|  3.82k|        ds_put_char__(ds, c);
  100|  3.82k|    }
  101|  92.9k|}
ofp-port.c:ds_put_char:
   94|   100k|{
   95|   100k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 96.2k, False: 4.06k]
  ------------------
   96|  96.2k|        ds->string[ds->length++] = c;
   97|  96.2k|        ds->string[ds->length] = '\0';
   98|  96.2k|    } else {
   99|  4.06k|        ds_put_char__(ds, c);
  100|  4.06k|    }
  101|   100k|}
packets.c:ds_put_char:
   94|    680|{
   95|    680|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 680, False: 0]
  ------------------
   96|    680|        ds->string[ds->length++] = c;
   97|    680|        ds->string[ds->length] = '\0';
   98|    680|    } else {
   99|      0|        ds_put_char__(ds, c);
  100|      0|    }
  101|    680|}
tun-metadata.c:ds_put_char:
   94|  13.0k|{
   95|  13.0k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 12.0k, False: 994]
  ------------------
   96|  12.0k|        ds->string[ds->length++] = c;
   97|  12.0k|        ds->string[ds->length] = '\0';
   98|  12.0k|    } else {
   99|    994|        ds_put_char__(ds, c);
  100|    994|    }
  101|  13.0k|}
bundle.c:ds_put_char:
   94|  6.30k|{
   95|  6.30k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 5.79k, False: 510]
  ------------------
   96|  5.79k|        ds->string[ds->length++] = c;
   97|  5.79k|        ds->string[ds->length] = '\0';
   98|  5.79k|    } else {
   99|    510|        ds_put_char__(ds, c);
  100|    510|    }
  101|  6.30k|}
learn.c:ds_put_char:
   94|  33.9k|{
   95|  33.9k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 33.5k, False: 369]
  ------------------
   96|  33.5k|        ds->string[ds->length++] = c;
   97|  33.5k|        ds->string[ds->length] = '\0';
   98|  33.5k|    } else {
   99|    369|        ds_put_char__(ds, c);
  100|    369|    }
  101|  33.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|  11.9M|{
  368|  11.9M|    return hmap->buckets[hash & hmap->mask];
  369|  11.9M|}
nx-match.c:hmap_next_in_bucket:
  381|  11.0M|{
  382|  11.0M|    return node->next;
  383|  11.0M|}
ofp-actions.c:hmap_first_with_hash:
  359|   259k|{
  360|   259k|    return hmap_next_with_hash__(hmap->buckets[hash & hmap->mask], hash);
  361|   259k|}
ofp-actions.c:hmap_next_with_hash__:
  348|   259k|{
  349|   474k|    while (node != NULL && node->hash != hash) {
  ------------------
  |  Branch (349:12): [True: 463k, False: 11.3k]
  |  Branch (349:28): [True: 215k, False: 248k]
  ------------------
  350|   215k|        node = node->next;
  351|   215k|    }
  352|   259k|    return CONST_CAST(struct hmap_node *, node);
  ------------------
  |  |   85|   259k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   259k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   259k|     (TYPE) (POINTER))
  ------------------
  353|   259k|}
ofp-actions.c:hmap_insert_at:
  306|    384|{
  307|    384|    hmap_insert_fast(hmap, node, hash);
  308|    384|    if (hmap->n / 2 > hmap->mask) {
  ------------------
  |  Branch (308:9): [True: 7, False: 377]
  ------------------
  309|      7|        hmap_expand_at(hmap, where);
  310|      7|    }
  311|    384|}
ofp-actions.c:hmap_insert_fast:
  289|    384|{
  290|    384|    struct hmap_node **bucket = &hmap->buckets[hash & hmap->mask];
  291|    384|    node->hash = hash;
  292|    384|    node->next = *bucket;
  293|    384|    *bucket = node;
  294|    384|    hmap->n++;
  295|    384|}
ofp-msgs.c:hmap_insert_at:
  306|  1.46k|{
  307|  1.46k|    hmap_insert_fast(hmap, node, hash);
  308|  1.46k|    if (hmap->n / 2 > hmap->mask) {
  ------------------
  |  Branch (308:9): [True: 9, False: 1.45k]
  ------------------
  309|      9|        hmap_expand_at(hmap, where);
  310|      9|    }
  311|  1.46k|}
ofp-msgs.c:hmap_insert_fast:
  289|  1.46k|{
  290|  1.46k|    struct hmap_node **bucket = &hmap->buckets[hash & hmap->mask];
  291|  1.46k|    node->hash = hash;
  292|  1.46k|    node->next = *bucket;
  293|  1.46k|    *bucket = node;
  294|  1.46k|    hmap->n++;
  295|  1.46k|}
ofp-msgs.c:hmap_first_with_hash:
  359|  3.59M|{
  360|  3.59M|    return hmap_next_with_hash__(hmap->buckets[hash & hmap->mask], hash);
  361|  3.59M|}
ofp-msgs.c:hmap_next_with_hash__:
  348|  3.59M|{
  349|  5.42M|    while (node != NULL && node->hash != hash) {
  ------------------
  |  Branch (349:12): [True: 4.94M, False: 480k]
  |  Branch (349:28): [True: 1.83M, False: 3.11M]
  ------------------
  350|  1.83M|        node = node->next;
  351|  1.83M|    }
  352|  3.59M|    return CONST_CAST(struct hmap_node *, node);
  ------------------
  |  |   85|  3.59M|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  3.59M|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  3.59M|     (TYPE) (POINTER))
  ------------------
  353|  3.59M|}
ofp-msgs.c:hmap_next_with_hash:
  395|     66|{
  396|     66|    return hmap_next_with_hash__(node->next, node->hash);
  397|     66|}
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.53M|{
  158|  1.53M|    *list = OVS_LIST_POISON;
  159|  1.53M|}
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|  66.6k|{
  321|  66.6k|    return list->next == list;
  322|  66.6k|}
ofp-group.c:ovs_list_pop_front:
  261|  9.54k|{
  262|  9.54k|    struct ovs_list *front = list->next;
  263|       |
  264|  9.54k|    ovs_list_remove(front);
  265|  9.54k|    return front;
  266|  9.54k|}
ofp-group.c:ovs_list_remove:
  251|  9.54k|{
  252|  9.54k|    elem->prev->next = elem->next;
  253|  9.54k|    elem->next->prev = elem->prev;
  254|  9.54k|    return elem->next;
  255|  9.54k|}
ofp-group.c:ovs_list_push_back:
  204|  9.54k|{
  205|  9.54k|    ovs_list_insert(list, elem);
  206|  9.54k|}
ofp-group.c:ovs_list_insert:
  164|  9.54k|{
  165|  9.54k|    elem->prev = before->prev;
  166|  9.54k|    elem->next = before;
  167|  9.54k|    before->prev->next = elem;
  168|  9.54k|    before->prev = elem;
  169|  9.54k|}
ofp-group.c:ovs_list_init:
  149|  54.7k|{
  150|  54.7k|    list->next = list->prev = list;
  151|  54.7k|}
ofp-group.c:ovs_list_is_short:
  334|  1.76k|{
  335|  1.76k|    return list->next == list->prev;
  336|  1.76k|}
ofp-group.c:ovs_list_is_singleton:
  327|  1.76k|{
  328|  1.76k|    return ovs_list_is_short(list) && !ovs_list_is_empty(list);
  ------------------
  |  Branch (328:12): [True: 1.74k, False: 19]
  |  Branch (328:39): [True: 1.35k, False: 384]
  ------------------
  329|  1.76k|}
ofp-match.c:ovs_list_init:
  149|  3.65k|{
  150|  3.65k|    list->next = list->prev = list;
  151|  3.65k|}
ofp-match.c:ovs_list_push_back:
  204|  7.89k|{
  205|  7.89k|    ovs_list_insert(list, elem);
  206|  7.89k|}
ofp-match.c:ovs_list_insert:
  164|  7.89k|{
  165|  7.89k|    elem->prev = before->prev;
  166|  7.89k|    elem->next = before;
  167|  7.89k|    before->prev->next = elem;
  168|  7.89k|    before->prev = elem;
  169|  7.89k|}
ofp-match.c:ovs_list_is_empty:
  320|  11.5k|{
  321|  11.5k|    return list->next == list;
  322|  11.5k|}
ofp-match.c:ovs_list_pop_front:
  261|  7.89k|{
  262|  7.89k|    struct ovs_list *front = list->next;
  263|       |
  264|  7.89k|    ovs_list_remove(front);
  265|  7.89k|    return front;
  266|  7.89k|}
ofp-match.c:ovs_list_remove:
  251|  7.89k|{
  252|  7.89k|    elem->prev->next = elem->next;
  253|  7.89k|    elem->next->prev = elem->prev;
  254|  7.89k|    return elem->next;
  255|  7.89k|}

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

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

ofp-actions.c:ofpact_next:
  212|   419k|{
  213|   419k|    return ALIGNED_CAST(struct ofpact *,
  ------------------
  |  |  434|   419k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  214|   419k|                        (uint8_t *) ofpact + OFPACT_ALIGN(ofpact->len));
  215|   419k|}
ofp-actions.c:ofpact_get_CLONE:
 1289|     23|    {                                                                   \
 1290|     23|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     23|#define ovs_assert ovs_ignore
  ------------------
 1291|     23|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     23|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     23|    }                                                                   \
ofp-actions.c:ofpact_get_CT:
 1289|  2.74k|    {                                                                   \
 1290|  2.74k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  2.74k|#define ovs_assert ovs_ignore
  ------------------
 1291|  2.74k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  2.74k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  2.74k|    }                                                                   \
ofp-actions.c:ofpact_get_WRITE_ACTIONS:
 1289|  9.54k|    {                                                                   \
 1290|  9.54k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  9.54k|#define ovs_assert ovs_ignore
  ------------------
 1291|  9.54k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  9.54k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  9.54k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_FIELD:
 1303|  11.2k|    {                                                                   \
 1304|  11.2k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  11.2k|                                            sizeof(struct STRUCT));     \
 1306|  11.2k|    }                                                                   \
ofp-actions.c:ofpact_finish_SET_FIELD:
 1317|  11.2k|    {                                                                   \
 1318|  11.2k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  11.2k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  11.2k|#define ovs_assert ovs_ignore
  ------------------
 1320|  11.2k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  11.2k|    }
ofp-actions.c:ofpact_end:
  221|   721k|{
  222|   721k|    return ofpacts
  ------------------
  |  Branch (222:12): [True: 706k, False: 15.6k]
  ------------------
  223|   721k|           ? ALIGNED_CAST(struct ofpact *, (uint8_t *) ofpacts + ofpacts_len)
  ------------------
  |  |  434|   706k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  224|       |           : NULL;
  225|   721k|}
ofp-actions.c:ofpact_put_METER:
 1303|  1.46k|    {                                                                   \
 1304|  1.46k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.46k|                                            sizeof(struct STRUCT));     \
 1306|  1.46k|    }                                                                   \
ofp-actions.c:ofpact_put_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|  8.36k|    {                                                                   \
 1304|  8.36k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  8.36k|                                            sizeof(struct STRUCT));     \
 1306|  8.36k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_VLAN_PCP:
 1303|  4.89k|    {                                                                   \
 1304|  4.89k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  4.89k|                                            sizeof(struct STRUCT));     \
 1306|  4.89k|    }                                                                   \
ofp-actions.c:ofpact_put_PUSH_VLAN:
 1303|  2.18k|    {                                                                   \
 1304|  2.18k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  2.18k|                                            sizeof(struct STRUCT));     \
 1306|  2.18k|    }                                                                   \
ofp-actions.c:ofpact_put_STRIP_VLAN:
 1303|  9.01k|    {                                                                   \
 1304|  9.01k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  9.01k|                                            sizeof(struct STRUCT));     \
 1306|  9.01k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_ETH_SRC:
 1303|     92|    {                                                                   \
 1304|     92|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|     92|                                            sizeof(struct STRUCT));     \
 1306|     92|    }                                                                   \
ofp-actions.c:ofpact_put_SET_ETH_DST:
 1303|    113|    {                                                                   \
 1304|    113|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    113|                                            sizeof(struct STRUCT));     \
 1306|    113|    }                                                                   \
ofp-actions.c:ofpact_put_SET_IPV4_SRC:
 1303|  2.77k|    {                                                                   \
 1304|  2.77k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  2.77k|                                            sizeof(struct STRUCT));     \
 1306|  2.77k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_IPV4_DST:
 1303|  6.49k|    {                                                                   \
 1304|  6.49k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  6.49k|                                            sizeof(struct STRUCT));     \
 1306|  6.49k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_IP_DSCP:
 1303|  7.23k|    {                                                                   \
 1304|  7.23k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  7.23k|                                            sizeof(struct STRUCT));     \
 1306|  7.23k|    }                                                                   \
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|  6.36k|    {                                                                   \
 1304|  6.36k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  6.36k|                                            sizeof(struct STRUCT));     \
 1306|  6.36k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_L4_DST_PORT:
 1303|  8.11k|    {                                                                   \
 1304|  8.11k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  8.11k|                                            sizeof(struct STRUCT));     \
 1306|  8.11k|    }                                                                   \
ofp-actions.c:ofpact_put_ENQUEUE:
 1303|    380|    {                                                                   \
 1304|    380|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    380|                                            sizeof(struct STRUCT));     \
 1306|    380|    }                                                                   \
ofp-actions.c:ofpact_put_SET_MPLS_LABEL:
 1303|  2.17k|    {                                                                   \
 1304|  2.17k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  2.17k|                                            sizeof(struct STRUCT));     \
 1306|  2.17k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_MPLS_TC:
 1303|    572|    {                                                                   \
 1304|    572|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    572|                                            sizeof(struct STRUCT));     \
 1306|    572|    }                                                                   \
ofp-actions.c:ofpact_put_SET_MPLS_TTL:
 1303|  1.94k|    {                                                                   \
 1304|  1.94k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.94k|                                            sizeof(struct STRUCT));     \
 1306|  1.94k|    }                                                                   \
ofp-actions.c:ofpact_put_DEC_MPLS_TTL:
 1303|  4.46k|    {                                                                   \
 1304|  4.46k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  4.46k|                                            sizeof(struct STRUCT));     \
 1306|  4.46k|    }                                                                   \
ofp-actions.c:ofpact_put_PUSH_MPLS:
 1303|  6.79k|    {                                                                   \
 1304|  6.79k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  6.79k|                                            sizeof(struct STRUCT));     \
 1306|  6.79k|    }                                                                   \
ofp-actions.c:ofpact_put_POP_MPLS:
 1303|  4.70k|    {                                                                   \
 1304|  4.70k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  4.70k|                                            sizeof(struct STRUCT));     \
 1306|  4.70k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_QUEUE:
 1303|    692|    {                                                                   \
 1304|    692|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    692|                                            sizeof(struct STRUCT));     \
 1306|    692|    }                                                                   \
ofp-actions.c:ofpact_put_GROUP:
 1303|    748|    {                                                                   \
 1304|    748|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    748|                                            sizeof(struct STRUCT));     \
 1306|    748|    }                                                                   \
ofp-actions.c:ofpact_put_SET_IP_TTL:
 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_DEC_TTL:
 1303|  5.76k|    {                                                                   \
 1304|  5.76k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  5.76k|                                            sizeof(struct STRUCT));     \
 1306|  5.76k|    }                                                                   \
ofp-actions.c:ofpact_finish_DEC_TTL:
 1317|  5.17k|    {                                                                   \
 1318|  5.17k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  5.17k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  5.17k|#define ovs_assert ovs_ignore
  ------------------
 1320|  5.17k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  5.17k|    }
ofp-actions.c:ofpact_put_REG_MOVE:
 1303|  7.47k|    {                                                                   \
 1304|  7.47k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  7.47k|                                            sizeof(struct STRUCT));     \
 1306|  7.47k|    }                                                                   \
ofp-actions.c:ofpact_put_RESUBMIT:
 1303|  2.55k|    {                                                                   \
 1304|  2.55k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  2.55k|                                            sizeof(struct STRUCT));     \
 1306|  2.55k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_TUNNEL:
 1303|    998|    {                                                                   \
 1304|    998|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    998|                                            sizeof(struct STRUCT));     \
 1306|    998|    }                                                                   \
ofp-actions.c:ofpact_put_POP_QUEUE:
 1303|  1.18k|    {                                                                   \
 1304|  1.18k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.18k|                                            sizeof(struct STRUCT));     \
 1306|  1.18k|    }                                                                   \
ofp-actions.c:ofpact_put_NOTE:
 1303|  8.56k|    {                                                                   \
 1304|  8.56k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  8.56k|                                            sizeof(struct STRUCT));     \
 1306|  8.56k|    }                                                                   \
ofp-actions.c:ofpact_finish_NOTE:
 1317|  8.56k|    {                                                                   \
 1318|  8.56k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  8.56k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  8.56k|#define ovs_assert ovs_ignore
  ------------------
 1320|  8.56k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  8.56k|    }
ofp-actions.c:ofpact_put_MULTIPATH:
 1303|  5.43k|    {                                                                   \
 1304|  5.43k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  5.43k|                                            sizeof(struct STRUCT));     \
 1306|  5.43k|    }                                                                   \
ofp-actions.c:ofpact_put_BUNDLE:
 1303|  4.77k|    {                                                                   \
 1304|  4.77k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  4.77k|                                            sizeof(struct STRUCT));     \
 1306|  4.77k|    }                                                                   \
ofp-actions.c:ofpact_finish_BUNDLE:
 1317|  4.60k|    {                                                                   \
 1318|  4.60k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  4.60k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  4.60k|#define ovs_assert ovs_ignore
  ------------------
 1320|  4.60k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  4.60k|    }
ofp-actions.c:ofpact_put_OUTPUT_REG:
 1303|    691|    {                                                                   \
 1304|    691|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    691|                                            sizeof(struct STRUCT));     \
 1306|    691|    }                                                                   \
ofp-actions.c:ofpact_put_LEARN:
 1303|  24.7k|    {                                                                   \
 1304|  24.7k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  24.7k|                                            sizeof(struct STRUCT));     \
 1306|  24.7k|    }                                                                   \
ofp-actions.c:ofpact_finish_LEARN:
 1317|  18.6k|    {                                                                   \
 1318|  18.6k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  18.6k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  18.6k|#define ovs_assert ovs_ignore
  ------------------
 1320|  18.6k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  18.6k|    }
ofp-actions.c:ofpact_put_EXIT:
 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_FIN_TIMEOUT:
 1303|    794|    {                                                                   \
 1304|    794|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    794|                                            sizeof(struct STRUCT));     \
 1306|    794|    }                                                                   \
ofp-actions.c:ofpact_put_CONTROLLER:
 1303|  4.75k|    {                                                                   \
 1304|  4.75k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  4.75k|                                            sizeof(struct STRUCT));     \
 1306|  4.75k|    }                                                                   \
ofp-actions.c:ofpact_finish_CONTROLLER:
 1317|  4.16k|    {                                                                   \
 1318|  4.16k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  4.16k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  4.16k|#define ovs_assert ovs_ignore
  ------------------
 1320|  4.16k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  4.16k|    }
ofp-actions.c:ofpact_put_STACK_PUSH:
 1303|    462|    {                                                                   \
 1304|    462|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    462|                                            sizeof(struct STRUCT));     \
 1306|    462|    }                                                                   \
ofp-actions.c:ofpact_put_STACK_POP:
 1303|    711|    {                                                                   \
 1304|    711|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    711|                                            sizeof(struct STRUCT));     \
 1306|    711|    }                                                                   \
ofp-actions.c:ofpact_put_SAMPLE:
 1303|  3.55k|    {                                                                   \
 1304|  3.55k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  3.55k|                                            sizeof(struct STRUCT));     \
 1306|  3.55k|    }                                                                   \
ofp-actions.c:ofpact_put_CONJUNCTION:
 1303|  2.82k|    {                                                                   \
 1304|  2.82k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  2.82k|                                            sizeof(struct STRUCT));     \
 1306|  2.82k|    }                                                                   \
ofp-actions.c:ofpact_put_CT:
 1303|  8.63k|    {                                                                   \
 1304|  8.63k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  8.63k|                                            sizeof(struct STRUCT));     \
 1306|  8.63k|    }                                                                   \
ofp-actions.c:ofpact_finish_CT:
 1317|  5.75k|    {                                                                   \
 1318|  5.75k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  5.75k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  5.75k|#define ovs_assert ovs_ignore
  ------------------
 1320|  5.75k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  5.75k|    }
ofp-actions.c:ofpact_get_NAT:
 1289|  5.34k|    {                                                                   \
 1290|  5.34k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  5.34k|#define ovs_assert ovs_ignore
  ------------------
 1291|  5.34k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  5.34k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  5.34k|    }                                                                   \
ofp-actions.c:ofpact_put_NAT:
 1303|  13.9k|    {                                                                   \
 1304|  13.9k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  13.9k|                                            sizeof(struct STRUCT));     \
 1306|  13.9k|    }                                                                   \
ofp-actions.c:ofpact_put_OUTPUT_TRUNC:
 1303|  1.76k|    {                                                                   \
 1304|  1.76k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.76k|                                            sizeof(struct STRUCT));     \
 1306|  1.76k|    }                                                                   \
ofp-actions.c:ofpact_put_CLONE:
 1303|    606|    {                                                                   \
 1304|    606|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    606|                                            sizeof(struct STRUCT));     \
 1306|    606|    }                                                                   \
ofp-actions.c:ofpact_finish_CLONE:
 1317|    569|    {                                                                   \
 1318|    569|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|    569|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    569|#define ovs_assert ovs_ignore
  ------------------
 1320|    569|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|    569|    }
ofp-actions.c:ofpact_put_CT_CLEAR:
 1303|    526|    {                                                                   \
 1304|    526|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    526|                                            sizeof(struct STRUCT));     \
 1306|    526|    }                                                                   \
ofp-actions.c:ofpact_put_ENCAP:
 1303|  6.89k|    {                                                                   \
 1304|  6.89k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  6.89k|                                            sizeof(struct STRUCT));     \
 1306|  6.89k|    }                                                                   \
ofp-actions.c:ofpact_finish_ENCAP:
 1317|  2.12k|    {                                                                   \
 1318|  2.12k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  2.12k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  2.12k|#define ovs_assert ovs_ignore
  ------------------
 1320|  2.12k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  2.12k|    }
ofp-actions.c:ofpact_put_DECAP:
 1303|  10.5k|    {                                                                   \
 1304|  10.5k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  10.5k|                                            sizeof(struct STRUCT));     \
 1306|  10.5k|    }                                                                   \
ofp-actions.c:ofpact_put_DEC_NSH_TTL:
 1303|    684|    {                                                                   \
 1304|    684|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    684|                                            sizeof(struct STRUCT));     \
 1306|    684|    }                                                                   \
ofp-actions.c:ofpact_put_CHECK_PKT_LARGER:
 1303|  2.03k|    {                                                                   \
 1304|  2.03k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  2.03k|                                            sizeof(struct STRUCT));     \
 1306|  2.03k|    }                                                                   \
ofp-actions.c:ofpact_put_DELETE_FIELD:
 1303|    522|    {                                                                   \
 1304|    522|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    522|                                            sizeof(struct STRUCT));     \
 1306|    522|    }                                                                   \
ofp-actions.c:ofpact_put_CLEAR_ACTIONS:
 1303|    298|    {                                                                   \
 1304|    298|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    298|                                            sizeof(struct STRUCT));     \
 1306|    298|    }                                                                   \
ofp-actions.c:ofpact_put_WRITE_METADATA:
 1303|  1.69k|    {                                                                   \
 1304|  1.69k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.69k|                                            sizeof(struct STRUCT));     \
 1306|  1.69k|    }                                                                   \
ofp-actions.c:ofpact_put_GOTO_TABLE:
 1303|     72|    {                                                                   \
 1304|     72|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|     72|                                            sizeof(struct STRUCT));     \
 1306|     72|    }                                                                   \
ofp-actions.c:ofpact_get_OUTPUT:
 1289|  5.74k|    {                                                                   \
 1290|  5.74k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  5.74k|#define ovs_assert ovs_ignore
  ------------------
 1291|  5.74k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  5.74k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  5.74k|    }                                                                   \
ofp-actions.c:ofpact_get_CONTROLLER:
 1289|     80|    {                                                                   \
 1290|     80|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     80|#define ovs_assert ovs_ignore
  ------------------
 1291|     80|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     80|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     80|    }                                                                   \
ofp-actions.c:ofpact_get_ENQUEUE:
 1289|    112|    {                                                                   \
 1290|    112|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    112|#define ovs_assert ovs_ignore
  ------------------
 1291|    112|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    112|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    112|    }                                                                   \
ofp-actions.c:ofpact_get_OUTPUT_REG:
 1289|    133|    {                                                                   \
 1290|    133|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    133|#define ovs_assert ovs_ignore
  ------------------
 1291|    133|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    133|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    133|    }                                                                   \
ofp-actions.c:ofpact_get_BUNDLE:
 1289|    676|    {                                                                   \
 1290|    676|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    676|#define ovs_assert ovs_ignore
  ------------------
 1291|    676|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    676|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    676|    }                                                                   \
ofp-actions.c:ofpact_get_SET_FIELD:
 1289|  1.46k|    {                                                                   \
 1290|  1.46k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  1.46k|#define ovs_assert ovs_ignore
  ------------------
 1291|  1.46k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  1.46k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  1.46k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_VLAN_VID:
 1289|  5.16k|    {                                                                   \
 1290|  5.16k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  5.16k|#define ovs_assert ovs_ignore
  ------------------
 1291|  5.16k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  5.16k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  5.16k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_VLAN_PCP:
 1289|  3.22k|    {                                                                   \
 1290|  3.22k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  3.22k|#define ovs_assert ovs_ignore
  ------------------
 1291|  3.22k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  3.22k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  3.22k|    }                                                                   \
ofp-actions.c:ofpact_get_STRIP_VLAN:
 1289|  5.99k|    {                                                                   \
 1290|  5.99k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  5.99k|#define ovs_assert ovs_ignore
  ------------------
 1291|  5.99k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  5.99k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  5.99k|    }                                                                   \
ofp-actions.c:ofpact_get_PUSH_VLAN:
 1289|  1.84k|    {                                                                   \
 1290|  1.84k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  1.84k|#define ovs_assert ovs_ignore
  ------------------
 1291|  1.84k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  1.84k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  1.84k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_ETH_SRC:
 1289|     85|    {                                                                   \
 1290|     85|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     85|#define ovs_assert ovs_ignore
  ------------------
 1291|     85|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     85|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     85|    }                                                                   \
ofp-actions.c:ofpact_get_SET_ETH_DST:
 1289|     47|    {                                                                   \
 1290|     47|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     47|#define ovs_assert ovs_ignore
  ------------------
 1291|     47|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     47|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     47|    }                                                                   \
ofp-actions.c:ofpact_get_SET_IPV4_SRC:
 1289|  1.94k|    {                                                                   \
 1290|  1.94k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  1.94k|#define ovs_assert ovs_ignore
  ------------------
 1291|  1.94k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  1.94k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  1.94k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_IPV4_DST:
 1289|  4.24k|    {                                                                   \
 1290|  4.24k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  4.24k|#define ovs_assert ovs_ignore
  ------------------
 1291|  4.24k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  4.24k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  4.24k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_IP_DSCP:
 1289|  5.04k|    {                                                                   \
 1290|  5.04k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  5.04k|#define ovs_assert ovs_ignore
  ------------------
 1291|  5.04k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  5.04k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  5.04k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_IP_ECN:
 1289|    877|    {                                                                   \
 1290|    877|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    877|#define ovs_assert ovs_ignore
  ------------------
 1291|    877|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    877|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    877|    }                                                                   \
ofp-actions.c:ofpact_get_SET_IP_TTL:
 1289|  1.20k|    {                                                                   \
 1290|  1.20k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  1.20k|#define ovs_assert ovs_ignore
  ------------------
 1291|  1.20k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  1.20k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  1.20k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_L4_SRC_PORT:
 1289|  3.25k|    {                                                                   \
 1290|  3.25k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  3.25k|#define ovs_assert ovs_ignore
  ------------------
 1291|  3.25k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  3.25k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  3.25k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_L4_DST_PORT:
 1289|  5.73k|    {                                                                   \
 1290|  5.73k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  5.73k|#define ovs_assert ovs_ignore
  ------------------
 1291|  5.73k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  5.73k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  5.73k|    }                                                                   \
ofp-actions.c:ofpact_get_REG_MOVE:
 1289|    244|    {                                                                   \
 1290|    244|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    244|#define ovs_assert ovs_ignore
  ------------------
 1291|    244|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    244|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    244|    }                                                                   \
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|    390|    {                                                                   \
 1290|    390|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    390|#define ovs_assert ovs_ignore
  ------------------
 1291|    390|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    390|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    390|    }                                                                   \
ofp-actions.c:ofpact_get_DEC_TTL:
 1289|  2.13k|    {                                                                   \
 1290|  2.13k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  2.13k|#define ovs_assert ovs_ignore
  ------------------
 1291|  2.13k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  2.13k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  2.13k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_MPLS_LABEL:
 1289|  2.10k|    {                                                                   \
 1290|  2.10k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  2.10k|#define ovs_assert ovs_ignore
  ------------------
 1291|  2.10k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  2.10k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  2.10k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_MPLS_TC:
 1289|    536|    {                                                                   \
 1290|    536|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    536|#define ovs_assert ovs_ignore
  ------------------
 1291|    536|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    536|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    536|    }                                                                   \
ofp-actions.c:ofpact_get_SET_MPLS_TTL:
 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_DEC_MPLS_TTL:
 1289|  3.98k|    {                                                                   \
 1290|  3.98k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  3.98k|#define ovs_assert ovs_ignore
  ------------------
 1291|  3.98k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  3.98k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  3.98k|    }                                                                   \
ofp-actions.c:ofpact_get_PUSH_MPLS:
 1289|  6.51k|    {                                                                   \
 1290|  6.51k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  6.51k|#define ovs_assert ovs_ignore
  ------------------
 1291|  6.51k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  6.51k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  6.51k|    }                                                                   \
ofp-actions.c:ofpact_get_POP_MPLS:
 1289|  3.79k|    {                                                                   \
 1290|  3.79k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  3.79k|#define ovs_assert ovs_ignore
  ------------------
 1291|  3.79k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  3.79k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  3.79k|    }                                                                   \
ofp-actions.c:ofpact_get_DEC_NSH_TTL:
 1289|    674|    {                                                                   \
 1290|    674|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    674|#define ovs_assert ovs_ignore
  ------------------
 1291|    674|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    674|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    674|    }                                                                   \
ofp-actions.c:ofpact_get_DELETE_FIELD:
 1289|     55|    {                                                                   \
 1290|     55|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     55|#define ovs_assert ovs_ignore
  ------------------
 1291|     55|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     55|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     55|    }                                                                   \
ofp-actions.c:ofpact_get_ENCAP:
 1289|  1.23k|    {                                                                   \
 1290|  1.23k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  1.23k|#define ovs_assert ovs_ignore
  ------------------
 1291|  1.23k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  1.23k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  1.23k|    }                                                                   \
ofp-actions.c:ofpact_get_DECAP:
 1289|  8.42k|    {                                                                   \
 1290|  8.42k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  8.42k|#define ovs_assert ovs_ignore
  ------------------
 1291|  8.42k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  8.42k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  8.42k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_TUNNEL:
 1289|     44|    {                                                                   \
 1290|     44|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     44|#define ovs_assert ovs_ignore
  ------------------
 1291|     44|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     44|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     44|    }                                                                   \
ofp-actions.c:ofpact_get_SET_QUEUE:
 1289|    109|    {                                                                   \
 1290|    109|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    109|#define ovs_assert ovs_ignore
  ------------------
 1291|    109|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    109|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    109|    }                                                                   \
ofp-actions.c:ofpact_get_POP_QUEUE:
 1289|     24|    {                                                                   \
 1290|     24|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     24|#define ovs_assert ovs_ignore
  ------------------
 1291|     24|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     24|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     24|    }                                                                   \
ofp-actions.c:ofpact_get_FIN_TIMEOUT:
 1289|    172|    {                                                                   \
 1290|    172|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    172|#define ovs_assert ovs_ignore
  ------------------
 1291|    172|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    172|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    172|    }                                                                   \
ofp-actions.c:ofpact_get_RESUBMIT:
 1289|    129|    {                                                                   \
 1290|    129|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    129|#define ovs_assert ovs_ignore
  ------------------
 1291|    129|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    129|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    129|    }                                                                   \
ofp-actions.c:ofpact_get_LEARN:
 1289|  17.6k|    {                                                                   \
 1290|  17.6k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  17.6k|#define ovs_assert ovs_ignore
  ------------------
 1291|  17.6k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  17.6k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  17.6k|    }                                                                   \
ofp-actions.c:ofpact_get_CONJUNCTION:
 1289|    137|    {                                                                   \
 1290|    137|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    137|#define ovs_assert ovs_ignore
  ------------------
 1291|    137|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    137|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    137|    }                                                                   \
ofp-actions.c:ofpact_get_MULTIPATH:
 1289|    424|    {                                                                   \
 1290|    424|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    424|#define ovs_assert ovs_ignore
  ------------------
 1291|    424|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    424|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    424|    }                                                                   \
ofp-actions.c:ofpact_get_NOTE:
 1289|    132|    {                                                                   \
 1290|    132|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    132|#define ovs_assert ovs_ignore
  ------------------
 1291|    132|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    132|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    132|    }                                                                   \
ofp-actions.c:ofpact_get_EXIT:
 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-actions.c:ofpact_get_SAMPLE:
 1289|     18|    {                                                                   \
 1290|     18|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     18|#define ovs_assert ovs_ignore
  ------------------
 1291|     18|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     18|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     18|    }                                                                   \
ofp-actions.c:ofpact_ct_get_action_len:
  723|  6.86k|{
  724|       |    return oc->ofpact.len - offsetof(struct ofpact_conntrack, actions);
  725|  6.86k|}
ofp-actions.c:ofpact_get_CT_CLEAR:
 1289|     95|    {                                                                   \
 1290|     95|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     95|#define ovs_assert ovs_ignore
  ------------------
 1291|     95|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     95|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     95|    }                                                                   \
ofp-actions.c:ofpact_get_OUTPUT_TRUNC:
 1289|  1.49k|    {                                                                   \
 1290|  1.49k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  1.49k|#define ovs_assert ovs_ignore
  ------------------
 1291|  1.49k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  1.49k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  1.49k|    }                                                                   \
ofp-actions.c:ofpact_nest_get_action_len:
  673|  18.7k|{
  674|       |    return on->ofpact.len - offsetof(struct ofpact_nest, actions);
  675|  18.7k|}
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|    294|    {                                                                   \
 1290|    294|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    294|#define ovs_assert ovs_ignore
  ------------------
 1291|    294|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    294|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    294|    }                                                                   \
ofp-actions.c:ofpact_get_WRITE_METADATA:
 1289|    236|    {                                                                   \
 1290|    236|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    236|#define ovs_assert ovs_ignore
  ------------------
 1291|    236|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    236|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    236|    }                                                                   \
ofp-actions.c:ofpact_get_GOTO_TABLE:
 1289|     64|    {                                                                   \
 1290|     64|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     64|#define ovs_assert ovs_ignore
  ------------------
 1291|     64|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     64|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     64|    }                                                                   \
ofp-actions.c:ofpact_get_GROUP:
 1289|    671|    {                                                                   \
 1290|    671|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    671|#define ovs_assert ovs_ignore
  ------------------
 1291|    671|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    671|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    671|    }                                                                   \
ofp-actions.c:ofpact_get_METER:
 1289|    340|    {                                                                   \
 1290|    340|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    340|#define ovs_assert ovs_ignore
  ------------------
 1291|    340|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    340|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    340|    }                                                                   \
ofp-packet.c:ofpact_put_UNROLL_XLATE:
 1303|  4.61k|    {                                                                   \
 1304|  4.61k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  4.61k|                                            sizeof(struct STRUCT));     \
 1306|  4.61k|    }                                                                   \
learn.c:ofpact_learn_spec_end:
  894|   103k|{
  895|   103k|    return ALIGNED_CAST(const struct ofpact_learn_spec *,
  ------------------
  |  |  434|   103k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  896|   103k|                        ofpact_next(&learn->ofpact));
  897|   103k|}
learn.c:ofpact_next:
  212|   103k|{
  213|   103k|    return ALIGNED_CAST(struct ofpact *,
  ------------------
  |  |  434|   103k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  214|   103k|                        (uint8_t *) ofpact + OFPACT_ALIGN(ofpact->len));
  215|   103k|}
learn.c:ofpact_learn_spec_imm:
  850|  66.5k|{
  851|  66.5k|    return spec + 1;
  852|  66.5k|}
learn.c:ofpact_learn_spec_next:
  856|  68.0k|{
  857|  68.0k|    if (spec->src_type == NX_LEARN_SRC_IMMEDIATE) {
  ------------------
  |  |  822|  68.0k|#define NX_LEARN_SRC_IMMEDIATE (1 << 13) /* Copy from immediate value. */
  ------------------
  |  Branch (857:9): [True: 67.6k, False: 415]
  ------------------
  858|  67.6k|        unsigned int n_bytes = OFPACT_ALIGN(DIV_ROUND_UP(spec->n_bits, 8));
  ------------------
  |  |  205|  67.6k|#define OFPACT_ALIGN(SIZE) ROUND_UP(SIZE, OFPACT_ALIGNTO)
  |  |  ------------------
  |  |  |  |  303|  67.6k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|  67.6k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  859|  67.6k|        return ALIGNED_CAST(const struct ofpact_learn_spec *,
  ------------------
  |  |  434|  67.6k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  860|  67.6k|                            (const uint8_t *)(spec + 1) + n_bytes);
  861|  67.6k|    }
  862|    415|    return spec + 1;
  863|  68.0k|}

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

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

ofp_print_target.c:ofpbuf_at:
  183|  4.19M|{
  184|  4.19M|    if (offset + size <= b->size) {
  ------------------
  |  Branch (184:9): [True: 4.15M, False: 32.2k]
  ------------------
  185|  4.15M|        ovs_assert(b->data);
  ------------------
  |  |   62|  4.15M|#define ovs_assert ovs_ignore
  ------------------
  186|  4.15M|        return (char *) b->data + offset;
  187|  4.15M|    }
  188|  32.2k|    return NULL;
  189|  4.19M|}
ofp_print_target.c:ofpbuf_pull:
  258|  2.07M|{
  259|  2.07M|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  2.07M|#define ovs_assert ovs_ignore
  ------------------
  260|  2.07M|    void *data = b->data;
  261|       |
  262|  2.07M|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 2.07M]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  2.07M|    b->data = (char*)b->data + size;
  267|  2.07M|    b->size = b->size - size;
  268|  2.07M|    return data;
  269|  2.07M|}
ofp-print.c:ofpbuf_const_initializer:
   97|  75.7k|{
   98|  75.7k|    return (struct ofpbuf) {
   99|  75.7k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  75.7k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  75.7k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  75.7k|     (TYPE) (POINTER))
  ------------------
  100|  75.7k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  75.7k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  75.7k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  75.7k|     (TYPE) (POINTER))
  ------------------
  101|  75.7k|        .size = size,
  102|  75.7k|        .allocated = size,
  103|  75.7k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  75.7k|        .list_node = OVS_LIST_POISON,
  106|  75.7k|        .source = OFPBUF_STACK,
  107|  75.7k|    };
  108|  75.7k|}
ofp-protocol.c:ofpbuf_const_initializer:
   97|  1.16k|{
   98|  1.16k|    return (struct ofpbuf) {
   99|  1.16k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  1.16k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  1.16k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  1.16k|     (TYPE) (POINTER))
  ------------------
  100|  1.16k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  1.16k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  1.16k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  1.16k|     (TYPE) (POINTER))
  ------------------
  101|  1.16k|        .size = size,
  102|  1.16k|        .allocated = size,
  103|  1.16k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  1.16k|        .list_node = OVS_LIST_POISON,
  106|  1.16k|        .source = OFPBUF_STACK,
  107|  1.16k|    };
  108|  1.16k|}
ofp-protocol.c:ofpbuf_pull:
  258|  1.16k|{
  259|  1.16k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  1.16k|#define ovs_assert ovs_ignore
  ------------------
  260|  1.16k|    void *data = b->data;
  261|       |
  262|  1.16k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 1.16k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  1.16k|    b->data = (char*)b->data + size;
  267|  1.16k|    b->size = b->size - size;
  268|  1.16k|    return data;
  269|  1.16k|}
ofp-queue.c:ofpbuf_const_initializer:
   97|  31.7k|{
   98|  31.7k|    return (struct ofpbuf) {
   99|  31.7k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  31.7k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  31.7k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  31.7k|     (TYPE) (POINTER))
  ------------------
  100|  31.7k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  31.7k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  31.7k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  31.7k|     (TYPE) (POINTER))
  ------------------
  101|  31.7k|        .size = size,
  102|  31.7k|        .allocated = size,
  103|  31.7k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  31.7k|        .list_node = OVS_LIST_POISON,
  106|  31.7k|        .source = OFPBUF_STACK,
  107|  31.7k|    };
  108|  31.7k|}
ofp-queue.c:ofpbuf_pull:
  258|  62.8k|{
  259|  62.8k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  62.8k|#define ovs_assert ovs_ignore
  ------------------
  260|  62.8k|    void *data = b->data;
  261|       |
  262|  62.8k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 9.42k, False: 53.3k]
  ------------------
  263|  9.42k|        return data;
  264|  9.42k|    }
  265|       |
  266|  53.3k|    b->data = (char*)b->data + size;
  267|  53.3k|    b->size = b->size - size;
  268|  53.3k|    return data;
  269|  62.8k|}
ofp-queue.c:ofpbuf_at_assert:
  195|  6.16k|{
  196|  6.16k|    ovs_assert(offset + size <= b->size);
  ------------------
  |  |   62|  6.16k|#define ovs_assert ovs_ignore
  ------------------
  197|  6.16k|    ovs_assert(b->data);
  ------------------
  |  |   62|  6.16k|#define ovs_assert ovs_ignore
  ------------------
  198|  6.16k|    return (char *) b->data + offset;
  199|  6.16k|}
ofp-queue.c:ofpbuf_try_pull:
  275|  40.9k|{
  276|  40.9k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 39.8k, False: 1.07k]
  ------------------
  277|  40.9k|}
ofp-switch.c:ofpbuf_pull:
  258|  10.7k|{
  259|  10.7k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  10.7k|#define ovs_assert ovs_ignore
  ------------------
  260|  10.7k|    void *data = b->data;
  261|       |
  262|  10.7k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 10.7k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  10.7k|    b->data = (char*)b->data + size;
  267|  10.7k|    b->size = b->size - size;
  268|  10.7k|    return data;
  269|  10.7k|}
ofp-switch.c:ofpbuf_const_initializer:
   97|  6.35k|{
   98|  6.35k|    return (struct ofpbuf) {
   99|  6.35k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  6.35k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  6.35k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  6.35k|     (TYPE) (POINTER))
  ------------------
  100|  6.35k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  6.35k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  6.35k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  6.35k|     (TYPE) (POINTER))
  ------------------
  101|  6.35k|        .size = size,
  102|  6.35k|        .allocated = size,
  103|  6.35k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  6.35k|        .list_node = OVS_LIST_POISON,
  106|  6.35k|        .source = OFPBUF_STACK,
  107|  6.35k|    };
  108|  6.35k|}
ofp-table.c:ofpbuf_const_initializer:
   97|  24.9k|{
   98|  24.9k|    return (struct ofpbuf) {
   99|  24.9k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  24.9k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  24.9k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  24.9k|     (TYPE) (POINTER))
  ------------------
  100|  24.9k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  24.9k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  24.9k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  24.9k|     (TYPE) (POINTER))
  ------------------
  101|  24.9k|        .size = size,
  102|  24.9k|        .allocated = size,
  103|  24.9k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  24.9k|        .list_node = OVS_LIST_POISON,
  106|  24.9k|        .source = OFPBUF_STACK,
  107|  24.9k|    };
  108|  24.9k|}
ofp-table.c:ofpbuf_pull:
  258|  92.4k|{
  259|  92.4k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  92.4k|#define ovs_assert ovs_ignore
  ------------------
  260|  92.4k|    void *data = b->data;
  261|       |
  262|  92.4k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 1.61k, False: 90.8k]
  ------------------
  263|  1.61k|        return data;
  264|  1.61k|    }
  265|       |
  266|  90.8k|    b->data = (char*)b->data + size;
  267|  90.8k|    b->size = b->size - size;
  268|  90.8k|    return data;
  269|  92.4k|}
ofp-table.c:ofpbuf_try_pull:
  275|  34.1k|{
  276|  34.1k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 34.1k, False: 0]
  ------------------
  277|  34.1k|}
ofp-util.c:ofpbuf_const_initializer:
   97|  43.6k|{
   98|  43.6k|    return (struct ofpbuf) {
   99|  43.6k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  43.6k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  43.6k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  43.6k|     (TYPE) (POINTER))
  ------------------
  100|  43.6k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  43.6k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  43.6k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  43.6k|     (TYPE) (POINTER))
  ------------------
  101|  43.6k|        .size = size,
  102|  43.6k|        .allocated = size,
  103|  43.6k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  43.6k|        .list_node = OVS_LIST_POISON,
  106|  43.6k|        .source = OFPBUF_STACK,
  107|  43.6k|    };
  108|  43.6k|}
ofp-util.c:ofpbuf_pull:
  258|  56.7k|{
  259|  56.7k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  56.7k|#define ovs_assert ovs_ignore
  ------------------
  260|  56.7k|    void *data = b->data;
  261|       |
  262|  56.7k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 56.7k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  56.7k|    b->data = (char*)b->data + size;
  267|  56.7k|    b->size = b->size - size;
  268|  56.7k|    return data;
  269|  56.7k|}
ofp-util.c:ofpbuf_try_pull:
  275|  37.8k|{
  276|  37.8k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 13.1k, False: 24.7k]
  ------------------
  277|  37.8k|}
ofpbuf.c:ofpbuf_tailroom:
  228|  1.16M|{
  229|  1.16M|    return (char*)ofpbuf_end(b) - (char*)ofpbuf_tail(b);
  230|  1.16M|}
ofpbuf.c:ofpbuf_end:
  211|  1.16M|{
  212|  1.16M|    ovs_assert(b->base || !b->allocated);
  ------------------
  |  |   62|  1.16M|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (212:16): [True: 742k, False: 425k]
  |  Branch (212:27): [True: 425k, False: 0]
  ------------------
  213|  1.16M|    return b->base ? (char *) b->base + b->allocated : NULL;
  ------------------
  |  Branch (213:12): [True: 742k, False: 425k]
  ------------------
  214|  1.16M|}
ofpbuf.c:ofpbuf_headroom:
  221|  1.13M|{
  222|  1.13M|    return (char*)b->data - (char*)b->base;
  223|  1.13M|}
ofpbuf.c:ofpbuf_tail:
  203|  1.67M|{
  204|  1.67M|    ovs_assert(b->data || !b->size);
  ------------------
  |  |   62|  1.67M|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (204:16): [True: 1.22M, False: 444k]
  |  Branch (204:27): [True: 444k, False: 0]
  ------------------
  205|  1.67M|    return b->data ? (char *) b->data + b->size : NULL;
  ------------------
  |  Branch (205:12): [True: 1.22M, False: 444k]
  ------------------
  206|  1.67M|}
nx-match.c:ofpbuf_try_pull:
  275|   514k|{
  276|   514k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 480k, False: 34.6k]
  ------------------
  277|   514k|}
nx-match.c:ofpbuf_pull:
  258|   878k|{
  259|   878k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|   878k|#define ovs_assert ovs_ignore
  ------------------
  260|   878k|    void *data = b->data;
  261|       |
  262|   878k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 160k, False: 717k]
  ------------------
  263|   160k|        return data;
  264|   160k|    }
  265|       |
  266|   717k|    b->data = (char*)b->data + size;
  267|   717k|    b->size = b->size - size;
  268|   717k|    return data;
  269|   878k|}
nx-match.c:ofpbuf_const_initializer:
   97|   174k|{
   98|   174k|    return (struct ofpbuf) {
   99|   174k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|   174k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   174k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   174k|     (TYPE) (POINTER))
  ------------------
  100|   174k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|   174k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   174k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   174k|     (TYPE) (POINTER))
  ------------------
  101|   174k|        .size = size,
  102|   174k|        .allocated = size,
  103|   174k|        .header = NULL,
  104|       |        .msg = NULL,
  105|   174k|        .list_node = OVS_LIST_POISON,
  106|   174k|        .source = OFPBUF_STACK,
  107|   174k|    };
  108|   174k|}
nx-match.c:ofpbuf_tail:
  203|  4.70k|{
  204|  4.70k|    ovs_assert(b->data || !b->size);
  ------------------
  |  |   62|  4.70k|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (204:16): [True: 4.70k, False: 0]
  |  Branch (204:27): [True: 0, False: 0]
  ------------------
  205|  4.70k|    return b->data ? (char *) b->data + b->size : NULL;
  ------------------
  |  Branch (205:12): [True: 4.70k, False: 0]
  ------------------
  206|  4.70k|}
ofp-actions.c:ofpbuf_clear:
  250|   172k|{
  251|   172k|    b->data = b->base;
  252|   172k|    b->size = 0;
  253|   172k|}
ofp-actions.c:ofpbuf_try_pull:
  275|   199k|{
  276|   199k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 197k, False: 1.71k]
  ------------------
  277|   199k|}
ofp-actions.c:ofpbuf_pull:
  258|   480k|{
  259|   480k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|   480k|#define ovs_assert ovs_ignore
  ------------------
  260|   480k|    void *data = b->data;
  261|       |
  262|   480k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 45.5k, False: 435k]
  ------------------
  263|  45.5k|        return data;
  264|  45.5k|    }
  265|       |
  266|   435k|    b->data = (char*)b->data + size;
  267|   435k|    b->size = b->size - size;
  268|   435k|    return data;
  269|   480k|}
ofp-actions.c:ofpbuf_const_initializer:
   97|  33.7k|{
   98|  33.7k|    return (struct ofpbuf) {
   99|  33.7k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  33.7k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  33.7k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  33.7k|     (TYPE) (POINTER))
  ------------------
  100|  33.7k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  33.7k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  33.7k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  33.7k|     (TYPE) (POINTER))
  ------------------
  101|  33.7k|        .size = size,
  102|  33.7k|        .allocated = size,
  103|  33.7k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  33.7k|        .list_node = OVS_LIST_POISON,
  106|  33.7k|        .source = OFPBUF_STACK,
  107|  33.7k|    };
  108|  33.7k|}
ofp-actions.c:ofpbuf_msgsize:
  244|    162|{
  245|    162|    return (char *)ofpbuf_tail(b) - (char *)b->msg;
  246|    162|}
ofp-actions.c:ofpbuf_at_assert:
  195|  83.1k|{
  196|  83.1k|    ovs_assert(offset + size <= b->size);
  ------------------
  |  |   62|  83.1k|#define ovs_assert ovs_ignore
  ------------------
  197|  83.1k|    ovs_assert(b->data);
  ------------------
  |  |   62|  83.1k|#define ovs_assert ovs_ignore
  ------------------
  198|  83.1k|    return (char *) b->data + offset;
  199|  83.1k|}
ofp-actions.c:ofpbuf_tail:
  203|  60.9k|{
  204|  60.9k|    ovs_assert(b->data || !b->size);
  ------------------
  |  |   62|  60.9k|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (204:16): [True: 60.9k, False: 0]
  |  Branch (204:27): [True: 0, False: 0]
  ------------------
  205|  60.9k|    return b->data ? (char *) b->data + b->size : NULL;
  ------------------
  |  Branch (205:12): [True: 60.9k, False: 0]
  ------------------
  206|  60.9k|}
ofp-bundle.c:ofpbuf_const_initializer:
   97|  8.45k|{
   98|  8.45k|    return (struct ofpbuf) {
   99|  8.45k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  8.45k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  8.45k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  8.45k|     (TYPE) (POINTER))
  ------------------
  100|  8.45k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  8.45k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  8.45k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  8.45k|     (TYPE) (POINTER))
  ------------------
  101|  8.45k|        .size = size,
  102|  8.45k|        .allocated = size,
  103|  8.45k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  8.45k|        .list_node = OVS_LIST_POISON,
  106|  8.45k|        .source = OFPBUF_STACK,
  107|  8.45k|    };
  108|  8.45k|}
ofp-bundle.c:ofpbuf_pull:
  258|  4.62k|{
  259|  4.62k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  4.62k|#define ovs_assert ovs_ignore
  ------------------
  260|  4.62k|    void *data = b->data;
  261|       |
  262|  4.62k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 4.62k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  4.62k|    b->data = (char*)b->data + size;
  267|  4.62k|    b->size = b->size - size;
  268|  4.62k|    return data;
  269|  4.62k|}
ofp-connection.c:ofpbuf_const_initializer:
   97|  28.8k|{
   98|  28.8k|    return (struct ofpbuf) {
   99|  28.8k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  28.8k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  28.8k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  28.8k|     (TYPE) (POINTER))
  ------------------
  100|  28.8k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  28.8k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  28.8k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  28.8k|     (TYPE) (POINTER))
  ------------------
  101|  28.8k|        .size = size,
  102|  28.8k|        .allocated = size,
  103|  28.8k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  28.8k|        .list_node = OVS_LIST_POISON,
  106|  28.8k|        .source = OFPBUF_STACK,
  107|  28.8k|    };
  108|  28.8k|}
ofp-ct.c:ofpbuf_const_initializer:
   97|  13.5k|{
   98|  13.5k|    return (struct ofpbuf) {
   99|  13.5k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  13.5k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  13.5k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  13.5k|     (TYPE) (POINTER))
  ------------------
  100|  13.5k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  13.5k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  13.5k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  13.5k|     (TYPE) (POINTER))
  ------------------
  101|  13.5k|        .size = size,
  102|  13.5k|        .allocated = size,
  103|  13.5k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  13.5k|        .list_node = OVS_LIST_POISON,
  106|  13.5k|        .source = OFPBUF_STACK,
  107|  13.5k|    };
  108|  13.5k|}
ofp-ct.c:ofpbuf_pull:
  258|  13.5k|{
  259|  13.5k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  13.5k|#define ovs_assert ovs_ignore
  ------------------
  260|  13.5k|    void *data = b->data;
  261|       |
  262|  13.5k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 13.5k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  13.5k|    b->data = (char*)b->data + size;
  267|  13.5k|    b->size = b->size - size;
  268|  13.5k|    return data;
  269|  13.5k|}
ofp-ct.c:ofpbuf_msgsize:
  244|  11.6k|{
  245|  11.6k|    return (char *)ofpbuf_tail(b) - (char *)b->msg;
  246|  11.6k|}
ofp-ct.c:ofpbuf_tail:
  203|  11.6k|{
  204|  11.6k|    ovs_assert(b->data || !b->size);
  ------------------
  |  |   62|  11.6k|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (204:16): [True: 11.6k, False: 0]
  |  Branch (204:27): [True: 0, False: 0]
  ------------------
  205|  11.6k|    return b->data ? (char *) b->data + b->size : NULL;
  ------------------
  |  Branch (205:12): [True: 11.6k, False: 0]
  ------------------
  206|  11.6k|}
ofp-errors.c:ofpbuf_const_initializer:
   97|   771k|{
   98|   771k|    return (struct ofpbuf) {
   99|   771k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|   771k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   771k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   771k|     (TYPE) (POINTER))
  ------------------
  100|   771k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|   771k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   771k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   771k|     (TYPE) (POINTER))
  ------------------
  101|   771k|        .size = size,
  102|   771k|        .allocated = size,
  103|   771k|        .header = NULL,
  104|       |        .msg = NULL,
  105|   771k|        .list_node = OVS_LIST_POISON,
  106|   771k|        .source = OFPBUF_STACK,
  107|   771k|    };
  108|   771k|}
ofp-errors.c:ofpbuf_pull:
  258|   934k|{
  259|   934k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|   934k|#define ovs_assert ovs_ignore
  ------------------
  260|   934k|    void *data = b->data;
  261|       |
  262|   934k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 934k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|   934k|    b->data = (char*)b->data + size;
  267|   934k|    b->size = b->size - size;
  268|   934k|    return data;
  269|   934k|}
ofp-errors.c:ofpbuf_try_pull:
  275|   170k|{
  276|   170k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 162k, False: 8.46k]
  ------------------
  277|   170k|}
ofp-flow.c:ofpbuf_const_initializer:
   97|  92.9k|{
   98|  92.9k|    return (struct ofpbuf) {
   99|  92.9k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  92.9k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  92.9k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  92.9k|     (TYPE) (POINTER))
  ------------------
  100|  92.9k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  92.9k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  92.9k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  92.9k|     (TYPE) (POINTER))
  ------------------
  101|  92.9k|        .size = size,
  102|  92.9k|        .allocated = size,
  103|  92.9k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  92.9k|        .list_node = OVS_LIST_POISON,
  106|  92.9k|        .source = OFPBUF_STACK,
  107|  92.9k|    };
  108|  92.9k|}
ofp-flow.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-flow.c:ofpbuf_try_pull:
  275|  22.6k|{
  276|  22.6k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 17.5k, False: 5.03k]
  ------------------
  277|  22.6k|}
ofp-group.c:ofpbuf_const_initializer:
   97|  98.7k|{
   98|  98.7k|    return (struct ofpbuf) {
   99|  98.7k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  98.7k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  98.7k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  98.7k|     (TYPE) (POINTER))
  ------------------
  100|  98.7k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  98.7k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  98.7k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  98.7k|     (TYPE) (POINTER))
  ------------------
  101|  98.7k|        .size = size,
  102|  98.7k|        .allocated = size,
  103|  98.7k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  98.7k|        .list_node = OVS_LIST_POISON,
  106|  98.7k|        .source = OFPBUF_STACK,
  107|  98.7k|    };
  108|  98.7k|}
ofp-group.c:ofpbuf_pull:
  258|   141k|{
  259|   141k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|   141k|#define ovs_assert ovs_ignore
  ------------------
  260|   141k|    void *data = b->data;
  261|       |
  262|   141k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 10.0k, False: 131k]
  ------------------
  263|  10.0k|        return data;
  264|  10.0k|    }
  265|       |
  266|   131k|    b->data = (char*)b->data + size;
  267|   131k|    b->size = b->size - size;
  268|   131k|    return data;
  269|   141k|}
ofp-group.c:ofpbuf_try_pull:
  275|  44.8k|{
  276|  44.8k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 43.6k, False: 1.24k]
  ------------------
  277|  44.8k|}
ofp-ipfix.c:ofpbuf_try_pull:
  275|  8.27k|{
  276|  8.27k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 8.27k, False: 0]
  ------------------
  277|  8.27k|}
ofp-ipfix.c:ofpbuf_pull:
  258|  8.27k|{
  259|  8.27k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  8.27k|#define ovs_assert ovs_ignore
  ------------------
  260|  8.27k|    void *data = b->data;
  261|       |
  262|  8.27k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 8.27k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  8.27k|    b->data = (char*)b->data + size;
  267|  8.27k|    b->size = b->size - size;
  268|  8.27k|    return data;
  269|  8.27k|}
ofp-ipfix.c:ofpbuf_const_initializer:
   97|  2.01k|{
   98|  2.01k|    return (struct ofpbuf) {
   99|  2.01k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  2.01k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  2.01k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  2.01k|     (TYPE) (POINTER))
  ------------------
  100|  2.01k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  2.01k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  2.01k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  2.01k|     (TYPE) (POINTER))
  ------------------
  101|  2.01k|        .size = size,
  102|  2.01k|        .allocated = size,
  103|  2.01k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  2.01k|        .list_node = OVS_LIST_POISON,
  106|  2.01k|        .source = OFPBUF_STACK,
  107|  2.01k|    };
  108|  2.01k|}
ofp-match.c:ofpbuf_pull:
  258|  19.7k|{
  259|  19.7k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  19.7k|#define ovs_assert ovs_ignore
  ------------------
  260|  19.7k|    void *data = b->data;
  261|       |
  262|  19.7k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 19.7k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  19.7k|    b->data = (char*)b->data + size;
  267|  19.7k|    b->size = b->size - size;
  268|  19.7k|    return data;
  269|  19.7k|}
ofp-match.c:ofpbuf_const_initializer:
   97|  4.32k|{
   98|  4.32k|    return (struct ofpbuf) {
   99|  4.32k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  4.32k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  4.32k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  4.32k|     (TYPE) (POINTER))
  ------------------
  100|  4.32k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  4.32k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  4.32k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  4.32k|     (TYPE) (POINTER))
  ------------------
  101|  4.32k|        .size = size,
  102|  4.32k|        .allocated = size,
  103|  4.32k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  4.32k|        .list_node = OVS_LIST_POISON,
  106|  4.32k|        .source = OFPBUF_STACK,
  107|  4.32k|    };
  108|  4.32k|}
ofp-meter.c:ofpbuf_const_initializer:
   97|  7.27k|{
   98|  7.27k|    return (struct ofpbuf) {
   99|  7.27k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  7.27k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  7.27k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  7.27k|     (TYPE) (POINTER))
  ------------------
  100|  7.27k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  7.27k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  7.27k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  7.27k|     (TYPE) (POINTER))
  ------------------
  101|  7.27k|        .size = size,
  102|  7.27k|        .allocated = size,
  103|  7.27k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  7.27k|        .list_node = OVS_LIST_POISON,
  106|  7.27k|        .source = OFPBUF_STACK,
  107|  7.27k|    };
  108|  7.27k|}
ofp-meter.c:ofpbuf_pull:
  258|  18.2k|{
  259|  18.2k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  18.2k|#define ovs_assert ovs_ignore
  ------------------
  260|  18.2k|    void *data = b->data;
  261|       |
  262|  18.2k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 2.91k, False: 15.3k]
  ------------------
  263|  2.91k|        return data;
  264|  2.91k|    }
  265|       |
  266|  15.3k|    b->data = (char*)b->data + size;
  267|  15.3k|    b->size = b->size - size;
  268|  15.3k|    return data;
  269|  18.2k|}
ofp-meter.c:ofpbuf_try_pull:
  275|  12.2k|{
  276|  12.2k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 11.0k, False: 1.24k]
  ------------------
  277|  12.2k|}
ofp-meter.c:ofpbuf_clear:
  250|  3.64k|{
  251|  3.64k|    b->data = b->base;
  252|  3.64k|    b->size = 0;
  253|  3.64k|}
ofp-monitor.c:ofpbuf_const_initializer:
   97|  10.4k|{
   98|  10.4k|    return (struct ofpbuf) {
   99|  10.4k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  10.4k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  10.4k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  10.4k|     (TYPE) (POINTER))
  ------------------
  100|  10.4k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  10.4k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  10.4k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  10.4k|     (TYPE) (POINTER))
  ------------------
  101|  10.4k|        .size = size,
  102|  10.4k|        .allocated = size,
  103|  10.4k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  10.4k|        .list_node = OVS_LIST_POISON,
  106|  10.4k|        .source = OFPBUF_STACK,
  107|  10.4k|    };
  108|  10.4k|}
ofp-monitor.c:ofpbuf_pull:
  258|  25.3k|{
  259|  25.3k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  25.3k|#define ovs_assert ovs_ignore
  ------------------
  260|  25.3k|    void *data = b->data;
  261|       |
  262|  25.3k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 25.3k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  25.3k|    b->data = (char*)b->data + size;
  267|  25.3k|    b->size = b->size - size;
  268|  25.3k|    return data;
  269|  25.3k|}
ofp-monitor.c:ofpbuf_try_pull:
  275|  9.68k|{
  276|  9.68k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 8.72k, False: 955]
  ------------------
  277|  9.68k|}
ofp-monitor.c:ofpbuf_clear:
  250|  15.1k|{
  251|  15.1k|    b->data = b->base;
  252|  15.1k|    b->size = 0;
  253|  15.1k|}
ofp-msgs.c:ofpbuf_const_initializer:
   97|  2.21M|{
   98|  2.21M|    return (struct ofpbuf) {
   99|  2.21M|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  2.21M|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  2.21M|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  2.21M|     (TYPE) (POINTER))
  ------------------
  100|  2.21M|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  2.21M|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  2.21M|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  2.21M|     (TYPE) (POINTER))
  ------------------
  101|  2.21M|        .size = size,
  102|  2.21M|        .allocated = size,
  103|  2.21M|        .header = NULL,
  104|       |        .msg = NULL,
  105|  2.21M|        .list_node = OVS_LIST_POISON,
  106|  2.21M|        .source = OFPBUF_STACK,
  107|  2.21M|    };
  108|  2.21M|}
ofp-msgs.c:ofpbuf_pull:
  258|  3.01M|{
  259|  3.01M|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  3.01M|#define ovs_assert ovs_ignore
  ------------------
  260|  3.01M|    void *data = b->data;
  261|       |
  262|  3.01M|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 3.01M]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  3.01M|    b->data = (char*)b->data + size;
  267|  3.01M|    b->size = b->size - size;
  268|  3.01M|    return data;
  269|  3.01M|}
ofp-packet.c:ofpbuf_const_initializer:
   97|   267k|{
   98|   267k|    return (struct ofpbuf) {
   99|   267k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|   267k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   267k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   267k|     (TYPE) (POINTER))
  ------------------
  100|   267k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|   267k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   267k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   267k|     (TYPE) (POINTER))
  ------------------
  101|   267k|        .size = size,
  102|   267k|        .allocated = size,
  103|   267k|        .header = NULL,
  104|       |        .msg = NULL,
  105|   267k|        .list_node = OVS_LIST_POISON,
  106|   267k|        .source = OFPBUF_STACK,
  107|   267k|    };
  108|   267k|}
ofp-packet.c:ofpbuf_pull:
  258|   289k|{
  259|   289k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|   289k|#define ovs_assert ovs_ignore
  ------------------
  260|   289k|    void *data = b->data;
  261|       |
  262|   289k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 289k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|   289k|    b->data = (char*)b->data + size;
  267|   289k|    b->size = b->size - size;
  268|   289k|    return data;
  269|   289k|}
ofp-packet.c:ofpbuf_try_pull:
  275|  38.8k|{
  276|  38.8k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 36.6k, False: 2.19k]
  ------------------
  277|  38.8k|}
ofp-packet.c:ofpbuf_msgsize:
  244|  20.3k|{
  245|  20.3k|    return (char *)ofpbuf_tail(b) - (char *)b->msg;
  246|  20.3k|}
ofp-packet.c:ofpbuf_tail:
  203|  20.3k|{
  204|  20.3k|    ovs_assert(b->data || !b->size);
  ------------------
  |  |   62|  20.3k|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (204:16): [True: 20.3k, False: 0]
  |  Branch (204:27): [True: 0, False: 0]
  ------------------
  205|  20.3k|    return b->data ? (char *) b->data + b->size : NULL;
  ------------------
  |  Branch (205:12): [True: 20.3k, False: 0]
  ------------------
  206|  20.3k|}
ofp-packet.c:ofpbuf_headersize:
  236|  6.91k|{
  237|  6.91k|    return (char *)b->msg - (char *)b->header;
  238|  6.91k|}
ofp-packet.c:ofpbuf_clear:
  250|   160k|{
  251|   160k|    b->data = b->base;
  252|   160k|    b->size = 0;
  253|   160k|}
ofp-port.c:ofpbuf_const_initializer:
   97|  31.0k|{
   98|  31.0k|    return (struct ofpbuf) {
   99|  31.0k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  31.0k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  31.0k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  31.0k|     (TYPE) (POINTER))
  ------------------
  100|  31.0k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  31.0k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  31.0k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  31.0k|     (TYPE) (POINTER))
  ------------------
  101|  31.0k|        .size = size,
  102|  31.0k|        .allocated = size,
  103|  31.0k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  31.0k|        .list_node = OVS_LIST_POISON,
  106|  31.0k|        .source = OFPBUF_STACK,
  107|  31.0k|    };
  108|  31.0k|}
ofp-port.c:ofpbuf_pull:
  258|   212k|{
  259|   212k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|   212k|#define ovs_assert ovs_ignore
  ------------------
  260|   212k|    void *data = b->data;
  261|       |
  262|   212k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 14.5k, False: 197k]
  ------------------
  263|  14.5k|        return data;
  264|  14.5k|    }
  265|       |
  266|   197k|    b->data = (char*)b->data + size;
  267|   197k|    b->size = b->size - size;
  268|   197k|    return data;
  269|   212k|}
ofp-port.c:ofpbuf_try_pull:
  275|   202k|{
  276|   202k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 193k, False: 8.93k]
  ------------------
  277|   202k|}
ofp-prop.c:ofpbuf_pull:
  258|   194k|{
  259|   194k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|   194k|#define ovs_assert ovs_ignore
  ------------------
  260|   194k|    void *data = b->data;
  261|       |
  262|   194k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 194k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|   194k|    b->data = (char*)b->data + size;
  267|   194k|    b->size = b->size - size;
  268|   194k|    return data;
  269|   194k|}
ofp-prop.c:ofpbuf_msgsize:
  244|  41.3k|{
  245|  41.3k|    return (char *)ofpbuf_tail(b) - (char *)b->msg;
  246|  41.3k|}
ofp-prop.c:ofpbuf_tail:
  203|  41.3k|{
  204|  41.3k|    ovs_assert(b->data || !b->size);
  ------------------
  |  |   62|  41.3k|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (204:16): [True: 41.3k, False: 0]
  |  Branch (204:27): [True: 0, False: 0]
  ------------------
  205|  41.3k|    return b->data ? (char *) b->data + b->size : NULL;
  ------------------
  |  Branch (205:12): [True: 41.3k, False: 0]
  ------------------
  206|  41.3k|}
ofp-prop.c:ofpbuf_headersize:
  236|  20.8k|{
  237|  20.8k|    return (char *)b->msg - (char *)b->header;
  238|  20.8k|}
ox-stat.c:ofpbuf_try_pull:
  275|  14.3k|{
  276|  14.3k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 12.0k, False: 2.29k]
  ------------------
  277|  14.3k|}
ox-stat.c:ofpbuf_pull:
  258|  16.5k|{
  259|  16.5k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  16.5k|#define ovs_assert ovs_ignore
  ------------------
  260|  16.5k|    void *data = b->data;
  261|       |
  262|  16.5k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 1.97k, False: 14.5k]
  ------------------
  263|  1.97k|        return data;
  264|  1.97k|    }
  265|       |
  266|  14.5k|    b->data = (char*)b->data + size;
  267|  14.5k|    b->size = b->size - size;
  268|  14.5k|    return data;
  269|  16.5k|}
ox-stat.c:ofpbuf_const_initializer:
   97|  9.01k|{
   98|  9.01k|    return (struct ofpbuf) {
   99|  9.01k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  9.01k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  9.01k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  9.01k|     (TYPE) (POINTER))
  ------------------
  100|  9.01k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  9.01k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  9.01k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  9.01k|     (TYPE) (POINTER))
  ------------------
  101|  9.01k|        .size = size,
  102|  9.01k|        .allocated = size,
  103|  9.01k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  9.01k|        .list_node = OVS_LIST_POISON,
  106|  9.01k|        .source = OFPBUF_STACK,
  107|  9.01k|    };
  108|  9.01k|}

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

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

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

ofp-table.c:bitmap_n_bytes:
   44|  3.68k|{
   45|  3.68k|    return bitmap_n_longs(n_bits) * sizeof(unsigned long int);
   46|  3.68k|}
ofp-table.c:bitmap_n_longs:
   38|  3.68k|{
   39|  3.68k|    return BITMAP_N_LONGS(n_bits);
  ------------------
  |  |  424|  3.68k|#define BITMAP_N_LONGS(N_BITS) DIV_ROUND_UP(N_BITS, BITMAP_ULONG_BITS)
  |  |  ------------------
  |  |  |  |  300|  3.68k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
   40|  3.68k|}
ofp-table.c:bitmap_set1:
   96|   122k|{
   97|   122k|    *bitmap_unit__(bitmap, offset) |= bitmap_bit__(offset);
   98|   122k|    return bitmap;
   99|   122k|}
ofp-table.c:bitmap_bit__:
   32|   124k|{
   33|       |    return 1UL << (offset % BITMAP_ULONG_BITS);
  ------------------
  |  |  423|   124k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
   34|   124k|}
ofp-table.c:bitmap_unit__:
   26|  1.12M|{
   27|  1.12M|    return CONST_CAST(unsigned long *, &bitmap[offset / BITMAP_ULONG_BITS]);
  ------------------
  |  |   85|  1.12M|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  1.12M|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  1.12M|     (TYPE) (POINTER))
  ------------------
   28|  1.12M|}
ofp-table.c:bitmap_or:
  179|  32.6k|{
  180|  32.6k|    size_t i;
  181|       |
  182|   163k|    for (i = 0; i < BITMAP_N_LONGS(n); i++) {
  ------------------
  |  |  424|   163k|#define BITMAP_N_LONGS(N_BITS) DIV_ROUND_UP(N_BITS, BITMAP_ULONG_BITS)
  |  |  ------------------
  |  |  |  |  300|   163k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (182:17): [True: 130k, False: 32.6k]
  ------------------
  183|   130k|        dst[i] |= arg[i];
  184|   130k|    }
  185|  32.6k|    return dst;
  186|  32.6k|}
ofp-table.c:bitmap_and:
  167|  6.44k|{
  168|  6.44k|    size_t i;
  169|       |
  170|  32.2k|    for (i = 0; i < BITMAP_N_LONGS(n); i++) {
  ------------------
  |  |  424|  32.2k|#define BITMAP_N_LONGS(N_BITS) DIV_ROUND_UP(N_BITS, BITMAP_ULONG_BITS)
  |  |  ------------------
  |  |  |  |  300|  32.2k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (170:17): [True: 25.7k, False: 6.44k]
  ------------------
  171|  25.7k|        dst[i] &= arg[i];
  172|  25.7k|    }
  173|  6.44k|    return dst;
  174|  6.44k|}
ofp-table.c:bitmap_scan:
  227|   600k|{
  228|   600k|    if (OVS_LIKELY(start < end)) {
  ------------------
  |  |   65|   600k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 600k, False: 0]
  |  |  ------------------
  ------------------
  229|   600k|        unsigned long *p, unit;
  230|       |
  231|   600k|        p = bitmap_unit__(bitmap, start);
  232|   600k|        unit = (target ? *p : ~*p) >> (start % BITMAP_ULONG_BITS);
  ------------------
  |  |  423|   600k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (232:17): [True: 600k, False: 0]
  ------------------
  233|   600k|        if (!unit) {
  ------------------
  |  Branch (233:13): [True: 326k, False: 273k]
  ------------------
  234|   326k|            start -= start % BITMAP_ULONG_BITS; /* Round down. */
  ------------------
  |  |  423|   326k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  235|   326k|            start += BITMAP_ULONG_BITS; /* Start of the next unit. */
  ------------------
  |  |  423|   326k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  236|       |
  237|   835k|            for (; start < end; start += BITMAP_ULONG_BITS) {
  ------------------
  |  |  423|   508k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (237:20): [True: 651k, False: 184k]
  ------------------
  238|   651k|                unit = target ? *++p : ~*++p;
  ------------------
  |  Branch (238:24): [True: 651k, False: 0]
  ------------------
  239|   651k|                if (unit) {
  ------------------
  |  Branch (239:21): [True: 142k, False: 508k]
  ------------------
  240|   142k|                    goto found;
  241|   142k|                }
  242|   651k|            }
  243|   184k|            return end;
  244|   326k|        }
  245|   415k|found:
  246|   415k|        start += raw_ctz(unit);  /* unit != 0 */
  247|   415k|        if (OVS_LIKELY(start < end)) {
  ------------------
  |  |   65|   415k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 415k, False: 0]
  |  |  ------------------
  ------------------
  248|   415k|            return start;
  249|   415k|        }
  250|   415k|    }
  251|      0|    return end;
  252|   600k|}
ofp-table.c:bitmap_is_set:
   90|  1.26k|{
   91|  1.26k|    return (*bitmap_unit__(bitmap, offset) & bitmap_bit__(offset)) != 0;
   92|  1.26k|}
ofp-table.c:bitmap_is_all_zeros:
  273|   209k|{
  274|       |    return bitmap_scan(bitmap, true, 0, n) == n;
  275|   209k|}
ofp-table.c:bitmap_equal:
  207|   220k|{
  208|   220k|    if (memcmp(a, b, n / BITMAP_ULONG_BITS * sizeof(unsigned long))) {
  ------------------
  |  |  423|   220k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (208:9): [True: 22.4k, False: 198k]
  ------------------
  209|  22.4k|        return false;
  210|  22.4k|    }
  211|   198k|    if (n % BITMAP_ULONG_BITS) {
  ------------------
  |  |  423|   198k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (211:9): [True: 198k, False: 0]
  ------------------
  212|   198k|        unsigned long mask = (1UL << n % BITMAP_ULONG_BITS) - 1;
  ------------------
  |  |  423|   198k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  213|   198k|        unsigned long diff = *bitmap_unit__(a, n) ^ *bitmap_unit__(b, n);
  214|       |
  215|   198k|        return !(diff & mask);
  216|   198k|    }
  217|      0|    return true;
  218|   198k|}
meta-flow.c:bitmap_scan:
  227|  13.5k|{
  228|  13.5k|    if (OVS_LIKELY(start < end)) {
  ------------------
  |  |   65|  13.5k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 12.8k, False: 653]
  |  |  ------------------
  ------------------
  229|  12.8k|        unsigned long *p, unit;
  230|       |
  231|  12.8k|        p = bitmap_unit__(bitmap, start);
  232|  12.8k|        unit = (target ? *p : ~*p) >> (start % BITMAP_ULONG_BITS);
  ------------------
  |  |  423|  12.8k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (232:17): [True: 12.8k, False: 0]
  ------------------
  233|  12.8k|        if (!unit) {
  ------------------
  |  Branch (233:13): [True: 10.1k, False: 2.68k]
  ------------------
  234|  10.1k|            start -= start % BITMAP_ULONG_BITS; /* Round down. */
  ------------------
  |  |  423|  10.1k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  235|  10.1k|            start += BITMAP_ULONG_BITS; /* Start of the next unit. */
  ------------------
  |  |  423|  10.1k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  236|       |
  237|  15.4k|            for (; start < end; start += BITMAP_ULONG_BITS) {
  ------------------
  |  |  423|  5.27k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (237:20): [True: 7.87k, False: 7.58k]
  ------------------
  238|  7.87k|                unit = target ? *++p : ~*++p;
  ------------------
  |  Branch (238:24): [True: 7.87k, False: 0]
  ------------------
  239|  7.87k|                if (unit) {
  ------------------
  |  Branch (239:21): [True: 2.60k, False: 5.27k]
  ------------------
  240|  2.60k|                    goto found;
  241|  2.60k|                }
  242|  7.87k|            }
  243|  7.58k|            return end;
  244|  10.1k|        }
  245|  5.29k|found:
  246|  5.29k|        start += raw_ctz(unit);  /* unit != 0 */
  247|  5.29k|        if (OVS_LIKELY(start < end)) {
  ------------------
  |  |   65|  5.29k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 4.41k, False: 876]
  |  |  ------------------
  ------------------
  248|  4.41k|            return start;
  249|  4.41k|        }
  250|  5.29k|    }
  251|  1.52k|    return end;
  252|  13.5k|}
meta-flow.c:bitmap_unit__:
   26|  31.1k|{
   27|  31.1k|    return CONST_CAST(unsigned long *, &bitmap[offset / BITMAP_ULONG_BITS]);
  ------------------
  |  |   85|  31.1k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  31.1k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  31.1k|     (TYPE) (POINTER))
  ------------------
   28|  31.1k|}
meta-flow.c:bitmap_is_set:
   90|  9.11k|{
   91|  9.11k|    return (*bitmap_unit__(bitmap, offset) & bitmap_bit__(offset)) != 0;
   92|  9.11k|}
meta-flow.c:bitmap_bit__:
   32|  18.2k|{
   33|       |    return 1UL << (offset % BITMAP_ULONG_BITS);
  ------------------
  |  |  423|  18.2k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
   34|  18.2k|}
meta-flow.c:bitmap_set1:
   96|  9.11k|{
   97|  9.11k|    *bitmap_unit__(bitmap, offset) |= bitmap_bit__(offset);
   98|  9.11k|    return bitmap;
   99|  9.11k|}
meta-flow.c:bitmap_and:
  167|   109k|{
  168|   109k|    size_t i;
  169|       |
  170|   545k|    for (i = 0; i < BITMAP_N_LONGS(n); i++) {
  ------------------
  |  |  424|   545k|#define BITMAP_N_LONGS(N_BITS) DIV_ROUND_UP(N_BITS, BITMAP_ULONG_BITS)
  |  |  ------------------
  |  |  |  |  300|   545k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (170:17): [True: 436k, False: 109k]
  ------------------
  171|   436k|        dst[i] &= arg[i];
  172|   436k|    }
  173|   109k|    return dst;
  174|   109k|}
meta-flow.c:bitmap_not:
  191|  54.5k|{
  192|  54.5k|    size_t i;
  193|       |
  194|   218k|    for (i = 0; i < n / BITMAP_ULONG_BITS; i++) {
  ------------------
  |  |  423|   218k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (194:17): [True: 163k, False: 54.5k]
  ------------------
  195|   163k|        dst[i] = ~dst[i];
  196|   163k|    }
  197|  54.5k|    if (n % BITMAP_ULONG_BITS) {
  ------------------
  |  |  423|  54.5k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (197:9): [True: 54.5k, False: 0]
  ------------------
  198|       |        dst[i] ^= (1UL << (n % BITMAP_ULONG_BITS)) - 1;
  ------------------
  |  |  423|  54.5k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  199|  54.5k|    }
  200|  54.5k|    return dst;
  201|  54.5k|}
nx-match.c:bitmap_is_set:
   90|  9.26k|{
   91|  9.26k|    return (*bitmap_unit__(bitmap, offset) & bitmap_bit__(offset)) != 0;
   92|  9.26k|}
nx-match.c:bitmap_unit__:
   26|   432k|{
   27|   432k|    return CONST_CAST(unsigned long *, &bitmap[offset / BITMAP_ULONG_BITS]);
  ------------------
  |  |   85|   432k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   432k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   432k|     (TYPE) (POINTER))
  ------------------
   28|   432k|}
nx-match.c:bitmap_bit__:
   32|   423k|{
   33|       |    return 1UL << (offset % BITMAP_ULONG_BITS);
  ------------------
  |  |  423|   423k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
   34|   423k|}
nx-match.c:bitmap_scan:
  227|  8.33k|{
  228|  8.33k|    if (OVS_LIKELY(start < end)) {
  ------------------
  |  |   65|  8.33k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 8.17k, False: 160]
  |  |  ------------------
  ------------------
  229|  8.17k|        unsigned long *p, unit;
  230|       |
  231|  8.17k|        p = bitmap_unit__(bitmap, start);
  232|  8.17k|        unit = (target ? *p : ~*p) >> (start % BITMAP_ULONG_BITS);
  ------------------
  |  |  423|  8.17k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (232:17): [True: 8.17k, False: 0]
  ------------------
  233|  8.17k|        if (!unit) {
  ------------------
  |  Branch (233:13): [True: 5.93k, False: 2.24k]
  ------------------
  234|  5.93k|            start -= start % BITMAP_ULONG_BITS; /* Round down. */
  ------------------
  |  |  423|  5.93k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  235|  5.93k|            start += BITMAP_ULONG_BITS; /* Start of the next unit. */
  ------------------
  |  |  423|  5.93k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  236|       |
  237|  8.94k|            for (; start < end; start += BITMAP_ULONG_BITS) {
  ------------------
  |  |  423|  3.01k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (237:20): [True: 6.82k, False: 2.12k]
  ------------------
  238|  6.82k|                unit = target ? *++p : ~*++p;
  ------------------
  |  Branch (238:24): [True: 6.82k, False: 0]
  ------------------
  239|  6.82k|                if (unit) {
  ------------------
  |  Branch (239:21): [True: 3.81k, False: 3.01k]
  ------------------
  240|  3.81k|                    goto found;
  241|  3.81k|                }
  242|  6.82k|            }
  243|  2.12k|            return end;
  244|  5.93k|        }
  245|  6.05k|found:
  246|  6.05k|        start += raw_ctz(unit);  /* unit != 0 */
  247|  6.05k|        if (OVS_LIKELY(start < end)) {
  ------------------
  |  |   65|  6.05k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 6.05k, False: 0]
  |  |  ------------------
  ------------------
  248|  6.05k|            return start;
  249|  6.05k|        }
  250|  6.05k|    }
  251|    160|    return end;
  252|  8.33k|}
nx-match.c:bitmap_set1:
   96|   414k|{
   97|   414k|    *bitmap_unit__(bitmap, offset) |= bitmap_bit__(offset);
   98|   414k|    return bitmap;
   99|   414k|}
ofp-group.c:bitmap_count1:
  153|  2.33k|{
  154|  2.33k|    size_t i;
  155|  2.33k|    size_t count = 0;
  156|       |
  157|  2.33k|    BUILD_ASSERT(ULONG_MAX <= UINT64_MAX);
  ------------------
  |  |  271|  2.33k|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  ------------------
  158|  11.6k|    for (i = 0; i < BITMAP_N_LONGS(n); i++) {
  ------------------
  |  |  424|  11.6k|#define BITMAP_N_LONGS(N_BITS) DIV_ROUND_UP(N_BITS, BITMAP_ULONG_BITS)
  |  |  ------------------
  |  |  |  |  300|  11.6k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (158:17): [True: 9.32k, False: 2.33k]
  ------------------
  159|  9.32k|        count += count_1bits(bitmap[i]);
  160|  9.32k|    }
  161|  2.33k|    return count;
  162|  2.33k|}

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

ofp-queue.c:ntohll:
   35|  32.9k|{
   36|  32.9k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 32.9k]
  ------------------
   37|  32.9k|}
ofp-switch.c:ntohll:
   35|  4.43k|{
   36|  4.43k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 4.43k]
  ------------------
   37|  4.43k|}
ofp-table.c:ntohll:
   35|  95.9k|{
   36|  95.9k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 95.9k]
  ------------------
   37|  95.9k|}
util.c:htonll:
   29|  6.72k|{
   30|  6.72k|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 6.72k]
  ------------------
   31|  6.72k|}
util.c:ntohll:
   35|  1.94k|{
   36|  1.94k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 1.94k]
  ------------------
   37|  1.94k|}
flow.c:be32_to_be16:
  135|  62.3k|static inline ovs_be16 be32_to_be16(ovs_be32 x) { return x >> 16; }
flow.c:bytes_to_be32:
  110|  17.7k|{
  111|       |#if WORDS_BIGENDIAN
  112|       |    uint32_t x = ((uint32_t) b0 << 24) | (b1 << 16) | (b2 << 8) | b3;
  113|       |#else
  114|  17.7k|    uint32_t x = ((uint32_t) b3 << 24) | (b2 << 16) | (b1 << 8) | b0;
  115|  17.7k|#endif
  116|  17.7k|    return (OVS_FORCE ovs_be32) x;
  117|  17.7k|}
match.c:hton128:
   48|    488|{
   49|    488|    ovs_be128 dst;
   50|       |
   51|    488|    dst.be64.hi = htonll(src.u64.hi);
   52|    488|    dst.be64.lo = htonll(src.u64.lo);
   53|    488|    return dst;
   54|    488|}
match.c:htonll:
   29|   406k|{
   30|   406k|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 406k]
  ------------------
   31|   406k|}
match.c:be32_to_be16:
  135|  29.2k|static inline ovs_be16 be32_to_be16(ovs_be32 x) { return x >> 16; }
match.c:ntohll:
   35|  5.20k|{
   36|  5.20k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 5.20k]
  ------------------
   37|  5.20k|}
meta-flow.c:be32_to_be16:
  135|  11.2k|static inline ovs_be16 be32_to_be16(ovs_be32 x) { return x >> 16; }
meta-flow.c:hton128:
   48|     40|{
   49|     40|    ovs_be128 dst;
   50|       |
   51|     40|    dst.be64.hi = htonll(src.u64.hi);
   52|     40|    dst.be64.lo = htonll(src.u64.lo);
   53|     40|    return dst;
   54|     40|}
meta-flow.c:htonll:
   29|  3.99k|{
   30|  3.99k|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 3.99k]
  ------------------
   31|  3.99k|}
meta-flow.c:ntoh128:
   58|  3.61k|{
   59|  3.61k|    ovs_u128 dst;
   60|       |
   61|  3.61k|    dst.u64.hi = ntohll(src.be64.hi);
   62|  3.61k|    dst.u64.lo = ntohll(src.be64.lo);
   63|  3.61k|    return dst;
   64|  3.61k|}
meta-flow.c:ntohll:
   35|  16.0k|{
   36|  16.0k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 16.0k]
  ------------------
   37|  16.0k|}
nx-match.c:ntohll:
   35|  16.0k|{
   36|  16.0k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 16.0k]
  ------------------
   37|  16.0k|}
nx-match.c:htonll:
   29|  1.95M|{
   30|  1.95M|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 1.95M]
  ------------------
   31|  1.95M|}
ofp-actions.c:ntohll:
   35|  8.70k|{
   36|  8.70k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 8.70k]
  ------------------
   37|  8.70k|}
ofp-actions.c:be32_to_be16:
  135|  10.1k|static inline ovs_be16 be32_to_be16(ovs_be32 x) { return x >> 16; }
ofp-connection.c:ntohll:
   35|  5.82k|{
   36|  5.82k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 5.82k]
  ------------------
   37|  5.82k|}
ofp-ct.c:hton128:
   48|  2.94k|{
   49|  2.94k|    ovs_be128 dst;
   50|       |
   51|  2.94k|    dst.be64.hi = htonll(src.u64.hi);
   52|  2.94k|    dst.be64.lo = htonll(src.u64.lo);
   53|  2.94k|    return dst;
   54|  2.94k|}
ofp-ct.c:htonll:
   29|  5.88k|{
   30|  5.88k|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 5.88k]
  ------------------
   31|  5.88k|}
ofp-flow.c:htonll:
   29|   209k|{
   30|   209k|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 209k]
  ------------------
   31|   209k|}
ofp-flow.c:ntohll:
   35|  54.6k|{
   36|  54.6k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 54.6k]
  ------------------
   37|  54.6k|}
ofp-group.c:ntohll:
   35|  46.2k|{
   36|  46.2k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 46.2k]
  ------------------
   37|  46.2k|}
ofp-ipfix.c:ntohll:
   35|  82.7k|{
   36|  82.7k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 82.7k]
  ------------------
   37|  82.7k|}
ofp-meter.c:ntohll:
   35|  5.83k|{
   36|  5.83k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 5.83k]
  ------------------
   37|  5.83k|}
ofp-monitor.c:ntohll:
   35|  9.30k|{
   36|  9.30k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 9.30k]
  ------------------
   37|  9.30k|}
ofp-monitor.c:htonll:
   29|  2.94k|{
   30|  2.94k|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 2.94k]
  ------------------
   31|  2.94k|}
ofp-packet.c:ntohll:
   35|  3.35k|{
   36|  3.35k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 3.35k]
  ------------------
   37|  3.35k|}
ofp-port.c:ntohll:
   35|   278k|{
   36|   278k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 278k]
  ------------------
   37|   278k|}
ofp-prop.c:ntohll:
   35|  2.96k|{
   36|  2.96k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 2.96k]
  ------------------
   37|  2.96k|}
ofp-prop.c:ntoh128:
   58|  1.48k|{
   59|  1.48k|    ovs_u128 dst;
   60|       |
   61|  1.48k|    dst.u64.hi = ntohll(src.be64.hi);
   62|  1.48k|    dst.u64.lo = ntohll(src.be64.lo);
   63|  1.48k|    return dst;
   64|  1.48k|}
ox-stat.c:ntohll:
   35|  1.53k|{
   36|  1.53k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 1.53k]
  ------------------
   37|  1.53k|}
learn.c:ntohll:
   35|  17.0k|{
   36|  17.0k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 17.0k]
  ------------------
   37|  17.0k|}

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

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|  10.7M|        {                                                               \
   73|  10.7M|            *counter_##COUNTER##_get() += n;                            \
   74|  10.7M|        }                                                               \
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|  62.8k|        {                                                               \
   73|  62.8k|            *counter_##COUNTER##_get() += n;                            \
   74|  62.8k|        }                                                               \
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|    219|        {                                                               \
   73|    219|            *counter_##COUNTER##_get() += n;                            \
   74|    219|        }                                                               \
flow.c:miniflow_extract_ipv6_pkt_too_short_add:
   72|    103|        {                                                               \
   73|    103|            *counter_##COUNTER##_get() += n;                            \
   74|    103|        }                                                               \
flow.c:miniflow_extract_ipv6_pkt_len_error_add:
   72|    503|        {                                                               \
   73|    503|            *counter_##COUNTER##_get() += n;                            \
   74|    503|        }                                                               \
flow.c:miniflow_malloc_add:
   72|  38.2k|        {                                                               \
   73|  38.2k|            *counter_##COUNTER##_get() += n;                            \
   74|  38.2k|        }                                                               \
netdev.c:netdev_received_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev.c:netdev_sent_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev.c:netdev_add_router_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev.c:netdev_get_stats_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev.c:netdev_push_header_drops_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev.c:netdev_soft_seg_good_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev.c:netdev_partial_seg_good_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
poll-loop.c:poll_create_node_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
poll-loop.c:poll_zero_timeout_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
seq.c:seq_change_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
timeval.c:long_poll_interval_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
unixctl.c:unixctl_received_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
unixctl.c:unixctl_replied_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev-linux.c:netdev_set_policing_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev-linux.c:netdev_arp_lookup_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev-linux.c:netdev_get_ifindex_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev-linux.c:netdev_get_hwaddr_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev-linux.c:netdev_set_hwaddr_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev-linux.c:netdev_get_ethtool_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev-linux.c:netdev_set_ethtool_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev-linux.c:netdev_linux_invalid_l4_csum_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev-linux.c:netdev_linux_unknown_l4_csum_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netlink-socket.c:netlink_overflow_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netlink-socket.c:netlink_received_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netlink-socket.c:netlink_recv_jumbo_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netlink-socket.c:netlink_sent_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
route-table.c:route_table_dump_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
tc.c:tc_netlink_malformed_reply_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
ccmap.c:ccmap_expand_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
ccmap.c:ccmap_shrink_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
cmap.c:cmap_expand_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
cmap.c:cmap_shrink_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_destroy_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_execute_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_execute_error_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_execute_with_help_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_flow_del_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_flow_del_error_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_flow_flush_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_flow_get_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_flow_get_error_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_flow_put_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_flow_put_error_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_meter_del_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_meter_get_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_meter_set_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_port_add_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_port_del_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_purge_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
hmap.c:hmap_pathological_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
hmap.c:hmap_expand_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
hmap.c:hmap_shrink_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
hmap.c:hmap_reserve_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
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|        }
hindex.c:hindex_pathological_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
hindex.c:hindex_expand_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
hindex.c:hindex_shrink_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
hindex.c:hindex_reserve_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
ipf.c:ipf_stuck_frag_list_expired_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
ipf.c:ipf_stuck_frag_list_purged_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
ipf.c:ipf_l3csum_checked_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
ipf.c:ipf_l3csum_err_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
lockfile.c:lockfile_lock_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
lockfile.c:lockfile_error_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
lockfile.c:lockfile_unlock_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
process.c:process_start_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
conntrack-tcp.c:conntrack_tcp_seq_chk_bypass_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
conntrack-tcp.c:conntrack_tcp_seq_chk_failed_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
conntrack-tcp.c:conntrack_invalid_tcp_flags_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
ovsdb-idl.c:txn_uncommitted_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
ovsdb-idl.c:txn_unchanged_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
ovsdb-idl.c:txn_incomplete_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
ovsdb-idl.c:txn_aborted_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
ovsdb-idl.c:txn_success_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
ovsdb-idl.c:txn_try_again_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
ovsdb-idl.c:txn_not_locked_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
ovsdb-idl.c:txn_error_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }

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

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

ds_init:
   30|  2.57M|{
   31|       |    ds->string = NULL;
   32|  2.57M|    ds->length = 0;
   33|  2.57M|    ds->allocated = 0;
   34|  2.57M|}
ds_reserve:
   60|  12.4M|{
   61|  12.4M|    if (min_length > ds->allocated || !ds->string) {
  ------------------
  |  Branch (61:9): [True: 9.92M, False: 2.49M]
  |  Branch (61:39): [True: 0, False: 2.49M]
  ------------------
   62|  9.92M|        ds->allocated += MAX(min_length, ds->allocated);
  ------------------
  |  |   95|  9.92M|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (95:20): [True: 9.92M, False: 0]
  |  |  ------------------
  ------------------
   63|  9.92M|        ds->allocated = MAX(8, ds->allocated);
  ------------------
  |  |   95|  9.92M|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (95:20): [True: 22.4k, False: 9.89M]
  |  |  ------------------
  ------------------
   64|  9.92M|        ds->string = xrealloc(ds->string, ds->allocated + 1);
   65|  9.92M|    }
   66|  12.4M|}
ds_put_uninit:
   73|  6.58M|{
   74|  6.58M|    ds_reserve(ds, ds->length + n);
   75|  6.58M|    ds->length += n;
   76|  6.58M|    ds->string[ds->length] = '\0';
   77|  6.58M|    return &ds->string[ds->length - n];
   78|  6.58M|}
ds_put_char__:
   82|   521k|{
   83|   521k|    *ds_put_uninit(ds, 1) = c;
   84|   521k|}
ds_put_char_multiple:
  113|  8.27k|{
  114|  8.27k|    memset(ds_put_uninit(ds, n), c, n);
  115|  8.27k|}
ds_put_cstr:
  125|  6.05M|{
  126|  6.05M|    size_t s_len = strlen(s);
  127|  6.05M|    memcpy(ds_put_uninit(ds, s_len), s, s_len);
  128|  6.05M|}
ds_put_and_free_cstr:
  132|  2.05k|{
  133|  2.05k|    ds_put_cstr(ds, s);
  134|  2.05k|    free(s);
  135|  2.05k|}
ds_put_format:
  139|   114M|{
  140|   114M|    va_list args;
  141|       |
  142|   114M|    va_start(args, format);
  143|   114M|    ds_put_format_valist(ds, format, args);
  144|       |    va_end(args);
  145|   114M|}
ds_put_format_valist:
  149|   114M|{
  150|   114M|    va_list args;
  151|   114M|    size_t available;
  152|   114M|    int needed;
  153|       |
  154|   114M|    va_copy(args, args_);
  155|   114M|    available = ds->string ? ds->allocated - ds->length + 1 : 0;
  ------------------
  |  Branch (155:17): [True: 113M, False: 751k]
  ------------------
  156|   114M|    needed = vsnprintf(ds->string
  ------------------
  |  Branch (156:24): [True: 113M, False: 751k]
  ------------------
  157|   114M|                       ? &ds->string[ds->length]
  158|   114M|                       : NULL,
  159|   114M|                       available, format, args);
  160|   114M|    va_end(args);
  161|       |
  162|   114M|    if (needed < available) {
  ------------------
  |  Branch (162:9): [True: 108M, False: 5.75M]
  ------------------
  163|   108M|        ds->length += needed;
  164|   108M|    } else {
  165|  5.75M|        ds_reserve(ds, ds->length + needed);
  166|       |
  167|  5.75M|        va_copy(args, args_);
  168|  5.75M|        available = ds->allocated - ds->length + 1;
  169|  5.75M|        needed = vsnprintf(&ds->string[ds->length],
  170|  5.75M|                           available, format, args);
  171|  5.75M|        va_end(args);
  172|       |
  173|  5.75M|        ovs_assert(needed < available);
  ------------------
  |  |   62|  5.75M|#define ovs_assert ovs_ignore
  ------------------
  174|  5.75M|        ds->length += needed;
  175|  5.75M|    }
  176|   114M|}
ds_put_printable:
  180|  16.5k|{
  181|  16.5k|    ds_reserve(ds, ds->length + n);
  182|   693k|    while (n-- > 0) {
  ------------------
  |  Branch (182:12): [True: 676k, False: 16.5k]
  ------------------
  183|   676k|        unsigned char c = *s++;
  184|   676k|        if (c < 0x20 || c > 0x7e || c == '\\' || c == '"') {
  ------------------
  |  Branch (184:13): [True: 447k, False: 229k]
  |  Branch (184:25): [True: 113k, False: 115k]
  |  Branch (184:37): [True: 251, False: 115k]
  |  Branch (184:50): [True: 348, False: 115k]
  ------------------
  185|   561k|            ds_put_format(ds, "\\%03o", (int) c);
  186|   561k|        } else {
  187|   115k|            ds_put_char(ds, c);
  188|   115k|        }
  189|   676k|    }
  190|  16.5k|}
ds_cstr:
  343|  2.62M|{
  344|  2.62M|    if (!ds->string) {
  ------------------
  |  Branch (344:9): [True: 0, False: 2.62M]
  ------------------
  345|      0|        ds_reserve(ds, 0);
  346|      0|    }
  347|  2.62M|    ds->string[ds->length] = '\0';
  348|  2.62M|    return ds->string;
  349|  2.62M|}
ds_steal_cstr:
  362|  2.56M|{
  363|  2.56M|    char *s = ds_cstr(ds);
  364|  2.56M|    ds_init(ds);
  365|  2.56M|    return s;
  366|  2.56M|}
ds_destroy:
  370|    855|{
  371|    855|    free(ds->string);
  372|    855|}
ds_put_hex:
  385|  47.7k|{
  386|  47.7k|    const uint8_t *buf = buf_;
  387|  47.7k|    bool printed = false;
  388|  47.7k|    int i;
  389|       |
  390|  1.15M|    for (i = 0; i < size; i++) {
  ------------------
  |  Branch (390:17): [True: 1.11M, False: 47.7k]
  ------------------
  391|  1.11M|        uint8_t val = buf[i];
  392|  1.11M|        if (val || printed) {
  ------------------
  |  Branch (392:13): [True: 71.9k, False: 1.03M]
  |  Branch (392:20): [True: 18.7k, False: 1.02M]
  ------------------
  393|  90.6k|            if (!printed) {
  ------------------
  |  Branch (393:17): [True: 33.7k, False: 56.9k]
  ------------------
  394|  33.7k|                ds_put_format(ds, "0x%"PRIx8, val);
  395|  56.9k|            } else {
  396|  56.9k|                ds_put_format(ds, "%02"PRIx8, val);
  397|  56.9k|            }
  398|  90.6k|            printed = true;
  399|  90.6k|        }
  400|  1.11M|    }
  401|  47.7k|    if (!printed) {
  ------------------
  |  Branch (401:9): [True: 14.0k, False: 33.7k]
  ------------------
  402|  14.0k|        ds_put_char(ds, '0');
  403|  14.0k|    }
  404|  47.7k|}
ds_put_hex_with_delimiter:
  409|  3.30k|{
  410|  3.30k|    const uint8_t *buf = buf_;
  411|  3.30k|    size_t i;
  412|       |
  413|  22.5k|    for (i = 0; i < size; i++) {
  ------------------
  |  Branch (413:17): [True: 19.2k, False: 3.30k]
  ------------------
  414|  19.2k|        if (i && delimiter) {
  ------------------
  |  Branch (414:13): [True: 15.9k, False: 3.30k]
  |  Branch (414:18): [True: 15.9k, False: 0]
  ------------------
  415|  15.9k|            ds_put_format(ds, "%s", delimiter);
  416|  15.9k|        }
  417|       |        ds_put_format(ds, "%02" PRIx8, buf[i]);
  418|  19.2k|    }
  419|  3.30k|}
ds_put_hex_dump:
  484|  1.82M|{
  485|       |    ds_put_hex_dump__(ds, buf_, size, ofs, ascii, false);
  486|  1.82M|}
ds_last:
  499|  38.2k|{
  500|  38.2k|    return ds->length > 0 ? (unsigned char) ds->string[ds->length - 1] : EOF;
  ------------------
  |  Branch (500:12): [True: 38.2k, False: 0]
  ------------------
  501|  38.2k|}
ds_chomp:
  505|  1.11M|{
  506|  1.11M|    if (ds->length > 0 && ds->string[ds->length - 1] == (char) c) {
  ------------------
  |  Branch (506:9): [True: 1.11M, False: 0]
  |  Branch (506:27): [True: 250k, False: 864k]
  ------------------
  507|   250k|        ds->string[--ds->length] = '\0';
  508|   250k|        return true;
  509|   864k|    } else {
  510|       |        return false;
  511|   864k|    }
  512|  1.11M|}
dynamic-string.c:ds_put_hex_dump__:
  424|  1.82M|{
  425|  1.82M|    const uint8_t *buf = buf_;
  426|  1.82M|    const size_t per_line = 16; /* Maximum bytes per line. */
  427|       |
  428|  6.72M|    while (size > 0) {
  ------------------
  |  Branch (428:12): [True: 4.89M, False: 1.82M]
  ------------------
  429|  4.89M|        size_t start, end, n;
  430|  4.89M|        size_t i;
  431|       |
  432|       |        /* Number of bytes on this line. */
  433|  4.89M|        start = ofs % per_line;
  434|  4.89M|        end = per_line;
  435|  4.89M|        if (end - start > size)
  ------------------
  |  Branch (435:13): [True: 1.04M, False: 3.85M]
  ------------------
  436|  1.04M|            end = start + size;
  437|  4.89M|        n = end - start;
  438|       |
  439|  4.89M|        if (skip_zero_lines && is_all_zeros(&buf[start], n)) {
  ------------------
  |  Branch (439:13): [True: 0, False: 4.89M]
  |  Branch (439:32): [True: 0, False: 0]
  ------------------
  440|      0|            goto next;
  441|      0|        }
  442|       |
  443|       |        /* Print line. */
  444|  4.89M|        ds_put_format(ds, "%08"PRIxMAX"  ",
  445|  4.89M|                      (uintmax_t) ROUND_DOWN(ofs, per_line));
  ------------------
  |  |  309|  4.89M|#define ROUND_DOWN(X, Y) ((X) / (Y) * (Y))
  ------------------
  446|  4.89M|        for (i = 0; i < start; i++) {
  ------------------
  |  Branch (446:21): [True: 0, False: 4.89M]
  ------------------
  447|      0|            ds_put_format(ds, "   ");
  448|      0|        }
  449|  75.6M|        for (; i < end; i++) {
  ------------------
  |  Branch (449:16): [True: 70.7M, False: 4.89M]
  ------------------
  450|  70.7M|            ds_put_format(ds, "%02x%c",
  451|  70.7M|                          buf[i - start], i == per_line / 2 - 1? '-' : ' ');
  ------------------
  |  Branch (451:43): [True: 4.70M, False: 66.0M]
  ------------------
  452|  70.7M|        }
  453|  4.89M|        if (ascii) {
  ------------------
  |  Branch (453:13): [True: 4.89M, False: 0]
  ------------------
  454|  12.5M|            for (; i < per_line; i++)
  ------------------
  |  Branch (454:20): [True: 7.62M, False: 4.89M]
  ------------------
  455|  7.62M|                ds_put_format(ds, "   ");
  456|  4.89M|            ds_put_format(ds, "|");
  457|  4.89M|            for (i = 0; i < start; i++)
  ------------------
  |  Branch (457:25): [True: 0, False: 4.89M]
  ------------------
  458|      0|                ds_put_format(ds, " ");
  459|  75.6M|            for (; i < end; i++) {
  ------------------
  |  Branch (459:20): [True: 70.7M, False: 4.89M]
  ------------------
  460|  70.7M|                int c = buf[i - start];
  461|  70.7M|                ds_put_char(ds, c >= 32 && c < 127 ? c : '.');
  ------------------
  |  Branch (461:33): [True: 22.6M, False: 48.0M]
  |  Branch (461:44): [True: 10.7M, False: 11.8M]
  ------------------
  462|  70.7M|            }
  463|  12.5M|            for (; i < per_line; i++)
  ------------------
  |  Branch (463:20): [True: 7.62M, False: 4.89M]
  ------------------
  464|  7.62M|                ds_put_format(ds, " ");
  465|  4.89M|            ds_put_format(ds, "|");
  466|  4.89M|        } else {
  467|      0|            ds_chomp(ds, ' ');
  468|      0|        }
  469|  4.89M|        ds_put_format(ds, "\n");
  470|  4.89M|next:
  471|  4.89M|        ofs += n;
  472|  4.89M|        buf += n;
  473|  4.89M|        size -= n;
  474|  4.89M|    }
  475|  1.82M|}

parse_ipv6_ext_hdrs:
  605|  16.7k|{
  606|  16.7k|    return parse_ipv6_ext_hdrs__(datap, sizep, nw_proto, nw_frag,
  607|  16.7k|                                 frag_hdr, rt_hdr);
  608|  16.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: 515, False: 7.99k]
  |  |  ------------------
  ------------------
  620|    515|        return false;
  621|    515|    }
  622|       |
  623|  7.99k|    version = nsh_get_ver(nsh);
  624|  7.99k|    flags = nsh_get_flags(nsh);
  625|  7.99k|    length = nsh_hdr_len(nsh);
  626|  7.99k|    ttl = nsh_get_ttl(nsh);
  627|       |
  628|  7.99k|    if (OVS_UNLIKELY(length > *sizep || version != 0)) {
  ------------------
  |  |   66|  13.2k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 2.78k, False: 5.20k]
  |  |  |  Branch (66:53): [True: 2.78k, False: 5.20k]
  |  |  |  Branch (66:53): [True: 2, False: 5.20k]
  |  |  ------------------
  ------------------
  629|  2.78k|        return false;
  630|  2.78k|    }
  631|       |
  632|  5.20k|    key->flags = flags;
  633|  5.20k|    key->ttl = ttl;
  634|  5.20k|    key->mdtype = nsh->md_type;
  635|  5.20k|    key->np = nsh->next_proto;
  636|  5.20k|    key->path_hdr = nsh_get_path_hdr(nsh);
  637|       |
  638|  5.20k|    switch (key->mdtype) {
  639|    797|        case NSH_M_TYPE1:
  ------------------
  |  |  251|    797|#define NSH_M_TYPE1     0x01
  ------------------
  |  Branch (639:9): [True: 797, False: 4.40k]
  ------------------
  640|    797|            if (length != NSH_M_TYPE1_LEN) {
  ------------------
  |  |  263|    797|#define NSH_M_TYPE1_LEN   24
  ------------------
  |  Branch (640:17): [True: 695, False: 102]
  ------------------
  641|    695|                return false;
  642|    695|            }
  643|    510|            for (size_t i = 0; i < 4; i++) {
  ------------------
  |  Branch (643:32): [True: 408, False: 102]
  ------------------
  644|    408|                key->context[i] = get_16aligned_be32(&nsh->md1.context[i]);
  645|    408|            }
  646|    102|            break;
  647|     71|        case NSH_M_TYPE2:
  ------------------
  |  |  252|     71|#define NSH_M_TYPE2     0x02
  ------------------
  |  Branch (647:9): [True: 71, False: 5.13k]
  ------------------
  648|       |            /* Don't support MD type 2 metedata parsing yet */
  649|     71|            if (length < NSH_BASE_HDR_LEN) {
  ------------------
  |  |  260|     71|#define NSH_BASE_HDR_LEN  8
  ------------------
  |  Branch (649:17): [True: 34, False: 37]
  ------------------
  650|     34|                return false;
  651|     34|            }
  652|       |
  653|     37|            memset(key->context, 0, sizeof(key->context));
  654|     37|            break;
  655|  4.33k|        default:
  ------------------
  |  Branch (655:9): [True: 4.33k, False: 868]
  ------------------
  656|       |            /* We don't parse other context headers yet. */
  657|  4.33k|            memset(key->context, 0, sizeof(key->context));
  658|  4.33k|            break;
  659|  5.20k|    }
  660|       |
  661|  4.47k|    data_pull(datap, sizep, length);
  662|       |
  663|       |    return true;
  664|  5.20k|}
flow_extract:
  670|  62.8k|{
  671|  62.8k|    struct {
  672|  62.8k|        struct miniflow mf;
  673|  62.8k|        uint64_t buf[FLOW_U64S];
  674|  62.8k|    } m;
  675|       |
  676|  62.8k|    COVERAGE_INC(flow_extract);
  ------------------
  |  |   83|  62.8k|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  62.8k|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  677|       |
  678|  62.8k|    miniflow_extract(packet, &m.mf);
  679|  62.8k|    miniflow_expand(&m.mf, flow);
  680|  62.8k|}
miniflow_extract:
  797|  62.8k|{
  798|       |    /* Add code to this function (or its callees) to extract new fields. */
  799|  62.8k|    BUILD_ASSERT_DECL(FLOW_WC_SEQ == 43);
  ------------------
  |  |  270|  62.8k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  ------------------
  800|       |
  801|  62.8k|    const struct pkt_metadata *md = &packet->md;
  802|  62.8k|    const void *data = dp_packet_data(packet);
  803|  62.8k|    size_t size = dp_packet_size(packet);
  804|  62.8k|    ovs_be32 packet_type = packet->packet_type;
  805|  62.8k|    uint64_t *values = miniflow_values(dst);
  806|  62.8k|    struct mf_ctx mf = { FLOWMAP_EMPTY_INITIALIZER, values,
  ------------------
  |  |  286|  62.8k|#define FLOWMAP_EMPTY_INITIALIZER { { 0 } }
  ------------------
  807|  62.8k|                         values + FLOW_U64S };
  ------------------
  |  |  165|  62.8k|#define FLOW_U64S (sizeof(struct flow) / sizeof(uint64_t))
  ------------------
  808|  62.8k|    const char *frame;
  809|  62.8k|    ovs_be16 dl_type = OVS_BE16_MAX;
  ------------------
  |  |   42|  62.8k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  810|  62.8k|    uint8_t nw_frag, nw_tos, nw_ttl, nw_proto;
  811|  62.8k|    uint8_t *ct_nw_proto_p = NULL;
  812|  62.8k|    ovs_be16 ct_tp_src = 0, ct_tp_dst = 0;
  813|       |
  814|       |    /* Metadata. */
  815|  62.8k|    if (flow_tnl_dst_is_set(&md->tunnel)) {
  ------------------
  |  Branch (815:9): [True: 0, False: 62.8k]
  ------------------
  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|  62.8k|    if (md->skb_priority || md->pkt_mark) {
  ------------------
  |  Branch (837:9): [True: 0, False: 62.8k]
  |  Branch (837:29): [True: 0, False: 62.8k]
  ------------------
  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|  62.8k|    miniflow_push_uint32(mf, dp_hash, md->dp_hash);
  ------------------
  |  |  297|  62.8k|    miniflow_push_uint32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  179|  62.8k|    {                                           \
  |  |  |  |  180|  62.8k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  181|  62.8k|                                                \
  |  |  |  |  182|  62.8k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (182:9): [True: 62.8k, Folded]
  |  |  |  |  ------------------
  |  |  |  |  183|  62.8k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|  62.8k|    {                                        \
  |  |  |  |  |  |  160|  62.8k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  62.8k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  62.8k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  62.8k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  62.8k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|   125k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  62.8k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|   125k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|   125k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 62.8k, False: 62.8k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|  62.8k|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|  62.8k|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  62.8k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|  62.8k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|  62.8k|}
  |  |  |  |  ------------------
  |  |  |  |  184|  62.8k|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  185|  62.8k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:16): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  190|  62.8k|}
  |  |  ------------------
  ------------------
  842|  62.8k|    miniflow_push_uint32(mf, in_port, odp_to_u32(md->in_port.odp_port));
  ------------------
  |  |  297|  62.8k|    miniflow_push_uint32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  179|  62.8k|    {                                           \
  |  |  |  |  180|  62.8k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  181|  62.8k|                                                \
  |  |  |  |  182|  62.8k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (182:9): [Folded, False: 62.8k]
  |  |  |  |  ------------------
  |  |  |  |  183|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|      0|}
  |  |  |  |  ------------------
  |  |  |  |  184|      0|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  185|  62.8k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:16): [True: 62.8k, Folded]
  |  |  |  |  ------------------
  |  |  |  |  186|  62.8k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|  62.8k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|  62.8k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  62.8k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  62.8k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  62.8k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  62.8k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|   125k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  62.8k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|   125k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|   125k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 62.8k, False: 62.8k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|  62.8k|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|  62.8k|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  62.8k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  62.8k|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  188|  62.8k|        MF.data++;                              \
  |  |  |  |  189|  62.8k|    }                                           \
  |  |  |  |  190|  62.8k|}
  |  |  ------------------
  ------------------
  843|  62.8k|    if (md->ct_state) {
  ------------------
  |  Branch (843:9): [True: 0, False: 62.8k]
  ------------------
  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|  62.8k|    } else {
  856|  62.8k|        if (md->recirc_id) {
  ------------------
  |  Branch (856:13): [True: 0, False: 62.8k]
  ------------------
  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|  62.8k|        miniflow_pad_from_64(mf, packet_type);
  ------------------
  |  |  315|  62.8k|    miniflow_pad_from_64_(MF, offsetof(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  241|  62.8k|#define miniflow_pad_from_64_(MF, OFS)                          \
  |  |  |  |  242|  62.8k|{                                                               \
  |  |  |  |  243|  62.8k|    MINIFLOW_ASSERT(MF.data < MF.end);                          \
  |  |  |  |  244|  62.8k|                                                                \
  |  |  |  |  245|  62.8k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  246|  62.8k|    miniflow_set_map(MF, OFS / 8);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|  62.8k|    {                                        \
  |  |  |  |  |  |  160|  62.8k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  62.8k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  62.8k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  62.8k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  62.8k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|   125k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  62.8k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|   125k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|   125k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 62.8k, False: 62.8k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|  62.8k|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|  62.8k|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  62.8k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|  62.8k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|  62.8k|}
  |  |  |  |  ------------------
  |  |  |  |  247|  62.8k|                                                                \
  |  |  |  |  248|  62.8k|    memset((uint8_t *)MF.data, 0, (OFS) % 8);                   \
  |  |  |  |  249|  62.8k|}
  |  |  ------------------
  ------------------
  861|  62.8k|        miniflow_push_be32(mf, packet_type, packet_type);
  ------------------
  |  |  300|  62.8k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  62.8k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  62.8k|    {                                           \
  |  |  |  |  |  |  180|  62.8k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  62.8k|                                                \
  |  |  |  |  |  |  182|  62.8k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded, False: 62.8k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|      0|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|  62.8k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [True: 62.8k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|  62.8k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  62.8k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  62.8k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  62.8k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  62.8k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  62.8k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  62.8k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  62.8k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  62.8k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  62.8k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  62.8k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 62.8k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  62.8k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|  62.8k|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|  62.8k|        MF.data++;                              \
  |  |  |  |  |  |  189|  62.8k|    }                                           \
  |  |  |  |  |  |  190|  62.8k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  862|  62.8k|    }
  863|       |
  864|       |    /* Initialize packet's layer pointer and offsets. */
  865|  62.8k|    frame = data;
  866|  62.8k|    if (dp_packet_tunnel(packet)) {
  ------------------
  |  Branch (866:9): [True: 0, False: 62.8k]
  ------------------
  867|       |        /* Preserve inner offsets from previous circulation. */
  868|      0|        dp_packet_reset_outer_offsets(packet);
  869|  62.8k|    } else {
  870|  62.8k|        dp_packet_reset_offsets(packet);
  871|  62.8k|    }
  872|       |
  873|  62.8k|    if (packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (873:9): [True: 52.9k, False: 9.99k]
  ------------------
  874|       |        /* Must have full Ethernet header to proceed. */
  875|  52.9k|        if (OVS_UNLIKELY(size < sizeof(struct eth_header))) {
  ------------------
  |  |   66|  52.9k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 25.9k, False: 26.9k]
  |  |  ------------------
  ------------------
  876|  25.9k|            goto out;
  877|  26.9k|        } else {
  878|       |            /* Link layer. */
  879|  26.9k|            ASSERT_SEQUENTIAL(dl_dst, dl_src);
  ------------------
  |  |   71|  26.9k|    BUILD_ASSERT_DECL(offsetof(struct flow, f0)         \
  |  |  ------------------
  |  |  |  |  270|  26.9k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  |  |  ------------------
  |  |   72|  26.9k|                      + MEMBER_SIZEOF(struct flow, f0)  \
  |  |   73|  26.9k|                      == offsetof(struct flow, f1))
  ------------------
  880|  26.9k|            miniflow_push_macs(mf, dl_dst, data);
  ------------------
  |  |  324|  26.9k|    miniflow_push_macs_(MF, offsetof(struct flow, FIELD), VALUEP)
  |  |  ------------------
  |  |  |  |  289|  26.9k|#define miniflow_push_macs_(MF, OFS, VALUEP)                    \
  |  |  |  |  290|  26.9k|{                                                               \
  |  |  |  |  291|  26.9k|    miniflow_set_maps(MF, (OFS) / 8, 2);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|  26.9k|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|  26.9k|{                                                               \
  |  |  |  |  |  |  259|  26.9k|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|  26.9k|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|  26.9k|                                                                \
  |  |  |  |  |  |  262|  26.9k|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|  26.9k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  26.9k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  26.9k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  26.9k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  26.9k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  26.9k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  26.9k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  26.9k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  26.9k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 26.9k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  26.9k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  26.9k|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|  26.9k|}
  |  |  |  |  ------------------
  |  |  |  |  292|  26.9k|    memcpy(MF.data, (VALUEP), 2 * ETH_ADDR_LEN);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  205|  26.9k|#define ETH_ADDR_LEN           6
  |  |  |  |  ------------------
  |  |  |  |  293|  26.9k|    MF.data += 1;                   /* First word only. */      \
  |  |  |  |  294|  26.9k|}
  |  |  ------------------
  ------------------
  881|       |
  882|       |            /* VLAN */
  883|  26.9k|            union flow_vlan_hdr vlans[FLOW_MAX_VLAN_HEADERS];
  884|  26.9k|            size_t num_vlans = parse_vlan(&data, &size, vlans);
  885|       |
  886|  26.9k|            dl_type = parse_ethertype(&data, &size);
  887|  26.9k|            miniflow_push_be16(mf, dl_type, dl_type);
  ------------------
  |  |  306|  26.9k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  26.9k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  26.9k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  26.9k|{                                               \
  |  |  |  |  |  |  197|  26.9k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  26.9k|                                                \
  |  |  |  |  |  |  199|  26.9k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 26.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|  26.9k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 26.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|  26.9k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 26.9k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|  26.9k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  26.9k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  26.9k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  26.9k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  26.9k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  26.9k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  26.9k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  26.9k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  26.9k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  26.9k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  26.9k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 26.9k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  26.9k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|  26.9k|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|  26.9k|    } 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|  26.9k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  888|  26.9k|            miniflow_pad_to_64(mf, dl_type);
  ------------------
  |  |  312|  26.9k|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|  26.9k|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|  26.9k|{                                                               \
  |  |  |  |  234|  26.9k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|  26.9k|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|  26.9k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|  26.9k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  26.9k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  26.9k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  26.9k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  26.9k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  26.9k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  26.9k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  26.9k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  26.9k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 26.9k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  26.9k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|  26.9k|                                                                \
  |  |  |  |  237|  26.9k|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|  26.9k|    MF.data++;                                                  \
  |  |  |  |  239|  26.9k|}
  |  |  ------------------
  ------------------
  889|  26.9k|            if (num_vlans > 0) {
  ------------------
  |  Branch (889:17): [True: 612, False: 26.3k]
  ------------------
  890|    612|                miniflow_push_words_32(mf, vlans, vlans, num_vlans);
  ------------------
  |  |  321|    612|    miniflow_push_words_32_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  277|    612|#define miniflow_push_words_32_(MF, OFS, VALUEP, N_WORDS)               \
  |  |  |  |  278|    612|{                                                                       \
  |  |  |  |  279|    612|    miniflow_set_maps(MF, (OFS) / 8, DIV_ROUND_UP(N_WORDS, 2));         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|    612|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|    612|{                                                               \
  |  |  |  |  |  |  259|    612|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|    612|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|    612|                                                                \
  |  |  |  |  |  |  262|    612|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|    612|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    612|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    612|{                                                                       \
  |  |  |  |  |  |  |  |  151|    612|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    612|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    612|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    612|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    612|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    612|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 612]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    612|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    612|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|    612|}
  |  |  |  |  ------------------
  |  |  |  |  280|    612|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof(uint32_t));            \
  |  |  |  |  281|    612|    MF.data += DIV_ROUND_UP(N_WORDS, 2);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|    612|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  |  |  282|    612|    if ((N_WORDS) & 1) {                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (282:9): [True: 263, False: 349]
  |  |  |  |  ------------------
  |  |  |  |  283|    263|        *((uint32_t *)MF.data - 1) = 0;                                 \
  |  |  |  |  284|    263|    }                                                                   \
  |  |  |  |  285|    612|}
  |  |  ------------------
  ------------------
  891|    612|            }
  892|       |
  893|  26.9k|        }
  894|  52.9k|    } else {
  895|       |        /* Take dl_type from packet_type. */
  896|  9.99k|        dl_type = pt_ns_type_be(packet_type);
  897|  9.99k|        miniflow_pad_from_64(mf, dl_type);
  ------------------
  |  |  315|  9.99k|    miniflow_pad_from_64_(MF, offsetof(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  241|  9.99k|#define miniflow_pad_from_64_(MF, OFS)                          \
  |  |  |  |  242|  9.99k|{                                                               \
  |  |  |  |  243|  9.99k|    MINIFLOW_ASSERT(MF.data < MF.end);                          \
  |  |  |  |  244|  9.99k|                                                                \
  |  |  |  |  245|  9.99k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  246|  9.99k|    miniflow_set_map(MF, OFS / 8);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|  9.99k|    {                                        \
  |  |  |  |  |  |  160|  9.99k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  9.99k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  9.99k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  9.99k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  9.99k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  9.99k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  9.99k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  9.99k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  9.99k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 9.99k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  9.99k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|  9.99k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|  9.99k|}
  |  |  |  |  ------------------
  |  |  |  |  247|  9.99k|                                                                \
  |  |  |  |  248|  9.99k|    memset((uint8_t *)MF.data, 0, (OFS) % 8);                   \
  |  |  |  |  249|  9.99k|}
  |  |  ------------------
  ------------------
  898|  9.99k|        miniflow_push_be16(mf, dl_type, dl_type);
  ------------------
  |  |  306|  9.99k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  9.99k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  9.99k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  9.99k|{                                               \
  |  |  |  |  |  |  197|  9.99k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  9.99k|                                                \
  |  |  |  |  |  |  199|  9.99k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 9.99k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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.99k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 9.99k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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.99k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 9.99k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|  9.99k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  9.99k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  9.99k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  9.99k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  9.99k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  9.99k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  9.99k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  9.99k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  9.99k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  9.99k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  9.99k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 9.99k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  9.99k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|  9.99k|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|  9.99k|    } 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.99k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  899|       |        /* Do not push vlan_tci, pad instead */
  900|  9.99k|        miniflow_pad_to_64(mf, dl_type);
  ------------------
  |  |  312|  9.99k|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|  9.99k|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|  9.99k|{                                                               \
  |  |  |  |  234|  9.99k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|  9.99k|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|  9.99k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|  9.99k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  9.99k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  9.99k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  9.99k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  9.99k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  9.99k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  9.99k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  9.99k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  9.99k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 9.99k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  9.99k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|  9.99k|                                                                \
  |  |  |  |  237|  9.99k|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|  9.99k|    MF.data++;                                                  \
  |  |  |  |  239|  9.99k|}
  |  |  ------------------
  ------------------
  901|  9.99k|    }
  902|       |
  903|       |    /* Parse mpls. */
  904|  36.9k|    if (OVS_UNLIKELY(eth_type_mpls(dl_type))) {
  ------------------
  |  |   66|  36.9k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 825, False: 36.0k]
  |  |  ------------------
  ------------------
  905|    825|        int count;
  906|    825|        const void *mpls = data;
  907|       |
  908|    825|        packet->l2_5_ofs = (char *)data - frame;
  909|    825|        count = parse_mpls(&data, &size);
  910|    825|        miniflow_push_words_32(mf, mpls_lse, mpls, count);
  ------------------
  |  |  321|    825|    miniflow_push_words_32_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  277|    825|#define miniflow_push_words_32_(MF, OFS, VALUEP, N_WORDS)               \
  |  |  |  |  278|    825|{                                                                       \
  |  |  |  |  279|    825|    miniflow_set_maps(MF, (OFS) / 8, DIV_ROUND_UP(N_WORDS, 2));         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|    825|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|    825|{                                                               \
  |  |  |  |  |  |  259|    825|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|    825|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|    825|                                                                \
  |  |  |  |  |  |  262|    825|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|    825|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    825|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    825|{                                                                       \
  |  |  |  |  |  |  |  |  151|    825|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    825|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    825|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    825|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    825|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    825|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 825]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    825|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    825|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|    825|}
  |  |  |  |  ------------------
  |  |  |  |  280|    825|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof(uint32_t));            \
  |  |  |  |  281|    825|    MF.data += DIV_ROUND_UP(N_WORDS, 2);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|    825|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  |  |  282|    825|    if ((N_WORDS) & 1) {                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (282:9): [True: 429, False: 396]
  |  |  |  |  ------------------
  |  |  |  |  283|    429|        *((uint32_t *)MF.data - 1) = 0;                                 \
  |  |  |  |  284|    429|    }                                                                   \
  |  |  |  |  285|    825|}
  |  |  ------------------
  ------------------
  911|    825|    }
  912|       |
  913|       |    /* Network layer. */
  914|  36.9k|    packet->l3_ofs = (char *)data - frame;
  915|       |
  916|  36.9k|    nw_frag = 0;
  917|  36.9k|    if (OVS_LIKELY(dl_type == htons(ETH_TYPE_IP))) {
  ------------------
  |  |   65|  36.9k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 3.14k, False: 33.7k]
  |  |  ------------------
  ------------------
  918|  3.14k|        const struct ip_header *nh = data;
  919|  3.14k|        int ip_len;
  920|  3.14k|        uint16_t tot_len;
  921|       |
  922|  3.14k|        if (OVS_UNLIKELY(!ipv4_sanity_check(nh, size, &ip_len, &tot_len))) {
  ------------------
  |  |   66|  3.14k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 290, False: 2.85k]
  |  |  ------------------
  ------------------
  923|    290|            if (OVS_UNLIKELY(VLOG_IS_DBG_ENABLED())) {
  ------------------
  |  |   66|    290|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 0, False: 290]
  |  |  ------------------
  ------------------
  924|      0|                dump_invalid_packet(packet, "ipv4_sanity_check");
  925|      0|            }
  926|    290|            goto out;
  927|    290|        }
  928|  2.85k|        dp_packet_set_l2_pad_size(packet, size - tot_len);
  929|  2.85k|        size = tot_len;   /* Never pull padding. */
  930|       |
  931|       |        /* Push both source and destination address at once. */
  932|  2.85k|        miniflow_push_words(mf, nw_src, &nh->ip_src, 1);
  ------------------
  |  |  318|  2.85k|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|  2.85k|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|  2.85k|{                                                               \
  |  |  |  |  270|  2.85k|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|  2.85k|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|  2.85k|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|  2.85k|{                                                               \
  |  |  |  |  |  |  259|  2.85k|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|  2.85k|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|  2.85k|                                                                \
  |  |  |  |  |  |  262|  2.85k|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|  2.85k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  2.85k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  2.85k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  2.85k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  2.85k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  2.85k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  2.85k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  2.85k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  2.85k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 2.85k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  2.85k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  2.85k|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|  2.85k|}
  |  |  |  |  ------------------
  |  |  |  |  272|  2.85k|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|  2.85k|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|  2.85k|}
  |  |  ------------------
  ------------------
  933|  2.85k|        if (ct_nw_proto_p && !md->ct_orig_tuple_ipv6) {
  ------------------
  |  Branch (933:13): [True: 0, False: 2.85k]
  |  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|  2.85k|        miniflow_push_be32(mf, ipv6_label, 0); /* Padding for IPv4. */
  ------------------
  |  |  300|  2.85k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  2.85k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  2.85k|    {                                           \
  |  |  |  |  |  |  180|  2.85k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  2.85k|                                                \
  |  |  |  |  |  |  182|  2.85k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 2.85k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|  2.85k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  2.85k|    {                                        \
  |  |  |  |  |  |  |  |  160|  2.85k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  2.85k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  2.85k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  2.85k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  2.85k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  2.85k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  2.85k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  2.85k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  2.85k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 2.85k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  2.85k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  2.85k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  2.85k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|  2.85k|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|  2.85k|    } 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.85k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  944|       |
  945|  2.85k|        nw_tos = nh->ip_tos;
  946|  2.85k|        nw_ttl = nh->ip_ttl;
  947|  2.85k|        nw_proto = nh->ip_proto;
  948|  2.85k|        nw_frag = ipv4_get_nw_frag(nh);
  949|  2.85k|        data_pull(&data, &size, ip_len);
  950|  33.7k|    } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (950:16): [True: 17.3k, False: 16.4k]
  ------------------
  951|  17.3k|        const struct ovs_16aligned_ip6_hdr *nh = data;
  952|  17.3k|        ovs_be32 tc_flow;
  953|  17.3k|        uint16_t plen;
  954|       |
  955|  17.3k|        if (OVS_UNLIKELY(!ipv6_sanity_check(nh, size))) {
  ------------------
  |  |   66|  17.3k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 606, False: 16.7k]
  |  |  ------------------
  ------------------
  956|    606|            if (OVS_UNLIKELY(VLOG_IS_DBG_ENABLED())) {
  ------------------
  |  |   66|    606|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 0, False: 606]
  |  |  ------------------
  ------------------
  957|      0|                dump_invalid_packet(packet, "ipv6_sanity_check");
  958|      0|            }
  959|    606|            goto out;
  960|    606|        }
  961|  16.7k|        data_pull(&data, &size, sizeof *nh);
  962|  16.7k|        plen = ntohs(nh->ip6_plen);
  963|  16.7k|        dp_packet_set_l2_pad_size(packet, size - plen);
  964|  16.7k|        size = plen;   /* Never pull padding. */
  965|       |
  966|  16.7k|        miniflow_push_words(mf, ipv6_src, &nh->ip6_src,
  ------------------
  |  |  318|  16.7k|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|  16.7k|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|  16.7k|{                                                               \
  |  |  |  |  270|  16.7k|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|  16.7k|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|  16.7k|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|  16.7k|{                                                               \
  |  |  |  |  |  |  259|  16.7k|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|  16.7k|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|  16.7k|                                                                \
  |  |  |  |  |  |  262|  16.7k|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|  16.7k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  16.7k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  16.7k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  16.7k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  16.7k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  16.7k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  16.7k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  16.7k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  16.7k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 16.7k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  16.7k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  16.7k|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|  16.7k|}
  |  |  |  |  ------------------
  |  |  |  |  272|  16.7k|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|  16.7k|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|  16.7k|}
  |  |  ------------------
  ------------------
  967|  16.7k|                            sizeof nh->ip6_src / 8);
  968|  16.7k|        miniflow_push_words(mf, ipv6_dst, &nh->ip6_dst,
  ------------------
  |  |  318|  16.7k|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|  16.7k|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|  16.7k|{                                                               \
  |  |  |  |  270|  16.7k|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|  16.7k|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|  16.7k|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|  16.7k|{                                                               \
  |  |  |  |  |  |  259|  16.7k|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|  16.7k|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|  16.7k|                                                                \
  |  |  |  |  |  |  262|  16.7k|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|  16.7k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  16.7k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  16.7k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  16.7k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  16.7k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  16.7k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  16.7k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  16.7k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  16.7k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 16.7k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  16.7k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  16.7k|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|  16.7k|}
  |  |  |  |  ------------------
  |  |  |  |  272|  16.7k|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|  16.7k|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|  16.7k|}
  |  |  ------------------
  ------------------
  969|  16.7k|                            sizeof nh->ip6_dst / 8);
  970|  16.7k|        if (ct_nw_proto_p && md->ct_orig_tuple_ipv6) {
  ------------------
  |  Branch (970:13): [True: 0, False: 16.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|  16.7k|        tc_flow = get_16aligned_be32(&nh->ip6_flow);
  983|  16.7k|        nw_tos = ntohl(tc_flow) >> 20;
  984|  16.7k|        nw_ttl = nh->ip6_hlim;
  985|  16.7k|        nw_proto = nh->ip6_nxt;
  986|       |
  987|  16.7k|        if (!parse_ipv6_ext_hdrs(&data, &size, &nw_proto, &nw_frag,
  ------------------
  |  Branch (987:13): [True: 1.81k, False: 14.8k]
  ------------------
  988|  16.7k|                                 NULL, NULL)) {
  989|  1.81k|            goto out;
  990|  1.81k|        }
  991|       |
  992|       |        /* This needs to be after the parse_ipv6_ext_hdrs__() call because it
  993|       |         * leaves the nw_frag word uninitialized. */
  994|  14.8k|        ASSERT_SEQUENTIAL(ipv6_label, nw_frag);
  ------------------
  |  |   71|  14.8k|    BUILD_ASSERT_DECL(offsetof(struct flow, f0)         \
  |  |  ------------------
  |  |  |  |  270|  14.8k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  |  |  ------------------
  |  |   72|  14.8k|                      + MEMBER_SIZEOF(struct flow, f0)  \
  |  |   73|  14.8k|                      == offsetof(struct flow, f1))
  ------------------
  995|  14.8k|        ovs_be32 label = tc_flow & htonl(IPV6_LABEL_MASK);
  996|  14.8k|        miniflow_push_be32(mf, ipv6_label, label);
  ------------------
  |  |  300|  14.8k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  14.8k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  14.8k|    {                                           \
  |  |  |  |  |  |  180|  14.8k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  14.8k|                                                \
  |  |  |  |  |  |  182|  14.8k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 14.8k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|  14.8k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  14.8k|    {                                        \
  |  |  |  |  |  |  |  |  160|  14.8k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  14.8k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  14.8k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  14.8k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  14.8k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  14.8k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  14.8k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  14.8k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  14.8k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 14.8k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  14.8k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  14.8k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  14.8k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|  14.8k|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|  14.8k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  |  |  190|  14.8k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  997|  16.4k|    } else {
  998|  16.4k|        if (dl_type == htons(ETH_TYPE_ARP) ||
  ------------------
  |  Branch (998:13): [True: 357, False: 16.1k]
  ------------------
  999|  16.1k|            dl_type == htons(ETH_TYPE_RARP)) {
  ------------------
  |  Branch (999:13): [True: 186, False: 15.9k]
  ------------------
 1000|    543|            struct eth_addr arp_buf[2];
 1001|    543|            const struct arp_eth_header *arp = (const struct arp_eth_header *)
 1002|    543|                data_try_pull(&data, &size, ARP_ETH_HEADER_LEN);
  ------------------
  |  |  957|    543|#define ARP_ETH_HEADER_LEN 28
  ------------------
 1003|       |
 1004|    543|            if (OVS_LIKELY(arp) && OVS_LIKELY(arp->ar_hrd == htons(1))
  ------------------
  |  |   65|  1.08k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 184, False: 359]
  |  |  ------------------
  ------------------
                          if (OVS_LIKELY(arp) && OVS_LIKELY(arp->ar_hrd == htons(1))
  ------------------
  |  |   65|    727|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 152, False: 32]
  |  |  ------------------
  ------------------
 1005|    152|                && OVS_LIKELY(arp->ar_pro == htons(ETH_TYPE_IP))
  ------------------
  |  |   65|    695|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 117, False: 35]
  |  |  ------------------
  ------------------
 1006|    117|                && OVS_LIKELY(arp->ar_hln == ETH_ADDR_LEN)
  ------------------
  |  |   65|    660|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 99, False: 18]
  |  |  ------------------
  ------------------
 1007|     99|                && OVS_LIKELY(arp->ar_pln == 4)) {
  ------------------
  |  |   65|     99|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 36, False: 63]
  |  |  ------------------
  ------------------
 1008|     36|                miniflow_push_be32(mf, nw_src,
  ------------------
  |  |  300|     36|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|     36|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|     36|    {                                           \
  |  |  |  |  |  |  180|     36|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|     36|                                                \
  |  |  |  |  |  |  182|     36|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 36, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|     36|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|     36|    {                                        \
  |  |  |  |  |  |  |  |  160|     36|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     36|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     36|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     36|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     36|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     36|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     36|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     36|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     36|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 36]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     36|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|     36|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|     36|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|     36|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|     36|    } 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|     36|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1009|     36|                                   get_16aligned_be32(&arp->ar_spa));
 1010|     36|                miniflow_push_be32(mf, nw_dst,
  ------------------
  |  |  300|     36|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|     36|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|     36|    {                                           \
  |  |  |  |  |  |  180|     36|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|     36|                                                \
  |  |  |  |  |  |  182|     36|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded, False: 36]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|     36|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [True: 36, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|     36|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|     36|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|     36|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     36|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     36|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     36|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     36|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     36|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     36|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     36|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     36|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 36]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     36|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|     36|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|     36|        MF.data++;                              \
  |  |  |  |  |  |  189|     36|    }                                           \
  |  |  |  |  |  |  190|     36|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1011|     36|                                   get_16aligned_be32(&arp->ar_tpa));
 1012|       |
 1013|       |                /* We only match on the lower 8 bits of the opcode. */
 1014|     36|                if (OVS_LIKELY(ntohs(arp->ar_op) <= 0xff)) {
  ------------------
  |  |   65|     36|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 18, False: 18]
  |  |  ------------------
  ------------------
 1015|     18|                    miniflow_push_be32(mf, ipv6_label, 0); /* Pad with ARP. */
  ------------------
  |  |  300|     18|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|     18|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|     18|    {                                           \
  |  |  |  |  |  |  180|     18|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|     18|                                                \
  |  |  |  |  |  |  182|     18|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 18, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|     18|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|     18|    {                                        \
  |  |  |  |  |  |  |  |  160|     18|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     18|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     18|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     18|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     18|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     18|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     18|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     18|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     18|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 18]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     18|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|     18|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|     18|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|     18|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|     18|    } 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|     18|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1016|     18|                    miniflow_push_be32(mf, nw_frag, htonl(ntohs(arp->ar_op)));
  ------------------
  |  |  300|     18|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|     18|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|     18|    {                                           \
  |  |  |  |  |  |  180|     18|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|     18|                                                \
  |  |  |  |  |  |  182|     18|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded, False: 18]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|     18|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [True: 18, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|     18|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|     18|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|     18|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     18|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     18|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     18|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     18|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     18|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     18|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     18|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     18|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 18]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     18|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|     18|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|     18|        MF.data++;                              \
  |  |  |  |  |  |  189|     18|    }                                           \
  |  |  |  |  |  |  190|     18|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1017|     18|                }
 1018|       |
 1019|       |                /* Must be adjacent. */
 1020|     36|                ASSERT_SEQUENTIAL(arp_sha, arp_tha);
  ------------------
  |  |   71|     36|    BUILD_ASSERT_DECL(offsetof(struct flow, f0)         \
  |  |  ------------------
  |  |  |  |  270|     36|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  |  |  ------------------
  |  |   72|     36|                      + MEMBER_SIZEOF(struct flow, f0)  \
  |  |   73|     36|                      == offsetof(struct flow, f1))
  ------------------
 1021|       |
 1022|     36|                arp_buf[0] = arp->ar_sha;
 1023|     36|                arp_buf[1] = arp->ar_tha;
 1024|     36|                miniflow_push_macs(mf, arp_sha, arp_buf);
  ------------------
  |  |  324|     36|    miniflow_push_macs_(MF, offsetof(struct flow, FIELD), VALUEP)
  |  |  ------------------
  |  |  |  |  289|     36|#define miniflow_push_macs_(MF, OFS, VALUEP)                    \
  |  |  |  |  290|     36|{                                                               \
  |  |  |  |  291|     36|    miniflow_set_maps(MF, (OFS) / 8, 2);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|     36|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|     36|{                                                               \
  |  |  |  |  |  |  259|     36|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|     36|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|     36|                                                                \
  |  |  |  |  |  |  262|     36|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|     36|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|     36|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|     36|{                                                                       \
  |  |  |  |  |  |  |  |  151|     36|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|     36|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|     36|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|     36|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|     36|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|     36|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 36]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|     36|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|     36|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|     36|}
  |  |  |  |  ------------------
  |  |  |  |  292|     36|    memcpy(MF.data, (VALUEP), 2 * ETH_ADDR_LEN);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  205|     36|#define ETH_ADDR_LEN           6
  |  |  |  |  ------------------
  |  |  |  |  293|     36|    MF.data += 1;                   /* First word only. */      \
  |  |  |  |  294|     36|}
  |  |  ------------------
  ------------------
 1025|     36|                miniflow_pad_to_64(mf, arp_tha);
  ------------------
  |  |  312|     36|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|     36|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|     36|{                                                               \
  |  |  |  |  234|     36|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|     36|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|     36|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|     36|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|     36|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|     36|{                                                                       \
  |  |  |  |  |  |  |  |  151|     36|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|     36|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|     36|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|     36|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|     36|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|     36|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 36]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|     36|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|     36|                                                                \
  |  |  |  |  237|     36|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|     36|    MF.data++;                                                  \
  |  |  |  |  239|     36|}
  |  |  ------------------
  ------------------
 1026|     36|            }
 1027|  15.9k|        } else if (dl_type == htons(ETH_TYPE_NSH)) {
  ------------------
  |  Branch (1027:20): [True: 8.50k, False: 7.40k]
  ------------------
 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.47k, False: 4.03k]
  |  |  ------------------
  ------------------
 1031|  4.47k|                miniflow_push_words(mf, nsh, &nsh,
  ------------------
  |  |  318|  4.47k|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|  4.47k|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|  4.47k|{                                                               \
  |  |  |  |  270|  4.47k|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|  4.47k|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|  4.47k|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|  4.47k|{                                                               \
  |  |  |  |  |  |  259|  4.47k|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|  4.47k|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|  4.47k|                                                                \
  |  |  |  |  |  |  262|  4.47k|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|  4.47k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  4.47k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  4.47k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  4.47k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  4.47k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  4.47k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  4.47k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  4.47k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  4.47k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 4.47k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  4.47k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  4.47k|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|  4.47k|}
  |  |  |  |  ------------------
  |  |  |  |  272|  4.47k|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|  4.47k|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|  4.47k|}
  |  |  ------------------
  ------------------
 1032|  4.47k|                                    sizeof(struct ovs_key_nsh) /
 1033|  4.47k|                                    sizeof(uint64_t));
 1034|  4.47k|            }
 1035|  8.50k|        }
 1036|  16.4k|        goto out;
 1037|  16.4k|    }
 1038|       |
 1039|  17.7k|    packet->l4_ofs = (char *)data - frame;
 1040|  17.7k|    miniflow_push_be32(mf, nw_frag,
  ------------------
  |  |  300|  17.7k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  17.7k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  17.7k|    {                                           \
  |  |  |  |  |  |  180|  17.7k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  17.7k|                                                \
  |  |  |  |  |  |  182|  17.7k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded, False: 17.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|  17.7k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [True: 17.7k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|  17.7k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  17.7k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  17.7k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  17.7k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  17.7k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  17.7k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  17.7k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  17.7k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  17.7k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  17.7k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  17.7k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 17.7k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  17.7k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|  17.7k|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|  17.7k|        MF.data++;                              \
  |  |  |  |  |  |  189|  17.7k|    }                                           \
  |  |  |  |  |  |  190|  17.7k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1041|  17.7k|                       bytes_to_be32(nw_frag, nw_tos, nw_ttl, nw_proto));
 1042|       |
 1043|  17.7k|    if (OVS_LIKELY(!(nw_frag & FLOW_NW_FRAG_LATER))) {
  ------------------
  |  |   65|  17.7k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 17.6k, False: 72]
  |  |  ------------------
  ------------------
 1044|  17.6k|        if (OVS_LIKELY(nw_proto == IPPROTO_TCP)) {
  ------------------
  |  |   65|  17.6k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 10.0k, False: 7.67k]
  |  |  ------------------
  ------------------
 1045|  10.0k|            if (OVS_LIKELY(size >= TCP_HEADER_LEN)) {
  ------------------
  |  |   65|  10.0k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 9.93k, False: 71]
  |  |  ------------------
  ------------------
 1046|  9.93k|                const struct tcp_header *tcp = data;
 1047|  9.93k|                size_t tcp_hdr_len = TCP_OFFSET(tcp->tcp_ctl) * 4;
  ------------------
  |  |  906|  9.93k|#define TCP_OFFSET(tcp_ctl) (ntohs(tcp_ctl) >> 12)
  ------------------
 1048|       |
 1049|  9.93k|                if (OVS_LIKELY(tcp_hdr_len >= TCP_HEADER_LEN)
  ------------------
  |  |   65|  19.8k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 8.67k, False: 1.26k]
  |  |  ------------------
  ------------------
 1050|  8.67k|                    && OVS_LIKELY(size >= tcp_hdr_len)) {
  ------------------
  |  |   65|  8.67k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 8.62k, False: 48]
  |  |  ------------------
  ------------------
 1051|       |                    /* tcp_flags are not at the beginning of the block. */
 1052|  8.62k|                    miniflow_pad_from_64(mf, tcp_flags);
  ------------------
  |  |  315|  8.62k|    miniflow_pad_from_64_(MF, offsetof(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  241|  8.62k|#define miniflow_pad_from_64_(MF, OFS)                          \
  |  |  |  |  242|  8.62k|{                                                               \
  |  |  |  |  243|  8.62k|    MINIFLOW_ASSERT(MF.data < MF.end);                          \
  |  |  |  |  244|  8.62k|                                                                \
  |  |  |  |  245|  8.62k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  246|  8.62k|    miniflow_set_map(MF, OFS / 8);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|  8.62k|    {                                        \
  |  |  |  |  |  |  160|  8.62k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  8.62k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  8.62k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  8.62k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  8.62k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  8.62k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  8.62k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  8.62k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  8.62k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 8.62k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  8.62k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|  8.62k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|  8.62k|}
  |  |  |  |  ------------------
  |  |  |  |  247|  8.62k|                                                                \
  |  |  |  |  248|  8.62k|    memset((uint8_t *)MF.data, 0, (OFS) % 8);                   \
  |  |  |  |  249|  8.62k|}
  |  |  ------------------
  ------------------
 1053|  8.62k|                    miniflow_push_be32(mf, tcp_flags,
  ------------------
  |  |  300|  8.62k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  8.62k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  8.62k|    {                                           \
  |  |  |  |  |  |  180|  8.62k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  8.62k|                                                \
  |  |  |  |  |  |  182|  8.62k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded, False: 8.62k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|  8.62k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [True: 8.62k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|  8.62k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  8.62k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  8.62k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  8.62k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  8.62k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  8.62k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  8.62k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  8.62k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  8.62k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  8.62k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  8.62k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 8.62k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  8.62k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|  8.62k|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|  8.62k|        MF.data++;                              \
  |  |  |  |  |  |  189|  8.62k|    }                                           \
  |  |  |  |  |  |  190|  8.62k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1054|  8.62k|                                       TCP_FLAGS_BE32(tcp->tcp_ctl));
 1055|  8.62k|                    miniflow_push_be16(mf, tp_src, tcp->tcp_src);
  ------------------
  |  |  306|  8.62k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  8.62k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  8.62k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  8.62k|{                                               \
  |  |  |  |  |  |  197|  8.62k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  8.62k|                                                \
  |  |  |  |  |  |  199|  8.62k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 8.62k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|  8.62k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  8.62k|    {                                        \
  |  |  |  |  |  |  |  |  160|  8.62k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  8.62k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  8.62k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  8.62k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  8.62k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  8.62k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  8.62k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  8.62k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  8.62k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 8.62k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  8.62k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  8.62k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  8.62k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|  8.62k|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  8.62k|    } 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|  8.62k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1056|  8.62k|                    miniflow_push_be16(mf, tp_dst, tcp->tcp_dst);
  ------------------
  |  |  306|  8.62k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  8.62k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  8.62k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  8.62k|{                                               \
  |  |  |  |  |  |  197|  8.62k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  8.62k|                                                \
  |  |  |  |  |  |  199|  8.62k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 8.62k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|  8.62k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 8.62k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|  8.62k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  8.62k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  8.62k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  8.62k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  8.62k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  8.62k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  8.62k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  8.62k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  8.62k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  8.62k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  8.62k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 8.62k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  8.62k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|  8.62k|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  8.62k|    } 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|  8.62k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1057|  8.62k|                    miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|  8.62k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  8.62k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  8.62k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  8.62k|{                                               \
  |  |  |  |  |  |  197|  8.62k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  8.62k|                                                \
  |  |  |  |  |  |  199|  8.62k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 8.62k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|  8.62k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 8.62k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|  8.62k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 8.62k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|  8.62k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  8.62k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  8.62k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  8.62k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  8.62k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  8.62k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  8.62k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  8.62k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  8.62k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  8.62k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  8.62k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 8.62k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  8.62k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|  8.62k|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|  8.62k|    } 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|  8.62k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1058|  8.62k|                    miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|  8.62k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  8.62k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  8.62k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  8.62k|{                                               \
  |  |  |  |  |  |  197|  8.62k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  8.62k|                                                \
  |  |  |  |  |  |  199|  8.62k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 8.62k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|  8.62k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 8.62k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|  8.62k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 8.62k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|  8.62k|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [True: 8.62k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|  8.62k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  8.62k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  8.62k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  8.62k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  8.62k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  8.62k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  8.62k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  8.62k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  8.62k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  8.62k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  8.62k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 8.62k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  8.62k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|  8.62k|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|  8.62k|        MF.data++;                              \
  |  |  |  |  |  |  212|  8.62k|    }                                           \
  |  |  |  |  |  |  213|  8.62k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1059|  8.62k|                    if (dl_type == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (1059:25): [True: 1.93k, False: 6.69k]
  ------------------
 1060|  1.93k|                        dp_packet_update_rss_hash_ipv4_tcp_udp(packet);
 1061|  6.69k|                    } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1061:32): [True: 6.69k, False: 0]
  ------------------
 1062|  6.69k|                        dp_packet_update_rss_hash_ipv6_tcp_udp(packet);
 1063|  6.69k|                    }
 1064|  8.62k|                    dp_packet_l4_proto_set_tcp(packet);
 1065|  8.62k|                }
 1066|  9.93k|            }
 1067|  10.0k|        } else if (OVS_LIKELY(nw_proto == IPPROTO_UDP)) {
  ------------------
  |  |   65|  7.67k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 359, False: 7.31k]
  |  |  ------------------
  ------------------
 1068|    359|            if (OVS_LIKELY(size >= UDP_HEADER_LEN)) {
  ------------------
  |  |   65|    359|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 305, False: 54]
  |  |  ------------------
  ------------------
 1069|    305|                const struct udp_header *udp = data;
 1070|       |
 1071|    305|                miniflow_push_be16(mf, tp_src, udp->udp_src);
  ------------------
  |  |  306|    305|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    305|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    305|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    305|{                                               \
  |  |  |  |  |  |  197|    305|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    305|                                                \
  |  |  |  |  |  |  199|    305|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 305, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|    305|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    305|    {                                        \
  |  |  |  |  |  |  |  |  160|    305|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  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|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    305|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    305|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|    305|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    305|    } 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|    305|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1072|    305|                miniflow_push_be16(mf, tp_dst, udp->udp_dst);
  ------------------
  |  |  306|    305|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    305|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    305|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    305|{                                               \
  |  |  |  |  |  |  197|    305|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    305|                                                \
  |  |  |  |  |  |  199|    305|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 305]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    305|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 305, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|    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|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|    305|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    305|    } 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|    305|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1073|    305|                miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|    305|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    305|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    305|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    305|{                                               \
  |  |  |  |  |  |  197|    305|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    305|                                                \
  |  |  |  |  |  |  199|    305|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 305]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    305|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 305]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    305|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 305, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|    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|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|    305|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|    305|    } 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|    305|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1074|    305|                miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|    305|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    305|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    305|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    305|{                                               \
  |  |  |  |  |  |  197|    305|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    305|                                                \
  |  |  |  |  |  |  199|    305|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 305]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    305|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 305]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    305|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 305]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    305|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [True: 305, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|    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|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|    305|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|    305|        MF.data++;                              \
  |  |  |  |  |  |  212|    305|    }                                           \
  |  |  |  |  |  |  213|    305|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1075|    305|                if (dl_type == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (1075:21): [True: 162, False: 143]
  ------------------
 1076|    162|                    dp_packet_update_rss_hash_ipv4_tcp_udp(packet);
 1077|    162|                } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1077:28): [True: 143, False: 0]
  ------------------
 1078|    143|                    dp_packet_update_rss_hash_ipv6_tcp_udp(packet);
 1079|    143|                }
 1080|    305|                dp_packet_l4_proto_set_udp(packet);
 1081|    305|            }
 1082|  7.31k|        } else if (OVS_LIKELY(nw_proto == IPPROTO_SCTP)) {
  ------------------
  |  |   65|  7.31k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 744, False: 6.57k]
  |  |  ------------------
  ------------------
 1083|    744|            if (OVS_LIKELY(size >= SCTP_HEADER_LEN)) {
  ------------------
  |  |   65|    744|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 612, False: 132]
  |  |  ------------------
  ------------------
 1084|    612|                const struct sctp_header *sctp = data;
 1085|       |
 1086|    612|                miniflow_push_be16(mf, tp_src, sctp->sctp_src);
  ------------------
  |  |  306|    612|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    612|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    612|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    612|{                                               \
  |  |  |  |  |  |  197|    612|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    612|                                                \
  |  |  |  |  |  |  199|    612|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 612, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|    612|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    612|    {                                        \
  |  |  |  |  |  |  |  |  160|    612|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    612|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    612|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    612|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    612|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    612|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    612|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    612|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    612|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 612]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    612|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    612|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    612|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|    612|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    612|    } 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|    612|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1087|    612|                miniflow_push_be16(mf, tp_dst, sctp->sctp_dst);
  ------------------
  |  |  306|    612|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    612|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    612|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    612|{                                               \
  |  |  |  |  |  |  197|    612|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    612|                                                \
  |  |  |  |  |  |  199|    612|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 612]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    612|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 612, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|    612|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    612|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    612|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    612|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    612|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    612|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    612|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    612|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    612|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    612|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    612|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 612]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    612|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|    612|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    612|    } 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|    612|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1088|    612|                miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|    612|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    612|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    612|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    612|{                                               \
  |  |  |  |  |  |  197|    612|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    612|                                                \
  |  |  |  |  |  |  199|    612|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 612]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    612|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 612]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    612|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 612, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|    612|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    612|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    612|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    612|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    612|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    612|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    612|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    612|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    612|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    612|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    612|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 612]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    612|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|    612|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|    612|    } 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|    612|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1089|    612|                miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|    612|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    612|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    612|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    612|{                                               \
  |  |  |  |  |  |  197|    612|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    612|                                                \
  |  |  |  |  |  |  199|    612|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 612]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    612|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 612]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    612|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 612]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    612|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [True: 612, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|    612|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    612|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    612|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    612|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    612|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    612|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    612|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    612|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    612|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    612|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    612|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 612]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    612|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|    612|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|    612|        MF.data++;                              \
  |  |  |  |  |  |  212|    612|    }                                           \
  |  |  |  |  |  |  213|    612|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1090|    612|                dp_packet_l4_proto_set_sctp(packet);
 1091|    612|            }
 1092|  6.57k|        } else if (OVS_LIKELY(nw_proto == IPPROTO_ICMP)) {
  ------------------
  |  |   65|  6.57k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 3.05k, False: 3.51k]
  |  |  ------------------
  ------------------
 1093|  3.05k|            if (OVS_LIKELY(size >= ICMP_HEADER_LEN)) {
  ------------------
  |  |   65|  3.05k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 2.92k, False: 130]
  |  |  ------------------
  ------------------
 1094|  2.92k|                const struct icmp_header *icmp = data;
 1095|       |
 1096|  2.92k|                miniflow_push_be16(mf, tp_src, htons(icmp->icmp_type));
  ------------------
  |  |  306|  2.92k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  2.92k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  2.92k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  2.92k|{                                               \
  |  |  |  |  |  |  197|  2.92k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  2.92k|                                                \
  |  |  |  |  |  |  199|  2.92k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 2.92k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|  2.92k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  2.92k|    {                                        \
  |  |  |  |  |  |  |  |  160|  2.92k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  2.92k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  2.92k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  2.92k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  2.92k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  2.92k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  2.92k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  2.92k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  2.92k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 2.92k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  2.92k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  2.92k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  2.92k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|  2.92k|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  2.92k|    } 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.92k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1097|  2.92k|                miniflow_push_be16(mf, tp_dst, htons(icmp->icmp_code));
  ------------------
  |  |  306|  2.92k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  2.92k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  2.92k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  2.92k|{                                               \
  |  |  |  |  |  |  197|  2.92k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  2.92k|                                                \
  |  |  |  |  |  |  199|  2.92k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 2.92k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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.92k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 2.92k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|  2.92k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  2.92k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  2.92k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  2.92k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  2.92k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  2.92k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  2.92k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  2.92k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  2.92k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  2.92k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  2.92k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 2.92k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  2.92k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|  2.92k|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  2.92k|    } 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.92k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1098|  2.92k|                miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|  2.92k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  2.92k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  2.92k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  2.92k|{                                               \
  |  |  |  |  |  |  197|  2.92k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  2.92k|                                                \
  |  |  |  |  |  |  199|  2.92k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 2.92k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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.92k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 2.92k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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.92k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 2.92k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|  2.92k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  2.92k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  2.92k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  2.92k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  2.92k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  2.92k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  2.92k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  2.92k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  2.92k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  2.92k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  2.92k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 2.92k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  2.92k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|  2.92k|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|  2.92k|    } 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.92k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1099|  2.92k|                miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|  2.92k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  2.92k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  2.92k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  2.92k|{                                               \
  |  |  |  |  |  |  197|  2.92k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  2.92k|                                                \
  |  |  |  |  |  |  199|  2.92k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 2.92k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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.92k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 2.92k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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.92k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 2.92k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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.92k|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [True: 2.92k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|  2.92k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  2.92k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  2.92k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  2.92k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  2.92k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  2.92k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  2.92k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  2.92k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  2.92k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  2.92k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  2.92k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 2.92k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  2.92k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|  2.92k|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|  2.92k|        MF.data++;                              \
  |  |  |  |  |  |  212|  2.92k|    }                                           \
  |  |  |  |  |  |  213|  2.92k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1100|  2.92k|            }
 1101|  3.51k|        } else if (OVS_LIKELY(nw_proto == IPPROTO_IGMP)) {
  ------------------
  |  |   65|  3.51k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 2.28k, False: 1.23k]
  |  |  ------------------
  ------------------
 1102|  2.28k|            if (OVS_LIKELY(size >= IGMP_HEADER_LEN)) {
  ------------------
  |  |   65|  2.28k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 2.05k, False: 230]
  |  |  ------------------
  ------------------
 1103|  2.05k|                const struct igmp_header *igmp = data;
 1104|       |
 1105|  2.05k|                miniflow_push_be16(mf, tp_src, htons(igmp->igmp_type));
  ------------------
  |  |  306|  2.05k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  2.05k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  2.05k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  2.05k|{                                               \
  |  |  |  |  |  |  197|  2.05k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  2.05k|                                                \
  |  |  |  |  |  |  199|  2.05k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 2.05k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|  2.05k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  2.05k|    {                                        \
  |  |  |  |  |  |  |  |  160|  2.05k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  2.05k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  2.05k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  2.05k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  2.05k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  2.05k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  2.05k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  2.05k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  2.05k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 2.05k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  2.05k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  2.05k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  2.05k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|  2.05k|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  2.05k|    } 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.05k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1106|  2.05k|                miniflow_push_be16(mf, tp_dst, htons(igmp->igmp_code));
  ------------------
  |  |  306|  2.05k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  2.05k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  2.05k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  2.05k|{                                               \
  |  |  |  |  |  |  197|  2.05k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  2.05k|                                                \
  |  |  |  |  |  |  199|  2.05k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 2.05k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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.05k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 2.05k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|  2.05k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  2.05k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  2.05k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  2.05k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  2.05k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  2.05k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  2.05k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  2.05k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  2.05k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  2.05k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  2.05k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 2.05k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  2.05k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|  2.05k|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  2.05k|    } 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.05k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1107|       |                /* ct_tp_src/dst are not extracted for IGMP. */
 1108|  2.05k|                miniflow_pad_to_64(mf, tp_dst);
  ------------------
  |  |  312|  2.05k|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|  2.05k|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|  2.05k|{                                                               \
  |  |  |  |  234|  2.05k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|  2.05k|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|  2.05k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|  2.05k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  2.05k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  2.05k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  2.05k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  2.05k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  2.05k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  2.05k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  2.05k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  2.05k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 2.05k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  2.05k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|  2.05k|                                                                \
  |  |  |  |  237|  2.05k|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|  2.05k|    MF.data++;                                                  \
  |  |  |  |  239|  2.05k|}
  |  |  ------------------
  ------------------
 1109|  2.05k|                miniflow_push_be32(mf, igmp_group_ip4,
  ------------------
  |  |  300|  2.05k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  2.05k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  2.05k|    {                                           \
  |  |  |  |  |  |  180|  2.05k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  2.05k|                                                \
  |  |  |  |  |  |  182|  2.05k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 2.05k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|  2.05k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  2.05k|    {                                        \
  |  |  |  |  |  |  |  |  160|  2.05k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  2.05k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  2.05k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  2.05k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  2.05k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  2.05k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  2.05k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  2.05k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  2.05k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 2.05k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  2.05k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  2.05k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  2.05k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|  2.05k|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|  2.05k|    } 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.05k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1110|  2.05k|                                   get_16aligned_be32(&igmp->group));
 1111|  2.05k|                miniflow_pad_to_64(mf, igmp_group_ip4);
  ------------------
  |  |  312|  2.05k|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|  2.05k|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|  2.05k|{                                                               \
  |  |  |  |  234|  2.05k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|  2.05k|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|  2.05k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|  2.05k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  2.05k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  2.05k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  2.05k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  2.05k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  2.05k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  2.05k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  2.05k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  2.05k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 2.05k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  2.05k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|  2.05k|                                                                \
  |  |  |  |  237|  2.05k|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|  2.05k|    MF.data++;                                                  \
  |  |  |  |  239|  2.05k|}
  |  |  ------------------
  ------------------
 1112|  2.05k|            }
 1113|  2.28k|        } else if (OVS_LIKELY(nw_proto == IPPROTO_ICMPV6)) {
  ------------------
  |  |   65|  1.23k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 858, False: 372]
  |  |  ------------------
  ------------------
 1114|    858|            if (OVS_LIKELY(size >= sizeof(struct icmp6_data_header))) {
  ------------------
  |  |   65|    858|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 657, False: 201]
  |  |  ------------------
  ------------------
 1115|    657|                const union ovs_16aligned_in6_addr *nd_target;
 1116|    657|                struct eth_addr arp_buf[2];
 1117|       |                /* This will populate whether we received Option 1
 1118|       |                 * or Option 2. */
 1119|    657|                uint8_t opt_type;
 1120|       |                /* This holds the ND Reserved field. */
 1121|    657|                ovs_be32 rso_flags;
 1122|    657|                const struct icmp6_data_header *icmp6;
 1123|       |
 1124|    657|                icmp6 = data_pull(&data, &size, sizeof *icmp6);
 1125|    657|                if (parse_icmpv6(&data, &size, icmp6,
  ------------------
  |  Branch (1125:21): [True: 480, False: 177]
  ------------------
 1126|    657|                                 &rso_flags, &nd_target, arp_buf, &opt_type)) {
 1127|    480|                    if (nd_target) {
  ------------------
  |  Branch (1127:25): [True: 358, False: 122]
  ------------------
 1128|    358|                        miniflow_push_words(mf, nd_target, nd_target,
  ------------------
  |  |  318|    358|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|    358|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|    358|{                                                               \
  |  |  |  |  270|    358|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|    358|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|    358|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|    358|{                                                               \
  |  |  |  |  |  |  259|    358|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|    358|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|    358|                                                                \
  |  |  |  |  |  |  262|    358|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|    358|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    358|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    358|{                                                                       \
  |  |  |  |  |  |  |  |  151|    358|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    358|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    358|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    358|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    358|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    358|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 358]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    358|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    358|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|    358|}
  |  |  |  |  ------------------
  |  |  |  |  272|    358|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|    358|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|    358|}
  |  |  ------------------
  ------------------
 1129|    358|                                            sizeof *nd_target / sizeof(uint64_t));
 1130|    358|                    }
 1131|    480|                    miniflow_push_macs(mf, arp_sha, arp_buf);
  ------------------
  |  |  324|    480|    miniflow_push_macs_(MF, offsetof(struct flow, FIELD), VALUEP)
  |  |  ------------------
  |  |  |  |  289|    480|#define miniflow_push_macs_(MF, OFS, VALUEP)                    \
  |  |  |  |  290|    480|{                                                               \
  |  |  |  |  291|    480|    miniflow_set_maps(MF, (OFS) / 8, 2);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|    480|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|    480|{                                                               \
  |  |  |  |  |  |  259|    480|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|    480|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|    480|                                                                \
  |  |  |  |  |  |  262|    480|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|    480|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    480|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    480|{                                                                       \
  |  |  |  |  |  |  |  |  151|    480|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    480|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    480|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    480|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    480|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    480|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 480]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    480|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    480|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|    480|}
  |  |  |  |  ------------------
  |  |  |  |  292|    480|    memcpy(MF.data, (VALUEP), 2 * ETH_ADDR_LEN);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  205|    480|#define ETH_ADDR_LEN           6
  |  |  |  |  ------------------
  |  |  |  |  293|    480|    MF.data += 1;                   /* First word only. */      \
  |  |  |  |  294|    480|}
  |  |  ------------------
  ------------------
 1132|       |                    /* Populate options field and set the padding
 1133|       |                     * accordingly. */
 1134|    480|                    if (opt_type != 0) {
  ------------------
  |  Branch (1134:25): [True: 115, False: 365]
  ------------------
 1135|    115|                        miniflow_push_be16(mf, tcp_flags, htons(opt_type));
  ------------------
  |  |  306|    115|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    115|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    115|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    115|{                                               \
  |  |  |  |  |  |  197|    115|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    115|                                                \
  |  |  |  |  |  |  199|    115|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 115]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    115|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 115]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    115|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 115, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|    115|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    115|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    115|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    115|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    115|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    115|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    115|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    115|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    115|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    115|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    115|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 115]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    115|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|    115|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|    115|    } 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|    115|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1136|       |                        /* Pad to align with 64 bits.
 1137|       |                         * This will zero out the pad3 field. */
 1138|    115|                        miniflow_pad_to_64(mf, tcp_flags);
  ------------------
  |  |  312|    115|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|    115|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|    115|{                                                               \
  |  |  |  |  234|    115|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|    115|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|    115|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|    115|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    115|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    115|{                                                                       \
  |  |  |  |  |  |  |  |  151|    115|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    115|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    115|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    115|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    115|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    115|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 115]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    115|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|    115|                                                                \
  |  |  |  |  237|    115|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|    115|    MF.data++;                                                  \
  |  |  |  |  239|    115|}
  |  |  ------------------
  ------------------
 1139|    365|                    } else {
 1140|       |                        /* Pad to align with 64 bits.
 1141|       |                         * This will zero out the tcp_flags & pad3 field. */
 1142|    365|                        miniflow_pad_to_64(mf, arp_tha);
  ------------------
  |  |  312|    365|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|    365|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|    365|{                                                               \
  |  |  |  |  234|    365|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|    365|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|    365|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|    365|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    365|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    365|{                                                                       \
  |  |  |  |  |  |  |  |  151|    365|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    365|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    365|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    365|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    365|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    365|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 365]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    365|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|    365|                                                                \
  |  |  |  |  237|    365|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|    365|    MF.data++;                                                  \
  |  |  |  |  239|    365|}
  |  |  ------------------
  ------------------
 1143|    365|                    }
 1144|    480|                    miniflow_push_be16(mf, tp_src,
  ------------------
  |  |  306|    480|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    480|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    480|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    480|{                                               \
  |  |  |  |  |  |  197|    480|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    480|                                                \
  |  |  |  |  |  |  199|    480|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 480, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|    480|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    480|    {                                        \
  |  |  |  |  |  |  |  |  160|    480|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    480|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    480|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    480|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    480|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    480|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    480|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    480|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    480|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 480]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    480|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    480|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    480|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|    480|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    480|    } 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|    480|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1145|    480|                                       htons(icmp6->icmp6_base.icmp6_type));
 1146|    480|                    miniflow_push_be16(mf, tp_dst,
  ------------------
  |  |  306|    480|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    480|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    480|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    480|{                                               \
  |  |  |  |  |  |  197|    480|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    480|                                                \
  |  |  |  |  |  |  199|    480|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 480]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    480|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 480, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|    480|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    480|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    480|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    480|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    480|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    480|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    480|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    480|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    480|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    480|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    480|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 480]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    480|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|    480|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    480|    } 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|    480|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1147|    480|                                       htons(icmp6->icmp6_base.icmp6_code));
 1148|    480|                    miniflow_pad_to_64(mf, tp_dst);
  ------------------
  |  |  312|    480|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|    480|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|    480|{                                                               \
  |  |  |  |  234|    480|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|    480|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|    480|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|    480|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    480|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    480|{                                                                       \
  |  |  |  |  |  |  |  |  151|    480|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    480|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    480|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    480|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    480|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    480|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 480]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    480|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|    480|                                                                \
  |  |  |  |  237|    480|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|    480|    MF.data++;                                                  \
  |  |  |  |  239|    480|}
  |  |  ------------------
  ------------------
 1149|       |                    /* Fill ND reserved field. */
 1150|    480|                    miniflow_push_be32(mf, igmp_group_ip4, rso_flags);
  ------------------
  |  |  300|    480|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|    480|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|    480|    {                                           \
  |  |  |  |  |  |  180|    480|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|    480|                                                \
  |  |  |  |  |  |  182|    480|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 480, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|    480|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    480|    {                                        \
  |  |  |  |  |  |  |  |  160|    480|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    480|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    480|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    480|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    480|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    480|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    480|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    480|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    480|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 480]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    480|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    480|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    480|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|    480|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|    480|    } 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|    480|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1151|    480|                    miniflow_pad_to_64(mf, igmp_group_ip4);
  ------------------
  |  |  312|    480|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|    480|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|    480|{                                                               \
  |  |  |  |  234|    480|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|    480|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|    480|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|    480|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    480|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    480|{                                                                       \
  |  |  |  |  |  |  |  |  151|    480|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    480|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    480|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    480|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    480|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    480|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 480]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    480|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|    480|                                                                \
  |  |  |  |  237|    480|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|    480|    MF.data++;                                                  \
  |  |  |  |  239|    480|}
  |  |  ------------------
  ------------------
 1152|    480|                } else {
 1153|       |                    /* ICMPv6 but not ND. */
 1154|    177|                    miniflow_push_be16(mf, tp_src,
  ------------------
  |  |  306|    177|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    177|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    177|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    177|{                                               \
  |  |  |  |  |  |  197|    177|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    177|                                                \
  |  |  |  |  |  |  199|    177|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 177, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|    177|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    177|    {                                        \
  |  |  |  |  |  |  |  |  160|    177|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    177|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    177|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    177|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    177|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    177|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    177|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    177|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    177|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 177]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    177|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    177|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    177|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|    177|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    177|    } 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|    177|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1155|    177|                                       htons(icmp6->icmp6_base.icmp6_type));
 1156|    177|                    miniflow_push_be16(mf, tp_dst,
  ------------------
  |  |  306|    177|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    177|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    177|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    177|{                                               \
  |  |  |  |  |  |  197|    177|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    177|                                                \
  |  |  |  |  |  |  199|    177|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 177]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    177|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 177, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|    177|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    177|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    177|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    177|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    177|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    177|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    177|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    177|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    177|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    177|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    177|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 177]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    177|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|    177|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    177|    } 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|    177|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1157|    177|                                       htons(icmp6->icmp6_base.icmp6_code));
 1158|    177|                    miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|    177|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    177|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    177|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    177|{                                               \
  |  |  |  |  |  |  197|    177|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    177|                                                \
  |  |  |  |  |  |  199|    177|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 177]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    177|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 177]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    177|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 177, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|    177|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    177|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    177|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    177|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    177|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    177|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    177|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    177|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    177|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    177|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    177|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 177]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    177|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|    177|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|    177|    } 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|    177|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1159|    177|                    miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|    177|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    177|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    177|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    177|{                                               \
  |  |  |  |  |  |  197|    177|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    177|                                                \
  |  |  |  |  |  |  199|    177|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 177]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    177|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 177]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    177|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 177]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    177|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [True: 177, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|    177|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    177|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    177|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    177|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    177|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    177|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    177|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    177|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    177|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    177|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    177|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 177]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    177|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|    177|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|    177|        MF.data++;                              \
  |  |  |  |  |  |  212|    177|    }                                           \
  |  |  |  |  |  |  213|    177|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1160|    177|                }
 1161|    657|            }
 1162|    858|        }
 1163|  17.6k|    } else if (ct_nw_proto_p &&
  ------------------
  |  Branch (1163:16): [True: 0, False: 72]
  ------------------
 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|  62.8k| out:
 1174|  62.8k|    dst->map = mf.map;
 1175|  62.8k|}
flow_zero_wildcards:
 1288|  98.3k|{
 1289|  98.3k|    uint64_t *flow_u64 = (uint64_t *) flow;
 1290|  98.3k|    const uint64_t *wc_u64 = (const uint64_t *) &wildcards->masks;
 1291|  98.3k|    size_t i;
 1292|       |
 1293|  9.14M|    for (i = 0; i < FLOW_U64S; i++) {
  ------------------
  |  |  165|  9.14M|#define FLOW_U64S (sizeof(struct flow) / sizeof(uint64_t))
  ------------------
  |  Branch (1293:17): [True: 9.04M, False: 98.3k]
  ------------------
 1294|  9.04M|        flow_u64[i] &= wc_u64[i];
 1295|  9.04M|    }
 1296|  98.3k|}
ct_state_to_string:
 1416|  30.0k|{
 1417|  30.0k|    switch (state) {
 1418|      0|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
 1419|      0|        CS_STATES
  ------------------
  |  |  926|  1.14k|    CS_STATE(NEW,         0, "new")             \
  |  |  ------------------
  |  |  |  | 1418|  1.14k|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1418:37): [True: 1.14k, False: 28.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  927|  1.23k|    CS_STATE(ESTABLISHED, 1, "est")             \
  |  |  ------------------
  |  |  |  | 1418|  1.23k|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1418:37): [True: 1.23k, False: 28.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  928|  1.26k|    CS_STATE(RELATED,     2, "rel")             \
  |  |  ------------------
  |  |  |  | 1418|  1.26k|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1418:37): [True: 1.26k, False: 28.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  929|  1.26k|    CS_STATE(REPLY_DIR,   3, "rpl")             \
  |  |  ------------------
  |  |  |  | 1418|  1.14k|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1418:37): [True: 1.14k, False: 28.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  930|  1.26k|    CS_STATE(INVALID,     4, "inv")             \
  |  |  ------------------
  |  |  |  | 1418|  1.26k|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1418:37): [True: 1.26k, False: 28.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  931|  1.26k|    CS_STATE(TRACKED,     5, "trk")             \
  |  |  ------------------
  |  |  |  | 1418|  1.14k|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1418:37): [True: 1.14k, False: 28.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  932|  1.14k|    CS_STATE(SRC_NAT,     6, "snat")            \
  |  |  ------------------
  |  |  |  | 1418|  1.14k|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1418:37): [True: 1.14k, False: 28.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  933|  1.14k|    CS_STATE(DST_NAT,     7, "dnat")
  |  |  ------------------
  |  |  |  | 1418|  1.14k|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1418:37): [True: 1.14k, False: 28.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1420|      0|#undef CS_STATE
 1421|  20.5k|    default:
  ------------------
  |  Branch (1421:5): [True: 20.5k, False: 9.49k]
  ------------------
 1422|       |        return NULL;
 1423|  30.0k|    }
 1424|  30.0k|}
flow_tun_flag_to_string:
 1539|  3.16k|{
 1540|  3.16k|    switch (flags) {
 1541|    123|    case FLOW_TNL_F_DONT_FRAGMENT:
  ------------------
  |  |   61|    123|#define FLOW_TNL_F_DONT_FRAGMENT (1 << 1)
  ------------------
  |  Branch (1541:5): [True: 123, False: 3.03k]
  ------------------
 1542|    123|        return "df";
 1543|    122|    case FLOW_TNL_F_CSUM:
  ------------------
  |  |   62|    122|#define FLOW_TNL_F_CSUM (1 << 2)
  ------------------
  |  Branch (1543:5): [True: 122, False: 3.03k]
  ------------------
 1544|    122|        return "csum";
 1545|    489|    case FLOW_TNL_F_KEY:
  ------------------
  |  |   63|    489|#define FLOW_TNL_F_KEY (1 << 3)
  ------------------
  |  Branch (1545:5): [True: 489, False: 2.67k]
  ------------------
 1546|    489|        return "key";
 1547|    982|    case FLOW_TNL_F_OAM:
  ------------------
  |  |   56|    982|#define FLOW_TNL_F_OAM (1 << 0)
  ------------------
  |  Branch (1547:5): [True: 982, False: 2.17k]
  ------------------
 1548|    982|        return "oam";
 1549|  1.44k|    default:
  ------------------
  |  Branch (1549:5): [True: 1.44k, False: 1.71k]
  ------------------
 1550|       |        return NULL;
 1551|  3.16k|    }
 1552|  3.16k|}
format_flags:
 1557|  12.1k|{
 1558|  12.1k|    uint32_t bad = 0;
 1559|       |
 1560|  12.1k|    if (!flags) {
  ------------------
  |  Branch (1560:9): [True: 1.55k, False: 10.6k]
  ------------------
 1561|  1.55k|        ds_put_char(ds, '0');
 1562|  1.55k|        return;
 1563|  1.55k|    }
 1564|  62.1k|    while (flags) {
  ------------------
  |  Branch (1564:12): [True: 51.5k, False: 10.6k]
  ------------------
 1565|  51.5k|        uint32_t bit = rightmost_1bit(flags);
 1566|  51.5k|        const char *s;
 1567|       |
 1568|  51.5k|        s = bit_to_string(bit);
 1569|  51.5k|        if (s) {
  ------------------
  |  Branch (1569:13): [True: 48.8k, False: 2.67k]
  ------------------
 1570|  48.8k|            ds_put_format(ds, "%s%c", s, del);
 1571|  48.8k|        } else {
 1572|  2.67k|            bad |= bit;
 1573|  2.67k|        }
 1574|       |
 1575|  51.5k|        flags &= ~bit;
 1576|  51.5k|    }
 1577|       |
 1578|  10.6k|    if (bad) {
  ------------------
  |  Branch (1578:9): [True: 1.25k, False: 9.38k]
  ------------------
 1579|  1.25k|        ds_put_format(ds, "0x%"PRIx32"%c", bad, del);
 1580|  1.25k|    }
 1581|  10.6k|    ds_chomp(ds, del);
 1582|  10.6k|}
format_flags_masked:
 1588|  13.4k|{
 1589|  13.4k|    if (name) {
  ------------------
  |  Branch (1589:9): [True: 10.6k, False: 2.80k]
  ------------------
 1590|  10.6k|        ds_put_format(ds, "%s%s=%s", colors.param, name, colors.end);
 1591|  10.6k|    }
 1592|       |
 1593|  13.4k|    if (mask == max_mask) {
  ------------------
  |  Branch (1593:9): [True: 11.9k, False: 1.52k]
  ------------------
 1594|  11.9k|        format_flags(ds, bit_to_string, flags, '|');
 1595|  11.9k|        return;
 1596|  11.9k|    }
 1597|       |
 1598|  1.52k|    if (!mask) {
  ------------------
  |  Branch (1598:9): [True: 10, False: 1.51k]
  ------------------
 1599|     10|        ds_put_cstr(ds, "0/0");
 1600|     10|        return;
 1601|     10|    }
 1602|       |
 1603|  30.1k|    while (mask) {
  ------------------
  |  Branch (1603:12): [True: 28.6k, False: 1.51k]
  ------------------
 1604|  28.6k|        uint32_t bit = rightmost_1bit(mask);
 1605|  28.6k|        const char *s = bit_to_string(bit);
 1606|       |
 1607|  28.6k|        ds_put_format(ds, "%s%s", (flags & bit) ? "+" : "-",
  ------------------
  |  Branch (1607:35): [True: 10.4k, False: 18.1k]
  ------------------
 1608|  28.6k|                      s ? s : "[Unknown]");
  ------------------
  |  Branch (1608:23): [True: 8.02k, False: 20.5k]
  ------------------
 1609|  28.6k|        mask &= ~bit;
 1610|  28.6k|    }
 1611|  1.51k|}
format_packet_type_masked:
 1633|  21.2k|{
 1634|  21.2k|    if (value == htonl(PT_ETH) && mask == OVS_BE32_MAX) {
  ------------------
  |  |   43|     58|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  |  Branch (1634:9): [True: 58, False: 21.1k]
  |  Branch (1634:35): [True: 58, False: 0]
  ------------------
 1635|     58|        ds_put_cstr(s, "eth");
 1636|  21.1k|    } else {
 1637|  21.1k|        ds_put_cstr(s, "packet_type=(");
 1638|  21.1k|        put_u16_masked(s, pt_ns(value), pt_ns(mask));
 1639|  21.1k|        ds_put_char(s, ',');
 1640|  21.1k|        put_u16_masked(s, pt_ns_type(value), pt_ns_type(mask));
 1641|  21.1k|        ds_put_char(s, ')');
 1642|  21.1k|    }
 1643|  21.2k|}
flow_format:
 1807|  62.8k|{
 1808|  62.8k|    struct match match;
 1809|  62.8k|    struct flow_wildcards *wc = &match.wc;
 1810|       |
 1811|  62.8k|    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|  62.8k|    if (!flow->in_port.ofp_port) {
  ------------------
  |  Branch (1820:9): [True: 62.8k, False: 0]
  ------------------
 1821|  62.8k|        WC_UNMASK_FIELD(wc, in_port);
  ------------------
  |  |  205|  62.8k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1822|  62.8k|    }
 1823|  62.8k|    if (!flow->skb_priority) {
  ------------------
  |  Branch (1823:9): [True: 62.8k, False: 0]
  ------------------
 1824|  62.8k|        WC_UNMASK_FIELD(wc, skb_priority);
  ------------------
  |  |  205|  62.8k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1825|  62.8k|    }
 1826|  62.8k|    if (!flow->pkt_mark) {
  ------------------
  |  Branch (1826:9): [True: 62.8k, False: 0]
  ------------------
 1827|  62.8k|        WC_UNMASK_FIELD(wc, pkt_mark);
  ------------------
  |  |  205|  62.8k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1828|  62.8k|    }
 1829|  62.8k|    if (!flow->recirc_id) {
  ------------------
  |  Branch (1829:9): [True: 62.8k, False: 0]
  ------------------
 1830|  62.8k|        WC_UNMASK_FIELD(wc, recirc_id);
  ------------------
  |  |  205|  62.8k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1831|  62.8k|    }
 1832|  62.8k|    if (!flow->dp_hash) {
  ------------------
  |  Branch (1832:9): [True: 62.8k, False: 0]
  ------------------
 1833|  62.8k|        WC_UNMASK_FIELD(wc, dp_hash);
  ------------------
  |  |  205|  62.8k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1834|  62.8k|    }
 1835|  62.8k|    if (!flow->ct_state) {
  ------------------
  |  Branch (1835:9): [True: 62.8k, False: 0]
  ------------------
 1836|  62.8k|        WC_UNMASK_FIELD(wc, ct_state);
  ------------------
  |  |  205|  62.8k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1837|  62.8k|    }
 1838|  62.8k|    if (!flow->ct_zone) {
  ------------------
  |  Branch (1838:9): [True: 62.8k, False: 0]
  ------------------
 1839|  62.8k|        WC_UNMASK_FIELD(wc, ct_zone);
  ------------------
  |  |  205|  62.8k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1840|  62.8k|    }
 1841|  62.8k|    if (!flow->ct_mark) {
  ------------------
  |  Branch (1841:9): [True: 62.8k, False: 0]
  ------------------
 1842|  62.8k|        WC_UNMASK_FIELD(wc, ct_mark);
  ------------------
  |  |  205|  62.8k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1843|  62.8k|    }
 1844|  62.8k|    if (ovs_u128_is_zero(flow->ct_label)) {
  ------------------
  |  Branch (1844:9): [True: 62.8k, False: 0]
  ------------------
 1845|  62.8k|        WC_UNMASK_FIELD(wc, ct_label);
  ------------------
  |  |  205|  62.8k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1846|  62.8k|    }
 1847|  62.8k|    if (!is_ct_valid(flow, &match.wc, NULL) || !flow->ct_nw_proto) {
  ------------------
  |  Branch (1847:9): [True: 62.8k, False: 0]
  |  Branch (1847:48): [True: 0, False: 0]
  ------------------
 1848|  62.8k|        WC_UNMASK_FIELD(wc, ct_nw_proto);
  ------------------
  |  |  205|  62.8k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1849|  62.8k|        WC_UNMASK_FIELD(wc, ct_tp_src);
  ------------------
  |  |  205|  62.8k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1850|  62.8k|        WC_UNMASK_FIELD(wc, ct_tp_dst);
  ------------------
  |  |  205|  62.8k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1851|  62.8k|        if (flow->dl_type == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (1851:13): [True: 3.14k, False: 59.7k]
  ------------------
 1852|  3.14k|            WC_UNMASK_FIELD(wc, ct_nw_src);
  ------------------
  |  |  205|  3.14k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1853|  3.14k|            WC_UNMASK_FIELD(wc, ct_nw_dst);
  ------------------
  |  |  205|  3.14k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1854|  59.7k|        } else if (flow->dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1854:20): [True: 17.3k, False: 42.4k]
  ------------------
 1855|  17.3k|            WC_UNMASK_FIELD(wc, ct_ipv6_src);
  ------------------
  |  |  205|  17.3k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1856|  17.3k|            WC_UNMASK_FIELD(wc, ct_ipv6_dst);
  ------------------
  |  |  205|  17.3k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1857|  17.3k|        }
 1858|  62.8k|    }
 1859|  2.07M|    for (int i = 0; i < FLOW_N_REGS; i++) {
  ------------------
  |  |   33|  2.07M|#define FLOW_N_REGS 32
  ------------------
  |  Branch (1859:21): [True: 2.01M, False: 62.8k]
  ------------------
 1860|  2.01M|        if (!flow->regs[i]) {
  ------------------
  |  Branch (1860:13): [True: 2.01M, False: 0]
  ------------------
 1861|  2.01M|            WC_UNMASK_FIELD(wc, regs[i]);
  ------------------
  |  |  205|  2.01M|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1862|  2.01M|        }
 1863|  2.01M|    }
 1864|  62.8k|    if (!flow->metadata) {
  ------------------
  |  Branch (1864:9): [True: 62.8k, False: 0]
  ------------------
 1865|  62.8k|        WC_UNMASK_FIELD(wc, metadata);
  ------------------
  |  |  205|  62.8k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1866|  62.8k|    }
 1867|       |
 1868|  62.8k|    match_format(&match, port_map, ds, OFP_DEFAULT_PRIORITY);
  ------------------
  |  |  138|  62.8k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
 1869|  62.8k|}
flow_wildcards_init_catchall:
 1885|   450k|{
 1886|   450k|    memset(&wc->masks, 0, sizeof wc->masks);
 1887|   450k|}
flow_wildcards_init_for_packet:
 1896|  62.8k|{
 1897|  62.8k|    ovs_be16 dl_type = OVS_BE16_MAX;
  ------------------
  |  |   42|  62.8k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
 1898|       |
 1899|  62.8k|    memset(&wc->masks, 0x0, sizeof wc->masks);
 1900|       |
 1901|       |    /* Update this function whenever struct flow changes. */
 1902|  62.8k|    BUILD_ASSERT_DECL(FLOW_WC_SEQ == 43);
  ------------------
  |  |  270|  62.8k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  ------------------
 1903|       |
 1904|  62.8k|    if (flow_tnl_dst_is_set(&flow->tunnel)) {
  ------------------
  |  Branch (1904:9): [True: 0, False: 62.8k]
  ------------------
 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|  62.8k|    } else if (flow->tunnel.tun_id) {
  ------------------
  |  Branch (1938:16): [True: 0, False: 62.8k]
  ------------------
 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|  62.8k|    WC_MASK_FIELD(wc, skb_priority);
  ------------------
  |  |  201|  62.8k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1945|  62.8k|    WC_MASK_FIELD(wc, pkt_mark);
  ------------------
  |  |  201|  62.8k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1946|  62.8k|    WC_MASK_FIELD(wc, ct_state);
  ------------------
  |  |  201|  62.8k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1947|  62.8k|    WC_MASK_FIELD(wc, ct_zone);
  ------------------
  |  |  201|  62.8k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1948|  62.8k|    WC_MASK_FIELD(wc, ct_mark);
  ------------------
  |  |  201|  62.8k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1949|  62.8k|    WC_MASK_FIELD(wc, ct_label);
  ------------------
  |  |  201|  62.8k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1950|  62.8k|    WC_MASK_FIELD(wc, recirc_id);
  ------------------
  |  |  201|  62.8k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1951|  62.8k|    WC_MASK_FIELD(wc, dp_hash);
  ------------------
  |  |  201|  62.8k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1952|  62.8k|    WC_MASK_FIELD(wc, in_port);
  ------------------
  |  |  201|  62.8k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1953|       |
 1954|       |    /* actset_output wildcarded. */
 1955|       |
 1956|  62.8k|    WC_MASK_FIELD(wc, packet_type);
  ------------------
  |  |  201|  62.8k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1957|  62.8k|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (1957:9): [True: 52.9k, False: 9.99k]
  ------------------
 1958|  52.9k|        WC_MASK_FIELD(wc, dl_dst);
  ------------------
  |  |  201|  52.9k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1959|  52.9k|        WC_MASK_FIELD(wc, dl_src);
  ------------------
  |  |  201|  52.9k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1960|  52.9k|        WC_MASK_FIELD(wc, dl_type);
  ------------------
  |  |  201|  52.9k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1961|       |        /* No need to set mask of inner VLANs that don't exist. */
 1962|  53.8k|        for (int i = 0; i < FLOW_MAX_VLAN_HEADERS; i++) {
  ------------------
  |  |   75|  53.8k|#define FLOW_MAX_VLAN_HEADERS 2
  ------------------
  |  Branch (1962:25): [True: 53.5k, False: 349]
  ------------------
 1963|       |            /* Always show the first zero VLAN. */
 1964|  53.5k|            WC_MASK_FIELD(wc, vlans[i]);
  ------------------
  |  |  201|  53.5k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1965|  53.5k|            if (flow->vlans[i].tci == htons(0)) {
  ------------------
  |  Branch (1965:17): [True: 52.5k, False: 961]
  ------------------
 1966|  52.5k|                break;
 1967|  52.5k|            }
 1968|  53.5k|        }
 1969|  52.9k|        dl_type = flow->dl_type;
 1970|  52.9k|    } else {
 1971|  9.99k|        dl_type = pt_ns_type_be(flow->packet_type);
 1972|  9.99k|    }
 1973|       |
 1974|  62.8k|    if (dl_type == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (1974:9): [True: 3.14k, False: 59.7k]
  ------------------
 1975|  3.14k|        WC_MASK_FIELD(wc, nw_src);
  ------------------
  |  |  201|  3.14k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1976|  3.14k|        WC_MASK_FIELD(wc, nw_dst);
  ------------------
  |  |  201|  3.14k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1977|  3.14k|        WC_MASK_FIELD(wc, ct_nw_src);
  ------------------
  |  |  201|  3.14k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1978|  3.14k|        WC_MASK_FIELD(wc, ct_nw_dst);
  ------------------
  |  |  201|  3.14k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1979|  59.7k|    } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1979:16): [True: 17.3k, False: 42.4k]
  ------------------
 1980|  17.3k|        WC_MASK_FIELD(wc, ipv6_src);
  ------------------
  |  |  201|  17.3k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1981|  17.3k|        WC_MASK_FIELD(wc, ipv6_dst);
  ------------------
  |  |  201|  17.3k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1982|  17.3k|        WC_MASK_FIELD(wc, ipv6_label);
  ------------------
  |  |  201|  17.3k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1983|  17.3k|        if (is_nd(flow, wc)) {
  ------------------
  |  Branch (1983:13): [True: 471, False: 16.8k]
  ------------------
 1984|    471|            WC_MASK_FIELD(wc, arp_sha);
  ------------------
  |  |  201|    471|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1985|    471|            WC_MASK_FIELD(wc, arp_tha);
  ------------------
  |  |  201|    471|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1986|    471|            WC_MASK_FIELD(wc, nd_target);
  ------------------
  |  |  201|    471|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1987|  16.8k|        } else {
 1988|  16.8k|            WC_MASK_FIELD(wc, ct_ipv6_src);
  ------------------
  |  |  201|  16.8k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1989|  16.8k|            WC_MASK_FIELD(wc, ct_ipv6_dst);
  ------------------
  |  |  201|  16.8k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1990|  16.8k|        }
 1991|  42.4k|    } else if (dl_type == htons(ETH_TYPE_ARP) ||
  ------------------
  |  Branch (1991:16): [True: 357, False: 42.0k]
  ------------------
 1992|  42.0k|               dl_type == htons(ETH_TYPE_RARP)) {
  ------------------
  |  Branch (1992:16): [True: 186, False: 41.8k]
  ------------------
 1993|    543|        WC_MASK_FIELD(wc, nw_src);
  ------------------
  |  |  201|    543|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1994|    543|        WC_MASK_FIELD(wc, nw_dst);
  ------------------
  |  |  201|    543|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1995|    543|        WC_MASK_FIELD(wc, nw_proto);
  ------------------
  |  |  201|    543|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1996|    543|        WC_MASK_FIELD(wc, arp_sha);
  ------------------
  |  |  201|    543|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1997|    543|        WC_MASK_FIELD(wc, arp_tha);
  ------------------
  |  |  201|    543|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1998|    543|        return;
 1999|  41.8k|    } else if (eth_type_mpls(dl_type)) {
  ------------------
  |  Branch (1999:16): [True: 825, False: 41.0k]
  ------------------
 2000|  2.25k|        for (int i = 0; i < FLOW_MAX_MPLS_LABELS; i++) {
  ------------------
  |  |   66|  2.25k|#define FLOW_MAX_MPLS_LABELS 3
  ------------------
  |  Branch (2000:25): [True: 1.89k, False: 357]
  ------------------
 2001|  1.89k|            WC_MASK_FIELD(wc, mpls_lse[i]);
  ------------------
  |  |  201|  1.89k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2002|  1.89k|            if (flow->mpls_lse[i] & htonl(MPLS_BOS_MASK)) {
  ------------------
  |  Branch (2002:17): [True: 468, False: 1.42k]
  ------------------
 2003|    468|                break;
 2004|    468|            }
 2005|  1.89k|        }
 2006|    825|        return;
 2007|  41.0k|    } else if (flow->dl_type == htons(ETH_TYPE_NSH)) {
  ------------------
  |  Branch (2007:16): [True: 8.50k, False: 32.5k]
  ------------------
 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|  32.5k|    } else {
 2015|  32.5k|        return; /* Unknown ethertype. */
 2016|  32.5k|    }
 2017|       |
 2018|       |    /* IPv4 or IPv6. */
 2019|  28.9k|    WC_MASK_FIELD_MASK(wc, nw_frag, FLOW_NW_FRAG_MASK);
  ------------------
  |  |  203|  28.9k|    ((WC)->masks.FIELD |= (MASK))
  ------------------
 2020|  28.9k|    WC_MASK_FIELD(wc, nw_tos);
  ------------------
  |  |  201|  28.9k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2021|  28.9k|    WC_MASK_FIELD(wc, nw_ttl);
  ------------------
  |  |  201|  28.9k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2022|  28.9k|    WC_MASK_FIELD(wc, nw_proto);
  ------------------
  |  |  201|  28.9k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2023|  28.9k|    WC_MASK_FIELD(wc, ct_nw_proto);
  ------------------
  |  |  201|  28.9k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2024|  28.9k|    WC_MASK_FIELD(wc, ct_tp_src);
  ------------------
  |  |  201|  28.9k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2025|  28.9k|    WC_MASK_FIELD(wc, ct_tp_dst);
  ------------------
  |  |  201|  28.9k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2026|       |
 2027|       |    /* No transport layer header in later fragments. */
 2028|  28.9k|    if (!(flow->nw_frag & FLOW_NW_FRAG_LATER) &&
  ------------------
  |  |   55|  28.9k|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  |  Branch (2028:9): [True: 28.9k, False: 72]
  ------------------
 2029|  28.9k|        (flow->nw_proto == IPPROTO_ICMP ||
  ------------------
  |  Branch (2029:10): [True: 3.05k, False: 25.8k]
  ------------------
 2030|  25.8k|         flow->nw_proto == IPPROTO_ICMPV6 ||
  ------------------
  |  Branch (2030:10): [True: 858, False: 24.9k]
  ------------------
 2031|  24.9k|         flow->nw_proto == IPPROTO_TCP ||
  ------------------
  |  Branch (2031:10): [True: 10.0k, False: 14.9k]
  ------------------
 2032|  14.9k|         flow->nw_proto == IPPROTO_UDP ||
  ------------------
  |  Branch (2032:10): [True: 359, False: 14.6k]
  ------------------
 2033|  14.6k|         flow->nw_proto == IPPROTO_SCTP ||
  ------------------
  |  Branch (2033:10): [True: 744, False: 13.8k]
  ------------------
 2034|  17.3k|         flow->nw_proto == IPPROTO_IGMP)) {
  ------------------
  |  Branch (2034:10): [True: 2.28k, False: 11.5k]
  ------------------
 2035|  17.3k|        WC_MASK_FIELD(wc, tp_src);
  ------------------
  |  |  201|  17.3k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2036|  17.3k|        WC_MASK_FIELD(wc, tp_dst);
  ------------------
  |  |  201|  17.3k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2037|       |
 2038|  17.3k|        if (flow->nw_proto == IPPROTO_TCP) {
  ------------------
  |  Branch (2038:13): [True: 10.0k, False: 7.30k]
  ------------------
 2039|  10.0k|            WC_MASK_FIELD(wc, tcp_flags);
  ------------------
  |  |  201|  10.0k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2040|  10.0k|        } else if (flow->nw_proto == IPPROTO_IGMP) {
  ------------------
  |  Branch (2040:20): [True: 2.28k, False: 5.01k]
  ------------------
 2041|  2.28k|            WC_MASK_FIELD(wc, igmp_group_ip4);
  ------------------
  |  |  201|  2.28k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2042|  2.28k|        }
 2043|  17.3k|    }
 2044|  28.9k|}
flow_wildcards_equal:
 2230|  50.4k|{
 2231|  50.4k|    return flow_equal(&a->masks, &b->masks);
 2232|  50.4k|}
flow_wildcards_set_reg_mask:
 2275|  14.5k|{
 2276|  14.5k|    wc->masks.regs[idx] = mask;
 2277|  14.5k|}
flow_wildcards_set_xreg_mask:
 2283|  7.59k|{
 2284|  7.59k|    flow_set_xreg(&wc->masks, idx, mask);
 2285|  7.59k|}
flow_wildcards_set_xxreg_mask:
 2292|  5.97k|{
 2293|  5.97k|    flow_set_xxreg(&wc->masks, idx, mask);
 2294|  5.97k|}
flow_hash_fields_to_str:
 2723|  3.58k|{
 2724|  3.58k|    switch (fields) {
 2725|    641|    case NX_HASH_FIELDS_ETH_SRC: return "eth_src";
  ------------------
  |  Branch (2725:5): [True: 641, False: 2.94k]
  ------------------
 2726|    567|    case NX_HASH_FIELDS_SYMMETRIC_L4: return "symmetric_l4";
  ------------------
  |  Branch (2726:5): [True: 567, False: 3.01k]
  ------------------
 2727|     18|    case NX_HASH_FIELDS_SYMMETRIC_L3L4: return "symmetric_l3l4";
  ------------------
  |  Branch (2727:5): [True: 18, False: 3.56k]
  ------------------
 2728|    264|    case NX_HASH_FIELDS_SYMMETRIC_L3L4_UDP: return "symmetric_l3l4+udp";
  ------------------
  |  Branch (2728:5): [True: 264, False: 3.31k]
  ------------------
 2729|     70|    case NX_HASH_FIELDS_NW_SRC: return "nw_src";
  ------------------
  |  Branch (2729:5): [True: 70, False: 3.51k]
  ------------------
 2730|  1.27k|    case NX_HASH_FIELDS_NW_DST: return "nw_dst";
  ------------------
  |  Branch (2730:5): [True: 1.27k, False: 2.30k]
  ------------------
 2731|    424|    case NX_HASH_FIELDS_SYMMETRIC_L3: return "symmetric_l3";
  ------------------
  |  Branch (2731:5): [True: 424, False: 3.15k]
  ------------------
 2732|    321|    default: return "<unknown>";
  ------------------
  |  Branch (2732:5): [True: 321, False: 3.26k]
  ------------------
 2733|  3.58k|    }
 2734|  3.58k|}
flow_hash_fields_valid:
 2739|  9.86k|{
 2740|  9.86k|    return fields == NX_HASH_FIELDS_ETH_SRC
  ------------------
  |  Branch (2740:12): [True: 833, False: 9.03k]
  ------------------
 2741|  9.03k|        || fields == NX_HASH_FIELDS_SYMMETRIC_L4
  ------------------
  |  Branch (2741:12): [True: 1.63k, False: 7.39k]
  ------------------
 2742|  7.39k|        || fields == NX_HASH_FIELDS_SYMMETRIC_L3L4
  ------------------
  |  Branch (2742:12): [True: 2.10k, False: 5.29k]
  ------------------
 2743|  5.29k|        || fields == NX_HASH_FIELDS_SYMMETRIC_L3L4_UDP
  ------------------
  |  Branch (2743:12): [True: 291, False: 5.00k]
  ------------------
 2744|  5.00k|        || fields == NX_HASH_FIELDS_NW_SRC
  ------------------
  |  Branch (2744:12): [True: 81, False: 4.92k]
  ------------------
 2745|  4.92k|        || fields == NX_HASH_FIELDS_NW_DST
  ------------------
  |  Branch (2745:12): [True: 2.32k, False: 2.59k]
  ------------------
 2746|  2.59k|        || fields == NX_HASH_FIELDS_SYMMETRIC_L3;
  ------------------
  |  Branch (2746:12): [True: 425, False: 2.17k]
  ------------------
 2747|  9.86k|}
flow_set_vlan_vid:
 2805|    217|{
 2806|       |    ovs_be16 mask = htons(VLAN_VID_MASK | VLAN_CFI);
 2807|    217|    flow->vlans[0].tci &= ~mask;
 2808|    217|    flow->vlans[0].tci |= vid & mask;
 2809|    217|}
flow_set_vlan_pcp:
 2820|     96|{
 2821|     96|    pcp &= 0x07;
 2822|     96|    flow->vlans[id].tci &= ~htons(VLAN_PCP_MASK);
 2823|       |    flow->vlans[id].tci |= htons((pcp << VLAN_PCP_SHIFT) | VLAN_CFI);
 2824|     96|}
flow_count_vlan_headers:
 2829|  5.99k|{
 2830|  5.99k|    int i;
 2831|       |
 2832|  10.0k|    for (i = 0; i < FLOW_MAX_VLAN_HEADERS; i++) {
  ------------------
  |  |   75|  10.0k|#define FLOW_MAX_VLAN_HEADERS 2
  ------------------
  |  Branch (2832:17): [True: 9.58k, False: 490]
  ------------------
 2833|  9.58k|        if (!(flow->vlans[i].tci & htons(VLAN_CFI))) {
  ------------------
  |  Branch (2833:13): [True: 5.50k, False: 4.07k]
  ------------------
 2834|  5.50k|            break;
 2835|  5.50k|        }
 2836|  9.58k|    }
 2837|  5.99k|    return i;
 2838|  5.99k|}
flow_pop_vlan:
 2860|  5.99k|{
 2861|  5.99k|    int n = flow_count_vlan_headers(flow);
 2862|  5.99k|    if (n > 1) {
  ------------------
  |  Branch (2862:9): [True: 490, False: 5.50k]
  ------------------
 2863|    490|        if (wc) {
  ------------------
  |  Branch (2863:13): [True: 0, False: 490]
  ------------------
 2864|      0|            memset(&wc->masks.vlans[1], 0xff,
 2865|      0|                   sizeof(union flow_vlan_hdr) * (n - 1));
 2866|      0|        }
 2867|    490|        memmove(&flow->vlans[0], &flow->vlans[1],
 2868|    490|                sizeof(union flow_vlan_hdr) * (n - 1));
 2869|    490|    }
 2870|  5.99k|    if (n > 0) {
  ------------------
  |  Branch (2870:9): [True: 3.58k, False: 2.41k]
  ------------------
 2871|  3.58k|        memset(&flow->vlans[n - 1], 0, sizeof(union flow_vlan_hdr));
 2872|  3.58k|    }
 2873|  5.99k|}
flow_push_vlan_uninit:
 2877|  1.54k|{
 2878|  1.54k|    if (wc) {
  ------------------
  |  Branch (2878:9): [True: 0, False: 1.54k]
  ------------------
 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.54k|    memmove(&flow->vlans[1], &flow->vlans[0],
 2885|  1.54k|            sizeof(union flow_vlan_hdr) * (FLOW_MAX_VLAN_HEADERS - 1));
  ------------------
  |  |   75|  1.54k|#define FLOW_MAX_VLAN_HEADERS 2
  ------------------
 2886|  1.54k|    memset(&flow->vlans[0], 0, sizeof(union flow_vlan_hdr));
 2887|  1.54k|}
flow_set_mpls_label:
 3076|  2.20k|{
 3077|  2.20k|    set_mpls_lse_label(&flow->mpls_lse[idx], label);
 3078|  2.20k|}
flow_set_mpls_ttl:
 3084|    207|{
 3085|    207|    set_mpls_lse_ttl(&flow->mpls_lse[idx], ttl);
 3086|    207|}
flow_set_mpls_tc:
 3092|  1.19k|{
 3093|  1.19k|    set_mpls_lse_tc(&flow->mpls_lse[idx], tc);
 3094|  1.19k|}
flow_set_mpls_bos:
 3099|    224|{
 3100|    224|    set_mpls_lse_bos(&flow->mpls_lse[idx], bos);
 3101|    224|}
miniflow_init:
 3474|  76.4k|{
 3475|  76.4k|    uint64_t *dst_u64 = miniflow_values(dst);
 3476|  76.4k|    size_t idx;
 3477|       |
 3478|   265k|    FLOWMAP_FOR_EACH_INDEX(idx, dst->map) {
  ------------------
  |  |  337|  76.4k|    for (struct flowmap_aux aux__ = FLOWMAP_AUX_INITIALIZER(MAP);   \
  |  |  ------------------
  |  |  |  |  331|  76.4k|#define FLOWMAP_AUX_INITIALIZER(FLOWMAP) { .unit = 0, .map = (FLOWMAP) }
  |  |  ------------------
  |  |  338|   341k|         flowmap_next_index(&aux__, &(IDX));)
  |  |  ------------------
  |  |  |  Branch (338:10): [True: 265k, False: 76.4k]
  |  |  ------------------
  ------------------
 3479|   265k|        *dst_u64++ = flow_u64_value(src, idx);
 3480|   265k|    }
 3481|  76.4k|}
miniflow_map_init:
 3486|  38.2k|{
 3487|       |    /* Initialize map, counting the number of nonzero elements. */
 3488|  38.2k|    flowmap_init(&flow->map);
 3489|  3.55M|    for (size_t i = 0; i < FLOW_U64S; i++) {
  ------------------
  |  |  165|  3.55M|#define FLOW_U64S (sizeof(struct flow) / sizeof(uint64_t))
  ------------------
  |  Branch (3489:24): [True: 3.51M, False: 38.2k]
  ------------------
 3490|  3.51M|        if (flow_u64_value(src, i)) {
  ------------------
  |  Branch (3490:13): [True: 132k, False: 3.38M]
  ------------------
 3491|   132k|            flowmap_set(&flow->map, i, 1);
 3492|   132k|        }
 3493|  3.51M|    }
 3494|  38.2k|}
miniflow_alloc:
 3501|  38.2k|{
 3502|  38.2k|    size_t n_values = miniflow_n_values(src);
 3503|  38.2k|    size_t data_size = MINIFLOW_VALUES_SIZE(n_values);
  ------------------
  |  |  527|  38.2k|#define MINIFLOW_VALUES_SIZE(COUNT) ((COUNT) * sizeof(uint64_t))
  ------------------
 3504|  38.2k|    struct miniflow *dst = xmalloc(n * (sizeof *src + data_size));
 3505|  38.2k|    size_t i;
 3506|       |
 3507|  38.2k|    COVERAGE_INC(miniflow_malloc);
  ------------------
  |  |   83|  38.2k|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  38.2k|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
 3508|       |
 3509|   114k|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (3509:17): [True: 76.4k, False: 38.2k]
  ------------------
 3510|  76.4k|        *dst = *src;   /* Copy maps. */
 3511|  76.4k|        dsts[i] = dst;
 3512|  76.4k|        dst += 1;      /* Just past the maps. */
 3513|  76.4k|        dst = (struct miniflow *)((uint64_t *)dst + n_values); /* Skip data. */
 3514|  76.4k|    }
 3515|  38.2k|    return data_size;
 3516|  38.2k|}
miniflow_expand:
 3547|   139k|{
 3548|   139k|    memset(dst, 0, sizeof *dst);
 3549|   139k|    flow_union_with_miniflow(dst, src);
 3550|   139k|}
minimask_init:
 3616|  38.2k|{
 3617|  38.2k|    miniflow_init(&mask->masks, &wc->masks);
 3618|  38.2k|}
minimask_expand:
 3660|  38.2k|{
 3661|  38.2k|    miniflow_expand(&mask->masks, &wc->masks);
 3662|  38.2k|}
flow.c:parse_ipv6_ext_hdrs__:
  491|  16.7k|{
  492|  16.7k|    if (frag_hdr) {
  ------------------
  |  Branch (492:9): [True: 0, False: 16.7k]
  ------------------
  493|      0|        *frag_hdr = NULL;
  494|      0|    }
  495|       |
  496|  16.7k|    if (rt_hdr) {
  ------------------
  |  Branch (496:9): [True: 0, False: 16.7k]
  ------------------
  497|      0|        *rt_hdr = NULL;
  498|      0|    }
  499|       |
  500|  28.1k|    while (1) {
  ------------------
  |  Branch (500:12): [True: 28.1k, Folded]
  ------------------
  501|  28.1k|        if (OVS_LIKELY((*nw_proto != IPPROTO_HOPOPTS)
  ------------------
  |  |   65|   174k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 14.8k, False: 13.3k]
  |  |  |  Branch (65:51): [True: 15.7k, False: 12.3k]
  |  |  |  Branch (65:51): [True: 15.2k, False: 494]
  |  |  |  Branch (65:51): [True: 15.2k, False: 26]
  |  |  |  Branch (65:51): [True: 15.0k, False: 188]
  |  |  |  Branch (65:51): [True: 14.8k, False: 209]
  |  |  ------------------
  ------------------
  502|  28.1k|                       && (*nw_proto != IPPROTO_ROUTING)
  503|  28.1k|                       && (*nw_proto != IPPROTO_DSTOPTS)
  504|  28.1k|                       && (*nw_proto != IPPROTO_AH)
  505|  28.1k|                       && (*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|  14.8k|            return true;
  510|  14.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|  13.3k|        if (OVS_UNLIKELY(*sizep < 8)) {
  ------------------
  |  |   66|  13.3k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 215, False: 13.0k]
  |  |  ------------------
  ------------------
  518|    215|            return false;
  519|    215|        }
  520|       |
  521|  13.0k|        if ((*nw_proto == IPPROTO_HOPOPTS)
  ------------------
  |  Branch (521:13): [True: 12.2k, False: 841]
  ------------------
  522|  12.2k|            || (*nw_proto == IPPROTO_DSTOPTS)) {
  ------------------
  |  Branch (522:16): [True: 24, False: 817]
  ------------------
  523|       |            /* These headers, while different, have the fields we care
  524|       |             * about in the same location and with the same
  525|       |             * interpretation. */
  526|  12.2k|            const struct ip6_ext *ext_hdr = *datap;
  527|  12.2k|            *nw_proto = ext_hdr->ip6e_nxt;
  528|  12.2k|            if (OVS_UNLIKELY(!data_try_pull(datap, sizep,
  ------------------
  |  |   66|  12.2k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 1.54k, False: 10.7k]
  |  |  ------------------
  ------------------
  529|  12.2k|                                            (ext_hdr->ip6e_len + 1) * 8))) {
  530|  1.54k|                return false;
  531|  1.54k|            }
  532|  12.2k|        } else if (*nw_proto == IPPROTO_ROUTING) {
  ------------------
  |  Branch (532:20): [True: 491, False: 326]
  ------------------
  533|    491|            const struct ip6_rt_hdr *tmp;
  534|    491|            if (!rt_hdr) {
  ------------------
  |  Branch (534:17): [True: 152, False: 339]
  ------------------
  535|    152|                rt_hdr = &tmp;
  536|    152|            }
  537|       |
  538|    491|            *rt_hdr = *datap;
  539|    491|            *nw_proto = (*rt_hdr)->nexthdr;
  540|    491|            if (OVS_UNLIKELY(!data_try_pull(datap, sizep,
  ------------------
  |  |   66|    491|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 31, False: 460]
  |  |  ------------------
  ------------------
  541|    491|                                            ((*rt_hdr)->hdrlen + 1) * 8))) {
  542|     31|                return false;
  543|     31|            }
  544|    491|        } else if (*nw_proto == IPPROTO_AH) {
  ------------------
  |  Branch (544:20): [True: 117, False: 209]
  ------------------
  545|       |            /* A standard AH definition isn't available, but the fields
  546|       |             * we care about are in the same location as the generic
  547|       |             * option header--only the header length is calculated
  548|       |             * differently. */
  549|    117|            const struct ip6_ext *ext_hdr = *datap;
  550|    117|            *nw_proto = ext_hdr->ip6e_nxt;
  551|    117|            if (OVS_UNLIKELY(!data_try_pull(datap, sizep,
  ------------------
  |  |   66|    117|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 24, False: 93]
  |  |  ------------------
  ------------------
  552|    117|                                            (ext_hdr->ip6e_len + 2) * 4))) {
  553|     24|                return false;
  554|     24|            }
  555|    209|        } else if (*nw_proto == IPPROTO_FRAGMENT) {
  ------------------
  |  Branch (555:20): [True: 209, False: 0]
  ------------------
  556|    209|            const struct ovs_16aligned_ip6_frag *tmp;
  557|    209|            if (!frag_hdr) {
  ------------------
  |  Branch (557:17): [True: 59, False: 150]
  ------------------
  558|     59|                frag_hdr = &tmp;
  559|     59|            }
  560|       |
  561|    209|            *frag_hdr = *datap;
  562|       |
  563|    209|            *nw_proto = (*frag_hdr)->ip6f_nxt;
  564|    209|            if (!data_try_pull(datap, sizep, sizeof **frag_hdr)) {
  ------------------
  |  Branch (564:17): [True: 0, False: 209]
  ------------------
  565|      0|                return false;
  566|      0|            }
  567|       |
  568|       |            /* We only process the first fragment. */
  569|    209|            if ((*frag_hdr)->ip6f_offlg != htons(0)) {
  ------------------
  |  Branch (569:17): [True: 148, False: 61]
  ------------------
  570|    148|                *nw_frag = FLOW_NW_FRAG_ANY;
  ------------------
  |  |   54|    148|#define FLOW_NW_FRAG_ANY   (1 << 0) /* Set for any IP frag. */
  ------------------
  571|    148|                if (((*frag_hdr)->ip6f_offlg & IP6F_OFF_MASK) != htons(0)) {
  ------------------
  |  Branch (571:21): [True: 26, False: 122]
  ------------------
  572|     26|                    *nw_frag |= FLOW_NW_FRAG_LATER;
  ------------------
  |  |   55|     26|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  573|     26|                    *nw_proto = IPPROTO_FRAGMENT;
  574|       |                    return true;
  575|     26|                }
  576|    148|            }
  577|    209|        }
  578|  13.0k|    }
  579|  16.7k|}
flow.c:data_pull:
  110|  94.2k|{
  111|  94.2k|    const char *data = *datap;
  112|  94.2k|    *datap = data + size;
  113|  94.2k|    *sizep -= size;
  114|  94.2k|    return data;
  115|  94.2k|}
flow.c:parse_vlan:
  350|  26.9k|{
  351|  26.9k|    const ovs_be16 *eth_type;
  352|       |
  353|  26.9k|    data_pull(datap, sizep, ETH_ADDR_LEN * 2);
  ------------------
  |  |  205|  26.9k|#define ETH_ADDR_LEN           6
  ------------------
  354|       |
  355|  26.9k|    eth_type = *datap;
  356|       |
  357|  26.9k|    size_t n;
  358|  27.8k|    for (n = 0; eth_type_vlan(*eth_type) && n < flow_vlan_limit; n++) {
  ------------------
  |  Branch (358:17): [True: 1.33k, False: 26.5k]
  |  Branch (358:45): [True: 1.02k, False: 313]
  ------------------
  359|  1.02k|        if (OVS_UNLIKELY(*sizep < sizeof(ovs_be32) + sizeof(ovs_be16))) {
  ------------------
  |  |   66|  1.02k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 62, False: 961]
  |  |  ------------------
  ------------------
  360|     62|            break;
  361|     62|        }
  362|       |
  363|    961|        memset(vlan_hdrs + n, 0, sizeof(union flow_vlan_hdr));
  364|    961|        const ovs_16aligned_be32 *qp = data_pull(datap, sizep, sizeof *qp);
  365|    961|        vlan_hdrs[n].qtag = get_16aligned_be32(qp);
  366|       |        vlan_hdrs[n].tci |= htons(VLAN_CFI);
  367|    961|        eth_type = *datap;
  368|    961|    }
  369|  26.9k|    return n;
  370|  26.9k|}
flow.c:parse_ethertype:
  374|  26.9k|{
  375|  26.9k|    const struct llc_snap_header *llc;
  376|  26.9k|    ovs_be16 proto;
  377|       |
  378|  26.9k|    proto = *(ovs_be16 *) data_pull(datap, sizep, sizeof proto);
  379|  26.9k|    if (OVS_LIKELY(ntohs(proto) >= ETH_TYPE_MIN)) {
  ------------------
  |  |   65|  26.9k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 25.2k, False: 1.65k]
  |  |  ------------------
  ------------------
  380|  25.2k|        return proto;
  381|  25.2k|    }
  382|       |
  383|  1.65k|    if (OVS_UNLIKELY(*sizep < sizeof *llc)) {
  ------------------
  |  |   66|  1.65k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 445, False: 1.20k]
  |  |  ------------------
  ------------------
  384|    445|        return htons(FLOW_DL_TYPE_NONE);
  385|    445|    }
  386|       |
  387|  1.20k|    llc = *datap;
  388|  1.20k|    if (OVS_UNLIKELY(llc->llc.llc_dsap != LLC_DSAP_SNAP
  ------------------
  |  |   66|  4.18k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 1.10k, False: 106]
  |  |  |  Branch (66:53): [True: 955, False: 254]
  |  |  |  Branch (66:53): [True: 94, False: 160]
  |  |  |  Branch (66:53): [True: 18, False: 142]
  |  |  |  Branch (66:53): [True: 36, False: 106]
  |  |  ------------------
  ------------------
  389|  1.20k|                     || llc->llc.llc_ssap != LLC_SSAP_SNAP
  390|  1.20k|                     || llc->llc.llc_cntl != LLC_CNTL_SNAP
  391|  1.20k|                     || memcmp(llc->snap.snap_org, SNAP_ORG_ETHERNET,
  392|  1.20k|                               sizeof llc->snap.snap_org))) {
  393|  1.10k|        return htons(FLOW_DL_TYPE_NONE);
  394|  1.10k|    }
  395|       |
  396|    106|    data_pull(datap, sizep, sizeof *llc);
  397|       |
  398|    106|    if (OVS_LIKELY(ntohs(llc->snap.snap_type) >= ETH_TYPE_MIN)) {
  ------------------
  |  |   65|    106|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 95, False: 11]
  |  |  ------------------
  ------------------
  399|     95|        return llc->snap.snap_type;
  400|     95|    }
  401|       |
  402|     11|    return htons(FLOW_DL_TYPE_NONE);
  403|    106|}
flow.c:parse_mpls:
  334|    825|{
  335|    825|    const struct mpls_hdr *mh;
  336|    825|    int count = 0;
  337|       |
  338|  2.40k|    while ((mh = data_try_pull(datap, sizep, sizeof *mh))) {
  ------------------
  |  Branch (338:12): [True: 2.05k, False: 353]
  ------------------
  339|  2.05k|        count++;
  340|  2.05k|        if (mh->mpls_lse.lo & htons(1 << MPLS_BOS_SHIFT)) {
  ------------------
  |  Branch (340:13): [True: 472, False: 1.57k]
  ------------------
  341|    472|            break;
  342|    472|        }
  343|  2.05k|    }
  344|    825|    return MIN(count, FLOW_MAX_MPLS_LABELS);
  ------------------
  |  |   91|    825|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (91:20): [True: 513, False: 312]
  |  |  ------------------
  ------------------
  345|    825|}
flow.c:ipv4_sanity_check:
  685|  3.14k|{
  686|  3.14k|    int ip_len;
  687|  3.14k|    uint16_t tot_len;
  688|       |
  689|  3.14k|    if (OVS_UNLIKELY(size < IP_HEADER_LEN)) {
  ------------------
  |  |   66|  3.14k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 71, False: 3.07k]
  |  |  ------------------
  ------------------
  690|     71|        COVERAGE_INC(miniflow_extract_ipv4_pkt_too_short);
  ------------------
  |  |   83|     71|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|     71|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  691|     71|        return false;
  692|     71|    }
  693|  3.07k|    ip_len = IP_IHL(nh->ip_ihl_ver) * 4;
  ------------------
  |  |  694|  3.07k|#define IP_IHL(ip_ihl_ver) ((ip_ihl_ver) & 15)
  ------------------
  694|       |
  695|  3.07k|    if (OVS_UNLIKELY(ip_len < IP_HEADER_LEN || size < ip_len)) {
  ------------------
  |  |   66|  6.10k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 57, False: 3.01k]
  |  |  |  Branch (66:53): [True: 41, False: 3.03k]
  |  |  |  Branch (66:53): [True: 16, False: 3.01k]
  |  |  ------------------
  ------------------
  696|     57|        COVERAGE_INC(miniflow_extract_ipv4_pkt_len_error);
  ------------------
  |  |   83|     57|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|     57|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  697|     57|        return false;
  698|     57|    }
  699|       |
  700|  3.01k|    tot_len = ntohs(nh->ip_tot_len);
  701|  3.01k|    if (OVS_UNLIKELY(tot_len > size || ip_len > tot_len ||
  ------------------
  |  |   66|  11.8k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 162, False: 2.85k]
  |  |  |  Branch (66:53): [True: 73, False: 2.94k]
  |  |  |  Branch (66:53): [True: 89, False: 2.85k]
  |  |  |  Branch (66:53): [True: 0, False: 2.85k]
  |  |  ------------------
  ------------------
  702|  3.01k|                size - tot_len > UINT16_MAX)) {
  703|    162|        COVERAGE_INC(miniflow_extract_ipv4_pkt_len_error);
  ------------------
  |  |   83|    162|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|    162|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  704|    162|        return false;
  705|    162|    }
  706|       |
  707|  2.85k|    *ip_lenp = ip_len;
  708|  2.85k|    *tot_lenp = tot_len;
  709|       |
  710|       |    return true;
  711|  3.01k|}
flow.c:ipv4_get_nw_frag:
  715|  2.85k|{
  716|  2.85k|    uint8_t nw_frag = 0;
  717|       |
  718|  2.85k|    if (OVS_UNLIKELY(IP_IS_FRAGMENT(nh->ip_frag_off))) {
  ------------------
  |  |   66|  2.85k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 76, False: 2.77k]
  |  |  ------------------
  ------------------
  719|     76|        nw_frag = FLOW_NW_FRAG_ANY;
  ------------------
  |  |   54|     76|#define FLOW_NW_FRAG_ANY   (1 << 0) /* Set for any IP frag. */
  ------------------
  720|     76|        if (nh->ip_frag_off & htons(IP_FRAG_OFF_MASK)) {
  ------------------
  |  Branch (720:13): [True: 46, False: 30]
  ------------------
  721|     46|            nw_frag |= FLOW_NW_FRAG_LATER;
  ------------------
  |  |   55|     46|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  722|     46|        }
  723|     76|    }
  724|       |
  725|  2.85k|    return nw_frag;
  726|  2.85k|}
flow.c:ipv6_sanity_check:
  730|  17.3k|{
  731|  17.3k|    uint16_t plen;
  732|       |
  733|  17.3k|    if (OVS_UNLIKELY(size < sizeof *nh)) {
  ------------------
  |  |   66|  17.3k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 103, False: 17.2k]
  |  |  ------------------
  ------------------
  734|    103|        COVERAGE_INC(miniflow_extract_ipv6_pkt_too_short);
  ------------------
  |  |   83|    103|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|    103|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  735|    103|        return false;
  736|    103|    }
  737|       |
  738|  17.2k|    plen = ntohs(nh->ip6_plen);
  739|  17.2k|    if (OVS_UNLIKELY(plen + IPV6_HEADER_LEN > size)) {
  ------------------
  |  |   66|  17.2k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 503, False: 16.7k]
  |  |  ------------------
  ------------------
  740|    503|        COVERAGE_INC(miniflow_extract_ipv6_pkt_len_error);
  ------------------
  |  |   83|    503|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|    503|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  741|    503|        return false;
  742|    503|    }
  743|       |
  744|  16.7k|    if (OVS_UNLIKELY(size - (plen + IPV6_HEADER_LEN) > UINT16_MAX)) {
  ------------------
  |  |   66|  16.7k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 0, False: 16.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|  16.7k|    return true;
  750|  16.7k|}
flow.c:data_try_pull:
  122|  17.0k|{
  123|  17.0k|    return OVS_LIKELY(*sizep >= size) ? data_pull(datap, sizep, size) : NULL;
  ------------------
  |  |   65|  17.0k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 14.6k, False: 2.42k]
  |  |  ------------------
  ------------------
  124|  17.0k|}
flow.c:parse_icmpv6:
  422|    657|{
  423|    657|    if (!icmp6_is_nd(icmp6)) {
  ------------------
  |  Branch (423:9): [True: 177, False: 480]
  ------------------
  424|    177|        return false;
  425|    177|    }
  426|       |
  427|    480|    arp_buf[0] = eth_addr_zero;
  428|    480|    arp_buf[1] = eth_addr_zero;
  429|    480|    *opt_type = 0;
  430|       |
  431|    480|    *rso_flags = get_16aligned_be32(icmp6->icmp6_data.be32);
  432|       |
  433|    480|    *nd_target = data_try_pull(datap, sizep, sizeof **nd_target);
  434|    480|    if (OVS_UNLIKELY(!*nd_target)) {
  ------------------
  |  |   66|    480|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 109, False: 371]
  |  |  ------------------
  ------------------
  435|    109|        return true;
  436|    109|    }
  437|       |
  438|    921|    while (*sizep >= 8) {
  ------------------
  |  Branch (438:12): [True: 856, False: 65]
  ------------------
  439|       |        /* The minimum size of an option is 8 bytes, which also is
  440|       |         * the size of Ethernet link-layer options. */
  441|    856|        const struct ovs_nd_lla_opt *lla_opt = *datap;
  442|    856|        int opt_len = lla_opt->len * ND_LLA_OPT_LEN;
  ------------------
  |  | 1044|    856|#define ND_LLA_OPT_LEN 8
  ------------------
  443|       |
  444|    856|        if (!opt_len || opt_len > *sizep) {
  ------------------
  |  Branch (444:13): [True: 99, False: 757]
  |  Branch (444:25): [True: 194, False: 563]
  ------------------
  445|    293|            return true;
  446|    293|        }
  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|    563|        if (lla_opt->type == ND_OPT_SOURCE_LINKADDR && opt_len == 8) {
  ------------------
  |  Branch (451:13): [True: 131, False: 432]
  |  Branch (451:56): [True: 47, False: 84]
  ------------------
  452|     47|            if (OVS_LIKELY(eth_addr_is_zero(arp_buf[0]))) {
  ------------------
  |  |   65|     47|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 37, False: 10]
  |  |  ------------------
  ------------------
  453|     37|                arp_buf[0] = lla_opt->mac;
  454|       |                /* We use only first option type present in ND packet. */
  455|     37|                if (*opt_type == 0) {
  ------------------
  |  Branch (455:21): [True: 19, False: 18]
  ------------------
  456|     19|                    *opt_type = lla_opt->type;
  457|     19|                }
  458|     37|            } else {
  459|     10|                goto invalid;
  460|     10|            }
  461|    516|        } else if (lla_opt->type == ND_OPT_TARGET_LINKADDR && opt_len == 8) {
  ------------------
  |  Branch (461:20): [True: 146, False: 370]
  |  Branch (461:63): [True: 107, False: 39]
  ------------------
  462|    107|            if (OVS_LIKELY(eth_addr_is_zero(arp_buf[1]))) {
  ------------------
  |  |   65|    107|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 104, False: 3]
  |  |  ------------------
  ------------------
  463|    104|                arp_buf[1] = lla_opt->mac;
  464|       |                /* We use only first option type present in ND packet. */
  465|    104|                if (*opt_type == 0) {
  ------------------
  |  Branch (465:21): [True: 96, False: 8]
  ------------------
  466|     96|                    *opt_type = lla_opt->type;
  467|     96|                }
  468|    104|            } else {
  469|      3|                goto invalid;
  470|      3|            }
  471|    107|        }
  472|       |
  473|    550|        if (OVS_UNLIKELY(!data_try_pull(datap, sizep, opt_len))) {
  ------------------
  |  |   66|    550|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 0, False: 550]
  |  |  ------------------
  ------------------
  474|      0|            return true;
  475|      0|        }
  476|    550|    }
  477|     65|    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|    371|}
flow.c:icmp6_is_nd:
  407|    657|{
  408|    657|    return (icmp6->icmp6_base.icmp6_code == 0 &&
  ------------------
  |  Branch (408:13): [True: 573, False: 84]
  ------------------
  409|    573|            (icmp6->icmp6_base.icmp6_type == ND_NEIGHBOR_SOLICIT ||
  ------------------
  |  Branch (409:14): [True: 430, False: 143]
  ------------------
  410|    143|             icmp6->icmp6_base.icmp6_type == ND_NEIGHBOR_ADVERT));
  ------------------
  |  Branch (410:14): [True: 50, False: 93]
  ------------------
  411|    657|}
flow.c:put_u16_masked:
 1615|  42.2k|{
 1616|  42.2k|    if (!mask) {
  ------------------
  |  Branch (1616:9): [True: 0, False: 42.2k]
  ------------------
 1617|      0|        ds_put_char(s, '*');
 1618|  42.2k|    } else {
 1619|  42.2k|        if (value > 9) {
  ------------------
  |  Branch (1619:13): [True: 26.4k, False: 15.8k]
  ------------------
 1620|  26.4k|            ds_put_format(s, "0x%"PRIx16, value);
 1621|  26.4k|        } else {
 1622|  15.8k|            ds_put_format(s, "%"PRIu16, value);
 1623|  15.8k|        }
 1624|       |
 1625|  42.2k|        if (mask != UINT16_MAX) {
  ------------------
  |  Branch (1625:13): [True: 0, False: 42.2k]
  ------------------
 1626|       |            ds_put_format(s, "/0x%"PRIx16, mask);
 1627|      0|        }
 1628|  42.2k|    }
 1629|  42.2k|}

ofp-queue.c:ofp_to_u16:
  196|  16.9k|{
  197|  16.9k|    return (OVS_FORCE uint16_t) ofp_port;
  198|  16.9k|}
ofp-queue.c:u16_to_ofp:
  214|  9.93k|{
  215|  9.93k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|  9.93k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|  9.93k|}
flow.c:miniflow_values:
  530|   139k|{
  531|   139k|    return (uint64_t *)(mf + 1);
  532|   139k|}
flow.c:flowmap_set:
  385|   382k|{
  386|   382k|    map_t n_bits_mask = (MAP_1 << n_bits) - 1;
  ------------------
  |  |  271|   382k|#define MAP_1 (map_t)1
  ------------------
  387|   382k|    size_t unit = idx / MAP_T_BITS;
  ------------------
  |  |  270|   382k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  388|       |
  389|   382k|    idx %= MAP_T_BITS;
  ------------------
  |  |  270|   382k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  390|       |
  391|   382k|    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|   382k|    if (unit + 1 < FLOWMAP_UNITS && idx + n_bits > MAP_T_BITS) {
  ------------------
  |  |  280|   382k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  ------------------
  |  |  |  |  300|   765k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
                  if (unit + 1 < FLOWMAP_UNITS && idx + n_bits > MAP_T_BITS) {
  ------------------
  |  |  270|   172k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  |  Branch (394:9): [True: 172k, False: 210k]
  |  Branch (394:37): [True: 0, False: 172k]
  ------------------
  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|   382k|}
flow.c:odp_to_u32:
  202|  62.8k|{
  203|  62.8k|    return (OVS_FORCE uint32_t) odp_port;
  204|  62.8k|}
flow.c:is_ct_valid:
  954|  62.8k|{
  955|       |    /* Matches are checked with 'mask' and without 'wc'. */
  956|  62.8k|    if (mask && !wc) {
  ------------------
  |  Branch (956:9): [True: 62.8k, False: 0]
  |  Branch (956:17): [True: 62.8k, False: 0]
  ------------------
  957|       |        /* Must match at least one of the bits that implies a valid
  958|       |         * conntrack entry, or an explicit not-invalid. */
  959|  62.8k|        return flow->ct_state & (CS_NEW | CS_ESTABLISHED | CS_RELATED
  ------------------
  |  Branch (959:16): [True: 0, False: 62.8k]
  ------------------
  960|  62.8k|                                 | CS_REPLY_DIR | CS_SRC_NAT | CS_DST_NAT)
  961|  62.8k|            || (flow->ct_state & CS_TRACKED
  ------------------
  |  Branch (961:17): [True: 0, False: 62.8k]
  ------------------
  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|  62.8k|    }
  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|  62.8k|}
flow.c:is_nd:
 1119|  17.3k|{
 1120|  17.3k|    if (is_icmpv6(flow, wc)) {
  ------------------
  |  Branch (1120:9): [True: 671, False: 16.6k]
  ------------------
 1121|    671|        if (wc) {
  ------------------
  |  Branch (1121:13): [True: 671, False: 0]
  ------------------
 1122|    671|            memset(&wc->masks.tp_dst, 0xff, sizeof wc->masks.tp_dst);
 1123|    671|        }
 1124|    671|        if (flow->tp_dst != htons(0)) {
  ------------------
  |  Branch (1124:13): [True: 81, False: 590]
  ------------------
 1125|     81|            return false;
 1126|     81|        }
 1127|       |
 1128|    590|        if (wc) {
  ------------------
  |  Branch (1128:13): [True: 590, False: 0]
  ------------------
 1129|    590|            memset(&wc->masks.tp_src, 0xff, sizeof wc->masks.tp_src);
 1130|    590|        }
 1131|    590|        return (flow->tp_src == htons(ND_NEIGHBOR_SOLICIT) ||
  ------------------
  |  Branch (1131:17): [True: 429, False: 161]
  ------------------
 1132|    161|                flow->tp_src == htons(ND_NEIGHBOR_ADVERT));
  ------------------
  |  Branch (1132:17): [True: 42, False: 119]
  ------------------
 1133|    671|    }
 1134|  16.6k|    return false;
 1135|  17.3k|}
flow.c:is_icmpv6:
 1107|  17.3k|{
 1108|  17.3k|    if (get_dl_type(flow) == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1108:9): [True: 17.2k, False: 69]
  ------------------
 1109|  17.2k|        if (wc) {
  ------------------
  |  Branch (1109:13): [True: 17.2k, False: 0]
  ------------------
 1110|  17.2k|            memset(&wc->masks.nw_proto, 0xff, sizeof wc->masks.nw_proto);
 1111|  17.2k|        }
 1112|  17.2k|        return flow->nw_proto == IPPROTO_ICMPV6;
 1113|  17.2k|    }
 1114|     69|    return false;
 1115|  17.3k|}
flow.c:get_dl_type:
 1036|  17.3k|{
 1037|  17.3k|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (1037:9): [True: 17.1k, False: 123]
  ------------------
 1038|  17.1k|        return flow->dl_type;
 1039|  17.1k|    } else if (pt_ns(flow->packet_type) == OFPHTN_ETHERTYPE) {
  ------------------
  |  Branch (1039:16): [True: 54, False: 69]
  ------------------
 1040|     54|        return pt_ns_type_be(flow->packet_type);
 1041|     69|    } else {
 1042|       |        return htons(FLOW_DL_TYPE_NONE);
 1043|     69|    }
 1044|  17.3k|}
flow.c:flowmap_init:
  343|  38.2k|{
  344|  38.2k|    memset(fm, 0, sizeof *fm);
  345|  38.2k|}
flow.c:flow_equal:
  184|  50.4k|{
  185|  50.4k|    return !flow_compare_3way(a, b);
  186|  50.4k|}
flow.c:flow_compare_3way:
  178|  50.4k|{
  179|  50.4k|    return memcmp(a, b, sizeof *a);
  180|  50.4k|}
flow.c:flow_set_xreg:
  149|  7.59k|{
  150|  7.59k|    flow->regs[idx * 2] = value >> 32;
  151|  7.59k|    flow->regs[idx * 2 + 1] = value;
  152|  7.59k|}
flow.c:flow_set_xxreg:
  169|  5.97k|{
  170|  5.97k|    flow->regs[idx * 4] = value.u64.hi >> 32;
  171|  5.97k|    flow->regs[idx * 4 + 1] = value.u64.hi;
  172|  5.97k|    flow->regs[idx * 4 + 2] = value.u64.lo >> 32;
  173|  5.97k|    flow->regs[idx * 4 + 3] = value.u64.lo;
  174|  5.97k|}
flow.c:miniflow_get_values:
  535|   139k|{
  536|   139k|    return (const uint64_t *)(mf + 1);
  537|   139k|}
flow.c:flowmap_next_index:
  479|   341k|{
  480|   418k|    for (;;) {
  481|   418k|        map_t *map = &aux->map.bits[aux->unit];
  482|   418k|        if (*map) {
  ------------------
  |  Branch (482:13): [True: 265k, False: 152k]
  ------------------
  483|   265k|            *idx = aux->unit * MAP_T_BITS + raw_ctz(*map);
  ------------------
  |  |  270|   265k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  484|   265k|            *map = zero_rightmost_1bit(*map);
  485|   265k|            return true;
  486|   265k|        }
  487|   152k|        if (++aux->unit >= FLOWMAP_UNITS) {
  ------------------
  |  |  280|   152k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  ------------------
  |  |  |  |  300|   152k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (487:13): [True: 76.4k, False: 76.4k]
  ------------------
  488|       |            return false;
  489|  76.4k|        }
  490|   152k|    }
  491|   341k|}
flow.c:flow_u64_value:
  557|  3.78M|{
  558|  3.78M|    return ((uint64_t *)flow)[index];
  559|  3.78M|}
flow.c:miniflow_n_values:
  568|  38.2k|{
  569|  38.2k|    return flowmap_n_1bits(flow->map);
  570|  38.2k|}
flow.c:flowmap_n_1bits:
  462|  38.2k|{
  463|  38.2k|    unsigned int n_1bits = 0;
  464|  38.2k|    size_t unit;
  465|       |
  466|  76.4k|    FLOWMAP_FOR_EACH_UNIT (unit) {
  ------------------
  |  |  320|   114k|    for ((UNIT) = 0; (UNIT) < FLOWMAP_UNITS; (UNIT)++)
  |  |  ------------------
  |  |  |  |  280|   114k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|   114k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (320:22): [True: 76.4k, False: 38.2k]
  |  |  ------------------
  ------------------
  467|  76.4k|        n_1bits += count_1bits(fm.bits[unit]);
  468|  76.4k|    }
  469|  38.2k|    return n_1bits;
  470|  38.2k|}
flow.c:flow_union_with_miniflow:
  938|   139k|{
  939|   139k|    flow_union_with_miniflow_subset(dst, src, src->map);
  940|   139k|}
flow.c:flow_union_with_miniflow_subset:
  919|   139k|{
  920|   139k|    uint64_t *dst_u64 = (uint64_t *) dst;
  921|   139k|    const uint64_t *p = miniflow_get_values(src);
  922|   139k|    map_t map;
  923|       |
  924|   278k|    FLOWMAP_FOR_EACH_MAP (map, subset) {
  ------------------
  |  |  324|   139k|    for (size_t unit__ = 0;                                       \
  |  |  325|   417k|         unit__ < FLOWMAP_UNITS && ((MAP) = (FLOWMAP).bits[unit__], true); \
  |  |  ------------------
  |  |  |  |  280|   417k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|   835k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (325:10): [True: 278k, False: 139k]
  |  |  |  Branch (325:36): [True: 278k, False: 0]
  |  |  ------------------
  |  |  326|   278k|         unit__++)
  ------------------
  925|   278k|        size_t idx;
  926|       |
  927|   585k|        MAP_FOR_EACH_INDEX(idx, map) {
  ------------------
  |  |  278|   278k|    ULLONG_FOR_EACH_1(IDX, MAP)
  |  |  ------------------
  |  |  |  |  285|   278k|    for (uint64_t map__ = (MAP);                    \
  |  |  |  |  286|   864k|         map__ && (((IDX) = raw_ctz(map__)), true); \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (286:10): [True: 585k, False: 278k]
  |  |  |  |  |  Branch (286:19): [True: 585k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  287|   585k|         map__ = zero_rightmost_1bit(map__))
  |  |  ------------------
  ------------------
  928|   585k|            dst_u64[idx] |= *p++;
  929|   585k|        }
  930|       |        dst_u64 += MAP_T_BITS;
  ------------------
  |  |  270|   278k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  931|   278k|    }
  932|   139k|}
match.c:flow_set_xreg:
  149|  7.59k|{
  150|  7.59k|    flow->regs[idx * 2] = value >> 32;
  151|  7.59k|    flow->regs[idx * 2 + 1] = value;
  152|  7.59k|}
match.c:flow_set_xxreg:
  169|  5.97k|{
  170|  5.97k|    flow->regs[idx * 4] = value.u64.hi >> 32;
  171|  5.97k|    flow->regs[idx * 4 + 1] = value.u64.hi;
  172|  5.97k|    flow->regs[idx * 4 + 2] = value.u64.lo >> 32;
  173|  5.97k|    flow->regs[idx * 4 + 3] = value.u64.lo;
  174|  5.97k|}
match.c:u16_to_ofp:
  214|   116k|{
  215|   116k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|   116k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|   116k|}
match.c:is_ip_any:
 1059|   202k|{
 1060|   202k|    return dl_type_is_ip_any(get_dl_type(flow));
 1061|   202k|}
match.c:get_dl_type:
 1036|   202k|{
 1037|   202k|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (1037:9): [True: 182k, False: 19.9k]
  ------------------
 1038|   182k|        return flow->dl_type;
 1039|   182k|    } else if (pt_ns(flow->packet_type) == OFPHTN_ETHERTYPE) {
  ------------------
  |  Branch (1039:16): [True: 14.6k, False: 5.34k]
  ------------------
 1040|  14.6k|        return pt_ns_type_be(flow->packet_type);
 1041|  14.6k|    } else {
 1042|       |        return htons(FLOW_DL_TYPE_NONE);
 1043|  5.34k|    }
 1044|   202k|}
meta-flow.c:flow_get_xreg:
  143|  9.52k|{
  144|  9.52k|    return ((uint64_t) flow->regs[idx * 2] << 32) | flow->regs[idx * 2 + 1];
  145|  9.52k|}
meta-flow.c:flow_get_xxreg:
  156|  6.05k|{
  157|  6.05k|    ovs_u128 value;
  158|       |
  159|  6.05k|    value.u64.hi = (uint64_t) flow->regs[idx * 4] << 32;
  160|  6.05k|    value.u64.hi |= flow->regs[idx * 4 + 1];
  161|  6.05k|    value.u64.lo = (uint64_t) flow->regs[idx * 4 + 2] << 32;
  162|  6.05k|    value.u64.lo |= flow->regs[idx * 4 + 3];
  163|       |
  164|  6.05k|    return value;
  165|  6.05k|}
meta-flow.c:get_dl_type:
 1036|  63.5k|{
 1037|  63.5k|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (1037:9): [True: 49.6k, False: 13.9k]
  ------------------
 1038|  49.6k|        return flow->dl_type;
 1039|  49.6k|    } else if (pt_ns(flow->packet_type) == OFPHTN_ETHERTYPE) {
  ------------------
  |  Branch (1039:16): [True: 11.2k, False: 2.63k]
  ------------------
 1040|  11.2k|        return pt_ns_type_be(flow->packet_type);
 1041|  11.2k|    } else {
 1042|       |        return htons(FLOW_DL_TYPE_NONE);
 1043|  2.63k|    }
 1044|  63.5k|}
meta-flow.c:is_ethernet:
 1028|  1.03k|{
 1029|  1.03k|    if (wc) {
  ------------------
  |  Branch (1029:9): [True: 0, False: 1.03k]
  ------------------
 1030|      0|        WC_MASK_FIELD(wc, packet_type);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1031|      0|    }
 1032|       |    return flow->packet_type == htonl(PT_ETH);
 1033|  1.03k|}
meta-flow.c:is_vlan:
 1048|    666|{
 1049|    666|    if (!is_ethernet(flow, wc)) {
  ------------------
  |  Branch (1049:9): [True: 40, False: 626]
  ------------------
 1050|     40|        return false;
 1051|     40|    }
 1052|    626|    if (wc) {
  ------------------
  |  Branch (1052:9): [True: 0, False: 626]
  ------------------
 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|    666|}
meta-flow.c:is_ct_valid:
  954|  1.08k|{
  955|       |    /* Matches are checked with 'mask' and without 'wc'. */
  956|  1.08k|    if (mask && !wc) {
  ------------------
  |  Branch (956:9): [True: 1.08k, False: 0]
  |  Branch (956:17): [True: 1.08k, False: 0]
  ------------------
  957|       |        /* Must match at least one of the bits that implies a valid
  958|       |         * conntrack entry, or an explicit not-invalid. */
  959|  1.08k|        return flow->ct_state & (CS_NEW | CS_ESTABLISHED | CS_RELATED
  ------------------
  |  Branch (959:16): [True: 175, False: 913]
  ------------------
  960|  1.08k|                                 | CS_REPLY_DIR | CS_SRC_NAT | CS_DST_NAT)
  961|    913|            || (flow->ct_state & CS_TRACKED
  ------------------
  |  Branch (961:17): [True: 751, False: 162]
  ------------------
  962|    751|                && mask->masks.ct_state & CS_INVALID
  ------------------
  |  Branch (962:20): [True: 717, False: 34]
  ------------------
  963|    717|                && !(flow->ct_state & CS_INVALID));
  ------------------
  |  Branch (963:20): [True: 714, False: 3]
  ------------------
  964|  1.08k|    }
  965|       |    /* Else we are checking a fully extracted flow, where valid CT state always
  966|       |     * has either 'new', 'established', or 'reply_dir' bit set. */
  967|      0|#define CS_VALID_MASK (CS_NEW | CS_ESTABLISHED | CS_REPLY_DIR)
  968|      0|    if (wc) {
  ------------------
  |  Branch (968:9): [True: 0, False: 0]
  ------------------
  969|      0|        wc->masks.ct_state |= CS_VALID_MASK;
  ------------------
  |  |  967|      0|#define CS_VALID_MASK (CS_NEW | CS_ESTABLISHED | CS_REPLY_DIR)
  ------------------
  970|      0|    }
  971|      0|    return flow->ct_state & CS_VALID_MASK;
  ------------------
  |  |  967|      0|#define CS_VALID_MASK (CS_NEW | CS_ESTABLISHED | CS_REPLY_DIR)
  ------------------
  972|  1.08k|}
meta-flow.c:is_tcp:
 1077|    237|{
 1078|       |    return is_ip_proto(flow, IPPROTO_TCP, wc);
 1079|    237|}
meta-flow.c:is_ip_proto:
 1065|    971|{
 1066|    971|    if (is_ip_any(flow)) {
  ------------------
  |  Branch (1066:9): [True: 521, False: 450]
  ------------------
 1067|    521|        if (wc) {
  ------------------
  |  Branch (1067:13): [True: 0, False: 521]
  ------------------
 1068|      0|            WC_MASK_FIELD(wc, nw_proto);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1069|      0|        }
 1070|    521|        return flow->nw_proto == ip_proto;
 1071|    521|    }
 1072|    450|    return false;
 1073|    971|}
meta-flow.c:is_udp:
 1083|    287|{
 1084|       |    return is_ip_proto(flow, IPPROTO_UDP, wc);
 1085|    287|}
meta-flow.c:is_sctp:
 1089|    447|{
 1090|       |    return is_ip_proto(flow, IPPROTO_SCTP, wc);
 1091|    447|}
meta-flow.c:is_icmpv4:
 1095|    451|{
 1096|    451|    if (get_dl_type(flow) == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (1096:9): [True: 82, False: 369]
  ------------------
 1097|     82|        if (wc) {
  ------------------
  |  Branch (1097:13): [True: 0, False: 82]
  ------------------
 1098|      0|            memset(&wc->masks.nw_proto, 0xff, sizeof wc->masks.nw_proto);
 1099|      0|        }
 1100|     82|        return flow->nw_proto == IPPROTO_ICMP;
 1101|     82|    }
 1102|    369|    return false;
 1103|    451|}
meta-flow.c:is_icmpv6:
 1107|  3.64k|{
 1108|  3.64k|    if (get_dl_type(flow) == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1108:9): [True: 1.80k, False: 1.84k]
  ------------------
 1109|  1.80k|        if (wc) {
  ------------------
  |  Branch (1109:13): [True: 0, False: 1.80k]
  ------------------
 1110|      0|            memset(&wc->masks.nw_proto, 0xff, sizeof wc->masks.nw_proto);
 1111|      0|        }
 1112|  1.80k|        return flow->nw_proto == IPPROTO_ICMPV6;
 1113|  1.80k|    }
 1114|  1.84k|    return false;
 1115|  3.64k|}
meta-flow.c:is_nd:
 1119|  2.81k|{
 1120|  2.81k|    if (is_icmpv6(flow, wc)) {
  ------------------
  |  Branch (1120:9): [True: 591, False: 2.22k]
  ------------------
 1121|    591|        if (wc) {
  ------------------
  |  Branch (1121:13): [True: 0, False: 591]
  ------------------
 1122|      0|            memset(&wc->masks.tp_dst, 0xff, sizeof wc->masks.tp_dst);
 1123|      0|        }
 1124|    591|        if (flow->tp_dst != htons(0)) {
  ------------------
  |  Branch (1124:13): [True: 21, False: 570]
  ------------------
 1125|     21|            return false;
 1126|     21|        }
 1127|       |
 1128|    570|        if (wc) {
  ------------------
  |  Branch (1128:13): [True: 0, False: 570]
  ------------------
 1129|      0|            memset(&wc->masks.tp_src, 0xff, sizeof wc->masks.tp_src);
 1130|      0|        }
 1131|    570|        return (flow->tp_src == htons(ND_NEIGHBOR_SOLICIT) ||
  ------------------
  |  Branch (1131:17): [True: 215, False: 355]
  ------------------
 1132|    355|                flow->tp_src == htons(ND_NEIGHBOR_ADVERT));
  ------------------
  |  Branch (1132:17): [True: 331, False: 24]
  ------------------
 1133|    591|    }
 1134|  2.22k|    return false;
 1135|  2.81k|}
meta-flow.c:ofp_to_u16:
  196|     90|{
  197|     90|    return (OVS_FORCE uint16_t) ofp_port;
  198|     90|}
meta-flow.c:u16_to_ofp:
  214|  2.62k|{
  215|  2.62k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|  2.62k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|  2.62k|}
meta-flow.c:is_ip_any:
 1059|  4.17k|{
 1060|  4.17k|    return dl_type_is_ip_any(get_dl_type(flow));
 1061|  4.17k|}
ofp-actions.c:u16_to_ofp:
  214|  28.2k|{
  215|  28.2k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|  28.2k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|  28.2k|}
ofp-actions.c:ofp_to_u16:
  196|  52.0k|{
  197|  52.0k|    return (OVS_FORCE uint16_t) ofp_port;
  198|  52.0k|}
ofp-actions.c:get_dl_type:
 1036|  41.9k|{
 1037|  41.9k|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (1037:9): [True: 31.4k, False: 10.5k]
  ------------------
 1038|  31.4k|        return flow->dl_type;
 1039|  31.4k|    } else if (pt_ns(flow->packet_type) == OFPHTN_ETHERTYPE) {
  ------------------
  |  Branch (1039:16): [True: 4.60k, False: 5.92k]
  ------------------
 1040|  4.60k|        return pt_ns_type_be(flow->packet_type);
 1041|  5.92k|    } else {
 1042|       |        return htons(FLOW_DL_TYPE_NONE);
 1043|  5.92k|    }
 1044|  41.9k|}
ofp-actions.c:is_ip_any:
 1059|  19.5k|{
 1060|  19.5k|    return dl_type_is_ip_any(get_dl_type(flow));
 1061|  19.5k|}
ofp-actions.c:is_ct_valid:
  954|     11|{
  955|       |    /* Matches are checked with 'mask' and without 'wc'. */
  956|     11|    if (mask && !wc) {
  ------------------
  |  Branch (956:9): [True: 11, False: 0]
  |  Branch (956:17): [True: 11, False: 0]
  ------------------
  957|       |        /* Must match at least one of the bits that implies a valid
  958|       |         * conntrack entry, or an explicit not-invalid. */
  959|     11|        return flow->ct_state & (CS_NEW | CS_ESTABLISHED | CS_RELATED
  ------------------
  |  Branch (959:16): [True: 0, False: 11]
  ------------------
  960|     11|                                 | CS_REPLY_DIR | CS_SRC_NAT | CS_DST_NAT)
  961|     11|            || (flow->ct_state & CS_TRACKED
  ------------------
  |  Branch (961:17): [True: 0, False: 11]
  ------------------
  962|      0|                && mask->masks.ct_state & CS_INVALID
  ------------------
  |  Branch (962:20): [True: 0, False: 0]
  ------------------
  963|      0|                && !(flow->ct_state & CS_INVALID));
  ------------------
  |  Branch (963:20): [True: 0, False: 0]
  ------------------
  964|     11|    }
  965|       |    /* Else we are checking a fully extracted flow, where valid CT state always
  966|       |     * has either 'new', 'established', or 'reply_dir' bit set. */
  967|      0|#define CS_VALID_MASK (CS_NEW | CS_ESTABLISHED | CS_REPLY_DIR)
  968|      0|    if (wc) {
  ------------------
  |  Branch (968:9): [True: 0, False: 0]
  ------------------
  969|      0|        wc->masks.ct_state |= CS_VALID_MASK;
  ------------------
  |  |  967|      0|#define CS_VALID_MASK (CS_NEW | CS_ESTABLISHED | CS_REPLY_DIR)
  ------------------
  970|      0|    }
  971|      0|    return flow->ct_state & CS_VALID_MASK;
  ------------------
  |  |  967|      0|#define CS_VALID_MASK (CS_NEW | CS_ESTABLISHED | CS_REPLY_DIR)
  ------------------
  972|     11|}
ofp-flow.c:u16_to_ofp:
  214|  53.5k|{
  215|  53.5k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|  53.5k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|  53.5k|}
ofp-match.c:u16_to_ofp:
  214|  92.5k|{
  215|  92.5k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|  92.5k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|  92.5k|}
ofp-monitor.c:u16_to_ofp:
  214|  2.57k|{
  215|  2.57k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|  2.57k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|  2.57k|}
ofp-packet.c:u16_to_ofp:
  214|  58.2k|{
  215|  58.2k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|  58.2k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|  58.2k|}
ofp-packet.c:u32_to_odp:
  220|    499|{
  221|    499|    return ODP_PORT_C(port);
  ------------------
  |  |  158|    499|#define ODP_PORT_C(X) ((OVS_FORCE odp_port_t) (X))
  ------------------
  222|    499|}
ofp-packet.c:ofp_to_u16:
  196|  44.4k|{
  197|  44.4k|    return (OVS_FORCE uint16_t) ofp_port;
  198|  44.4k|}
ofp-port.c:ofp_to_u16:
  196|   449k|{
  197|   449k|    return (OVS_FORCE uint16_t) ofp_port;
  198|   449k|}
ofp-port.c:u16_to_ofp:
  214|   159k|{
  215|   159k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|   159k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|   159k|}
ofp-port.c:ofp11_to_u32:
  208|  58.4k|{
  209|  58.4k|    return (OVS_FORCE uint32_t) ofp11_port;
  210|  58.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|  27.3k|{
  114|  27.3k|    return hash_add(hash_add(hash, data), data >> 32);
  115|  27.3k|}
flow.c:hash_add:
  108|  76.7k|{
  109|  76.7k|    return mhash_add(hash, data);
  110|  76.7k|}
flow.c:mhash_add:
   77|  76.7k|{
   78|  76.7k|    hash = mhash_add__(hash, data);
   79|  76.7k|    hash = hash_rot(hash, 13);
   80|  76.7k|    return hash * 5 + 0xe6546b64;
   81|  76.7k|}
flow.c:mhash_add__:
   64|  76.7k|{
   65|       |    /* zero-valued 'data' will not change the 'hash' value */
   66|  76.7k|    if (!data) {
  ------------------
  |  Branch (66:9): [True: 15.5k, False: 61.1k]
  ------------------
   67|  15.5k|        return hash;
   68|  15.5k|    }
   69|       |
   70|  61.1k|    data *= 0xcc9e2d51;
   71|  61.1k|    data = hash_rot(data, 15);
   72|  61.1k|    data *= 0x1b873593;
   73|  61.1k|    return hash ^ data;
   74|  76.7k|}
flow.c:hash_rot:
   31|   137k|{
   32|   137k|    return (x << k) | (x >> (32 - k));
   33|   137k|}
flow.c:hash_finish:
  118|  8.92k|{
  119|  8.92k|    return mhash_finish(hash ^ final);
  120|  8.92k|}
flow.c:mhash_finish:
   84|  8.92k|{
   85|  8.92k|    hash ^= hash >> 16;
   86|  8.92k|    hash *= 0x85ebca6b;
   87|  8.92k|    hash ^= hash >> 13;
   88|  8.92k|    hash *= 0xc2b2ae35;
   89|  8.92k|    hash ^= hash >> 16;
   90|  8.92k|    return hash;
   91|  8.92k|}
hash.c:hash_finish:
  118|    237|{
  119|    237|    return mhash_finish(hash ^ final);
  120|    237|}
hash.c:mhash_finish:
   84|    237|{
   85|    237|    hash ^= hash >> 16;
   86|    237|    hash *= 0x85ebca6b;
   87|    237|    hash ^= hash >> 13;
   88|    237|    hash *= 0xc2b2ae35;
   89|    237|    hash ^= hash >> 16;
   90|    237|    return hash;
   91|    237|}
hash.c:hash_add:
  108|  1.08k|{
  109|  1.08k|    return mhash_add(hash, data);
  110|  1.08k|}
hash.c:mhash_add:
   77|  1.08k|{
   78|  1.08k|    hash = mhash_add__(hash, data);
   79|  1.08k|    hash = hash_rot(hash, 13);
   80|  1.08k|    return hash * 5 + 0xe6546b64;
   81|  1.08k|}
hash.c:mhash_add__:
   64|  1.08k|{
   65|       |    /* zero-valued 'data' will not change the 'hash' value */
   66|  1.08k|    if (!data) {
  ------------------
  |  Branch (66:9): [True: 0, False: 1.08k]
  ------------------
   67|      0|        return hash;
   68|      0|    }
   69|       |
   70|  1.08k|    data *= 0xcc9e2d51;
   71|  1.08k|    data = hash_rot(data, 15);
   72|  1.08k|    data *= 0x1b873593;
   73|  1.08k|    return hash ^ data;
   74|  1.08k|}
hash.c:hash_rot:
   31|  2.17k|{
   32|  2.17k|    return (x << k) | (x >> (32 - k));
   33|  2.17k|}
nx-match.c:hash_string:
  403|    237|{
  404|    237|    return hash_bytes(s, strlen(s), basis);
  405|    237|}
nx-match.c:hash_uint64:
  164|  11.9M|{
  165|  11.9M|    return hash_uint64_basis(x, 0);
  166|  11.9M|}
nx-match.c:hash_uint64_basis:
  159|  11.9M|{
  160|  11.9M|    return hash_finish(hash_add64(basis, x), 8);
  161|  11.9M|}
nx-match.c:hash_finish:
  118|  11.9M|{
  119|  11.9M|    return mhash_finish(hash ^ final);
  120|  11.9M|}
nx-match.c:mhash_finish:
   84|  11.9M|{
   85|  11.9M|    hash ^= hash >> 16;
   86|  11.9M|    hash *= 0x85ebca6b;
   87|  11.9M|    hash ^= hash >> 13;
   88|  11.9M|    hash *= 0xc2b2ae35;
   89|  11.9M|    hash ^= hash >> 16;
   90|  11.9M|    return hash;
   91|  11.9M|}
nx-match.c:hash_add64:
  113|  11.9M|{
  114|  11.9M|    return hash_add(hash_add(hash, data), data >> 32);
  115|  11.9M|}
nx-match.c:hash_add:
  108|  23.8M|{
  109|  23.8M|    return mhash_add(hash, data);
  110|  23.8M|}
nx-match.c:mhash_add:
   77|  23.8M|{
   78|  23.8M|    hash = mhash_add__(hash, data);
   79|  23.8M|    hash = hash_rot(hash, 13);
   80|  23.8M|    return hash * 5 + 0xe6546b64;
   81|  23.8M|}
nx-match.c:mhash_add__:
   64|  23.8M|{
   65|       |    /* zero-valued 'data' will not change the 'hash' value */
   66|  23.8M|    if (!data) {
  ------------------
  |  Branch (66:9): [True: 9.94M, False: 13.9M]
  ------------------
   67|  9.94M|        return hash;
   68|  9.94M|    }
   69|       |
   70|  13.9M|    data *= 0xcc9e2d51;
   71|  13.9M|    data = hash_rot(data, 15);
   72|  13.9M|    data *= 0x1b873593;
   73|  13.9M|    return hash ^ data;
   74|  23.8M|}
nx-match.c:hash_rot:
   31|  37.7M|{
   32|  37.7M|    return (x << k) | (x >> (32 - k));
   33|  37.7M|}
ofp-actions.c:hash_2words:
  153|   259k|{
  154|   259k|    return hash_finish(hash_add(hash_add(x, 0), y), 8);
  155|   259k|}
ofp-actions.c:hash_finish:
  118|   259k|{
  119|   259k|    return mhash_finish(hash ^ final);
  120|   259k|}
ofp-actions.c:mhash_finish:
   84|   259k|{
   85|   259k|    hash ^= hash >> 16;
   86|   259k|    hash *= 0x85ebca6b;
   87|   259k|    hash ^= hash >> 13;
   88|   259k|    hash *= 0xc2b2ae35;
   89|   259k|    hash ^= hash >> 16;
   90|   259k|    return hash;
   91|   259k|}
ofp-actions.c:hash_add:
  108|   519k|{
  109|   519k|    return mhash_add(hash, data);
  110|   519k|}
ofp-actions.c:mhash_add:
   77|   519k|{
   78|   519k|    hash = mhash_add__(hash, data);
   79|   519k|    hash = hash_rot(hash, 13);
   80|   519k|    return hash * 5 + 0xe6546b64;
   81|   519k|}
ofp-actions.c:mhash_add__:
   64|   519k|{
   65|       |    /* zero-valued 'data' will not change the 'hash' value */
   66|   519k|    if (!data) {
  ------------------
  |  Branch (66:9): [True: 259k, False: 259k]
  ------------------
   67|   259k|        return hash;
   68|   259k|    }
   69|       |
   70|   259k|    data *= 0xcc9e2d51;
   71|   259k|    data = hash_rot(data, 15);
   72|   259k|    data *= 0x1b873593;
   73|   259k|    return hash ^ data;
   74|   519k|}
ofp-actions.c:hash_rot:
   31|   779k|{
   32|   779k|    return (x << k) | (x >> (32 - k));
   33|   779k|}
ofp-msgs.c:hash_finish:
  118|  3.59M|{
  119|  3.59M|    return mhash_finish(hash ^ final);
  120|  3.59M|}
ofp-msgs.c:mhash_finish:
   84|  3.59M|{
   85|  3.59M|    hash ^= hash >> 16;
   86|  3.59M|    hash *= 0x85ebca6b;
   87|  3.59M|    hash ^= hash >> 13;
   88|  3.59M|    hash *= 0xc2b2ae35;
   89|  3.59M|    hash ^= hash >> 16;
   90|  3.59M|    return hash;
   91|  3.59M|}
ofp-msgs.c:hash_add:
  108|  10.7M|{
  109|  10.7M|    return mhash_add(hash, data);
  110|  10.7M|}
ofp-msgs.c:mhash_add:
   77|  10.7M|{
   78|  10.7M|    hash = mhash_add__(hash, data);
   79|  10.7M|    hash = hash_rot(hash, 13);
   80|  10.7M|    return hash * 5 + 0xe6546b64;
   81|  10.7M|}
ofp-msgs.c:mhash_add__:
   64|  10.7M|{
   65|       |    /* zero-valued 'data' will not change the 'hash' value */
   66|  10.7M|    if (!data) {
  ------------------
  |  Branch (66:9): [True: 6.94M, False: 3.85M]
  ------------------
   67|  6.94M|        return hash;
   68|  6.94M|    }
   69|       |
   70|  3.85M|    data *= 0xcc9e2d51;
   71|  3.85M|    data = hash_rot(data, 15);
   72|  3.85M|    data *= 0x1b873593;
   73|  3.85M|    return hash ^ data;
   74|  10.7M|}
ofp-msgs.c:hash_rot:
   31|  14.6M|{
   32|  14.6M|    return (x << k) | (x >> (32 - k));
   33|  14.6M|}
ofp-msgs.c:hash_bytes32:
  392|  3.59M|{
  393|  3.59M|    return hash_words(p, n_bytes / 4, basis);
  394|  3.59M|}
ofp-msgs.c:hash_words:
  357|  3.59M|{
  358|  3.59M|    if (__builtin_constant_p(n_words)) {
  ------------------
  |  Branch (358:9): [True: 3.59M, False: 0]
  ------------------
  359|  3.59M|        return hash_words_inline(p, n_words, basis);
  360|  3.59M|    } else {
  361|      0|        return hash_words__(p, n_words, basis);
  362|      0|    }
  363|  3.59M|}
ofp-msgs.c:hash_words_inline:
  129|  3.59M|{
  130|  3.59M|    return hash_finish(hash_add_words(basis, p, n_words), n_words * 4);
  131|  3.59M|}
ofp-msgs.c:hash_add_words:
  428|  3.59M|{
  429|  14.3M|    for (size_t i = 0; i < n_words; i++) {
  ------------------
  |  Branch (429:24): [True: 10.7M, False: 3.59M]
  ------------------
  430|  10.7M|        hash = hash_add(hash, p[i]);
  431|  10.7M|    }
  432|  3.59M|    return hash;
  433|  3.59M|}

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|  17.6k|{
   43|  17.6k|    const struct ofpact_learn_spec *spec;
   44|  17.6k|    struct match dst_match;
   45|       |
   46|  17.6k|    match_init_catchall(&dst_match);
   47|  34.8k|    OFPACT_LEARN_SPEC_FOR_EACH (spec, learn) {
  ------------------
  |  |  900|  17.6k|    for ((SPEC) = (LEARN)->specs;               \
  |  |  901|  51.8k|         (SPEC) < ofpact_learn_spec_end(LEARN); \
  |  |  ------------------
  |  |  |  Branch (901:10): [True: 34.8k, False: 16.9k]
  |  |  ------------------
  |  |  902|  34.1k|         (SPEC) = ofpact_learn_spec_next(SPEC))
  ------------------
   48|  34.8k|        enum ofperr error;
   49|       |
   50|       |        /* Check the source. */
   51|  34.8k|        if (spec->src_type == NX_LEARN_SRC_FIELD) {
  ------------------
  |  |  821|  34.8k|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
  |  Branch (51:13): [True: 111, False: 34.7k]
  ------------------
   52|    111|            error = mf_check_src(&spec->src, src_match);
   53|    111|            if (error) {
  ------------------
  |  Branch (53:17): [True: 19, False: 92]
  ------------------
   54|     19|                return error;
   55|     19|            }
   56|    111|        }
   57|       |
   58|       |        /* Check the destination. */
   59|  34.8k|        switch (spec->dst_type) {
  ------------------
  |  Branch (59:17): [True: 34.8k, False: 0]
  ------------------
   60|  33.6k|        case NX_LEARN_DST_MATCH:
  ------------------
  |  |  825|  33.6k|#define NX_LEARN_DST_MATCH     (0 << 11) /* Add match criterion. */
  ------------------
  |  Branch (60:9): [True: 33.6k, False: 1.21k]
  ------------------
   61|  33.6k|            error = mf_check_src(&spec->dst, &dst_match);
   62|  33.6k|            if (error) {
  ------------------
  |  Branch (62:17): [True: 660, False: 32.9k]
  ------------------
   63|    660|                return error;
   64|    660|            }
   65|  32.9k|            if (spec->src_type & NX_LEARN_SRC_IMMEDIATE) {
  ------------------
  |  |  822|  32.9k|#define NX_LEARN_SRC_IMMEDIATE (1 << 13) /* Copy from immediate value. */
  ------------------
  |  Branch (65:17): [True: 32.9k, False: 38]
  ------------------
   66|  32.9k|                mf_write_subfield_value(&spec->dst,
   67|  32.9k|                                        ofpact_learn_spec_imm(spec),
   68|  32.9k|                                        &dst_match);
   69|  32.9k|            }
   70|  32.9k|            break;
   71|       |
   72|  1.15k|        case NX_LEARN_DST_LOAD:
  ------------------
  |  |  826|  1.15k|#define NX_LEARN_DST_LOAD      (1 << 11) /* Add NXAST_REG_LOAD action. */
  ------------------
  |  Branch (72:9): [True: 1.15k, False: 33.7k]
  ------------------
   73|  1.15k|            error = mf_check_dst(&spec->dst, &dst_match);
   74|  1.15k|            if (error) {
  ------------------
  |  Branch (74:17): [True: 45, False: 1.11k]
  ------------------
   75|     45|                return error;
   76|     45|            }
   77|  1.11k|            break;
   78|       |
   79|  1.11k|        case NX_LEARN_DST_OUTPUT:
  ------------------
  |  |  827|     54|#define NX_LEARN_DST_OUTPUT    (2 << 11) /* Add OFPAT_OUTPUT action. */
  ------------------
  |  Branch (79:9): [True: 54, False: 34.8k]
  ------------------
   80|       |            /* Nothing to do. */
   81|     54|            break;
   82|  34.8k|        }
   83|  34.8k|    }
   84|  16.9k|    return 0;
   85|  17.6k|}
learn_format:
  494|  17.4k|{
  495|  17.4k|    const struct ofpact_learn_spec *spec;
  496|  17.4k|    struct match match;
  497|       |
  498|  17.4k|    match_init_catchall(&match);
  499|       |
  500|  17.4k|    ds_put_format(s, "%slearn(%s%stable=%s",
  501|  17.4k|                  colors.learn, colors.end, colors.special, colors.end);
  502|  17.4k|    ofputil_format_table(learn->table_id, table_map, s);
  503|  17.4k|    if (learn->idle_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  17.4k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (503:9): [True: 16.7k, False: 753]
  ------------------
  504|  16.7k|        ds_put_format(s, ",%sidle_timeout=%s%"PRIu16,
  505|  16.7k|                      colors.param, colors.end, learn->idle_timeout);
  506|  16.7k|    }
  507|  17.4k|    if (learn->hard_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  17.4k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (507:9): [True: 15.7k, False: 1.69k]
  ------------------
  508|  15.7k|        ds_put_format(s, ",%shard_timeout=%s%"PRIu16,
  509|  15.7k|                      colors.param, colors.end, learn->hard_timeout);
  510|  15.7k|    }
  511|  17.4k|    if (learn->fin_idle_timeout) {
  ------------------
  |  Branch (511:9): [True: 15.6k, False: 1.87k]
  ------------------
  512|  15.6k|        ds_put_format(s, ",%sfin_idle_timeout=%s%"PRIu16,
  513|  15.6k|                      colors.param, colors.end, learn->fin_idle_timeout);
  514|  15.6k|    }
  515|  17.4k|    if (learn->fin_hard_timeout) {
  ------------------
  |  Branch (515:9): [True: 16.0k, False: 1.47k]
  ------------------
  516|  16.0k|        ds_put_format(s, "%s,fin_hard_timeout=%s%"PRIu16,
  517|  16.0k|                      colors.param, colors.end, learn->fin_hard_timeout);
  518|  16.0k|    }
  519|  17.4k|    if (learn->priority != OFP_DEFAULT_PRIORITY) {
  ------------------
  |  |  138|  17.4k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
  |  Branch (519:9): [True: 16.1k, False: 1.29k]
  ------------------
  520|  16.1k|        ds_put_format(s, "%s,priority=%s%"PRIu16,
  521|  16.1k|                      colors.special, colors.end, learn->priority);
  522|  16.1k|    }
  523|  17.4k|    if (learn->flags & NX_LEARN_F_SEND_FLOW_REM) {
  ------------------
  |  Branch (523:9): [True: 6.23k, False: 11.2k]
  ------------------
  524|  6.23k|        ds_put_format(s, ",%ssend_flow_rem%s", colors.value, colors.end);
  525|  6.23k|    }
  526|  17.4k|    if (learn->flags & NX_LEARN_F_DELETE_LEARNED) {
  ------------------
  |  Branch (526:9): [True: 5.55k, False: 11.9k]
  ------------------
  527|  5.55k|        ds_put_format(s, ",%sdelete_learned%s", colors.value, colors.end);
  528|  5.55k|    }
  529|  17.4k|    if (learn->cookie != 0) {
  ------------------
  |  Branch (529:9): [True: 17.0k, False: 466]
  ------------------
  530|  17.0k|        ds_put_format(s, ",%scookie=%s%#"PRIx64,
  531|  17.0k|                      colors.param, colors.end, ntohll(learn->cookie));
  532|  17.0k|    }
  533|  17.4k|    if (learn->limit != 0) {
  ------------------
  |  Branch (533:9): [True: 85, False: 17.4k]
  ------------------
  534|     85|        ds_put_format(s, ",%slimit=%s%"PRIu32,
  535|     85|                      colors.param, colors.end, learn->limit);
  536|     85|    }
  537|  17.4k|    if (learn->flags & NX_LEARN_F_WRITE_RESULT) {
  ------------------
  |  Branch (537:9): [True: 75, False: 17.4k]
  ------------------
  538|     75|        ds_put_format(s, ",%sresult_dst=%s", colors.param, colors.end);
  539|     75|        mf_format_subfield(&learn->result_dst, s);
  540|     75|    }
  541|       |
  542|  33.9k|    OFPACT_LEARN_SPEC_FOR_EACH (spec, learn) {
  ------------------
  |  |  900|  17.4k|    for ((SPEC) = (LEARN)->specs;               \
  |  |  901|  51.4k|         (SPEC) < ofpact_learn_spec_end(LEARN); \
  |  |  ------------------
  |  |  |  Branch (901:10): [True: 33.9k, False: 17.4k]
  |  |  ------------------
  |  |  902|  33.9k|         (SPEC) = ofpact_learn_spec_next(SPEC))
  ------------------
  543|  33.9k|        unsigned int n_bytes = DIV_ROUND_UP(spec->n_bits, 8);
  ------------------
  |  |  300|  33.9k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  ------------------
  544|  33.9k|        ds_put_char(s, ',');
  545|       |
  546|  33.9k|        switch (spec->src_type | spec->dst_type) {
  ------------------
  |  Branch (546:17): [True: 33.9k, False: 0]
  ------------------
  547|  32.4k|        case NX_LEARN_SRC_IMMEDIATE | NX_LEARN_DST_MATCH: {
  ------------------
  |  |  822|  32.4k|#define NX_LEARN_SRC_IMMEDIATE (1 << 13) /* Copy from immediate value. */
  ------------------
                      case NX_LEARN_SRC_IMMEDIATE | NX_LEARN_DST_MATCH: {
  ------------------
  |  |  825|  32.4k|#define NX_LEARN_DST_MATCH     (0 << 11) /* Add match criterion. */
  ------------------
  |  Branch (547:9): [True: 32.4k, False: 1.48k]
  ------------------
  548|  32.4k|            if (spec->dst.ofs == 0
  ------------------
  |  Branch (548:17): [True: 14.4k, False: 17.9k]
  ------------------
  549|  14.4k|                && spec->dst.n_bits == spec->dst.field->n_bits) {
  ------------------
  |  Branch (549:20): [True: 3.99k, False: 10.4k]
  ------------------
  550|  3.99k|                union mf_value value;
  551|       |
  552|  3.99k|                memset(&value, 0, sizeof value);
  553|  3.99k|                memcpy(&value.b[spec->dst.field->n_bytes - n_bytes],
  554|  3.99k|                       ofpact_learn_spec_imm(spec), n_bytes);
  555|  3.99k|                ds_put_format(s, "%s%s=%s", colors.param,
  556|  3.99k|                              spec->dst.field->name, colors.end);
  557|  3.99k|                mf_format(spec->dst.field, &value, NULL, port_map, s);
  558|  28.4k|            } else {
  559|  28.4k|                ds_put_format(s, "%s", colors.param);
  560|  28.4k|                mf_format_subfield(&spec->dst, s);
  561|  28.4k|                ds_put_format(s, "=%s", colors.end);
  562|  28.4k|                ds_put_hex(s, ofpact_learn_spec_imm(spec), n_bytes);
  563|  28.4k|            }
  564|  32.4k|            break;
  565|      0|        }
  566|    133|        case NX_LEARN_SRC_FIELD | NX_LEARN_DST_MATCH:
  ------------------
  |  |  821|    133|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
                      case NX_LEARN_SRC_FIELD | NX_LEARN_DST_MATCH:
  ------------------
  |  |  825|    133|#define NX_LEARN_DST_MATCH     (0 << 11) /* Add match criterion. */
  ------------------
  |  Branch (566:9): [True: 133, False: 33.7k]
  ------------------
  567|    133|            ds_put_format(s, "%s", colors.param);
  568|    133|            mf_format_subfield(&spec->dst, s);
  569|    133|            ds_put_format(s, "%s", colors.end);
  570|    133|            if (spec->src.field != spec->dst.field ||
  ------------------
  |  Branch (570:17): [True: 39, False: 94]
  ------------------
  571|     94|                spec->src.ofs != spec->dst.ofs) {
  ------------------
  |  Branch (571:17): [True: 34, False: 60]
  ------------------
  572|     73|                ds_put_format(s, "%s=%s", colors.param, colors.end);
  573|     73|                mf_format_subfield(&spec->src, s);
  574|     73|            }
  575|    133|            break;
  576|       |
  577|  1.16k|        case NX_LEARN_SRC_IMMEDIATE | NX_LEARN_DST_LOAD:
  ------------------
  |  |  822|  1.16k|#define NX_LEARN_SRC_IMMEDIATE (1 << 13) /* Copy from immediate value. */
  ------------------
                      case NX_LEARN_SRC_IMMEDIATE | NX_LEARN_DST_LOAD:
  ------------------
  |  |  826|  1.16k|#define NX_LEARN_DST_LOAD      (1 << 11) /* Add NXAST_REG_LOAD action. */
  ------------------
  |  Branch (577:9): [True: 1.16k, False: 32.7k]
  ------------------
  578|  1.16k|            ds_put_format(s, "%sload:%s", colors.special, colors.end);
  579|  1.16k|            ds_put_hex(s, ofpact_learn_spec_imm(spec), n_bytes);
  580|  1.16k|            ds_put_format(s, "%s->%s", colors.special, colors.end);
  581|  1.16k|            mf_format_subfield(&spec->dst, s);
  582|  1.16k|            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: 33.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|    180|        case NX_LEARN_SRC_FIELD | NX_LEARN_DST_OUTPUT:
  ------------------
  |  |  821|    180|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
                      case NX_LEARN_SRC_FIELD | NX_LEARN_DST_OUTPUT:
  ------------------
  |  |  827|    180|#define NX_LEARN_DST_OUTPUT    (2 << 11) /* Add OFPAT_OUTPUT action. */
  ------------------
  |  Branch (591:9): [True: 180, False: 33.7k]
  ------------------
  592|    180|            ds_put_format(s, "%soutput:%s", colors.special, colors.end);
  593|    180|            mf_format_subfield(&spec->src, s);
  594|    180|            break;
  595|  33.9k|        }
  596|  33.9k|    }
  597|  17.4k|    ds_put_format(s, "%s)%s", colors.learn, colors.end);
  598|  17.4k|}

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

mf_subvalue_format:
  195|  2.35k|{
  196|  2.35k|    ds_put_hex(s, sv, sizeof *sv);
  197|  2.35k|}
mf_is_all_wild:
  206|   184k|{
  207|   184k|    switch (mf->id) {
  208|    953|    case MFF_DP_HASH:
  ------------------
  |  Branch (208:5): [True: 953, False: 183k]
  ------------------
  209|    953|        return !wc->masks.dp_hash;
  210|    957|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (210:5): [True: 957, False: 183k]
  ------------------
  211|    957|        return !wc->masks.recirc_id;
  212|  13.1k|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (212:5): [True: 13.1k, False: 171k]
  ------------------
  213|  13.1k|        return !wc->masks.packet_type;
  214|     70|    case MFF_CONJ_ID:
  ------------------
  |  Branch (214:5): [True: 70, False: 184k]
  ------------------
  215|     70|        return !wc->masks.conj_id;
  216|    348|    case MFF_TUN_SRC:
  ------------------
  |  Branch (216:5): [True: 348, False: 184k]
  ------------------
  217|    348|        return !wc->masks.tunnel.ip_src;
  218|    568|    case MFF_TUN_DST:
  ------------------
  |  Branch (218:5): [True: 568, False: 183k]
  ------------------
  219|    568|        return !wc->masks.tunnel.ip_dst;
  220|  2.19k|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (220:5): [True: 2.19k, False: 182k]
  ------------------
  221|  2.19k|        return ipv6_mask_is_any(&wc->masks.tunnel.ipv6_src);
  222|  1.22k|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (222:5): [True: 1.22k, False: 183k]
  ------------------
  223|  1.22k|        return ipv6_mask_is_any(&wc->masks.tunnel.ipv6_dst);
  224|    370|    case MFF_TUN_ID:
  ------------------
  |  Branch (224:5): [True: 370, False: 184k]
  ------------------
  225|    370|        return !wc->masks.tunnel.tun_id;
  226|      0|    case MFF_TUN_TOS:
  ------------------
  |  Branch (226:5): [True: 0, False: 184k]
  ------------------
  227|      0|        return !wc->masks.tunnel.ip_tos;
  228|      0|    case MFF_TUN_TTL:
  ------------------
  |  Branch (228:5): [True: 0, False: 184k]
  ------------------
  229|      0|        return !wc->masks.tunnel.ip_ttl;
  230|    644|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (230:5): [True: 644, False: 183k]
  ------------------
  231|    644|        return !(wc->masks.tunnel.flags & FLOW_TNL_PUB_F_MASK);
  ------------------
  |  |   58|    644|#define FLOW_TNL_PUB_F_MASK ((1 << 1) - 1)
  ------------------
  232|    147|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (232:5): [True: 147, False: 184k]
  ------------------
  233|    147|        return !wc->masks.tunnel.gbp_id;
  234|  1.53k|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (234:5): [True: 1.53k, False: 182k]
  ------------------
  235|  1.53k|        return !wc->masks.tunnel.gbp_flags;
  236|    233|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (236:5): [True: 233, False: 184k]
  ------------------
  237|    233|        return !wc->masks.tunnel.erspan_ver;
  238|    138|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (238:5): [True: 138, False: 184k]
  ------------------
  239|    138|        return !wc->masks.tunnel.erspan_idx;
  240|    357|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (240:5): [True: 357, False: 184k]
  ------------------
  241|    357|        return !wc->masks.tunnel.erspan_dir;
  242|    546|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (242:5): [True: 546, False: 183k]
  ------------------
  243|    546|        return !wc->masks.tunnel.erspan_hwid;
  244|  83.8k|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2110|  6.33k|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2110:5): [True: 1.15k, False: 183k]
  |  |  |  Branch (2110:29): [True: 5.18k, False: 179k]
  |  |  ------------------
  |  | 2111|  8.18k|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2111:5): [True: 1.19k, False: 183k]
  |  |  |  Branch (2111:29): [True: 653, False: 183k]
  |  |  ------------------
  |  | 2112|  10.2k|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2112:5): [True: 831, False: 183k]
  |  |  |  Branch (2112:29): [True: 1.23k, False: 183k]
  |  |  ------------------
  |  | 2113|  15.5k|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2113:5): [True: 4.78k, False: 179k]
  |  |  |  Branch (2113:29): [True: 515, False: 183k]
  |  |  ------------------
  |  | 2114|  18.5k|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2114:5): [True: 2.17k, False: 182k]
  |  |  |  Branch (2114:29): [True: 832, False: 183k]
  |  |  ------------------
  |  | 2115|  19.7k|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2115:5): [True: 895, False: 183k]
  |  |  |  Branch (2115:30): [True: 271, False: 184k]
  |  |  ------------------
  |  | 2116|  26.7k|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2116:5): [True: 4.71k, False: 179k]
  |  |  |  Branch (2116:30): [True: 2.30k, False: 182k]
  |  |  ------------------
  |  | 2117|  29.0k|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2117:5): [True: 1.07k, False: 183k]
  |  |  |  Branch (2117:30): [True: 1.25k, False: 183k]
  |  |  ------------------
  |  | 2118|  31.6k|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2118:5): [True: 2.01k, False: 182k]
  |  |  |  Branch (2118:30): [True: 546, False: 183k]
  |  |  ------------------
  |  | 2119|  38.8k|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2119:5): [True: 6.13k, False: 178k]
  |  |  |  Branch (2119:30): [True: 1.06k, False: 183k]
  |  |  ------------------
  |  | 2120|  41.9k|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2120:5): [True: 816, False: 183k]
  |  |  |  Branch (2120:30): [True: 2.30k, False: 182k]
  |  |  ------------------
  |  | 2121|  44.9k|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2121:5): [True: 1.66k, False: 182k]
  |  |  |  Branch (2121:30): [True: 1.27k, False: 183k]
  |  |  ------------------
  |  | 2122|  47.6k|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2122:5): [True: 1.00k, False: 183k]
  |  |  |  Branch (2122:30): [True: 1.73k, False: 182k]
  |  |  ------------------
  |  | 2123|  49.8k|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2123:5): [True: 1.66k, False: 182k]
  |  |  |  Branch (2123:30): [True: 579, False: 183k]
  |  |  ------------------
  |  | 2124|  52.0k|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2124:5): [True: 339, False: 184k]
  |  |  |  Branch (2124:30): [True: 1.84k, False: 182k]
  |  |  ------------------
  |  | 2125|  55.2k|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2125:5): [True: 1.01k, False: 183k]
  |  |  |  Branch (2125:30): [True: 2.16k, False: 182k]
  |  |  ------------------
  |  | 2126|  57.6k|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2126:5): [True: 1.49k, False: 182k]
  |  |  |  Branch (2126:30): [True: 914, False: 183k]
  |  |  ------------------
  |  | 2127|  59.6k|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2127:5): [True: 1.37k, False: 183k]
  |  |  |  Branch (2127:30): [True: 635, False: 183k]
  |  |  ------------------
  |  | 2128|  60.2k|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2128:5): [True: 172, False: 184k]
  |  |  |  Branch (2128:30): [True: 450, False: 184k]
  |  |  ------------------
  |  | 2129|  61.6k|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2129:5): [True: 613, False: 183k]
  |  |  |  Branch (2129:30): [True: 731, False: 183k]
  |  |  ------------------
  |  | 2130|  63.6k|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2130:5): [True: 929, False: 183k]
  |  |  |  Branch (2130:30): [True: 1.10k, False: 183k]
  |  |  ------------------
  |  | 2131|  65.2k|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2131:5): [True: 452, False: 184k]
  |  |  |  Branch (2131:30): [True: 1.09k, False: 183k]
  |  |  ------------------
  |  | 2132|  66.2k|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2132:5): [True: 529, False: 183k]
  |  |  |  Branch (2132:30): [True: 533, False: 183k]
  |  |  ------------------
  |  | 2133|  67.8k|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2133:5): [True: 1.13k, False: 183k]
  |  |  |  Branch (2133:30): [True: 468, False: 184k]
  |  |  ------------------
  |  | 2134|  70.0k|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2134:5): [True: 776, False: 183k]
  |  |  |  Branch (2134:30): [True: 1.37k, False: 183k]
  |  |  ------------------
  |  | 2135|  71.9k|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2135:5): [True: 1.22k, False: 183k]
  |  |  |  Branch (2135:30): [True: 678, False: 183k]
  |  |  ------------------
  |  | 2136|  73.8k|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2136:5): [True: 491, False: 184k]
  |  |  |  Branch (2136:30): [True: 1.41k, False: 183k]
  |  |  ------------------
  |  | 2137|  76.6k|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2137:5): [True: 837, False: 183k]
  |  |  |  Branch (2137:30): [True: 1.98k, False: 182k]
  |  |  ------------------
  |  | 2138|  78.3k|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2138:5): [True: 381, False: 184k]
  |  |  |  Branch (2138:30): [True: 1.25k, False: 183k]
  |  |  ------------------
  |  | 2139|  80.5k|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2139:5): [True: 1.42k, False: 183k]
  |  |  |  Branch (2139:30): [True: 835, False: 183k]
  |  |  ------------------
  |  | 2140|  82.1k|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2140:5): [True: 1.28k, False: 183k]
  |  |  |  Branch (2140:30): [True: 272, False: 184k]
  |  |  ------------------
  |  | 2141|  83.8k|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2141:5): [True: 714, False: 183k]
  |  |  ------------------
  ------------------
  245|  83.8k|        return !ULLONG_GET(wc->masks.tunnel.metadata.present.map,
  ------------------
  |  |  293|  83.8k|#define ULLONG_GET(MAP, OFFSET) !!((MAP) & (1ULL << (OFFSET)))
  ------------------
  246|  3.10M|                           mf->id - MFF_TUN_METADATA0);
  247|    549|    case MFF_METADATA:
  ------------------
  |  Branch (247:5): [True: 549, False: 183k]
  ------------------
  248|    549|        return !wc->masks.metadata;
  249|  2.65k|    case MFF_IN_PORT:
  ------------------
  |  Branch (249:5): [True: 2.65k, False: 181k]
  ------------------
  250|  3.35k|    case MFF_IN_PORT_OXM:
  ------------------
  |  Branch (250:5): [True: 694, False: 183k]
  ------------------
  251|  3.35k|        return !wc->masks.in_port.ofp_port;
  252|      0|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (252:5): [True: 0, False: 184k]
  ------------------
  253|      0|        return !wc->masks.skb_priority;
  254|    432|    case MFF_PKT_MARK:
  ------------------
  |  Branch (254:5): [True: 432, False: 184k]
  ------------------
  255|    432|        return !wc->masks.pkt_mark;
  256|  1.08k|    case MFF_CT_STATE:
  ------------------
  |  Branch (256:5): [True: 1.08k, False: 183k]
  ------------------
  257|  1.08k|        return !wc->masks.ct_state;
  258|    585|    case MFF_CT_ZONE:
  ------------------
  |  Branch (258:5): [True: 585, False: 183k]
  ------------------
  259|    585|        return !wc->masks.ct_zone;
  260|    286|    case MFF_CT_MARK:
  ------------------
  |  Branch (260:5): [True: 286, False: 184k]
  ------------------
  261|    286|        return !wc->masks.ct_mark;
  262|    974|    case MFF_CT_LABEL:
  ------------------
  |  Branch (262:5): [True: 974, False: 183k]
  ------------------
  263|    974|        return ovs_u128_is_zero(wc->masks.ct_label);
  264|    200|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (264:5): [True: 200, False: 184k]
  ------------------
  265|    200|        return !wc->masks.ct_nw_proto;
  266|    581|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (266:5): [True: 581, False: 183k]
  ------------------
  267|    581|        return !wc->masks.ct_nw_src;
  268|    413|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (268:5): [True: 413, False: 184k]
  ------------------
  269|    413|        return !wc->masks.ct_nw_dst;
  270|    498|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (270:5): [True: 498, False: 183k]
  ------------------
  271|    498|        return !wc->masks.ct_tp_src;
  272|    109|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (272:5): [True: 109, False: 184k]
  ------------------
  273|    109|        return !wc->masks.ct_tp_dst;
  274|    525|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (274:5): [True: 525, False: 183k]
  ------------------
  275|    525|        return ipv6_mask_is_any(&wc->masks.ct_ipv6_src);
  276|    997|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (276:5): [True: 997, False: 183k]
  ------------------
  277|    997|        return ipv6_mask_is_any(&wc->masks.ct_ipv6_dst);
  278|  11.9k|    CASE_MFF_REGS:
  ------------------
  |  | 2065|  2.30k|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:     \
  |  |  ------------------
  |  |  |  Branch (2065:5): [True: 680, False: 183k]
  |  |  |  Branch (2065:20): [True: 378, False: 184k]
  |  |  |  Branch (2065:35): [True: 904, False: 183k]
  |  |  |  Branch (2065:50): [True: 338, False: 184k]
  |  |  ------------------
  |  | 2066|  3.59k|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:     \
  |  |  ------------------
  |  |  |  Branch (2066:5): [True: 348, False: 184k]
  |  |  |  Branch (2066:20): [True: 543, False: 183k]
  |  |  |  Branch (2066:35): [True: 242, False: 184k]
  |  |  |  Branch (2066:50): [True: 158, False: 184k]
  |  |  ------------------
  |  | 2067|  6.71k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11:   \
  |  |  ------------------
  |  |  |  Branch (2067:5): [True: 442, False: 184k]
  |  |  |  Branch (2067:20): [True: 398, False: 184k]
  |  |  |  Branch (2067:35): [True: 1.41k, False: 183k]
  |  |  |  Branch (2067:51): [True: 868, False: 183k]
  |  |  ------------------
  |  | 2068|  9.43k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15: \
  |  |  ------------------
  |  |  |  Branch (2068:5): [True: 474, False: 184k]
  |  |  |  Branch (2068:21): [True: 207, False: 184k]
  |  |  |  Branch (2068:37): [True: 799, False: 183k]
  |  |  |  Branch (2068:53): [True: 1.24k, False: 183k]
  |  |  ------------------
  |  | 2069|  10.0k|    case MFF_REG16: case MFF_REG17: case MFF_REG18: case MFF_REG19: \
  |  |  ------------------
  |  |  |  Branch (2069:5): [True: 150, False: 184k]
  |  |  |  Branch (2069:21): [True: 215, False: 184k]
  |  |  |  Branch (2069:37): [True: 122, False: 184k]
  |  |  |  Branch (2069:53): [True: 108, False: 184k]
  |  |  ------------------
  |  | 2070|  10.8k|    case MFF_REG20: case MFF_REG21: case MFF_REG22: case MFF_REG23: \
  |  |  ------------------
  |  |  |  Branch (2070:5): [True: 104, False: 184k]
  |  |  |  Branch (2070:21): [True: 108, False: 184k]
  |  |  |  Branch (2070:37): [True: 469, False: 184k]
  |  |  |  Branch (2070:53): [True: 117, False: 184k]
  |  |  ------------------
  |  | 2071|  11.5k|    case MFF_REG24: case MFF_REG25: case MFF_REG26: case MFF_REG27: \
  |  |  ------------------
  |  |  |  Branch (2071:5): [True: 198, False: 184k]
  |  |  |  Branch (2071:21): [True: 411, False: 184k]
  |  |  |  Branch (2071:37): [True: 97, False: 184k]
  |  |  |  Branch (2071:53): [True: 61, False: 184k]
  |  |  ------------------
  |  | 2072|  11.9k|    case MFF_REG28: case MFF_REG29: case MFF_REG30: case MFF_REG31
  |  |  ------------------
  |  |  |  Branch (2072:5): [True: 85, False: 184k]
  |  |  |  Branch (2072:21): [True: 52, False: 184k]
  |  |  |  Branch (2072:37): [True: 79, False: 184k]
  |  |  ------------------
  ------------------
  279|  11.9k|        return !wc->masks.regs[mf->id - MFF_REG0];
  280|  5.92k|    CASE_MFF_XREGS:
  ------------------
  |  | 2081|  2.43k|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3:    \
  |  |  ------------------
  |  |  |  Branch (2081:5): [True: 533, False: 183k]
  |  |  |  Branch (2081:21): [True: 99, False: 184k]
  |  |  |  Branch (2081:37): [True: 321, False: 184k]
  |  |  |  Branch (2081:53): [True: 1.48k, False: 183k]
  |  |  ------------------
  |  | 2082|  4.05k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7:    \
  |  |  ------------------
  |  |  |  Branch (2082:5): [True: 157, False: 184k]
  |  |  |  Branch (2082:21): [True: 882, False: 183k]
  |  |  |  Branch (2082:37): [True: 89, False: 184k]
  |  |  |  Branch (2082:53): [True: 494, False: 183k]
  |  |  ------------------
  |  | 2083|  4.78k|    case MFF_XREG8: case MFF_XREG9: case MFF_XREG10: case MFF_XREG11:  \
  |  |  ------------------
  |  |  |  Branch (2083:5): [True: 151, False: 184k]
  |  |  |  Branch (2083:21): [True: 101, False: 184k]
  |  |  |  Branch (2083:37): [True: 389, False: 184k]
  |  |  |  Branch (2083:54): [True: 88, False: 184k]
  |  |  ------------------
  |  | 2084|  5.92k|    case MFF_XREG12: case MFF_XREG13: case MFF_XREG14: case MFF_XREG15
  |  |  ------------------
  |  |  |  Branch (2084:5): [True: 695, False: 183k]
  |  |  |  Branch (2084:22): [True: 113, False: 184k]
  |  |  |  Branch (2084:39): [True: 256, False: 184k]
  |  |  ------------------
  ------------------
  281|  5.92k|        return !flow_get_xreg(&wc->masks, mf->id - MFF_XREG0);
  282|  6.02k|    CASE_MFF_XXREGS: {
  ------------------
  |  | 2093|  5.92k|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3: \
  |  |  ------------------
  |  |  |  Branch (2093:5): [True: 709, False: 183k]
  |  |  |  Branch (2093:22): [True: 239, False: 184k]
  |  |  |  Branch (2093:39): [True: 3.72k, False: 180k]
  |  |  |  Branch (2093:56): [True: 1.25k, False: 183k]
  |  |  ------------------
  |  | 2094|  6.02k|    case MFF_XXREG4: case MFF_XXREG5: case MFF_XXREG6: case MFF_XXREG7
  |  |  ------------------
  |  |  |  Branch (2094:5): [True: 10, False: 184k]
  |  |  |  Branch (2094:22): [True: 10, False: 184k]
  |  |  |  Branch (2094:39): [True: 74, False: 184k]
  |  |  ------------------
  ------------------
  283|  6.02k|        ovs_u128 value = flow_get_xxreg(&wc->masks, mf->id - MFF_XXREG0);
  284|  6.02k|        return ovs_u128_is_zero(value);
  285|  30.1k|    }
  286|    204|    case MFF_ACTSET_OUTPUT:
  ------------------
  |  Branch (286:5): [True: 204, False: 184k]
  ------------------
  287|    204|        return !wc->masks.actset_output;
  288|       |
  289|    271|    case MFF_ETH_SRC:
  ------------------
  |  Branch (289:5): [True: 271, False: 184k]
  ------------------
  290|    271|        return eth_addr_is_zero(wc->masks.dl_src);
  291|    436|    case MFF_ETH_DST:
  ------------------
  |  Branch (291:5): [True: 436, False: 184k]
  ------------------
  292|    436|        return eth_addr_is_zero(wc->masks.dl_dst);
  293|    691|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (293:5): [True: 691, False: 183k]
  ------------------
  294|    691|        return !wc->masks.dl_type;
  295|       |
  296|    117|    case MFF_ARP_SHA:
  ------------------
  |  Branch (296:5): [True: 117, False: 184k]
  ------------------
  297|    789|    case MFF_ND_SLL:
  ------------------
  |  Branch (297:5): [True: 672, False: 183k]
  ------------------
  298|    789|        return eth_addr_is_zero(wc->masks.arp_sha);
  299|       |
  300|    529|    case MFF_ARP_THA:
  ------------------
  |  Branch (300:5): [True: 529, False: 183k]
  ------------------
  301|  4.10k|    case MFF_ND_TLL:
  ------------------
  |  Branch (301:5): [True: 3.57k, False: 180k]
  ------------------
  302|  4.10k|        return eth_addr_is_zero(wc->masks.arp_tha);
  303|       |
  304|    866|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (304:5): [True: 866, False: 183k]
  ------------------
  305|    866|        return !wc->masks.vlans[0].tci;
  306|      0|    case MFF_DL_VLAN:
  ------------------
  |  Branch (306:5): [True: 0, False: 184k]
  ------------------
  307|      0|        return !(wc->masks.vlans[0].tci & htons(VLAN_VID_MASK));
  308|  1.07k|    case MFF_VLAN_VID:
  ------------------
  |  Branch (308:5): [True: 1.07k, False: 183k]
  ------------------
  309|  1.07k|        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: 184k]
  ------------------
  311|    319|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (311:5): [True: 319, False: 184k]
  ------------------
  312|    319|        return !(wc->masks.vlans[0].tci & htons(VLAN_PCP_MASK));
  313|       |
  314|  1.48k|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (314:5): [True: 1.48k, False: 183k]
  ------------------
  315|  1.48k|        return !(wc->masks.mpls_lse[0] & htonl(MPLS_LABEL_MASK));
  316|    236|    case MFF_MPLS_TC:
  ------------------
  |  Branch (316:5): [True: 236, False: 184k]
  ------------------
  317|    236|        return !(wc->masks.mpls_lse[0] & htonl(MPLS_TC_MASK));
  318|    310|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (318:5): [True: 310, False: 184k]
  ------------------
  319|    310|        return !(wc->masks.mpls_lse[0] & htonl(MPLS_BOS_MASK));
  320|  1.66k|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (320:5): [True: 1.66k, False: 182k]
  ------------------
  321|  1.66k|        return !(wc->masks.mpls_lse[0] & htonl(MPLS_TTL_MASK));
  322|       |
  323|    153|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (323:5): [True: 153, False: 184k]
  ------------------
  324|    153|        return !wc->masks.nw_src;
  325|    796|    case MFF_IPV4_DST:
  ------------------
  |  Branch (325:5): [True: 796, False: 183k]
  ------------------
  326|    796|        return !wc->masks.nw_dst;
  327|       |
  328|    914|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (328:5): [True: 914, False: 183k]
  ------------------
  329|    914|        return ipv6_mask_is_any(&wc->masks.ipv6_src);
  330|  1.39k|    case MFF_IPV6_DST:
  ------------------
  |  Branch (330:5): [True: 1.39k, False: 183k]
  ------------------
  331|  1.39k|        return ipv6_mask_is_any(&wc->masks.ipv6_dst);
  332|       |
  333|    374|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (333:5): [True: 374, False: 184k]
  ------------------
  334|    374|        return !wc->masks.ipv6_label;
  335|       |
  336|  1.90k|    case MFF_IP_PROTO:
  ------------------
  |  Branch (336:5): [True: 1.90k, False: 182k]
  ------------------
  337|  1.90k|        return !wc->masks.nw_proto;
  338|    303|    case MFF_IP_DSCP:
  ------------------
  |  Branch (338:5): [True: 303, False: 184k]
  ------------------
  339|  1.44k|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (339:5): [True: 1.13k, False: 183k]
  ------------------
  340|  1.44k|        return !(wc->masks.nw_tos & IP_DSCP_MASK);
  ------------------
  |  |  724|  1.44k|#define IP_DSCP_MASK 0xfc
  ------------------
  341|    617|    case MFF_IP_ECN:
  ------------------
  |  Branch (341:5): [True: 617, False: 183k]
  ------------------
  342|    617|        return !(wc->masks.nw_tos & IP_ECN_MASK);
  ------------------
  |  |  722|    617|#define IP_ECN_MASK 0x03
  ------------------
  343|    408|    case MFF_IP_TTL:
  ------------------
  |  Branch (343:5): [True: 408, False: 184k]
  ------------------
  344|    408|        return !wc->masks.nw_ttl;
  345|       |
  346|    490|    case MFF_ND_TARGET:
  ------------------
  |  Branch (346:5): [True: 490, False: 184k]
  ------------------
  347|    490|        return ipv6_mask_is_any(&wc->masks.nd_target);
  348|       |
  349|    851|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (349:5): [True: 851, False: 183k]
  ------------------
  350|    851|        return !wc->masks.igmp_group_ip4;
  351|    412|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (351:5): [True: 412, False: 184k]
  ------------------
  352|    412|        return !wc->masks.tcp_flags;
  353|       |
  354|  3.83k|    case MFF_IP_FRAG:
  ------------------
  |  Branch (354:5): [True: 3.83k, False: 180k]
  ------------------
  355|  3.83k|        return !(wc->masks.nw_frag & FLOW_NW_FRAG_MASK);
  ------------------
  |  |   56|  3.83k|#define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   54|  3.83k|#define FLOW_NW_FRAG_ANY   (1 << 0) /* Set for any IP frag. */
  |  |  ------------------
  |  |               #define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   55|  3.83k|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  |  |  ------------------
  ------------------
  356|       |
  357|    321|    case MFF_ARP_OP:
  ------------------
  |  Branch (357:5): [True: 321, False: 184k]
  ------------------
  358|    321|        return !wc->masks.nw_proto;
  359|    651|    case MFF_ARP_SPA:
  ------------------
  |  Branch (359:5): [True: 651, False: 183k]
  ------------------
  360|    651|        return !wc->masks.nw_src;
  361|  1.01k|    case MFF_ARP_TPA:
  ------------------
  |  Branch (361:5): [True: 1.01k, False: 183k]
  ------------------
  362|  1.01k|        return !wc->masks.nw_dst;
  363|       |
  364|  1.53k|    case MFF_TCP_SRC:
  ------------------
  |  Branch (364:5): [True: 1.53k, False: 182k]
  ------------------
  365|  2.15k|    case MFF_UDP_SRC:
  ------------------
  |  Branch (365:5): [True: 617, False: 183k]
  ------------------
  366|  2.82k|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (366:5): [True: 670, False: 183k]
  ------------------
  367|  3.00k|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (367:5): [True: 184, False: 184k]
  ------------------
  368|  3.86k|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (368:5): [True: 852, False: 183k]
  ------------------
  369|  3.86k|        return !wc->masks.tp_src;
  370|    325|    case MFF_TCP_DST:
  ------------------
  |  Branch (370:5): [True: 325, False: 184k]
  ------------------
  371|    915|    case MFF_UDP_DST:
  ------------------
  |  Branch (371:5): [True: 590, False: 183k]
  ------------------
  372|  1.67k|    case MFF_SCTP_DST:
  ------------------
  |  Branch (372:5): [True: 762, False: 183k]
  ------------------
  373|  2.14k|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (373:5): [True: 471, False: 184k]
  ------------------
  374|  2.35k|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (374:5): [True: 203, False: 184k]
  ------------------
  375|  2.35k|        return !wc->masks.tp_dst;
  376|    722|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (376:5): [True: 722, False: 183k]
  ------------------
  377|    722|        return !wc->masks.tcp_flags;
  378|       |
  379|    492|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (379:5): [True: 492, False: 184k]
  ------------------
  380|    492|        return !wc->masks.nsh.flags;
  381|    522|    case MFF_NSH_TTL:
  ------------------
  |  Branch (381:5): [True: 522, False: 183k]
  ------------------
  382|    522|        return !wc->masks.nsh.ttl;
  383|     68|    case MFF_NSH_MDTYPE:
  ------------------
  |  Branch (383:5): [True: 68, False: 184k]
  ------------------
  384|     68|        return !wc->masks.nsh.mdtype;
  385|  3.88k|    case MFF_NSH_NP:
  ------------------
  |  Branch (385:5): [True: 3.88k, False: 180k]
  ------------------
  386|  3.88k|        return !wc->masks.nsh.np;
  387|    275|    case MFF_NSH_SPI:
  ------------------
  |  Branch (387:5): [True: 275, False: 184k]
  ------------------
  388|    275|        return !(wc->masks.nsh.path_hdr & htonl(NSH_SPI_MASK));
  389|    243|    case MFF_NSH_SI:
  ------------------
  |  Branch (389:5): [True: 243, False: 184k]
  ------------------
  390|    243|        return !(wc->masks.nsh.path_hdr & htonl(NSH_SI_MASK));
  391|    190|    case MFF_NSH_C1:
  ------------------
  |  Branch (391:5): [True: 190, False: 184k]
  ------------------
  392|    524|    case MFF_NSH_C2:
  ------------------
  |  Branch (392:5): [True: 334, False: 184k]
  ------------------
  393|    741|    case MFF_NSH_C3:
  ------------------
  |  Branch (393:5): [True: 217, False: 184k]
  ------------------
  394|    816|    case MFF_NSH_C4:
  ------------------
  |  Branch (394:5): [True: 75, False: 184k]
  ------------------
  395|    816|        return !wc->masks.nsh.context[mf->id - MFF_NSH_C1];
  396|    764|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (396:5): [True: 764, False: 183k]
  ------------------
  397|    764|        return !wc->masks.tunnel.gtpu_flags;
  398|    649|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (398:5): [True: 649, False: 183k]
  ------------------
  399|    649|        return !wc->masks.tunnel.gtpu_msgtype;
  400|       |
  401|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (401:5): [True: 0, False: 184k]
  ------------------
  402|      0|    default:
  ------------------
  |  Branch (402:5): [True: 0, False: 184k]
  ------------------
  403|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  404|   184k|    }
  405|   184k|}
mf_get_mask:
  416|  32.9k|{
  417|  32.9k|    mf_get_value(mf, &wc->masks, mask);
  418|  32.9k|}
mf_is_mask_valid:
  424|   198k|{
  425|   198k|    switch (mf->maskable) {
  ------------------
  |  Branch (425:13): [True: 198k, False: 0]
  ------------------
  426|  38.4k|    case MFM_NONE:
  ------------------
  |  Branch (426:5): [True: 38.4k, False: 160k]
  ------------------
  427|  38.4k|        return (is_all_zeros(mask, mf->n_bytes) ||
  ------------------
  |  Branch (427:17): [True: 6.69k, False: 31.7k]
  ------------------
  428|  31.7k|                is_all_ones(mask, mf->n_bytes));
  ------------------
  |  Branch (428:17): [True: 30.6k, False: 1.07k]
  ------------------
  429|       |
  430|   160k|    case MFM_FULLY:
  ------------------
  |  Branch (430:5): [True: 160k, False: 38.4k]
  ------------------
  431|   160k|        return true;
  432|   198k|    }
  433|       |
  434|      0|    OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  435|   198k|}
mf_are_prereqs_ok:
  496|  1.46k|{
  497|       |    return mf_are_prereqs_ok__(mf, flow, NULL, wc);
  498|  1.46k|}
mf_are_match_prereqs_ok:
  504|  53.8k|{
  505|       |    return mf_are_prereqs_ok__(mf, &match->flow, &match->wc, NULL);
  506|  53.8k|}
mf_is_value_valid:
  520|   196k|{
  521|   196k|    switch (mf->id) {
  522|    953|    case MFF_DP_HASH:
  ------------------
  |  Branch (522:5): [True: 953, False: 195k]
  ------------------
  523|  1.91k|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (523:5): [True: 957, False: 195k]
  ------------------
  524|  15.0k|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (524:5): [True: 13.1k, False: 183k]
  ------------------
  525|  15.1k|    case MFF_CONJ_ID:
  ------------------
  |  Branch (525:5): [True: 70, False: 196k]
  ------------------
  526|  15.5k|    case MFF_TUN_ID:
  ------------------
  |  Branch (526:5): [True: 370, False: 196k]
  ------------------
  527|  15.8k|    case MFF_TUN_SRC:
  ------------------
  |  Branch (527:5): [True: 348, False: 196k]
  ------------------
  528|  16.4k|    case MFF_TUN_DST:
  ------------------
  |  Branch (528:5): [True: 568, False: 195k]
  ------------------
  529|  18.6k|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (529:5): [True: 2.19k, False: 194k]
  ------------------
  530|  19.8k|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (530:5): [True: 1.22k, False: 195k]
  ------------------
  531|  19.8k|    case MFF_TUN_TOS:
  ------------------
  |  Branch (531:5): [True: 0, False: 196k]
  ------------------
  532|  19.8k|    case MFF_TUN_TTL:
  ------------------
  |  Branch (532:5): [True: 0, False: 196k]
  ------------------
  533|  20.0k|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (533:5): [True: 147, False: 196k]
  ------------------
  534|  21.5k|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (534:5): [True: 1.53k, False: 194k]
  ------------------
  535|  21.6k|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (535:5): [True: 138, False: 196k]
  ------------------
  536|  21.9k|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (536:5): [True: 233, False: 196k]
  ------------------
  537|  22.2k|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (537:5): [True: 357, False: 196k]
  ------------------
  538|  22.8k|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (538:5): [True: 546, False: 195k]
  ------------------
  539|  23.5k|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (539:5): [True: 764, False: 195k]
  ------------------
  540|  24.2k|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (540:5): [True: 649, False: 195k]
  ------------------
  541|  4.93M|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2110|  30.5k|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2110:5): [True: 1.15k, False: 195k]
  |  |  |  Branch (2110:29): [True: 5.18k, False: 191k]
  |  |  ------------------
  |  | 2111|  32.4k|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2111:5): [True: 1.19k, False: 195k]
  |  |  |  Branch (2111:29): [True: 654, False: 195k]
  |  |  ------------------
  |  | 2112|  35.0k|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2112:5): [True: 1.39k, False: 195k]
  |  |  |  Branch (2112:29): [True: 1.23k, False: 195k]
  |  |  ------------------
  |  | 2113|  40.3k|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2113:5): [True: 4.78k, False: 191k]
  |  |  |  Branch (2113:29): [True: 515, False: 196k]
  |  |  ------------------
  |  | 2114|  44.4k|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2114:5): [True: 3.27k, False: 193k]
  |  |  |  Branch (2114:29): [True: 832, False: 195k]
  |  |  ------------------
  |  | 2115|  45.7k|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2115:5): [True: 896, False: 195k]
  |  |  |  Branch (2115:30): [True: 366, False: 196k]
  |  |  ------------------
  |  | 2116|  52.7k|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2116:5): [True: 4.71k, False: 191k]
  |  |  |  Branch (2116:30): [True: 2.30k, False: 194k]
  |  |  ------------------
  |  | 2117|  55.0k|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2117:5): [True: 1.07k, False: 195k]
  |  |  |  Branch (2117:30): [True: 1.25k, False: 195k]
  |  |  ------------------
  |  | 2118|  57.9k|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2118:5): [True: 2.01k, False: 194k]
  |  |  |  Branch (2118:30): [True: 888, False: 195k]
  |  |  ------------------
  |  | 2119|  65.1k|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2119:5): [True: 6.13k, False: 190k]
  |  |  |  Branch (2119:30): [True: 1.06k, False: 195k]
  |  |  ------------------
  |  | 2120|  68.2k|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2120:5): [True: 816, False: 195k]
  |  |  |  Branch (2120:30): [True: 2.30k, False: 194k]
  |  |  ------------------
  |  | 2121|  71.2k|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2121:5): [True: 1.66k, False: 194k]
  |  |  |  Branch (2121:30): [True: 1.27k, False: 195k]
  |  |  ------------------
  |  | 2122|  74.1k|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2122:5): [True: 1.19k, False: 195k]
  |  |  |  Branch (2122:30): [True: 1.73k, False: 194k]
  |  |  ------------------
  |  | 2123|  76.3k|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2123:5): [True: 1.66k, False: 194k]
  |  |  |  Branch (2123:30): [True: 579, False: 195k]
  |  |  ------------------
  |  | 2124|  78.5k|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2124:5): [True: 339, False: 196k]
  |  |  |  Branch (2124:30): [True: 1.85k, False: 194k]
  |  |  ------------------
  |  | 2125|  81.7k|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2125:5): [True: 1.01k, False: 195k]
  |  |  |  Branch (2125:30): [True: 2.16k, False: 194k]
  |  |  ------------------
  |  | 2126|  85.5k|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2126:5): [True: 1.49k, False: 195k]
  |  |  |  Branch (2126:30): [True: 2.26k, False: 194k]
  |  |  ------------------
  |  | 2127|  87.5k|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2127:5): [True: 1.37k, False: 195k]
  |  |  |  Branch (2127:30): [True: 635, False: 195k]
  |  |  ------------------
  |  | 2128|  88.1k|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2128:5): [True: 173, False: 196k]
  |  |  |  Branch (2128:30): [True: 450, False: 196k]
  |  |  ------------------
  |  | 2129|  89.5k|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2129:5): [True: 613, False: 195k]
  |  |  |  Branch (2129:30): [True: 731, False: 195k]
  |  |  ------------------
  |  | 2130|  91.5k|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2130:5): [True: 929, False: 195k]
  |  |  |  Branch (2130:30): [True: 1.10k, False: 195k]
  |  |  ------------------
  |  | 2131|  93.0k|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2131:5): [True: 452, False: 196k]
  |  |  |  Branch (2131:30): [True: 1.09k, False: 195k]
  |  |  ------------------
  |  | 2132|  94.1k|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2132:5): [True: 529, False: 195k]
  |  |  |  Branch (2132:30): [True: 533, False: 195k]
  |  |  ------------------
  |  | 2133|  95.7k|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2133:5): [True: 1.13k, False: 195k]
  |  |  |  Branch (2133:30): [True: 468, False: 196k]
  |  |  ------------------
  |  | 2134|  97.8k|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2134:5): [True: 776, False: 195k]
  |  |  |  Branch (2134:30): [True: 1.37k, False: 195k]
  |  |  ------------------
  |  | 2135|  99.8k|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2135:5): [True: 1.22k, False: 195k]
  |  |  |  Branch (2135:30): [True: 678, False: 195k]
  |  |  ------------------
  |  | 2136|   101k|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2136:5): [True: 491, False: 196k]
  |  |  |  Branch (2136:30): [True: 1.41k, False: 195k]
  |  |  ------------------
  |  | 2137|   104k|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2137:5): [True: 838, False: 195k]
  |  |  |  Branch (2137:30): [True: 1.99k, False: 194k]
  |  |  ------------------
  |  | 2138|   109k|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2138:5): [True: 1.75k, False: 194k]
  |  |  |  Branch (2138:30): [True: 2.92k, False: 193k]
  |  |  ------------------
  |  | 2139|   111k|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2139:5): [True: 1.42k, False: 195k]
  |  |  |  Branch (2139:30): [True: 835, False: 195k]
  |  |  ------------------
  |  | 2140|   113k|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2140:5): [True: 1.28k, False: 195k]
  |  |  |  Branch (2140:30): [True: 272, False: 196k]
  |  |  ------------------
  |  | 2141|   114k|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2141:5): [True: 715, False: 195k]
  |  |  ------------------
  ------------------
  542|  4.93M|    case MFF_METADATA:
  ------------------
  |  Branch (542:5): [True: 549, False: 195k]
  ------------------
  543|   118k|    case MFF_IN_PORT:
  ------------------
  |  Branch (543:5): [True: 2.65k, False: 193k]
  ------------------
  544|   118k|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (544:5): [True: 0, False: 196k]
  ------------------
  545|   118k|    case MFF_PKT_MARK:
  ------------------
  |  Branch (545:5): [True: 432, False: 196k]
  ------------------
  546|   119k|    case MFF_CT_ZONE:
  ------------------
  |  Branch (546:5): [True: 585, False: 195k]
  ------------------
  547|   119k|    case MFF_CT_MARK:
  ------------------
  |  Branch (547:5): [True: 286, False: 196k]
  ------------------
  548|   120k|    case MFF_CT_LABEL:
  ------------------
  |  Branch (548:5): [True: 974, False: 195k]
  ------------------
  549|   120k|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (549:5): [True: 200, False: 196k]
  ------------------
  550|   121k|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (550:5): [True: 581, False: 195k]
  ------------------
  551|   121k|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (551:5): [True: 413, False: 196k]
  ------------------
  552|   122k|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (552:5): [True: 525, False: 195k]
  ------------------
  553|   123k|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (553:5): [True: 997, False: 195k]
  ------------------
  554|   123k|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (554:5): [True: 500, False: 196k]
  ------------------
  555|   123k|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (555:5): [True: 109, False: 196k]
  ------------------
  556|  4.20M|    CASE_MFF_REGS:
  ------------------
  |  | 2065|   125k|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:     \
  |  |  ------------------
  |  |  |  Branch (2065:5): [True: 680, False: 195k]
  |  |  |  Branch (2065:20): [True: 378, False: 196k]
  |  |  |  Branch (2065:35): [True: 904, False: 195k]
  |  |  |  Branch (2065:50): [True: 338, False: 196k]
  |  |  ------------------
  |  | 2066|   127k|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:     \
  |  |  ------------------
  |  |  |  Branch (2066:5): [True: 348, False: 196k]
  |  |  |  Branch (2066:20): [True: 543, False: 195k]
  |  |  |  Branch (2066:35): [True: 242, False: 196k]
  |  |  |  Branch (2066:50): [True: 158, False: 196k]
  |  |  ------------------
  |  | 2067|   130k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11:   \
  |  |  ------------------
  |  |  |  Branch (2067:5): [True: 442, False: 196k]
  |  |  |  Branch (2067:20): [True: 398, False: 196k]
  |  |  |  Branch (2067:35): [True: 1.41k, False: 195k]
  |  |  |  Branch (2067:51): [True: 868, False: 195k]
  |  |  ------------------
  |  | 2068|   133k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15: \
  |  |  ------------------
  |  |  |  Branch (2068:5): [True: 474, False: 196k]
  |  |  |  Branch (2068:21): [True: 207, False: 196k]
  |  |  |  Branch (2068:37): [True: 799, False: 195k]
  |  |  |  Branch (2068:53): [True: 1.24k, False: 195k]
  |  |  ------------------
  |  | 2069|   133k|    case MFF_REG16: case MFF_REG17: case MFF_REG18: case MFF_REG19: \
  |  |  ------------------
  |  |  |  Branch (2069:5): [True: 150, False: 196k]
  |  |  |  Branch (2069:21): [True: 215, False: 196k]
  |  |  |  Branch (2069:37): [True: 122, False: 196k]
  |  |  |  Branch (2069:53): [True: 108, False: 196k]
  |  |  ------------------
  |  | 2070|   134k|    case MFF_REG20: case MFF_REG21: case MFF_REG22: case MFF_REG23: \
  |  |  ------------------
  |  |  |  Branch (2070:5): [True: 104, False: 196k]
  |  |  |  Branch (2070:21): [True: 108, False: 196k]
  |  |  |  Branch (2070:37): [True: 469, False: 196k]
  |  |  |  Branch (2070:53): [True: 117, False: 196k]
  |  |  ------------------
  |  | 2071|   135k|    case MFF_REG24: case MFF_REG25: case MFF_REG26: case MFF_REG27: \
  |  |  ------------------
  |  |  |  Branch (2071:5): [True: 198, False: 196k]
  |  |  |  Branch (2071:21): [True: 411, False: 196k]
  |  |  |  Branch (2071:37): [True: 97, False: 196k]
  |  |  |  Branch (2071:53): [True: 61, False: 196k]
  |  |  ------------------
  |  | 2072|   135k|    case MFF_REG28: case MFF_REG29: case MFF_REG30: case MFF_REG31
  |  |  ------------------
  |  |  |  Branch (2072:5): [True: 85, False: 196k]
  |  |  |  Branch (2072:21): [True: 52, False: 196k]
  |  |  |  Branch (2072:37): [True: 79, False: 196k]
  |  |  ------------------
  ------------------
  557|  4.20M|    CASE_MFF_XREGS:
  ------------------
  |  | 2081|   137k|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3:    \
  |  |  ------------------
  |  |  |  Branch (2081:5): [True: 533, False: 195k]
  |  |  |  Branch (2081:21): [True: 99, False: 196k]
  |  |  |  Branch (2081:37): [True: 321, False: 196k]
  |  |  |  Branch (2081:53): [True: 1.48k, False: 195k]
  |  |  ------------------
  |  | 2082|   139k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7:    \
  |  |  ------------------
  |  |  |  Branch (2082:5): [True: 157, False: 196k]
  |  |  |  Branch (2082:21): [True: 882, False: 195k]
  |  |  |  Branch (2082:37): [True: 89, False: 196k]
  |  |  |  Branch (2082:53): [True: 494, False: 196k]
  |  |  ------------------
  |  | 2083|   140k|    case MFF_XREG8: case MFF_XREG9: case MFF_XREG10: case MFF_XREG11:  \
  |  |  ------------------
  |  |  |  Branch (2083:5): [True: 151, False: 196k]
  |  |  |  Branch (2083:21): [True: 101, False: 196k]
  |  |  |  Branch (2083:37): [True: 389, False: 196k]
  |  |  |  Branch (2083:54): [True: 88, False: 196k]
  |  |  ------------------
  |  | 2084|   141k|    case MFF_XREG12: case MFF_XREG13: case MFF_XREG14: case MFF_XREG15
  |  |  ------------------
  |  |  |  Branch (2084:5): [True: 695, False: 195k]
  |  |  |  Branch (2084:22): [True: 113, False: 196k]
  |  |  |  Branch (2084:39): [True: 256, False: 196k]
  |  |  ------------------
  ------------------
  558|  2.22M|    CASE_MFF_XXREGS:
  ------------------
  |  | 2093|   147k|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3: \
  |  |  ------------------
  |  |  |  Branch (2093:5): [True: 709, False: 195k]
  |  |  |  Branch (2093:22): [True: 239, False: 196k]
  |  |  |  Branch (2093:39): [True: 3.72k, False: 192k]
  |  |  |  Branch (2093:56): [True: 1.25k, False: 195k]
  |  |  ------------------
  |  | 2094|   147k|    case MFF_XXREG4: case MFF_XXREG5: case MFF_XXREG6: case MFF_XXREG7
  |  |  ------------------
  |  |  |  Branch (2094:5): [True: 10, False: 196k]
  |  |  |  Branch (2094:22): [True: 10, False: 196k]
  |  |  |  Branch (2094:39): [True: 74, False: 196k]
  |  |  ------------------
  ------------------
  559|  1.16M|    case MFF_ETH_SRC:
  ------------------
  |  Branch (559:5): [True: 477, False: 196k]
  ------------------
  560|   148k|    case MFF_ETH_DST:
  ------------------
  |  Branch (560:5): [True: 436, False: 196k]
  ------------------
  561|   149k|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (561:5): [True: 691, False: 195k]
  ------------------
  562|   150k|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (562:5): [True: 919, False: 195k]
  ------------------
  563|   151k|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (563:5): [True: 1.67k, False: 194k]
  ------------------
  564|   151k|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (564:5): [True: 153, False: 196k]
  ------------------
  565|   152k|    case MFF_IPV4_DST:
  ------------------
  |  Branch (565:5): [True: 830, False: 195k]
  ------------------
  566|   153k|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (566:5): [True: 914, False: 195k]
  ------------------
  567|   154k|    case MFF_IPV6_DST:
  ------------------
  |  Branch (567:5): [True: 1.39k, False: 195k]
  ------------------
  568|   157k|    case MFF_IP_PROTO:
  ------------------
  |  Branch (568:5): [True: 2.42k, False: 194k]
  ------------------
  569|   157k|    case MFF_IP_TTL:
  ------------------
  |  Branch (569:5): [True: 408, False: 196k]
  ------------------
  570|   158k|    case MFF_ARP_SPA:
  ------------------
  |  Branch (570:5): [True: 654, False: 195k]
  ------------------
  571|   159k|    case MFF_ARP_TPA:
  ------------------
  |  Branch (571:5): [True: 1.01k, False: 195k]
  ------------------
  572|   159k|    case MFF_ARP_SHA:
  ------------------
  |  Branch (572:5): [True: 117, False: 196k]
  ------------------
  573|   160k|    case MFF_ARP_THA:
  ------------------
  |  Branch (573:5): [True: 529, False: 195k]
  ------------------
  574|   161k|    case MFF_TCP_SRC:
  ------------------
  |  Branch (574:5): [True: 1.70k, False: 194k]
  ------------------
  575|   162k|    case MFF_TCP_DST:
  ------------------
  |  Branch (575:5): [True: 325, False: 196k]
  ------------------
  576|   162k|    case MFF_UDP_SRC:
  ------------------
  |  Branch (576:5): [True: 678, False: 195k]
  ------------------
  577|   163k|    case MFF_UDP_DST:
  ------------------
  |  Branch (577:5): [True: 660, False: 195k]
  ------------------
  578|   164k|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (578:5): [True: 670, False: 195k]
  ------------------
  579|   165k|    case MFF_SCTP_DST:
  ------------------
  |  Branch (579:5): [True: 859, False: 195k]
  ------------------
  580|   165k|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (580:5): [True: 185, False: 196k]
  ------------------
  581|   166k|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (581:5): [True: 787, False: 195k]
  ------------------
  582|   166k|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (582:5): [True: 931, False: 195k]
  ------------------
  583|   167k|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (583:5): [True: 221, False: 196k]
  ------------------
  584|   167k|    case MFF_ND_TARGET:
  ------------------
  |  Branch (584:5): [True: 786, False: 195k]
  ------------------
  585|   170k|    case MFF_ND_SLL:
  ------------------
  |  Branch (585:5): [True: 2.16k, False: 194k]
  ------------------
  586|   174k|    case MFF_ND_TLL:
  ------------------
  |  Branch (586:5): [True: 4.09k, False: 192k]
  ------------------
  587|   175k|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (587:5): [True: 851, False: 195k]
  ------------------
  588|   175k|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (588:5): [True: 444, False: 196k]
  ------------------
  589|   175k|        return true;
  590|       |
  591|    696|    case MFF_IN_PORT_OXM:
  ------------------
  |  Branch (591:5): [True: 696, False: 195k]
  ------------------
  592|    900|    case MFF_ACTSET_OUTPUT: {
  ------------------
  |  Branch (592:5): [True: 204, False: 196k]
  ------------------
  593|    900|        ofp_port_t port;
  594|    900|        return !ofputil_port_from_ofp11(value->be32, &port);
  595|    696|    }
  596|       |
  597|    313|    case MFF_IP_DSCP:
  ------------------
  |  Branch (597:5): [True: 313, False: 196k]
  ------------------
  598|    313|        return !(value->u8 & ~IP_DSCP_MASK);
  ------------------
  |  |  724|    313|#define IP_DSCP_MASK 0xfc
  ------------------
  599|  1.20k|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (599:5): [True: 1.20k, False: 195k]
  ------------------
  600|  1.20k|        return !(value->u8 & (~IP_DSCP_MASK >> 2));
  ------------------
  |  |  724|  1.20k|#define IP_DSCP_MASK 0xfc
  ------------------
  601|    618|    case MFF_IP_ECN:
  ------------------
  |  Branch (601:5): [True: 618, False: 195k]
  ------------------
  602|    618|        return !(value->u8 & ~IP_ECN_MASK);
  ------------------
  |  |  722|    618|#define IP_ECN_MASK 0x03
  ------------------
  603|  3.84k|    case MFF_IP_FRAG:
  ------------------
  |  Branch (603:5): [True: 3.84k, False: 192k]
  ------------------
  604|  3.84k|        return !(value->u8 & ~FLOW_NW_FRAG_MASK);
  ------------------
  |  |   56|  3.84k|#define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   54|  3.84k|#define FLOW_NW_FRAG_ANY   (1 << 0) /* Set for any IP frag. */
  |  |  ------------------
  |  |               #define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   55|  3.84k|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  |  |  ------------------
  ------------------
  605|    724|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (605:5): [True: 724, False: 195k]
  ------------------
  606|    724|        return !(value->be16 & ~htons(0x0fff));
  607|       |
  608|    323|    case MFF_ARP_OP:
  ------------------
  |  Branch (608:5): [True: 323, False: 196k]
  ------------------
  609|    323|        return !(value->be16 & htons(0xff00));
  610|       |
  611|      0|    case MFF_DL_VLAN:
  ------------------
  |  Branch (611:5): [True: 0, False: 196k]
  ------------------
  612|      0|        return !(value->be16 & htons(VLAN_CFI | VLAN_PCP_MASK));
  613|  1.95k|    case MFF_VLAN_VID:
  ------------------
  |  Branch (613:5): [True: 1.95k, False: 194k]
  ------------------
  614|  1.95k|        return !(value->be16 & htons(VLAN_PCP_MASK));
  615|       |
  616|      0|    case MFF_DL_VLAN_PCP:
  ------------------
  |  Branch (616:5): [True: 0, False: 196k]
  ------------------
  617|    338|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (617:5): [True: 338, False: 196k]
  ------------------
  618|    338|        return !(value->u8 & ~(VLAN_PCP_MASK >> VLAN_PCP_SHIFT));
  ------------------
  |  |  497|    338|#define VLAN_PCP_MASK 0xe000
  ------------------
                      return !(value->u8 & ~(VLAN_PCP_MASK >> VLAN_PCP_SHIFT));
  ------------------
  |  |  498|    338|#define VLAN_PCP_SHIFT 13
  ------------------
  619|       |
  620|    380|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (620:5): [True: 380, False: 196k]
  ------------------
  621|    380|        return !(value->be32 & ~htonl(IPV6_LABEL_MASK));
  622|       |
  623|  1.51k|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (623:5): [True: 1.51k, False: 195k]
  ------------------
  624|  1.51k|        return !(value->be32 & ~htonl(MPLS_LABEL_MASK >> MPLS_LABEL_SHIFT));
  625|       |
  626|    319|    case MFF_MPLS_TC:
  ------------------
  |  Branch (626:5): [True: 319, False: 196k]
  ------------------
  627|    319|        return !(value->u8 & ~(MPLS_TC_MASK >> MPLS_TC_SHIFT));
  ------------------
  |  |  551|    319|#define MPLS_TC_MASK        0x00000e00
  ------------------
                      return !(value->u8 & ~(MPLS_TC_MASK >> MPLS_TC_SHIFT));
  ------------------
  |  |  552|    319|#define MPLS_TC_SHIFT       9
  ------------------
  628|       |
  629|    395|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (629:5): [True: 395, False: 196k]
  ------------------
  630|    395|        return !(value->u8 & ~(MPLS_BOS_MASK >> MPLS_BOS_SHIFT));
  ------------------
  |  |  548|    395|#define MPLS_BOS_MASK       0x00000100
  ------------------
                      return !(value->u8 & ~(MPLS_BOS_MASK >> MPLS_BOS_SHIFT));
  ------------------
  |  |  549|    395|#define MPLS_BOS_SHIFT      8
  ------------------
  631|       |
  632|    677|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (632:5): [True: 677, False: 195k]
  ------------------
  633|    677|        return !(value->be16 & ~htons(FLOW_TNL_PUB_F_MASK));
  634|       |
  635|  1.08k|    case MFF_CT_STATE:
  ------------------
  |  Branch (635:5): [True: 1.08k, False: 195k]
  ------------------
  636|  1.08k|        return !(value->be32 & ~htonl(CS_SUPPORTED_MASK));
  637|       |
  638|    560|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (638:5): [True: 560, False: 195k]
  ------------------
  639|    560|        return true;
  640|    529|    case MFF_NSH_TTL:
  ------------------
  |  Branch (640:5): [True: 529, False: 195k]
  ------------------
  641|    529|        return (value->u8 <= 63);
  642|     73|    case MFF_NSH_MDTYPE:
  ------------------
  |  Branch (642:5): [True: 73, False: 196k]
  ------------------
  643|     73|        return (value->u8 == 1 || value->u8 == 2);
  ------------------
  |  Branch (643:17): [True: 34, False: 39]
  |  Branch (643:35): [True: 34, False: 5]
  ------------------
  644|  3.88k|    case MFF_NSH_NP:
  ------------------
  |  Branch (644:5): [True: 3.88k, False: 192k]
  ------------------
  645|  3.88k|        return true;
  646|    306|    case MFF_NSH_SPI:
  ------------------
  |  Branch (646:5): [True: 306, False: 196k]
  ------------------
  647|    306|        return !(value->be32 & htonl(0xFF000000));
  648|    243|    case MFF_NSH_SI:
  ------------------
  |  Branch (648:5): [True: 243, False: 196k]
  ------------------
  649|    433|    case MFF_NSH_C1:
  ------------------
  |  Branch (649:5): [True: 190, False: 196k]
  ------------------
  650|    767|    case MFF_NSH_C2:
  ------------------
  |  Branch (650:5): [True: 334, False: 196k]
  ------------------
  651|    984|    case MFF_NSH_C3:
  ------------------
  |  Branch (651:5): [True: 217, False: 196k]
  ------------------
  652|  1.05k|    case MFF_NSH_C4:
  ------------------
  |  Branch (652:5): [True: 75, False: 196k]
  ------------------
  653|  1.05k|        return true;
  654|       |
  655|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (655:5): [True: 0, False: 196k]
  ------------------
  656|      0|    default:
  ------------------
  |  Branch (656:5): [True: 0, False: 196k]
  ------------------
  657|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  658|   196k|    }
  659|   196k|}
mf_get_value:
  666|  65.9k|{
  667|  65.9k|    switch (mf->id) {
  668|    680|    case MFF_DP_HASH:
  ------------------
  |  Branch (668:5): [True: 680, False: 65.2k]
  ------------------
  669|    680|        value->be32 = htonl(flow->dp_hash);
  670|    680|        break;
  671|  1.23k|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (671:5): [True: 1.23k, False: 64.6k]
  ------------------
  672|  1.23k|        value->be32 = htonl(flow->recirc_id);
  673|  1.23k|        break;
  674|  3.70k|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (674:5): [True: 3.70k, False: 62.2k]
  ------------------
  675|  3.70k|        value->be32 = flow->packet_type;
  676|  3.70k|        break;
  677|  1.45k|    case MFF_CONJ_ID:
  ------------------
  |  Branch (677:5): [True: 1.45k, False: 64.4k]
  ------------------
  678|  1.45k|        value->be32 = htonl(flow->conj_id);
  679|  1.45k|        break;
  680|  1.55k|    case MFF_TUN_ID:
  ------------------
  |  Branch (680:5): [True: 1.55k, False: 64.3k]
  ------------------
  681|  1.55k|        value->be64 = flow->tunnel.tun_id;
  682|  1.55k|        break;
  683|     20|    case MFF_TUN_SRC:
  ------------------
  |  Branch (683:5): [True: 20, False: 65.9k]
  ------------------
  684|     20|        value->be32 = flow->tunnel.ip_src;
  685|     20|        break;
  686|     86|    case MFF_TUN_DST:
  ------------------
  |  Branch (686:5): [True: 86, False: 65.8k]
  ------------------
  687|     86|        value->be32 = flow->tunnel.ip_dst;
  688|     86|        break;
  689|      6|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (689:5): [True: 6, False: 65.9k]
  ------------------
  690|      6|        value->ipv6 = flow->tunnel.ipv6_src;
  691|      6|        break;
  692|     74|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (692:5): [True: 74, False: 65.8k]
  ------------------
  693|     74|        value->ipv6 = flow->tunnel.ipv6_dst;
  694|     74|        break;
  695|    732|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (695:5): [True: 732, False: 65.1k]
  ------------------
  696|    732|        value->be16 = htons(flow->tunnel.flags & FLOW_TNL_PUB_F_MASK);
  697|    732|        break;
  698|      8|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (698:5): [True: 8, False: 65.9k]
  ------------------
  699|      8|        value->be16 = flow->tunnel.gbp_id;
  700|      8|        break;
  701|    760|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (701:5): [True: 760, False: 65.1k]
  ------------------
  702|    760|        value->u8 = flow->tunnel.gbp_flags;
  703|    760|        break;
  704|      0|    case MFF_TUN_TTL:
  ------------------
  |  Branch (704:5): [True: 0, False: 65.9k]
  ------------------
  705|      0|        value->u8 = flow->tunnel.ip_ttl;
  706|      0|        break;
  707|      0|    case MFF_TUN_TOS:
  ------------------
  |  Branch (707:5): [True: 0, False: 65.9k]
  ------------------
  708|      0|        value->u8 = flow->tunnel.ip_tos;
  709|      0|        break;
  710|      0|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (710:5): [True: 0, False: 65.9k]
  ------------------
  711|      0|        value->u8 = flow->tunnel.erspan_ver;
  712|      0|        break;
  713|      0|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (713:5): [True: 0, False: 65.9k]
  ------------------
  714|      0|        value->be32 = htonl(flow->tunnel.erspan_idx);
  715|      0|        break;
  716|      0|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (716:5): [True: 0, False: 65.9k]
  ------------------
  717|      0|        value->u8 = flow->tunnel.erspan_dir;
  718|      0|        break;
  719|      0|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (719:5): [True: 0, False: 65.9k]
  ------------------
  720|      0|        value->u8 = flow->tunnel.erspan_hwid;
  721|      0|        break;
  722|      0|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (722:5): [True: 0, False: 65.9k]
  ------------------
  723|      0|        value->u8 = flow->tunnel.gtpu_flags;
  724|      0|        break;
  725|      0|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (725:5): [True: 0, False: 65.9k]
  ------------------
  726|      0|        value->u8 = flow->tunnel.gtpu_msgtype;
  727|      0|        break;
  728|  33.7k|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2110|    282|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2110:5): [True: 6, False: 65.9k]
  |  |  |  Branch (2110:29): [True: 276, False: 65.6k]
  |  |  ------------------
  |  | 2111|  2.11k|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2111:5): [True: 714, False: 65.2k]
  |  |  |  Branch (2111:29): [True: 1.12k, False: 64.8k]
  |  |  ------------------
  |  | 2112|  2.56k|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2112:5): [True: 106, False: 65.8k]
  |  |  |  Branch (2112:29): [True: 342, False: 65.5k]
  |  |  ------------------
  |  | 2113|  3.27k|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2113:5): [True: 364, False: 65.5k]
  |  |  |  Branch (2113:29): [True: 344, False: 65.5k]
  |  |  ------------------
  |  | 2114|  3.35k|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2114:5): [True: 70, False: 65.8k]
  |  |  |  Branch (2114:29): [True: 14, False: 65.9k]
  |  |  ------------------
  |  | 2115|  3.48k|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2115:5): [True: 16, False: 65.9k]
  |  |  |  Branch (2115:30): [True: 116, False: 65.8k]
  |  |  ------------------
  |  | 2116|  3.84k|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2116:5): [True: 10, False: 65.9k]
  |  |  |  Branch (2116:30): [True: 348, False: 65.5k]
  |  |  ------------------
  |  | 2117|  3.91k|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2117:5): [True: 8, False: 65.9k]
  |  |  |  Branch (2117:30): [True: 62, False: 65.8k]
  |  |  ------------------
  |  | 2118|  4.15k|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2118:5): [True: 34, False: 65.8k]
  |  |  |  Branch (2118:30): [True: 204, False: 65.7k]
  |  |  ------------------
  |  | 2119|  5.54k|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2119:5): [True: 650, False: 65.2k]
  |  |  |  Branch (2119:30): [True: 738, False: 65.1k]
  |  |  ------------------
  |  | 2120|  7.00k|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2120:5): [True: 528, False: 65.3k]
  |  |  |  Branch (2120:30): [True: 936, False: 64.9k]
  |  |  ------------------
  |  | 2121|  7.74k|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2121:5): [True: 724, False: 65.1k]
  |  |  |  Branch (2121:30): [True: 10, False: 65.9k]
  |  |  ------------------
  |  | 2122|  14.9k|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2122:5): [True: 1.01k, False: 64.9k]
  |  |  |  Branch (2122:30): [True: 6.18k, False: 59.7k]
  |  |  ------------------
  |  | 2123|  15.7k|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2123:5): [True: 8, False: 65.9k]
  |  |  |  Branch (2123:30): [True: 776, False: 65.1k]
  |  |  ------------------
  |  | 2124|  16.7k|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2124:5): [True: 34, False: 65.8k]
  |  |  |  Branch (2124:30): [True: 998, False: 64.9k]
  |  |  ------------------
  |  | 2125|  17.5k|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2125:5): [True: 654, False: 65.2k]
  |  |  |  Branch (2125:30): [True: 132, False: 65.7k]
  |  |  ------------------
  |  | 2126|  18.2k|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2126:5): [True: 528, False: 65.3k]
  |  |  |  Branch (2126:30): [True: 150, False: 65.7k]
  |  |  ------------------
  |  | 2127|  18.7k|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2127:5): [True: 506, False: 65.4k]
  |  |  |  Branch (2127:30): [True: 24, False: 65.8k]
  |  |  ------------------
  |  | 2128|  20.3k|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2128:5): [True: 1.62k, False: 64.2k]
  |  |  |  Branch (2128:30): [True: 14, False: 65.9k]
  |  |  ------------------
  |  | 2129|  20.8k|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2129:5): [True: 64, False: 65.8k]
  |  |  |  Branch (2129:30): [True: 354, False: 65.5k]
  |  |  ------------------
  |  | 2130|  22.5k|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2130:5): [True: 1.79k, False: 64.1k]
  |  |  |  Branch (2130:30): [True: 6, False: 65.9k]
  |  |  ------------------
  |  | 2131|  24.5k|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2131:5): [True: 1.99k, False: 63.9k]
  |  |  |  Branch (2131:30): [True: 6, False: 65.9k]
  |  |  ------------------
  |  | 2132|  26.3k|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2132:5): [True: 582, False: 65.3k]
  |  |  |  Branch (2132:30): [True: 1.12k, False: 64.7k]
  |  |  ------------------
  |  | 2133|  27.3k|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2133:5): [True: 62, False: 65.8k]
  |  |  |  Branch (2133:30): [True: 994, False: 64.9k]
  |  |  ------------------
  |  | 2134|  27.6k|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2134:5): [True: 30, False: 65.8k]
  |  |  |  Branch (2134:30): [True: 252, False: 65.6k]
  |  |  ------------------
  |  | 2135|  29.2k|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2135:5): [True: 1.50k, False: 64.4k]
  |  |  |  Branch (2135:30): [True: 130, False: 65.7k]
  |  |  ------------------
  |  | 2136|  31.5k|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2136:5): [True: 1.19k, False: 64.7k]
  |  |  |  Branch (2136:30): [True: 1.03k, False: 64.8k]
  |  |  ------------------
  |  | 2137|  31.5k|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2137:5): [True: 16, False: 65.9k]
  |  |  |  Branch (2137:30): [True: 18, False: 65.9k]
  |  |  ------------------
  |  | 2138|  32.4k|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2138:5): [True: 476, False: 65.4k]
  |  |  |  Branch (2138:30): [True: 398, False: 65.5k]
  |  |  ------------------
  |  | 2139|  32.4k|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2139:5): [True: 24, False: 65.8k]
  |  |  |  Branch (2139:30): [True: 32, False: 65.8k]
  |  |  ------------------
  |  | 2140|  32.9k|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2140:5): [True: 264, False: 65.6k]
  |  |  |  Branch (2140:30): [True: 260, False: 65.6k]
  |  |  ------------------
  |  | 2141|  33.7k|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2141:5): [True: 44, False: 65.8k]
  |  |  ------------------
  ------------------
  729|  33.7k|        tun_metadata_read(&flow->tunnel, mf, value);
  730|  33.7k|        break;
  731|       |
  732|     16|    case MFF_METADATA:
  ------------------
  |  Branch (732:5): [True: 16, False: 65.9k]
  ------------------
  733|     16|        value->be64 = flow->metadata;
  734|     16|        break;
  735|       |
  736|     90|    case MFF_IN_PORT:
  ------------------
  |  Branch (736:5): [True: 90, False: 65.8k]
  ------------------
  737|     90|        value->be16 = htons(ofp_to_u16(flow->in_port.ofp_port));
  738|     90|        break;
  739|  3.88k|    case MFF_IN_PORT_OXM:
  ------------------
  |  Branch (739:5): [True: 3.88k, False: 62.0k]
  ------------------
  740|  3.88k|        value->be32 = ofputil_port_to_ofp11(flow->in_port.ofp_port);
  741|  3.88k|        break;
  742|  1.80k|    case MFF_ACTSET_OUTPUT:
  ------------------
  |  Branch (742:5): [True: 1.80k, False: 64.1k]
  ------------------
  743|  1.80k|        value->be32 = ofputil_port_to_ofp11(flow->actset_output);
  744|  1.80k|        break;
  745|       |
  746|      0|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (746:5): [True: 0, False: 65.9k]
  ------------------
  747|      0|        value->be32 = htonl(flow->skb_priority);
  748|      0|        break;
  749|       |
  750|     14|    case MFF_PKT_MARK:
  ------------------
  |  Branch (750:5): [True: 14, False: 65.9k]
  ------------------
  751|     14|        value->be32 = htonl(flow->pkt_mark);
  752|     14|        break;
  753|       |
  754|  1.89k|    case MFF_CT_STATE:
  ------------------
  |  Branch (754:5): [True: 1.89k, False: 64.0k]
  ------------------
  755|  1.89k|        value->be32 = htonl(flow->ct_state);
  756|  1.89k|        break;
  757|       |
  758|    144|    case MFF_CT_ZONE:
  ------------------
  |  Branch (758:5): [True: 144, False: 65.7k]
  ------------------
  759|    144|        value->be16 = htons(flow->ct_zone);
  760|    144|        break;
  761|       |
  762|  2.52k|    case MFF_CT_MARK:
  ------------------
  |  Branch (762:5): [True: 2.52k, False: 63.3k]
  ------------------
  763|  2.52k|        value->be32 = htonl(flow->ct_mark);
  764|  2.52k|        break;
  765|       |
  766|      6|    case MFF_CT_LABEL:
  ------------------
  |  Branch (766:5): [True: 6, False: 65.9k]
  ------------------
  767|      6|        value->be128 = hton128(flow->ct_label);
  768|      6|        break;
  769|       |
  770|     28|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (770:5): [True: 28, False: 65.8k]
  ------------------
  771|     28|        value->u8 = flow->ct_nw_proto;
  772|     28|        break;
  773|       |
  774|      6|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (774:5): [True: 6, False: 65.9k]
  ------------------
  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: 65.9k]
  ------------------
  779|      6|        value->be32 = flow->ct_nw_dst;
  780|      6|        break;
  781|       |
  782|      6|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (782:5): [True: 6, False: 65.9k]
  ------------------
  783|      6|        value->ipv6 = flow->ct_ipv6_src;
  784|      6|        break;
  785|       |
  786|    476|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (786:5): [True: 476, False: 65.4k]
  ------------------
  787|    476|        value->ipv6 = flow->ct_ipv6_dst;
  788|    476|        break;
  789|       |
  790|    644|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (790:5): [True: 644, False: 65.2k]
  ------------------
  791|    644|        value->be16 = flow->ct_tp_src;
  792|    644|        break;
  793|       |
  794|    548|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (794:5): [True: 548, False: 65.3k]
  ------------------
  795|    548|        value->be16 = flow->ct_tp_dst;
  796|    548|        break;
  797|       |
  798|  6.02k|    CASE_MFF_REGS:
  ------------------
  |  | 2065|  2.38k|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:     \
  |  |  ------------------
  |  |  |  Branch (2065:5): [True: 902, False: 65.0k]
  |  |  |  Branch (2065:20): [True: 192, False: 65.7k]
  |  |  |  Branch (2065:35): [True: 1.28k, False: 64.6k]
  |  |  |  Branch (2065:50): [True: 6, False: 65.9k]
  |  |  ------------------
  |  | 2066|  2.96k|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:     \
  |  |  ------------------
  |  |  |  Branch (2066:5): [True: 46, False: 65.8k]
  |  |  |  Branch (2066:20): [True: 14, False: 65.9k]
  |  |  |  Branch (2066:35): [True: 506, False: 65.4k]
  |  |  |  Branch (2066:50): [True: 14, False: 65.9k]
  |  |  ------------------
  |  | 2067|  4.98k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11:   \
  |  |  ------------------
  |  |  |  Branch (2067:5): [True: 372, False: 65.5k]
  |  |  |  Branch (2067:20): [True: 1.15k, False: 64.7k]
  |  |  |  Branch (2067:35): [True: 484, False: 65.4k]
  |  |  |  Branch (2067:51): [True: 14, False: 65.9k]
  |  |  ------------------
  |  | 2068|  6.02k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15: \
  |  |  ------------------
  |  |  |  Branch (2068:5): [True: 458, False: 65.4k]
  |  |  |  Branch (2068:21): [True: 324, False: 65.5k]
  |  |  |  Branch (2068:37): [True: 32, False: 65.8k]
  |  |  |  Branch (2068:53): [True: 228, False: 65.6k]
  |  |  ------------------
  |  | 2069|  6.02k|    case MFF_REG16: case MFF_REG17: case MFF_REG18: case MFF_REG19: \
  |  |  ------------------
  |  |  |  Branch (2069:5): [True: 0, False: 65.9k]
  |  |  |  Branch (2069:21): [True: 0, False: 65.9k]
  |  |  |  Branch (2069:37): [True: 0, False: 65.9k]
  |  |  |  Branch (2069:53): [True: 0, False: 65.9k]
  |  |  ------------------
  |  | 2070|  6.02k|    case MFF_REG20: case MFF_REG21: case MFF_REG22: case MFF_REG23: \
  |  |  ------------------
  |  |  |  Branch (2070:5): [True: 0, False: 65.9k]
  |  |  |  Branch (2070:21): [True: 0, False: 65.9k]
  |  |  |  Branch (2070:37): [True: 0, False: 65.9k]
  |  |  |  Branch (2070:53): [True: 0, False: 65.9k]
  |  |  ------------------
  |  | 2071|  6.02k|    case MFF_REG24: case MFF_REG25: case MFF_REG26: case MFF_REG27: \
  |  |  ------------------
  |  |  |  Branch (2071:5): [True: 0, False: 65.9k]
  |  |  |  Branch (2071:21): [True: 0, False: 65.9k]
  |  |  |  Branch (2071:37): [True: 0, False: 65.9k]
  |  |  |  Branch (2071:53): [True: 0, False: 65.9k]
  |  |  ------------------
  |  | 2072|  6.02k|    case MFF_REG28: case MFF_REG29: case MFF_REG30: case MFF_REG31
  |  |  ------------------
  |  |  |  Branch (2072:5): [True: 0, False: 65.9k]
  |  |  |  Branch (2072:21): [True: 0, False: 65.9k]
  |  |  |  Branch (2072:37): [True: 0, False: 65.9k]
  |  |  ------------------
  ------------------
  799|  6.02k|        value->be32 = htonl(flow->regs[mf->id - MFF_REG0]);
  800|  6.02k|        break;
  801|       |
  802|  3.59k|    CASE_MFF_XREGS:
  ------------------
  |  | 2081|  1.48k|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3:    \
  |  |  ------------------
  |  |  |  Branch (2081:5): [True: 10, False: 65.9k]
  |  |  |  Branch (2081:21): [True: 1.46k, False: 64.4k]
  |  |  |  Branch (2081:37): [True: 6, False: 65.9k]
  |  |  |  Branch (2081:53): [True: 6, False: 65.9k]
  |  |  ------------------
  |  | 2082|  3.48k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7:    \
  |  |  ------------------
  |  |  |  Branch (2082:5): [True: 22, False: 65.9k]
  |  |  |  Branch (2082:21): [True: 78, False: 65.8k]
  |  |  |  Branch (2082:37): [True: 1.83k, False: 64.0k]
  |  |  |  Branch (2082:53): [True: 64, False: 65.8k]
  |  |  ------------------
  |  | 2083|  3.55k|    case MFF_XREG8: case MFF_XREG9: case MFF_XREG10: case MFF_XREG11:  \
  |  |  ------------------
  |  |  |  Branch (2083:5): [True: 6, False: 65.9k]
  |  |  |  Branch (2083:21): [True: 38, False: 65.8k]
  |  |  |  Branch (2083:37): [True: 14, False: 65.9k]
  |  |  |  Branch (2083:54): [True: 14, False: 65.9k]
  |  |  ------------------
  |  | 2084|  3.59k|    case MFF_XREG12: case MFF_XREG13: case MFF_XREG14: case MFF_XREG15
  |  |  ------------------
  |  |  |  Branch (2084:5): [True: 6, False: 65.9k]
  |  |  |  Branch (2084:22): [True: 14, False: 65.9k]
  |  |  |  Branch (2084:39): [True: 6, False: 65.9k]
  |  |  ------------------
  ------------------
  803|  3.59k|        value->be64 = htonll(flow_get_xreg(flow, mf->id - MFF_XREG0));
  804|  3.59k|        break;
  805|       |
  806|     34|    CASE_MFF_XXREGS:
  ------------------
  |  | 2093|     34|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3: \
  |  |  ------------------
  |  |  |  Branch (2093:5): [True: 6, False: 65.9k]
  |  |  |  Branch (2093:22): [True: 6, False: 65.9k]
  |  |  |  Branch (2093:39): [True: 14, False: 65.9k]
  |  |  |  Branch (2093:56): [True: 8, False: 65.9k]
  |  |  ------------------
  |  | 2094|     34|    case MFF_XXREG4: case MFF_XXREG5: case MFF_XXREG6: case MFF_XXREG7
  |  |  ------------------
  |  |  |  Branch (2094:5): [True: 0, False: 65.9k]
  |  |  |  Branch (2094:22): [True: 0, False: 65.9k]
  |  |  |  Branch (2094:39): [True: 0, False: 65.9k]
  |  |  ------------------
  ------------------
  807|     34|        value->be128 = hton128(flow_get_xxreg(flow, mf->id - MFF_XXREG0));
  808|     34|        break;
  809|       |
  810|      6|    case MFF_ETH_SRC:
  ------------------
  |  Branch (810:5): [True: 6, False: 65.9k]
  ------------------
  811|      6|        value->mac = flow->dl_src;
  812|      6|        break;
  813|       |
  814|      6|    case MFF_ETH_DST:
  ------------------
  |  Branch (814:5): [True: 6, False: 65.9k]
  ------------------
  815|      6|        value->mac = flow->dl_dst;
  816|      6|        break;
  817|       |
  818|     20|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (818:5): [True: 20, False: 65.9k]
  ------------------
  819|     20|        value->be16 = flow->dl_type;
  820|     20|        break;
  821|       |
  822|     34|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (822:5): [True: 34, False: 65.8k]
  ------------------
  823|     34|        value->be16 = flow->vlans[0].tci;
  824|     34|        break;
  825|       |
  826|      0|    case MFF_DL_VLAN:
  ------------------
  |  Branch (826:5): [True: 0, False: 65.9k]
  ------------------
  827|      0|        value->be16 = flow->vlans[0].tci & htons(VLAN_VID_MASK);
  828|      0|        break;
  829|      2|    case MFF_VLAN_VID:
  ------------------
  |  Branch (829:5): [True: 2, False: 65.9k]
  ------------------
  830|      2|        value->be16 = flow->vlans[0].tci & htons(VLAN_VID_MASK | VLAN_CFI);
  831|      2|        break;
  832|       |
  833|      0|    case MFF_DL_VLAN_PCP:
  ------------------
  |  Branch (833:5): [True: 0, False: 65.9k]
  ------------------
  834|      0|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (834:5): [True: 0, False: 65.9k]
  ------------------
  835|      0|        value->u8 = vlan_tci_to_pcp(flow->vlans[0].tci);
  836|      0|        break;
  837|       |
  838|      0|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (838:5): [True: 0, False: 65.9k]
  ------------------
  839|      0|        value->be32 = htonl(mpls_lse_to_label(flow->mpls_lse[0]));
  840|      0|        break;
  841|       |
  842|      0|    case MFF_MPLS_TC:
  ------------------
  |  Branch (842:5): [True: 0, False: 65.9k]
  ------------------
  843|      0|        value->u8 = mpls_lse_to_tc(flow->mpls_lse[0]);
  844|      0|        break;
  845|       |
  846|      0|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (846:5): [True: 0, False: 65.9k]
  ------------------
  847|      0|        value->u8 = mpls_lse_to_bos(flow->mpls_lse[0]);
  848|      0|        break;
  849|       |
  850|      0|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (850:5): [True: 0, False: 65.9k]
  ------------------
  851|      0|        value->u8 = mpls_lse_to_ttl(flow->mpls_lse[0]);
  852|      0|        break;
  853|       |
  854|      0|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (854:5): [True: 0, False: 65.9k]
  ------------------
  855|      0|        value->be32 = flow->nw_src;
  856|      0|        break;
  857|       |
  858|      0|    case MFF_IPV4_DST:
  ------------------
  |  Branch (858:5): [True: 0, False: 65.9k]
  ------------------
  859|      0|        value->be32 = flow->nw_dst;
  860|      0|        break;
  861|       |
  862|      0|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (862:5): [True: 0, False: 65.9k]
  ------------------
  863|      0|        value->ipv6 = flow->ipv6_src;
  864|      0|        break;
  865|       |
  866|      0|    case MFF_IPV6_DST:
  ------------------
  |  Branch (866:5): [True: 0, False: 65.9k]
  ------------------
  867|      0|        value->ipv6 = flow->ipv6_dst;
  868|      0|        break;
  869|       |
  870|      0|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (870:5): [True: 0, False: 65.9k]
  ------------------
  871|      0|        value->be32 = flow->ipv6_label;
  872|      0|        break;
  873|       |
  874|      0|    case MFF_IP_PROTO:
  ------------------
  |  Branch (874:5): [True: 0, False: 65.9k]
  ------------------
  875|      0|        value->u8 = flow->nw_proto;
  876|      0|        break;
  877|       |
  878|      0|    case MFF_IP_DSCP:
  ------------------
  |  Branch (878:5): [True: 0, False: 65.9k]
  ------------------
  879|      0|        value->u8 = flow->nw_tos & IP_DSCP_MASK;
  ------------------
  |  |  724|      0|#define IP_DSCP_MASK 0xfc
  ------------------
  880|      0|        break;
  881|       |
  882|      0|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (882:5): [True: 0, False: 65.9k]
  ------------------
  883|      0|        value->u8 = flow->nw_tos >> 2;
  884|      0|        break;
  885|       |
  886|      0|    case MFF_IP_ECN:
  ------------------
  |  Branch (886:5): [True: 0, False: 65.9k]
  ------------------
  887|      0|        value->u8 = flow->nw_tos & IP_ECN_MASK;
  ------------------
  |  |  722|      0|#define IP_ECN_MASK 0x03
  ------------------
  888|      0|        break;
  889|       |
  890|      0|    case MFF_IP_TTL:
  ------------------
  |  Branch (890:5): [True: 0, False: 65.9k]
  ------------------
  891|      0|        value->u8 = flow->nw_ttl;
  892|      0|        break;
  893|       |
  894|      0|    case MFF_IP_FRAG:
  ------------------
  |  Branch (894:5): [True: 0, False: 65.9k]
  ------------------
  895|      0|        value->u8 = flow->nw_frag;
  896|      0|        break;
  897|       |
  898|      0|    case MFF_ARP_OP:
  ------------------
  |  Branch (898:5): [True: 0, False: 65.9k]
  ------------------
  899|      0|        value->be16 = htons(flow->nw_proto);
  900|      0|        break;
  901|       |
  902|      0|    case MFF_ARP_SPA:
  ------------------
  |  Branch (902:5): [True: 0, False: 65.9k]
  ------------------
  903|      0|        value->be32 = flow->nw_src;
  904|      0|        break;
  905|       |
  906|      0|    case MFF_ARP_TPA:
  ------------------
  |  Branch (906:5): [True: 0, False: 65.9k]
  ------------------
  907|      0|        value->be32 = flow->nw_dst;
  908|      0|        break;
  909|       |
  910|      0|    case MFF_ARP_SHA:
  ------------------
  |  Branch (910:5): [True: 0, False: 65.9k]
  ------------------
  911|      0|    case MFF_ND_SLL:
  ------------------
  |  Branch (911:5): [True: 0, False: 65.9k]
  ------------------
  912|      0|        value->mac = flow->arp_sha;
  913|      0|        break;
  914|       |
  915|      0|    case MFF_ARP_THA:
  ------------------
  |  Branch (915:5): [True: 0, False: 65.9k]
  ------------------
  916|      0|    case MFF_ND_TLL:
  ------------------
  |  Branch (916:5): [True: 0, False: 65.9k]
  ------------------
  917|      0|        value->mac = flow->arp_tha;
  918|      0|        break;
  919|       |
  920|      0|    case MFF_TCP_SRC:
  ------------------
  |  Branch (920:5): [True: 0, False: 65.9k]
  ------------------
  921|      0|    case MFF_UDP_SRC:
  ------------------
  |  Branch (921:5): [True: 0, False: 65.9k]
  ------------------
  922|      0|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (922:5): [True: 0, False: 65.9k]
  ------------------
  923|      0|        value->be16 = flow->tp_src;
  924|      0|        break;
  925|       |
  926|      0|    case MFF_TCP_DST:
  ------------------
  |  Branch (926:5): [True: 0, False: 65.9k]
  ------------------
  927|      0|    case MFF_UDP_DST:
  ------------------
  |  Branch (927:5): [True: 0, False: 65.9k]
  ------------------
  928|      0|    case MFF_SCTP_DST:
  ------------------
  |  Branch (928:5): [True: 0, False: 65.9k]
  ------------------
  929|      0|        value->be16 = flow->tp_dst;
  930|      0|        break;
  931|       |
  932|      0|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (932:5): [True: 0, False: 65.9k]
  ------------------
  933|      0|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (933:5): [True: 0, False: 65.9k]
  ------------------
  934|      0|        value->be16 = flow->tcp_flags;
  935|      0|        break;
  936|       |
  937|      0|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (937:5): [True: 0, False: 65.9k]
  ------------------
  938|      0|        value->be32 = flow->igmp_group_ip4;
  939|      0|        break;
  940|       |
  941|      0|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (941:5): [True: 0, False: 65.9k]
  ------------------
  942|      0|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (942:5): [True: 0, False: 65.9k]
  ------------------
  943|      0|        value->u8 = ntohs(flow->tp_src);
  944|      0|        break;
  945|       |
  946|      0|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (946:5): [True: 0, False: 65.9k]
  ------------------
  947|      0|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (947:5): [True: 0, False: 65.9k]
  ------------------
  948|      0|        value->u8 = ntohs(flow->tp_dst);
  949|      0|        break;
  950|       |
  951|      0|    case MFF_ND_TARGET:
  ------------------
  |  Branch (951:5): [True: 0, False: 65.9k]
  ------------------
  952|      0|        value->ipv6 = flow->nd_target;
  953|      0|        break;
  954|       |
  955|      0|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (955:5): [True: 0, False: 65.9k]
  ------------------
  956|      0|        value->u8 = flow->nsh.flags;
  957|      0|        break;
  958|      0|    case MFF_NSH_TTL:
  ------------------
  |  Branch (958:5): [True: 0, False: 65.9k]
  ------------------
  959|      0|        value->u8 = flow->nsh.ttl;
  960|      0|        break;
  961|      0|    case MFF_NSH_MDTYPE:
  ------------------
  |  Branch (961:5): [True: 0, False: 65.9k]
  ------------------
  962|      0|        value->u8 = flow->nsh.mdtype;
  963|      0|        break;
  964|      0|    case MFF_NSH_NP:
  ------------------
  |  Branch (964:5): [True: 0, False: 65.9k]
  ------------------
  965|      0|        value->u8 = flow->nsh.np;
  966|      0|        break;
  967|      0|    case MFF_NSH_SPI:
  ------------------
  |  Branch (967:5): [True: 0, False: 65.9k]
  ------------------
  968|      0|        value->be32 = nsh_path_hdr_to_spi(flow->nsh.path_hdr);
  969|      0|        if (value->be32 == htonl(NSH_SPI_MASK >> NSH_SPI_SHIFT)) {
  ------------------
  |  Branch (969:13): [True: 0, False: 0]
  ------------------
  970|      0|            value->be32 = OVS_BE32_MAX;
  ------------------
  |  |   43|      0|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  971|      0|        }
  972|      0|        break;
  973|      0|    case MFF_NSH_SI:
  ------------------
  |  Branch (973:5): [True: 0, False: 65.9k]
  ------------------
  974|      0|        value->u8 = nsh_path_hdr_to_si(flow->nsh.path_hdr);
  975|      0|        break;
  976|      0|    case MFF_NSH_C1:
  ------------------
  |  Branch (976:5): [True: 0, False: 65.9k]
  ------------------
  977|      0|    case MFF_NSH_C2:
  ------------------
  |  Branch (977:5): [True: 0, False: 65.9k]
  ------------------
  978|      0|    case MFF_NSH_C3:
  ------------------
  |  Branch (978:5): [True: 0, False: 65.9k]
  ------------------
  979|      0|    case MFF_NSH_C4:
  ------------------
  |  Branch (979:5): [True: 0, False: 65.9k]
  ------------------
  980|      0|        value->be32 = flow->nsh.context[mf->id - MFF_NSH_C1];
  981|      0|        break;
  982|       |
  983|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (983:5): [True: 0, False: 65.9k]
  ------------------
  984|      0|    default:
  ------------------
  |  Branch (984:5): [True: 0, False: 65.9k]
  ------------------
  985|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  986|  65.9k|    }
  987|  65.9k|}
mf_set_value:
  999|  83.8k|{
 1000|  83.8k|    if (err_str) {
  ------------------
  |  Branch (1000:9): [True: 80.1k, False: 3.71k]
  ------------------
 1001|  80.1k|        *err_str = NULL;
 1002|  80.1k|    }
 1003|       |
 1004|  83.8k|    switch (mf->id) {
 1005|     64|    case MFF_DP_HASH:
  ------------------
  |  Branch (1005:5): [True: 64, False: 83.8k]
  ------------------
 1006|     64|        match_set_dp_hash(match, ntohl(value->be32));
 1007|     64|        break;
 1008|    480|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (1008:5): [True: 480, False: 83.4k]
  ------------------
 1009|    480|        match_set_recirc_id(match, ntohl(value->be32));
 1010|    480|        break;
 1011|  14.2k|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (1011:5): [True: 14.2k, False: 69.6k]
  ------------------
 1012|  14.2k|        match_set_packet_type(match, value->be32);
 1013|  14.2k|        break;
 1014|     39|    case MFF_CONJ_ID:
  ------------------
  |  Branch (1014:5): [True: 39, False: 83.8k]
  ------------------
 1015|     39|        match_set_conj_id(match, ntohl(value->be32));
 1016|     39|        break;
 1017|    137|    case MFF_TUN_ID:
  ------------------
  |  Branch (1017:5): [True: 137, False: 83.7k]
  ------------------
 1018|    137|        match_set_tun_id(match, value->be64);
 1019|    137|        break;
 1020|     83|    case MFF_TUN_SRC:
  ------------------
  |  Branch (1020:5): [True: 83, False: 83.8k]
  ------------------
 1021|     83|        match_set_tun_src(match, value->be32);
 1022|     83|        break;
 1023|    107|    case MFF_TUN_DST:
  ------------------
  |  Branch (1023:5): [True: 107, False: 83.7k]
  ------------------
 1024|    107|        match_set_tun_dst(match, value->be32);
 1025|    107|        break;
 1026|     77|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (1026:5): [True: 77, False: 83.8k]
  ------------------
 1027|     77|        match_set_tun_ipv6_src(match, &value->ipv6);
 1028|     77|        break;
 1029|     12|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (1029:5): [True: 12, False: 83.8k]
  ------------------
 1030|     12|        match_set_tun_ipv6_dst(match, &value->ipv6);
 1031|     12|        break;
 1032|    435|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (1032:5): [True: 435, False: 83.4k]
  ------------------
 1033|    435|        match_set_tun_flags(match, ntohs(value->be16));
 1034|    435|        break;
 1035|     70|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (1035:5): [True: 70, False: 83.8k]
  ------------------
 1036|     70|         match_set_tun_gbp_id(match, value->be16);
 1037|     70|         break;
 1038|     70|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (1038:5): [True: 70, False: 83.8k]
  ------------------
 1039|     70|         match_set_tun_gbp_flags(match, value->u8);
 1040|     70|         break;
 1041|      0|    case MFF_TUN_TOS:
  ------------------
  |  Branch (1041:5): [True: 0, False: 83.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: 83.8k]
  ------------------
 1045|      0|        match_set_tun_ttl(match, value->u8);
 1046|      0|        break;
 1047|     71|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (1047:5): [True: 71, False: 83.8k]
  ------------------
 1048|     71|        match_set_tun_erspan_ver(match, value->u8);
 1049|     71|        break;
 1050|     82|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (1050:5): [True: 82, False: 83.8k]
  ------------------
 1051|     82|        match_set_tun_erspan_idx(match, ntohl(value->be32));
 1052|     82|        break;
 1053|    243|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (1053:5): [True: 243, False: 83.6k]
  ------------------
 1054|    243|        match_set_tun_erspan_dir(match, value->u8);
 1055|    243|        break;
 1056|    112|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (1056:5): [True: 112, False: 83.7k]
  ------------------
 1057|    112|        match_set_tun_erspan_hwid(match, value->u8);
 1058|    112|        break;
 1059|    323|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (1059:5): [True: 323, False: 83.5k]
  ------------------
 1060|    323|        match_set_tun_gtpu_flags(match, value->u8);
 1061|    323|        break;
 1062|     33|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (1062:5): [True: 33, False: 83.8k]
  ------------------
 1063|     33|        match_set_tun_gtpu_msgtype(match, value->u8);
 1064|     33|        break;
 1065|  41.9k|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2110|  1.66k|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2110:5): [True: 256, False: 83.6k]
  |  |  |  Branch (2110:29): [True: 1.40k, False: 82.4k]
  |  |  ------------------
  |  | 2111|  3.10k|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2111:5): [True: 1.15k, False: 82.7k]
  |  |  |  Branch (2111:29): [True: 281, False: 83.6k]
  |  |  ------------------
  |  | 2112|  4.25k|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2112:5): [True: 658, False: 83.2k]
  |  |  |  Branch (2112:29): [True: 498, False: 83.4k]
  |  |  ------------------
  |  | 2113|  5.09k|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2113:5): [True: 609, False: 83.2k]
  |  |  |  Branch (2113:29): [True: 227, False: 83.6k]
  |  |  ------------------
  |  | 2114|  7.14k|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2114:5): [True: 1.69k, False: 82.2k]
  |  |  |  Branch (2114:29): [True: 356, False: 83.5k]
  |  |  ------------------
  |  | 2115|  7.38k|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2115:5): [True: 162, False: 83.7k]
  |  |  |  Branch (2115:30): [True: 81, False: 83.8k]
  |  |  ------------------
  |  | 2116|  12.6k|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2116:5): [True: 3.11k, False: 80.7k]
  |  |  |  Branch (2116:30): [True: 2.10k, False: 81.7k]
  |  |  ------------------
  |  | 2117|  14.3k|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2117:5): [True: 711, False: 83.1k]
  |  |  |  Branch (2117:30): [True: 984, False: 82.9k]
  |  |  ------------------
  |  | 2118|  15.1k|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2118:5): [True: 644, False: 83.2k]
  |  |  |  Branch (2118:30): [True: 214, False: 83.6k]
  |  |  ------------------
  |  | 2119|  18.3k|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2119:5): [True: 3.05k, False: 80.8k]
  |  |  |  Branch (2119:30): [True: 167, False: 83.7k]
  |  |  ------------------
  |  | 2120|  20.4k|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2120:5): [True: 509, False: 83.3k]
  |  |  |  Branch (2120:30): [True: 1.54k, False: 82.3k]
  |  |  ------------------
  |  | 2121|  23.1k|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2121:5): [True: 1.49k, False: 82.4k]
  |  |  |  Branch (2121:30): [True: 1.22k, False: 82.6k]
  |  |  ------------------
  |  | 2122|  23.8k|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2122:5): [True: 108, False: 83.7k]
  |  |  |  Branch (2122:30): [True: 559, False: 83.3k]
  |  |  ------------------
  |  | 2123|  24.8k|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2123:5): [True: 756, False: 83.1k]
  |  |  |  Branch (2123:30): [True: 251, False: 83.6k]
  |  |  ------------------
  |  | 2124|  25.8k|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2124:5): [True: 116, False: 83.7k]
  |  |  |  Branch (2124:30): [True: 896, False: 83.0k]
  |  |  ------------------
  |  | 2125|  28.6k|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2125:5): [True: 966, False: 82.9k]
  |  |  |  Branch (2125:30): [True: 1.81k, False: 82.0k]
  |  |  ------------------
  |  | 2126|  28.9k|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2126:5): [True: 270, False: 83.6k]
  |  |  |  Branch (2126:30): [True: 102, False: 83.7k]
  |  |  ------------------
  |  | 2127|  29.7k|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2127:5): [True: 318, False: 83.5k]
  |  |  |  Branch (2127:30): [True: 465, False: 83.4k]
  |  |  ------------------
  |  | 2128|  30.0k|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2128:5): [True: 146, False: 83.7k]
  |  |  |  Branch (2128:30): [True: 174, False: 83.7k]
  |  |  ------------------
  |  | 2129|  30.5k|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2129:5): [True: 165, False: 83.7k]
  |  |  |  Branch (2129:30): [True: 270, False: 83.6k]
  |  |  ------------------
  |  | 2130|  31.5k|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2130:5): [True: 444, False: 83.4k]
  |  |  |  Branch (2130:30): [True: 545, False: 83.3k]
  |  |  ------------------
  |  | 2131|  32.1k|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2131:5): [True: 48, False: 83.8k]
  |  |  |  Branch (2131:30): [True: 604, False: 83.2k]
  |  |  ------------------
  |  | 2132|  32.7k|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2132:5): [True: 304, False: 83.5k]
  |  |  |  Branch (2132:30): [True: 320, False: 83.5k]
  |  |  ------------------
  |  | 2133|  33.6k|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2133:5): [True: 686, False: 83.2k]
  |  |  |  Branch (2133:30): [True: 203, False: 83.6k]
  |  |  ------------------
  |  | 2134|  34.6k|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2134:5): [True: 74, False: 83.8k]
  |  |  |  Branch (2134:30): [True: 902, False: 82.9k]
  |  |  ------------------
  |  | 2135|  35.9k|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2135:5): [True: 973, False: 82.9k]
  |  |  |  Branch (2135:30): [True: 351, False: 83.5k]
  |  |  ------------------
  |  | 2136|  37.7k|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2136:5): [True: 420, False: 83.4k]
  |  |  |  Branch (2136:30): [True: 1.37k, False: 82.5k]
  |  |  ------------------
  |  | 2137|  39.2k|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2137:5): [True: 407, False: 83.4k]
  |  |  |  Branch (2137:30): [True: 1.09k, False: 82.8k]
  |  |  ------------------
  |  | 2138|  40.2k|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2138:5): [True: 258, False: 83.6k]
  |  |  |  Branch (2138:30): [True: 718, False: 83.1k]
  |  |  ------------------
  |  | 2139|  40.9k|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2139:5): [True: 531, False: 83.3k]
  |  |  |  Branch (2139:30): [True: 187, False: 83.7k]
  |  |  ------------------
  |  | 2140|  41.4k|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2140:5): [True: 177, False: 83.7k]
  |  |  |  Branch (2140:30): [True: 260, False: 83.6k]
  |  |  ------------------
  |  | 2141|  41.9k|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2141:5): [True: 418, False: 83.4k]
  |  |  ------------------
  ------------------
 1066|  41.9k|        tun_metadata_set_match(mf, value, NULL, match, err_str);
 1067|  41.9k|        break;
 1068|       |
 1069|    329|    case MFF_METADATA:
  ------------------
  |  Branch (1069:5): [True: 329, False: 83.5k]
  ------------------
 1070|    329|        match_set_metadata(match, value->be64);
 1071|    329|        break;
 1072|       |
 1073|  2.55k|    case MFF_IN_PORT:
  ------------------
  |  Branch (1073:5): [True: 2.55k, False: 81.3k]
  ------------------
 1074|  2.55k|        match_set_in_port(match, u16_to_ofp(ntohs(value->be16)));
 1075|  2.55k|        break;
 1076|       |
 1077|  1.48k|    case MFF_IN_PORT_OXM: {
  ------------------
  |  Branch (1077:5): [True: 1.48k, False: 82.4k]
  ------------------
 1078|  1.48k|        ofp_port_t port;
 1079|  1.48k|        ofputil_port_from_ofp11(value->be32, &port);
 1080|  1.48k|        match_set_in_port(match, port);
 1081|  1.48k|        break;
 1082|  1.53M|    }
 1083|    769|    case MFF_ACTSET_OUTPUT: {
  ------------------
  |  Branch (1083:5): [True: 769, False: 83.1k]
  ------------------
 1084|    769|        ofp_port_t port;
 1085|    769|        ofputil_port_from_ofp11(value->be32, &port);
 1086|    769|        match_set_actset_output(match, port);
 1087|    769|        break;
 1088|  1.53M|    }
 1089|       |
 1090|      0|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (1090:5): [True: 0, False: 83.8k]
  ------------------
 1091|      0|        match_set_skb_priority(match, ntohl(value->be32));
 1092|      0|        break;
 1093|       |
 1094|     28|    case MFF_PKT_MARK:
  ------------------
  |  Branch (1094:5): [True: 28, False: 83.8k]
  ------------------
 1095|     28|        match_set_pkt_mark(match, ntohl(value->be32));
 1096|     28|        break;
 1097|       |
 1098|  1.21k|    case MFF_CT_STATE:
  ------------------
  |  Branch (1098:5): [True: 1.21k, False: 82.6k]
  ------------------
 1099|  1.21k|        match_set_ct_state(match, ntohl(value->be32));
 1100|  1.21k|        break;
 1101|       |
 1102|    345|    case MFF_CT_ZONE:
  ------------------
  |  Branch (1102:5): [True: 345, False: 83.5k]
  ------------------
 1103|    345|        match_set_ct_zone(match, ntohs(value->be16));
 1104|    345|        break;
 1105|       |
 1106|    102|    case MFF_CT_MARK:
  ------------------
  |  Branch (1106:5): [True: 102, False: 83.7k]
  ------------------
 1107|    102|        match_set_ct_mark(match, ntohl(value->be32));
 1108|    102|        break;
 1109|       |
 1110|     78|    case MFF_CT_LABEL:
  ------------------
  |  Branch (1110:5): [True: 78, False: 83.8k]
  ------------------
 1111|     78|        match_set_ct_label(match, ntoh128(value->be128));
 1112|     78|        break;
 1113|       |
 1114|    156|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (1114:5): [True: 156, False: 83.7k]
  ------------------
 1115|    156|        match_set_ct_nw_proto(match, value->u8);
 1116|    156|        break;
 1117|       |
 1118|    368|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (1118:5): [True: 368, False: 83.5k]
  ------------------
 1119|    368|        match_set_ct_nw_src(match, value->be32);
 1120|    368|        break;
 1121|       |
 1122|    217|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (1122:5): [True: 217, False: 83.6k]
  ------------------
 1123|    217|        match_set_ct_nw_dst(match, value->be32);
 1124|    217|        break;
 1125|       |
 1126|     34|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (1126:5): [True: 34, False: 83.8k]
  ------------------
 1127|     34|        match_set_ct_ipv6_src(match, &value->ipv6);
 1128|     34|        break;
 1129|       |
 1130|      4|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (1130:5): [True: 4, False: 83.8k]
  ------------------
 1131|      4|        match_set_ct_ipv6_dst(match, &value->ipv6);
 1132|      4|        break;
 1133|       |
 1134|    207|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (1134:5): [True: 207, False: 83.6k]
  ------------------
 1135|    207|        match_set_ct_tp_src(match, value->be16);
 1136|    207|        break;
 1137|       |
 1138|     10|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (1138:5): [True: 10, False: 83.8k]
  ------------------
 1139|     10|        match_set_ct_tp_dst(match, value->be16);
 1140|     10|        break;
 1141|       |
 1142|  4.20k|    CASE_MFF_REGS:
  ------------------
  |  | 2065|  1.41k|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:     \
  |  |  ------------------
  |  |  |  Branch (2065:5): [True: 288, False: 83.6k]
  |  |  |  Branch (2065:20): [True: 117, False: 83.7k]
  |  |  |  Branch (2065:35): [True: 813, False: 83.0k]
  |  |  |  Branch (2065:50): [True: 194, False: 83.7k]
  |  |  ------------------
  |  | 2066|  1.89k|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:     \
  |  |  ------------------
  |  |  |  Branch (2066:5): [True: 284, False: 83.6k]
  |  |  |  Branch (2066:20): [True: 46, False: 83.8k]
  |  |  |  Branch (2066:35): [True: 74, False: 83.8k]
  |  |  |  Branch (2066:50): [True: 75, False: 83.8k]
  |  |  ------------------
  |  | 2067|  2.80k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11:   \
  |  |  ------------------
  |  |  |  Branch (2067:5): [True: 99, False: 83.8k]
  |  |  |  Branch (2067:20): [True: 54, False: 83.8k]
  |  |  |  Branch (2067:35): [True: 255, False: 83.6k]
  |  |  |  Branch (2067:51): [True: 502, False: 83.3k]
  |  |  ------------------
  |  | 2068|  3.16k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15: \
  |  |  ------------------
  |  |  |  Branch (2068:5): [True: 77, False: 83.8k]
  |  |  |  Branch (2068:21): [True: 38, False: 83.8k]
  |  |  |  Branch (2068:37): [True: 207, False: 83.6k]
  |  |  |  Branch (2068:53): [True: 42, False: 83.8k]
  |  |  ------------------
  |  | 2069|  3.38k|    case MFF_REG16: case MFF_REG17: case MFF_REG18: case MFF_REG19: \
  |  |  ------------------
  |  |  |  Branch (2069:5): [True: 68, False: 83.8k]
  |  |  |  Branch (2069:21): [True: 18, False: 83.8k]
  |  |  |  Branch (2069:37): [True: 68, False: 83.8k]
  |  |  |  Branch (2069:53): [True: 69, False: 83.8k]
  |  |  ------------------
  |  | 2070|  3.79k|    case MFF_REG20: case MFF_REG21: case MFF_REG22: case MFF_REG23: \
  |  |  ------------------
  |  |  |  Branch (2070:5): [True: 19, False: 83.8k]
  |  |  |  Branch (2070:21): [True: 37, False: 83.8k]
  |  |  |  Branch (2070:37): [True: 320, False: 83.5k]
  |  |  |  Branch (2070:53): [True: 35, False: 83.8k]
  |  |  ------------------
  |  | 2071|  4.03k|    case MFF_REG24: case MFF_REG25: case MFF_REG26: case MFF_REG27: \
  |  |  ------------------
  |  |  |  Branch (2071:5): [True: 1, False: 83.8k]
  |  |  |  Branch (2071:21): [True: 144, False: 83.7k]
  |  |  |  Branch (2071:37): [True: 78, False: 83.8k]
  |  |  |  Branch (2071:53): [True: 10, False: 83.8k]
  |  |  ------------------
  |  | 2072|  4.20k|    case MFF_REG28: case MFF_REG29: case MFF_REG30: case MFF_REG31
  |  |  ------------------
  |  |  |  Branch (2072:5): [True: 67, False: 83.8k]
  |  |  |  Branch (2072:21): [True: 10, False: 83.8k]
  |  |  |  Branch (2072:37): [True: 30, False: 83.8k]
  |  |  ------------------
  ------------------
 1143|  4.20k|        match_set_reg(match, mf->id - MFF_REG0, ntohl(value->be32));
 1144|  4.20k|        break;
 1145|       |
 1146|  2.09k|    CASE_MFF_XREGS:
  ------------------
  |  | 2081|    874|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3:    \
  |  |  ------------------
  |  |  |  Branch (2081:5): [True: 201, False: 83.6k]
  |  |  |  Branch (2081:21): [True: 18, False: 83.8k]
  |  |  |  Branch (2081:37): [True: 138, False: 83.7k]
  |  |  |  Branch (2081:53): [True: 517, False: 83.3k]
  |  |  ------------------
  |  | 2082|  1.74k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7:    \
  |  |  ------------------
  |  |  |  Branch (2082:5): [True: 56, False: 83.8k]
  |  |  |  Branch (2082:21): [True: 715, False: 83.1k]
  |  |  |  Branch (2082:37): [True: 67, False: 83.8k]
  |  |  |  Branch (2082:53): [True: 34, False: 83.8k]
  |  |  ------------------
  |  | 2083|  1.92k|    case MFF_XREG8: case MFF_XREG9: case MFF_XREG10: case MFF_XREG11:  \
  |  |  ------------------
  |  |  |  Branch (2083:5): [True: 21, False: 83.8k]
  |  |  |  Branch (2083:21): [True: 72, False: 83.8k]
  |  |  |  Branch (2083:37): [True: 45, False: 83.8k]
  |  |  |  Branch (2083:54): [True: 42, False: 83.8k]
  |  |  ------------------
  |  | 2084|  2.09k|    case MFF_XREG12: case MFF_XREG13: case MFF_XREG14: case MFF_XREG15
  |  |  ------------------
  |  |  |  Branch (2084:5): [True: 22, False: 83.8k]
  |  |  |  Branch (2084:22): [True: 82, False: 83.8k]
  |  |  |  Branch (2084:39): [True: 34, False: 83.8k]
  |  |  ------------------
  ------------------
 1147|  2.09k|        match_set_xreg(match, mf->id - MFF_XREG0, ntohll(value->be64));
 1148|  2.09k|        break;
 1149|       |
 1150|    273|    CASE_MFF_XXREGS:
  ------------------
  |  | 2093|    169|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3: \
  |  |  ------------------
  |  |  |  Branch (2093:5): [True: 19, False: 83.8k]
  |  |  |  Branch (2093:22): [True: 60, False: 83.8k]
  |  |  |  Branch (2093:39): [True: 22, False: 83.8k]
  |  |  |  Branch (2093:56): [True: 68, False: 83.8k]
  |  |  ------------------
  |  | 2094|    273|    case MFF_XXREG4: case MFF_XXREG5: case MFF_XXREG6: case MFF_XXREG7
  |  |  ------------------
  |  |  |  Branch (2094:5): [True: 10, False: 83.8k]
  |  |  |  Branch (2094:22): [True: 10, False: 83.8k]
  |  |  |  Branch (2094:39): [True: 74, False: 83.8k]
  |  |  ------------------
  ------------------
 1151|    273|        match_set_xxreg(match, mf->id - MFF_XXREG0, ntoh128(value->be128));
 1152|    273|        break;
 1153|       |
 1154|     21|    case MFF_ETH_SRC:
  ------------------
  |  Branch (1154:5): [True: 21, False: 83.8k]
  ------------------
 1155|     21|        match_set_dl_src(match, value->mac);
 1156|     21|        break;
 1157|       |
 1158|     67|    case MFF_ETH_DST:
  ------------------
  |  Branch (1158:5): [True: 67, False: 83.8k]
  ------------------
 1159|     67|        match_set_dl_dst(match, value->mac);
 1160|     67|        break;
 1161|       |
 1162|    477|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (1162:5): [True: 477, False: 83.4k]
  ------------------
 1163|    477|        match_set_dl_type(match, value->be16);
 1164|    477|        break;
 1165|       |
 1166|     97|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (1166:5): [True: 97, False: 83.8k]
  ------------------
 1167|     97|        match_set_dl_tci(match, value->be16);
 1168|     97|        break;
 1169|       |
 1170|      0|    case MFF_DL_VLAN:
  ------------------
  |  Branch (1170:5): [True: 0, False: 83.8k]
  ------------------
 1171|      0|        match_set_dl_vlan(match, value->be16, 0);
 1172|      0|        break;
 1173|    121|    case MFF_VLAN_VID:
  ------------------
  |  Branch (1173:5): [True: 121, False: 83.7k]
  ------------------
 1174|    121|        match_set_vlan_vid(match, value->be16);
 1175|    121|        break;
 1176|       |
 1177|      0|    case MFF_DL_VLAN_PCP:
  ------------------
  |  Branch (1177:5): [True: 0, False: 83.8k]
  ------------------
 1178|     96|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (1178:5): [True: 96, False: 83.8k]
  ------------------
 1179|     96|        match_set_dl_vlan_pcp(match, value->u8, 0);
 1180|     96|        break;
 1181|       |
 1182|     21|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (1182:5): [True: 21, False: 83.8k]
  ------------------
 1183|     21|        match_set_mpls_label(match, 0, value->be32);
 1184|     21|        break;
 1185|       |
 1186|    104|    case MFF_MPLS_TC:
  ------------------
  |  Branch (1186:5): [True: 104, False: 83.7k]
  ------------------
 1187|    104|        match_set_mpls_tc(match, 0, value->u8);
 1188|    104|        break;
 1189|       |
 1190|    158|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (1190:5): [True: 158, False: 83.7k]
  ------------------
 1191|    158|        match_set_mpls_bos(match, 0, value->u8);
 1192|    158|        break;
 1193|       |
 1194|    157|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (1194:5): [True: 157, False: 83.7k]
  ------------------
 1195|    157|        match_set_mpls_ttl(match, 0, value->u8);
 1196|    157|        break;
 1197|       |
 1198|     76|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (1198:5): [True: 76, False: 83.8k]
  ------------------
 1199|     76|        match_set_nw_src(match, value->be32);
 1200|     76|        break;
 1201|       |
 1202|    567|    case MFF_IPV4_DST:
  ------------------
  |  Branch (1202:5): [True: 567, False: 83.3k]
  ------------------
 1203|    567|        match_set_nw_dst(match, value->be32);
 1204|    567|        break;
 1205|       |
 1206|     15|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (1206:5): [True: 15, False: 83.8k]
  ------------------
 1207|     15|        match_set_ipv6_src(match, &value->ipv6);
 1208|     15|        break;
 1209|       |
 1210|     40|    case MFF_IPV6_DST:
  ------------------
  |  Branch (1210:5): [True: 40, False: 83.8k]
  ------------------
 1211|     40|        match_set_ipv6_dst(match, &value->ipv6);
 1212|     40|        break;
 1213|       |
 1214|    206|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (1214:5): [True: 206, False: 83.6k]
  ------------------
 1215|    206|        match_set_ipv6_label(match, value->be32);
 1216|    206|        break;
 1217|       |
 1218|  1.54k|    case MFF_IP_PROTO:
  ------------------
  |  Branch (1218:5): [True: 1.54k, False: 82.3k]
  ------------------
 1219|  1.54k|        match_set_nw_proto(match, value->u8);
 1220|  1.54k|        break;
 1221|       |
 1222|    143|    case MFF_IP_DSCP:
  ------------------
  |  Branch (1222:5): [True: 143, False: 83.7k]
  ------------------
 1223|    143|        match_set_nw_dscp(match, value->u8);
 1224|    143|        break;
 1225|       |
 1226|     68|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (1226:5): [True: 68, False: 83.8k]
  ------------------
 1227|     68|        match_set_nw_dscp(match, value->u8 << 2);
 1228|     68|        break;
 1229|       |
 1230|     83|    case MFF_IP_ECN:
  ------------------
  |  Branch (1230:5): [True: 83, False: 83.8k]
  ------------------
 1231|     83|        match_set_nw_ecn(match, value->u8);
 1232|     83|        break;
 1233|       |
 1234|    273|    case MFF_IP_TTL:
  ------------------
  |  Branch (1234:5): [True: 273, False: 83.6k]
  ------------------
 1235|    273|        match_set_nw_ttl(match, value->u8);
 1236|    273|        break;
 1237|       |
 1238|     15|    case MFF_IP_FRAG:
  ------------------
  |  Branch (1238:5): [True: 15, False: 83.8k]
  ------------------
 1239|     15|        match_set_nw_frag(match, value->u8);
 1240|     15|        break;
 1241|       |
 1242|     18|    case MFF_ARP_OP:
  ------------------
  |  Branch (1242:5): [True: 18, False: 83.8k]
  ------------------
 1243|     18|        match_set_nw_proto(match, ntohs(value->be16));
 1244|     18|        break;
 1245|       |
 1246|    345|    case MFF_ARP_SPA:
  ------------------
  |  Branch (1246:5): [True: 345, False: 83.5k]
  ------------------
 1247|    345|        match_set_nw_src(match, value->be32);
 1248|    345|        break;
 1249|       |
 1250|     73|    case MFF_ARP_TPA:
  ------------------
  |  Branch (1250:5): [True: 73, False: 83.8k]
  ------------------
 1251|     73|        match_set_nw_dst(match, value->be32);
 1252|     73|        break;
 1253|       |
 1254|      6|    case MFF_ARP_SHA:
  ------------------
  |  Branch (1254:5): [True: 6, False: 83.8k]
  ------------------
 1255|    117|    case MFF_ND_SLL:
  ------------------
  |  Branch (1255:5): [True: 111, False: 83.7k]
  ------------------
 1256|    117|        match_set_arp_sha(match, value->mac);
 1257|    117|        break;
 1258|       |
 1259|     67|    case MFF_ARP_THA:
  ------------------
  |  Branch (1259:5): [True: 67, False: 83.8k]
  ------------------
 1260|    235|    case MFF_ND_TLL:
  ------------------
  |  Branch (1260:5): [True: 168, False: 83.7k]
  ------------------
 1261|    235|        match_set_arp_tha(match, value->mac);
 1262|    235|        break;
 1263|       |
 1264|    696|    case MFF_TCP_SRC:
  ------------------
  |  Branch (1264:5): [True: 696, False: 83.2k]
  ------------------
 1265|    853|    case MFF_UDP_SRC:
  ------------------
  |  Branch (1265:5): [True: 157, False: 83.7k]
  ------------------
 1266|  1.16k|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (1266:5): [True: 315, False: 83.5k]
  ------------------
 1267|  1.16k|        match_set_tp_src(match, value->be16);
 1268|  1.16k|        break;
 1269|       |
 1270|    187|    case MFF_TCP_DST:
  ------------------
  |  Branch (1270:5): [True: 187, False: 83.7k]
  ------------------
 1271|    300|    case MFF_UDP_DST:
  ------------------
  |  Branch (1271:5): [True: 113, False: 83.7k]
  ------------------
 1272|    318|    case MFF_SCTP_DST:
  ------------------
  |  Branch (1272:5): [True: 18, False: 83.8k]
  ------------------
 1273|    318|        match_set_tp_dst(match, value->be16);
 1274|    318|        break;
 1275|       |
 1276|    280|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (1276:5): [True: 280, False: 83.6k]
  ------------------
 1277|    280|        match_set_tcp_flags(match, value->be16);
 1278|    280|        break;
 1279|       |
 1280|     71|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (1280:5): [True: 71, False: 83.8k]
  ------------------
 1281|    486|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (1281:5): [True: 415, False: 83.4k]
  ------------------
 1282|    486|        match_set_icmp_type(match, value->u8);
 1283|    486|        break;
 1284|       |
 1285|    198|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (1285:5): [True: 198, False: 83.7k]
  ------------------
 1286|    320|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (1286:5): [True: 122, False: 83.7k]
  ------------------
 1287|    320|        match_set_icmp_code(match, value->u8);
 1288|    320|        break;
 1289|       |
 1290|     31|    case MFF_ND_TARGET:
  ------------------
  |  Branch (1290:5): [True: 31, False: 83.8k]
  ------------------
 1291|     31|        match_set_nd_target(match, &value->ipv6);
 1292|     31|        break;
 1293|       |
 1294|    272|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (1294:5): [True: 272, False: 83.6k]
  ------------------
 1295|    272|        match_set_nd_reserved(match, value->be32);
 1296|    272|        break;
 1297|       |
 1298|    151|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (1298:5): [True: 151, False: 83.7k]
  ------------------
 1299|    151|        match_set_nd_options_type(match, value->u8);
 1300|    151|        break;
 1301|       |
 1302|    126|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (1302:5): [True: 126, False: 83.7k]
  ------------------
 1303|    126|        MATCH_SET_FIELD_UINT8(match, nsh.flags, value->u8);
  ------------------
  |  |   56|    126|    MATCH_SET_FIELD_MASKED(match, field, value, UINT8_MAX)
  |  |  ------------------
  |  |  |  |   50|    126|    do {                                                      \
  |  |  |  |   51|    126|        (match)->wc.masks.field = (msk);                      \
  |  |  |  |   52|    126|        (match)->flow.field = (value) & (msk);                \
  |  |  |  |   53|    126|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (53:14): [Folded, False: 126]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1304|    126|        break;
 1305|    322|    case MFF_NSH_TTL:
  ------------------
  |  Branch (1305:5): [True: 322, False: 83.5k]
  ------------------
 1306|    322|        MATCH_SET_FIELD_UINT8(match, nsh.ttl, value->u8);
  ------------------
  |  |   56|    322|    MATCH_SET_FIELD_MASKED(match, field, value, UINT8_MAX)
  |  |  ------------------
  |  |  |  |   50|    322|    do {                                                      \
  |  |  |  |   51|    322|        (match)->wc.masks.field = (msk);                      \
  |  |  |  |   52|    322|        (match)->flow.field = (value) & (msk);                \
  |  |  |  |   53|    322|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (53:14): [Folded, False: 322]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1307|    322|        break;
 1308|     34|    case MFF_NSH_MDTYPE:
  ------------------
  |  Branch (1308:5): [True: 34, False: 83.8k]
  ------------------
 1309|     34|        MATCH_SET_FIELD_UINT8(match, nsh.mdtype, value->u8);
  ------------------
  |  |   56|     34|    MATCH_SET_FIELD_MASKED(match, field, value, UINT8_MAX)
  |  |  ------------------
  |  |  |  |   50|     34|    do {                                                      \
  |  |  |  |   51|     34|        (match)->wc.masks.field = (msk);                      \
  |  |  |  |   52|     34|        (match)->flow.field = (value) & (msk);                \
  |  |  |  |   53|     34|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (53:14): [Folded, False: 34]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1310|     34|        break;
 1311|  1.91k|    case MFF_NSH_NP:
  ------------------
  |  Branch (1311:5): [True: 1.91k, False: 81.9k]
  ------------------
 1312|  1.91k|        MATCH_SET_FIELD_UINT8(match, nsh.np, value->u8);
  ------------------
  |  |   56|  1.91k|    MATCH_SET_FIELD_MASKED(match, field, value, UINT8_MAX)
  |  |  ------------------
  |  |  |  |   50|  1.91k|    do {                                                      \
  |  |  |  |   51|  1.91k|        (match)->wc.masks.field = (msk);                      \
  |  |  |  |   52|  1.91k|        (match)->flow.field = (value) & (msk);                \
  |  |  |  |   53|  1.91k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (53:14): [Folded, False: 1.91k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1313|  1.91k|        break;
 1314|     37|    case MFF_NSH_SPI:
  ------------------
  |  Branch (1314:5): [True: 37, False: 83.8k]
  ------------------
 1315|     37|        match->wc.masks.nsh.path_hdr |= htonl(NSH_SPI_MASK);
 1316|     37|        nsh_path_hdr_set_spi(&match->flow.nsh.path_hdr, value->be32);
 1317|     37|        break;
 1318|    109|    case MFF_NSH_SI:
  ------------------
  |  Branch (1318:5): [True: 109, False: 83.7k]
  ------------------
 1319|    109|        match->wc.masks.nsh.path_hdr |= htonl(NSH_SI_MASK);
 1320|    109|        nsh_path_hdr_set_si(&match->flow.nsh.path_hdr, value->u8);
 1321|    109|        break;
 1322|     35|    case MFF_NSH_C1:
  ------------------
  |  Branch (1322:5): [True: 35, False: 83.8k]
  ------------------
 1323|     53|    case MFF_NSH_C2:
  ------------------
  |  Branch (1323:5): [True: 18, False: 83.8k]
  ------------------
 1324|     71|    case MFF_NSH_C3:
  ------------------
  |  Branch (1324:5): [True: 18, False: 83.8k]
  ------------------
 1325|     81|    case MFF_NSH_C4:
  ------------------
  |  Branch (1325:5): [True: 10, False: 83.8k]
  ------------------
 1326|     81|        MATCH_SET_FIELD_BE32(match, nsh.context[mf->id - MFF_NSH_C1],
  ------------------
  |  |   59|     81|    MATCH_SET_FIELD_MASKED(match, field, value, OVS_BE32_MAX)
  |  |  ------------------
  |  |  |  |   50|     81|    do {                                                      \
  |  |  |  |   51|     81|        (match)->wc.masks.field = (msk);                      \
  |  |  |  |   52|     81|        (match)->flow.field = (value) & (msk);                \
  |  |  |  |   53|     81|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (53:14): [Folded, False: 81]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1327|     81|                             value->be32);
 1328|     81|        break;
 1329|       |
 1330|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (1330:5): [True: 0, False: 83.8k]
  ------------------
 1331|      0|    default:
  ------------------
  |  Branch (1331:5): [True: 0, False: 83.8k]
  ------------------
 1332|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1333|  83.8k|    }
 1334|  83.8k|}
mf_field_len:
 1403|  96.1k|{
 1404|  96.1k|    int len, mask_len;
 1405|  96.1k|    bool is_masked = mask && !is_all_ones(mask, mf->n_bytes);
  ------------------
  |  Branch (1405:22): [True: 54.1k, False: 41.9k]
  |  Branch (1405:30): [True: 54.1k, False: 0]
  ------------------
 1406|       |
 1407|  96.1k|    len = field_len(mf, value);
 1408|  96.1k|    if (is_masked) {
  ------------------
  |  Branch (1408:9): [True: 54.1k, False: 41.9k]
  ------------------
 1409|  54.1k|        mask_len = field_len(mf, mask);
 1410|  54.1k|        len = MAX(len, mask_len);
  ------------------
  |  |   95|  54.1k|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (95:20): [True: 0, False: 54.1k]
  |  |  ------------------
  ------------------
 1411|  54.1k|    }
 1412|       |
 1413|  96.1k|    if (is_masked_) {
  ------------------
  |  Branch (1413:9): [True: 96.1k, False: 0]
  ------------------
 1414|  96.1k|        *is_masked_ = is_masked;
 1415|  96.1k|    }
 1416|       |
 1417|  96.1k|    return len;
 1418|  96.1k|}
mf_is_tun_metadata:
 1897|  60.8k|{
 1898|  60.8k|    return mf->id >= MFF_TUN_METADATA0 &&
  ------------------
  |  Branch (1898:12): [True: 57.7k, False: 3.09k]
  ------------------
 1899|  57.7k|           mf->id < MFF_TUN_METADATA0 + TUN_METADATA_NUM_OPTS;
  ------------------
  |  |   26|   118k|#define TUN_METADATA_NUM_OPTS 64
  ------------------
  |  Branch (1899:12): [True: 33.6k, False: 24.0k]
  ------------------
 1900|  60.8k|}
mf_is_pipeline_field:
 2026|  96.5k|{
 2027|  96.5k|    switch (mf->id) {
 2028|    114|    case MFF_TUN_ID:
  ------------------
  |  Branch (2028:5): [True: 114, False: 96.4k]
  ------------------
 2029|    150|    case MFF_TUN_SRC:
  ------------------
  |  Branch (2029:5): [True: 36, False: 96.5k]
  ------------------
 2030|    492|    case MFF_TUN_DST:
  ------------------
  |  Branch (2030:5): [True: 342, False: 96.2k]
  ------------------
 2031|  1.70k|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (2031:5): [True: 1.20k, False: 95.3k]
  ------------------
 2032|  2.17k|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (2032:5): [True: 477, False: 96.1k]
  ------------------
 2033|  2.32k|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (2033:5): [True: 148, False: 96.4k]
  ------------------
 2034|  2.41k|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (2034:5): [True: 90, False: 96.4k]
  ------------------
 2035|  3.35k|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (2035:5): [True: 936, False: 95.6k]
  ------------------
 2036|  3.51k|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (2036:5): [True: 162, False: 96.4k]
  ------------------
 2037|  3.52k|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (2037:5): [True: 11, False: 96.5k]
  ------------------
 2038|  3.77k|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (2038:5): [True: 249, False: 96.3k]
  ------------------
 2039|  3.86k|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (2039:5): [True: 92, False: 96.4k]
  ------------------
 2040|  4.31k|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (2040:5): [True: 444, False: 96.1k]
  ------------------
 2041|  4.37k|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (2041:5): [True: 60, False: 96.5k]
  ------------------
 2042|  2.86M|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2110|  8.82k|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2110:5): [True: 1.11k, False: 95.4k]
  |  |  |  Branch (2110:29): [True: 3.34k, False: 93.2k]
  |  |  ------------------
  |  | 2111|  10.5k|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2111:5): [True: 1.12k, False: 95.4k]
  |  |  |  Branch (2111:29): [True: 578, False: 96.0k]
  |  |  ------------------
  |  | 2112|  12.3k|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2112:5): [True: 659, False: 95.9k]
  |  |  |  Branch (2112:29): [True: 1.13k, False: 95.4k]
  |  |  ------------------
  |  | 2113|  17.1k|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2113:5): [True: 4.57k, False: 92.0k]
  |  |  |  Branch (2113:29): [True: 245, False: 96.3k]
  |  |  ------------------
  |  | 2114|  19.1k|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2114:5): [True: 1.67k, False: 94.9k]
  |  |  |  Branch (2114:29): [True: 366, False: 96.2k]
  |  |  ------------------
  |  | 2115|  19.5k|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2115:5): [True: 228, False: 96.3k]
  |  |  |  Branch (2115:30): [True: 120, False: 96.4k]
  |  |  ------------------
  |  | 2116|  26.1k|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2116:5): [True: 4.70k, False: 91.8k]
  |  |  |  Branch (2116:30): [True: 1.87k, False: 94.7k]
  |  |  ------------------
  |  | 2117|  27.7k|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2117:5): [True: 418, False: 96.1k]
  |  |  |  Branch (2117:30): [True: 1.22k, False: 95.3k]
  |  |  ------------------
  |  | 2118|  29.6k|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2118:5): [True: 1.38k, False: 95.1k]
  |  |  |  Branch (2118:30): [True: 491, False: 96.0k]
  |  |  ------------------
  |  | 2119|  36.6k|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2119:5): [True: 6.06k, False: 90.5k]
  |  |  |  Branch (2119:30): [True: 910, False: 95.6k]
  |  |  ------------------
  |  | 2120|  39.3k|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2120:5): [True: 814, False: 95.7k]
  |  |  |  Branch (2120:30): [True: 1.95k, False: 94.6k]
  |  |  ------------------
  |  | 2121|  41.8k|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2121:5): [True: 1.47k, False: 95.1k]
  |  |  |  Branch (2121:30): [True: 1.00k, False: 95.5k]
  |  |  ------------------
  |  | 2122|  43.2k|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2122:5): [True: 909, False: 95.6k]
  |  |  |  Branch (2122:30): [True: 529, False: 96.0k]
  |  |  ------------------
  |  | 2123|  45.2k|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2123:5): [True: 1.62k, False: 94.9k]
  |  |  |  Branch (2123:30): [True: 380, False: 96.2k]
  |  |  ------------------
  |  | 2124|  47.1k|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2124:5): [True: 199, False: 96.3k]
  |  |  |  Branch (2124:30): [True: 1.71k, False: 94.8k]
  |  |  ------------------
  |  | 2125|  50.1k|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2125:5): [True: 893, False: 95.6k]
  |  |  |  Branch (2125:30): [True: 2.01k, False: 94.5k]
  |  |  ------------------
  |  | 2126|  51.9k|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2126:5): [True: 1.21k, False: 95.3k]
  |  |  |  Branch (2126:30): [True: 641, False: 95.9k]
  |  |  ------------------
  |  | 2127|  53.5k|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2127:5): [True: 1.13k, False: 95.4k]
  |  |  |  Branch (2127:30): [True: 456, False: 96.1k]
  |  |  ------------------
  |  | 2128|  53.8k|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2128:5): [True: 22, False: 96.5k]
  |  |  |  Branch (2128:30): [True: 251, False: 96.3k]
  |  |  ------------------
  |  | 2129|  54.9k|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2129:5): [True: 519, False: 96.0k]
  |  |  |  Branch (2129:30): [True: 618, False: 95.9k]
  |  |  ------------------
  |  | 2130|  56.4k|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2130:5): [True: 920, False: 95.6k]
  |  |  |  Branch (2130:30): [True: 527, False: 96.0k]
  |  |  ------------------
  |  | 2131|  57.8k|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2131:5): [True: 328, False: 96.2k]
  |  |  |  Branch (2131:30): [True: 1.08k, False: 95.5k]
  |  |  ------------------
  |  | 2132|  58.4k|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2132:5): [True: 314, False: 96.2k]
  |  |  |  Branch (2132:30): [True: 332, False: 96.2k]
  |  |  ------------------
  |  | 2133|  59.5k|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2133:5): [True: 968, False: 95.6k]
  |  |  |  Branch (2133:30): [True: 128, False: 96.4k]
  |  |  ------------------
  |  | 2134|  61.6k|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2134:5): [True: 688, False: 95.8k]
  |  |  |  Branch (2134:30): [True: 1.37k, False: 95.2k]
  |  |  ------------------
  |  | 2135|  62.7k|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2135:5): [True: 899, False: 95.6k]
  |  |  |  Branch (2135:30): [True: 229, False: 96.3k]
  |  |  ------------------
  |  | 2136|  63.2k|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2136:5): [True: 426, False: 96.1k]
  |  |  |  Branch (2136:30): [True: 30, False: 96.5k]
  |  |  ------------------
  |  | 2137|  64.9k|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2137:5): [True: 612, False: 95.9k]
  |  |  |  Branch (2137:30): [True: 1.09k, False: 95.4k]
  |  |  ------------------
  |  | 2138|  66.3k|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2138:5): [True: 372, False: 96.2k]
  |  |  |  Branch (2138:30): [True: 1.10k, False: 95.4k]
  |  |  ------------------
  |  | 2139|  67.8k|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2139:5): [True: 1.36k, False: 95.2k]
  |  |  |  Branch (2139:30): [True: 79, False: 96.5k]
  |  |  ------------------
  |  | 2140|  69.2k|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2140:5): [True: 1.14k, False: 95.4k]
  |  |  |  Branch (2140:30): [True: 265, False: 96.3k]
  |  |  ------------------
  |  | 2141|  70.1k|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2141:5): [True: 118, False: 96.4k]
  |  |  ------------------
  ------------------
 2043|  2.86M|    case MFF_METADATA:
  ------------------
  |  Branch (2043:5): [True: 118, False: 96.4k]
  ------------------
 2044|  72.6k|    case MFF_IN_PORT:
  ------------------
  |  Branch (2044:5): [True: 2.46k, False: 94.1k]
  ------------------
 2045|  72.7k|    case MFF_IN_PORT_OXM:
  ------------------
  |  Branch (2045:5): [True: 25, False: 96.5k]
  ------------------
 2046|  2.47M|    CASE_MFF_REGS:
  ------------------
  |  | 2065|  74.1k|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:     \
  |  |  ------------------
  |  |  |  Branch (2065:5): [True: 444, False: 96.1k]
  |  |  |  Branch (2065:20): [True: 50, False: 96.5k]
  |  |  |  Branch (2065:35): [True: 808, False: 95.7k]
  |  |  |  Branch (2065:50): [True: 97, False: 96.4k]
  |  |  ------------------
  |  | 2066|  75.0k|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:     \
  |  |  ------------------
  |  |  |  Branch (2066:5): [True: 146, False: 96.4k]
  |  |  |  Branch (2066:20): [True: 518, False: 96.0k]
  |  |  |  Branch (2066:35): [True: 188, False: 96.3k]
  |  |  |  Branch (2066:50): [True: 71, False: 96.5k]
  |  |  ------------------
  |  | 2067|  76.0k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11:   \
  |  |  ------------------
  |  |  |  Branch (2067:5): [True: 78, False: 96.5k]
  |  |  |  Branch (2067:20): [True: 211, False: 96.3k]
  |  |  |  Branch (2067:35): [True: 242, False: 96.3k]
  |  |  |  Branch (2067:51): [True: 490, False: 96.0k]
  |  |  ------------------
  |  | 2068|  78.6k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15: \
  |  |  ------------------
  |  |  |  Branch (2068:5): [True: 463, False: 96.1k]
  |  |  |  Branch (2068:21): [True: 197, False: 96.3k]
  |  |  |  Branch (2068:37): [True: 726, False: 95.8k]
  |  |  |  Branch (2068:53): [True: 1.21k, False: 95.3k]
  |  |  ------------------
  |  | 2069|  78.9k|    case MFF_REG16: case MFF_REG17: case MFF_REG18: case MFF_REG19: \
  |  |  ------------------
  |  |  |  Branch (2069:5): [True: 68, False: 96.5k]
  |  |  |  Branch (2069:21): [True: 156, False: 96.4k]
  |  |  |  Branch (2069:37): [True: 54, False: 96.5k]
  |  |  |  Branch (2069:53): [True: 35, False: 96.5k]
  |  |  ------------------
  |  | 2070|  79.2k|    case MFF_REG20: case MFF_REG21: case MFF_REG22: case MFF_REG23: \
  |  |  ------------------
  |  |  |  Branch (2070:5): [True: 86, False: 96.5k]
  |  |  |  Branch (2070:21): [True: 63, False: 96.5k]
  |  |  |  Branch (2070:37): [True: 28, False: 96.5k]
  |  |  |  Branch (2070:53): [True: 80, False: 96.5k]
  |  |  ------------------
  |  | 2071|  79.4k|    case MFF_REG24: case MFF_REG25: case MFF_REG26: case MFF_REG27: \
  |  |  ------------------
  |  |  |  Branch (2071:5): [True: 122, False: 96.4k]
  |  |  |  Branch (2071:21): [True: 18, False: 96.5k]
  |  |  |  Branch (2071:37): [True: 15, False: 96.5k]
  |  |  |  Branch (2071:53): [True: 43, False: 96.5k]
  |  |  ------------------
  |  | 2072|  79.5k|    case MFF_REG28: case MFF_REG29: case MFF_REG30: case MFF_REG31
  |  |  ------------------
  |  |  |  Branch (2072:5): [True: 21, False: 96.5k]
  |  |  |  Branch (2072:21): [True: 36, False: 96.5k]
  |  |  |  Branch (2072:37): [True: 14, False: 96.5k]
  |  |  ------------------
  ------------------
 2047|  2.47M|    CASE_MFF_XREGS:
  ------------------
  |  | 2081|  81.4k|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3:    \
  |  |  ------------------
  |  |  |  Branch (2081:5): [True: 327, False: 96.2k]
  |  |  |  Branch (2081:21): [True: 87, False: 96.5k]
  |  |  |  Branch (2081:37): [True: 110, False: 96.4k]
  |  |  |  Branch (2081:53): [True: 1.41k, False: 95.1k]
  |  |  ------------------
  |  | 2082|  82.1k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7:    \
  |  |  ------------------
  |  |  |  Branch (2082:5): [True: 59, False: 96.5k]
  |  |  |  Branch (2082:21): [True: 127, False: 96.4k]
  |  |  |  Branch (2082:37): [True: 67, False: 96.5k]
  |  |  |  Branch (2082:53): [True: 360, False: 96.2k]
  |  |  ------------------
  |  | 2083|  82.3k|    case MFF_XREG8: case MFF_XREG9: case MFF_XREG10: case MFF_XREG11:  \
  |  |  ------------------
  |  |  |  Branch (2083:5): [True: 73, False: 96.5k]
  |  |  |  Branch (2083:21): [True: 98, False: 96.4k]
  |  |  |  Branch (2083:37): [True: 45, False: 96.5k]
  |  |  |  Branch (2083:54): [True: 64, False: 96.5k]
  |  |  ------------------
  |  | 2084|  83.2k|    case MFF_XREG12: case MFF_XREG13: case MFF_XREG14: case MFF_XREG15
  |  |  ------------------
  |  |  |  Branch (2084:5): [True: 670, False: 95.9k]
  |  |  |  Branch (2084:22): [True: 110, False: 96.4k]
  |  |  |  Branch (2084:39): [True: 34, False: 96.5k]
  |  |  ------------------
  ------------------
 2048|  1.31M|    CASE_MFF_XXREGS:
  ------------------
  |  | 2093|  88.1k|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3: \
  |  |  ------------------
  |  |  |  Branch (2093:5): [True: 84, False: 96.5k]
  |  |  |  Branch (2093:22): [True: 38, False: 96.5k]
  |  |  |  Branch (2093:39): [True: 3.59k, False: 92.9k]
  |  |  |  Branch (2093:56): [True: 1.14k, False: 95.4k]
  |  |  ------------------
  |  | 2094|  88.2k|    case MFF_XXREG4: case MFF_XXREG5: case MFF_XXREG6: case MFF_XXREG7
  |  |  ------------------
  |  |  |  Branch (2094:5): [True: 10, False: 96.5k]
  |  |  |  Branch (2094:22): [True: 10, False: 96.5k]
  |  |  |  Branch (2094:39): [True: 74, False: 96.5k]
  |  |  ------------------
  ------------------
 2049|   694k|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (2049:5): [True: 69, False: 96.5k]
  ------------------
 2050|  88.2k|        return true;
 2051|       |
 2052|     35|    case MFF_DP_HASH:
  ------------------
  |  Branch (2052:5): [True: 35, False: 96.5k]
  ------------------
 2053|    444|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (2053:5): [True: 409, False: 96.1k]
  ------------------
 2054|    467|    case MFF_CONJ_ID:
  ------------------
  |  Branch (2054:5): [True: 23, False: 96.5k]
  ------------------
 2055|    467|    case MFF_TUN_TTL:
  ------------------
  |  Branch (2055:5): [True: 0, False: 96.5k]
  ------------------
 2056|    467|    case MFF_TUN_TOS:
  ------------------
  |  Branch (2056:5): [True: 0, False: 96.5k]
  ------------------
 2057|    533|    case MFF_ACTSET_OUTPUT:
  ------------------
  |  Branch (2057:5): [True: 66, False: 96.5k]
  ------------------
 2058|    533|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (2058:5): [True: 0, False: 96.5k]
  ------------------
 2059|    551|    case MFF_PKT_MARK:
  ------------------
  |  Branch (2059:5): [True: 18, False: 96.5k]
  ------------------
 2060|    913|    case MFF_CT_STATE:
  ------------------
  |  Branch (2060:5): [True: 362, False: 96.2k]
  ------------------
 2061|  1.14k|    case MFF_CT_ZONE:
  ------------------
  |  Branch (2061:5): [True: 230, False: 96.3k]
  ------------------
 2062|  1.21k|    case MFF_CT_MARK:
  ------------------
  |  Branch (2062:5): [True: 68, False: 96.5k]
  ------------------
 2063|  1.67k|    case MFF_CT_LABEL:
  ------------------
  |  Branch (2063:5): [True: 462, False: 96.1k]
  ------------------
 2064|  1.70k|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (2064:5): [True: 34, False: 96.5k]
  ------------------
 2065|  1.78k|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (2065:5): [True: 76, False: 96.5k]
  ------------------
 2066|  1.85k|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (2066:5): [True: 72, False: 96.5k]
  ------------------
 2067|  1.86k|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (2067:5): [True: 10, False: 96.5k]
  ------------------
 2068|  1.87k|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (2068:5): [True: 10, False: 96.5k]
  ------------------
 2069|  1.94k|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (2069:5): [True: 67, False: 96.5k]
  ------------------
 2070|  1.95k|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (2070:5): [True: 10, False: 96.5k]
  ------------------
 2071|  2.02k|    case MFF_ETH_SRC:
  ------------------
  |  Branch (2071:5): [True: 68, False: 96.5k]
  ------------------
 2072|  2.08k|    case MFF_ETH_DST:
  ------------------
  |  Branch (2072:5): [True: 67, False: 96.5k]
  ------------------
 2073|  2.16k|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (2073:5): [True: 75, False: 96.5k]
  ------------------
 2074|  2.38k|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (2074:5): [True: 222, False: 96.3k]
  ------------------
 2075|  2.38k|    case MFF_DL_VLAN:
  ------------------
  |  Branch (2075:5): [True: 0, False: 96.5k]
  ------------------
 2076|  2.58k|    case MFF_VLAN_VID:
  ------------------
  |  Branch (2076:5): [True: 198, False: 96.3k]
  ------------------
 2077|  2.58k|    case MFF_DL_VLAN_PCP:
  ------------------
  |  Branch (2077:5): [True: 0, False: 96.5k]
  ------------------
 2078|  2.61k|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (2078:5): [True: 36, False: 96.5k]
  ------------------
 2079|  2.64k|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (2079:5): [True: 30, False: 96.5k]
  ------------------
 2080|  2.73k|    case MFF_MPLS_TC:
  ------------------
  |  Branch (2080:5): [True: 82, False: 96.5k]
  ------------------
 2081|  2.80k|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (2081:5): [True: 79, False: 96.5k]
  ------------------
 2082|  4.19k|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (2082:5): [True: 1.38k, False: 95.2k]
  ------------------
 2083|  4.21k|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (2083:5): [True: 18, False: 96.5k]
  ------------------
 2084|  4.24k|    case MFF_IPV4_DST:
  ------------------
  |  Branch (2084:5): [True: 35, False: 96.5k]
  ------------------
 2085|  4.43k|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (2085:5): [True: 194, False: 96.3k]
  ------------------
 2086|  4.56k|    case MFF_IPV6_DST:
  ------------------
  |  Branch (2086:5): [True: 122, False: 96.4k]
  ------------------
 2087|  4.63k|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (2087:5): [True: 74, False: 96.5k]
  ------------------
 2088|  4.82k|    case MFF_IP_PROTO:
  ------------------
  |  Branch (2088:5): [True: 194, False: 96.3k]
  ------------------
 2089|  4.86k|    case MFF_IP_DSCP:
  ------------------
  |  Branch (2089:5): [True: 37, False: 96.5k]
  ------------------
 2090|  4.90k|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (2090:5): [True: 37, False: 96.5k]
  ------------------
 2091|  5.34k|    case MFF_IP_ECN:
  ------------------
  |  Branch (2091:5): [True: 445, False: 96.1k]
  ------------------
 2092|  5.41k|    case MFF_IP_TTL:
  ------------------
  |  Branch (2092:5): [True: 66, False: 96.5k]
  ------------------
 2093|  5.49k|    case MFF_IP_FRAG:
  ------------------
  |  Branch (2093:5): [True: 78, False: 96.5k]
  ------------------
 2094|  5.52k|    case MFF_ARP_OP:
  ------------------
  |  Branch (2094:5): [True: 34, False: 96.5k]
  ------------------
 2095|  5.73k|    case MFF_ARP_SPA:
  ------------------
  |  Branch (2095:5): [True: 206, False: 96.3k]
  ------------------
 2096|  5.88k|    case MFF_ARP_TPA:
  ------------------
  |  Branch (2096:5): [True: 154, False: 96.4k]
  ------------------
 2097|  5.92k|    case MFF_ARP_SHA:
  ------------------
  |  Branch (2097:5): [True: 34, False: 96.5k]
  ------------------
 2098|  5.95k|    case MFF_ARP_THA:
  ------------------
  |  Branch (2098:5): [True: 31, False: 96.5k]
  ------------------
 2099|  6.01k|    case MFF_TCP_SRC:
  ------------------
  |  Branch (2099:5): [True: 67, False: 96.5k]
  ------------------
 2100|  6.10k|    case MFF_TCP_DST:
  ------------------
  |  Branch (2100:5): [True: 83, False: 96.5k]
  ------------------
 2101|  6.17k|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (2101:5): [True: 69, False: 96.5k]
  ------------------
 2102|  6.54k|    case MFF_UDP_SRC:
  ------------------
  |  Branch (2102:5): [True: 371, False: 96.2k]
  ------------------
 2103|  6.85k|    case MFF_UDP_DST:
  ------------------
  |  Branch (2103:5): [True: 311, False: 96.2k]
  ------------------
 2104|  6.91k|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (2104:5): [True: 66, False: 96.5k]
  ------------------
 2105|  6.98k|    case MFF_SCTP_DST:
  ------------------
  |  Branch (2105:5): [True: 66, False: 96.5k]
  ------------------
 2106|  7.02k|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (2106:5): [True: 39, False: 96.5k]
  ------------------
 2107|  7.08k|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (2107:5): [True: 66, False: 96.5k]
  ------------------
 2108|  7.16k|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (2108:5): [True: 72, False: 96.5k]
  ------------------
 2109|  7.20k|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (2109:5): [True: 40, False: 96.5k]
  ------------------
 2110|  7.21k|    case MFF_ND_TARGET:
  ------------------
  |  Branch (2110:5): [True: 18, False: 96.5k]
  ------------------
 2111|  7.41k|    case MFF_ND_SLL:
  ------------------
  |  Branch (2111:5): [True: 198, False: 96.3k]
  ------------------
 2112|  7.44k|    case MFF_ND_TLL:
  ------------------
  |  Branch (2112:5): [True: 30, False: 96.5k]
  ------------------
 2113|  7.51k|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (2113:5): [True: 65, False: 96.5k]
  ------------------
 2114|  7.61k|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (2114:5): [True: 106, False: 96.4k]
  ------------------
 2115|  7.68k|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (2115:5): [True: 67, False: 96.5k]
  ------------------
 2116|  7.71k|    case MFF_NSH_TTL:
  ------------------
  |  Branch (2116:5): [True: 34, False: 96.5k]
  ------------------
 2117|  7.75k|    case MFF_NSH_MDTYPE:
  ------------------
  |  Branch (2117:5): [True: 34, False: 96.5k]
  ------------------
 2118|  7.96k|    case MFF_NSH_NP:
  ------------------
  |  Branch (2118:5): [True: 209, False: 96.3k]
  ------------------
 2119|  8.12k|    case MFF_NSH_SPI:
  ------------------
  |  Branch (2119:5): [True: 166, False: 96.4k]
  ------------------
 2120|  8.16k|    case MFF_NSH_SI:
  ------------------
  |  Branch (2120:5): [True: 34, False: 96.5k]
  ------------------
 2121|  8.17k|    case MFF_NSH_C1:
  ------------------
  |  Branch (2121:5): [True: 17, False: 96.5k]
  ------------------
 2122|  8.21k|    case MFF_NSH_C2:
  ------------------
  |  Branch (2122:5): [True: 34, False: 96.5k]
  ------------------
 2123|  8.27k|    case MFF_NSH_C3:
  ------------------
  |  Branch (2123:5): [True: 66, False: 96.5k]
  ------------------
 2124|  8.30k|    case MFF_NSH_C4:
  ------------------
  |  Branch (2124:5): [True: 21, False: 96.5k]
  ------------------
 2125|  8.30k|        return false;
 2126|       |
 2127|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (2127:5): [True: 0, False: 96.5k]
  ------------------
 2128|      0|    default:
  ------------------
  |  Branch (2128:5): [True: 0, False: 96.5k]
  ------------------
 2129|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 2130|  96.5k|    }
 2131|  96.5k|}
mf_set_wild:
 2162|  27.1k|{
 2163|  27.1k|    if (err_str) {
  ------------------
  |  Branch (2163:9): [True: 27.1k, False: 0]
  ------------------
 2164|  27.1k|        *err_str = NULL;
 2165|  27.1k|    }
 2166|       |
 2167|  27.1k|    switch (mf->id) {
 2168|    703|    case MFF_DP_HASH:
  ------------------
  |  Branch (2168:5): [True: 703, False: 26.4k]
  ------------------
 2169|    703|        match->flow.dp_hash = 0;
 2170|    703|        match->wc.masks.dp_hash = 0;
 2171|    703|        break;
 2172|     66|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (2172:5): [True: 66, False: 27.1k]
  ------------------
 2173|     66|        match->flow.recirc_id = 0;
 2174|     66|        match->wc.masks.recirc_id = 0;
 2175|     66|        break;
 2176|     72|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (2176:5): [True: 72, False: 27.1k]
  ------------------
 2177|     72|        match->flow.packet_type = 0;
 2178|     72|        match->wc.masks.packet_type = 0;
 2179|     72|        break;
 2180|     11|    case MFF_CONJ_ID:
  ------------------
  |  Branch (2180:5): [True: 11, False: 27.1k]
  ------------------
 2181|     11|        match->flow.conj_id = 0;
 2182|     11|        match->wc.masks.conj_id = 0;
 2183|     11|        break;
 2184|     57|    case MFF_TUN_ID:
  ------------------
  |  Branch (2184:5): [True: 57, False: 27.1k]
  ------------------
 2185|     57|        match_set_tun_id_masked(match, htonll(0), htonll(0));
 2186|     57|        break;
 2187|     32|    case MFF_TUN_SRC:
  ------------------
  |  Branch (2187:5): [True: 32, False: 27.1k]
  ------------------
 2188|     32|        match_set_tun_src_masked(match, htonl(0), htonl(0));
 2189|     32|        break;
 2190|    249|    case MFF_TUN_DST:
  ------------------
  |  Branch (2190:5): [True: 249, False: 26.9k]
  ------------------
 2191|    249|        match_set_tun_dst_masked(match, htonl(0), htonl(0));
 2192|    249|        break;
 2193|    111|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (2193:5): [True: 111, False: 27.0k]
  ------------------
 2194|    111|        memset(&match->wc.masks.tunnel.ipv6_src, 0,
 2195|    111|               sizeof match->wc.masks.tunnel.ipv6_src);
 2196|    111|        memset(&match->flow.tunnel.ipv6_src, 0,
 2197|    111|               sizeof match->flow.tunnel.ipv6_src);
 2198|    111|        break;
 2199|     39|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (2199:5): [True: 39, False: 27.1k]
  ------------------
 2200|     39|        memset(&match->wc.masks.tunnel.ipv6_dst, 0,
 2201|     39|               sizeof match->wc.masks.tunnel.ipv6_dst);
 2202|     39|        memset(&match->flow.tunnel.ipv6_dst, 0,
 2203|     39|               sizeof match->flow.tunnel.ipv6_dst);
 2204|     39|        break;
 2205|     13|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (2205:5): [True: 13, False: 27.1k]
  ------------------
 2206|     13|        match_set_tun_flags_masked(match, 0, 0);
 2207|     13|        break;
 2208|     33|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (2208:5): [True: 33, False: 27.1k]
  ------------------
 2209|     33|        match_set_tun_gbp_id_masked(match, 0, 0);
 2210|     33|        break;
 2211|    883|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (2211:5): [True: 883, False: 26.3k]
  ------------------
 2212|    883|        match_set_tun_gbp_flags_masked(match, 0, 0);
 2213|    883|        break;
 2214|      0|    case MFF_TUN_TOS:
  ------------------
  |  Branch (2214:5): [True: 0, False: 27.1k]
  ------------------
 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: 27.1k]
  ------------------
 2218|      0|        match_set_tun_ttl_masked(match, 0, 0);
 2219|      0|        break;
 2220|    101|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (2220:5): [True: 101, False: 27.0k]
  ------------------
 2221|    101|        match_set_tun_erspan_ver_masked(match, 0, 0);
 2222|    101|        break;
 2223|     19|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (2223:5): [True: 19, False: 27.1k]
  ------------------
 2224|     19|        match_set_tun_erspan_idx_masked(match, 0, 0);
 2225|     19|        break;
 2226|     19|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (2226:5): [True: 19, False: 27.1k]
  ------------------
 2227|     19|        match_set_tun_erspan_dir_masked(match, 0, 0);
 2228|     19|        break;
 2229|     35|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (2229:5): [True: 35, False: 27.1k]
  ------------------
 2230|     35|        match_set_tun_erspan_hwid_masked(match, 0, 0);
 2231|     35|        break;
 2232|    131|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (2232:5): [True: 131, False: 27.0k]
  ------------------
 2233|    131|        match_set_tun_gtpu_flags_masked(match, 0, 0);
 2234|    131|        break;
 2235|    516|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (2235:5): [True: 516, False: 26.6k]
  ------------------
 2236|    516|        match_set_tun_gtpu_msgtype_masked(match, 0, 0);
 2237|    516|        break;
 2238|      0|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2110|      0|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2110:5): [True: 0, False: 27.1k]
  |  |  |  Branch (2110:29): [True: 0, False: 27.1k]
  |  |  ------------------
  |  | 2111|      0|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2111:5): [True: 0, False: 27.1k]
  |  |  |  Branch (2111:29): [True: 0, False: 27.1k]
  |  |  ------------------
  |  | 2112|      0|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2112:5): [True: 0, False: 27.1k]
  |  |  |  Branch (2112:29): [True: 0, False: 27.1k]
  |  |  ------------------
  |  | 2113|      0|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2113:5): [True: 0, False: 27.1k]
  |  |  |  Branch (2113:29): [True: 0, False: 27.1k]
  |  |  ------------------
  |  | 2114|      0|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2114:5): [True: 0, False: 27.1k]
  |  |  |  Branch (2114:29): [True: 0, False: 27.1k]
  |  |  ------------------
  |  | 2115|      0|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2115:5): [True: 0, False: 27.1k]
  |  |  |  Branch (2115:30): [True: 0, False: 27.1k]
  |  |  ------------------
  |  | 2116|      0|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2116:5): [True: 0, False: 27.1k]
  |  |  |  Branch (2116:30): [True: 0, False: 27.1k]
  |  |  ------------------
  |  | 2117|      0|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2117:5): [True: 0, False: 27.1k]
  |  |  |  Branch (2117:30): [True: 0, False: 27.1k]
  |  |  ------------------
  |  | 2118|      0|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2118:5): [True: 0, False: 27.1k]
  |  |  |  Branch (2118:30): [True: 0, False: 27.1k]
  |  |  ------------------
  |  | 2119|      0|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2119:5): [True: 0, False: 27.1k]
  |  |  |  Branch (2119:30): [True: 0, False: 27.1k]
  |  |  ------------------
  |  | 2120|      0|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2120:5): [True: 0, False: 27.1k]
  |  |  |  Branch (2120:30): [True: 0, False: 27.1k]
  |  |  ------------------
  |  | 2121|      0|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2121:5): [True: 0, False: 27.1k]
  |  |  |  Branch (2121:30): [True: 0, False: 27.1k]
  |  |  ------------------
  |  | 2122|      0|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2122:5): [True: 0, False: 27.1k]
  |  |  |  Branch (2122:30): [True: 0, False: 27.1k]
  |  |  ------------------
  |  | 2123|      0|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2123:5): [True: 0, False: 27.1k]
  |  |  |  Branch (2123:30): [True: 0, False: 27.1k]
  |  |  ------------------
  |  | 2124|      0|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2124:5): [True: 0, False: 27.1k]
  |  |  |  Branch (2124:30): [True: 0, False: 27.1k]
  |  |  ------------------
  |  | 2125|      0|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2125:5): [True: 0, False: 27.1k]
  |  |  |  Branch (2125:30): [True: 0, False: 27.1k]
  |  |  ------------------
  |  | 2126|      0|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2126:5): [True: 0, False: 27.1k]
  |  |  |  Branch (2126:30): [True: 0, False: 27.1k]
  |  |  ------------------
  |  | 2127|      0|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2127:5): [True: 0, False: 27.1k]
  |  |  |  Branch (2127:30): [True: 0, False: 27.1k]
  |  |  ------------------
  |  | 2128|      0|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2128:5): [True: 0, False: 27.1k]
  |  |  |  Branch (2128:30): [True: 0, False: 27.1k]
  |  |  ------------------
  |  | 2129|      0|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2129:5): [True: 0, False: 27.1k]
  |  |  |  Branch (2129:30): [True: 0, False: 27.1k]
  |  |  ------------------
  |  | 2130|      0|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2130:5): [True: 0, False: 27.1k]
  |  |  |  Branch (2130:30): [True: 0, False: 27.1k]
  |  |  ------------------
  |  | 2131|      0|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2131:5): [True: 0, False: 27.1k]
  |  |  |  Branch (2131:30): [True: 0, False: 27.1k]
  |  |  ------------------
  |  | 2132|      0|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2132:5): [True: 0, False: 27.1k]
  |  |  |  Branch (2132:30): [True: 0, False: 27.1k]
  |  |  ------------------
  |  | 2133|      0|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2133:5): [True: 0, False: 27.1k]
  |  |  |  Branch (2133:30): [True: 0, False: 27.1k]
  |  |  ------------------
  |  | 2134|      0|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2134:5): [True: 0, False: 27.1k]
  |  |  |  Branch (2134:30): [True: 0, False: 27.1k]
  |  |  ------------------
  |  | 2135|      0|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2135:5): [True: 0, False: 27.1k]
  |  |  |  Branch (2135:30): [True: 0, False: 27.1k]
  |  |  ------------------
  |  | 2136|      0|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2136:5): [True: 0, False: 27.1k]
  |  |  |  Branch (2136:30): [True: 0, False: 27.1k]
  |  |  ------------------
  |  | 2137|      0|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2137:5): [True: 0, False: 27.1k]
  |  |  |  Branch (2137:30): [True: 0, False: 27.1k]
  |  |  ------------------
  |  | 2138|      0|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2138:5): [True: 0, False: 27.1k]
  |  |  |  Branch (2138:30): [True: 0, False: 27.1k]
  |  |  ------------------
  |  | 2139|      0|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2139:5): [True: 0, False: 27.1k]
  |  |  |  Branch (2139:30): [True: 0, False: 27.1k]
  |  |  ------------------
  |  | 2140|      0|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2140:5): [True: 0, False: 27.1k]
  |  |  |  Branch (2140:30): [True: 0, False: 27.1k]
  |  |  ------------------
  |  | 2141|      0|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2141:5): [True: 0, False: 27.1k]
  |  |  ------------------
  ------------------
 2239|      0|        tun_metadata_set_match(mf, NULL, NULL, match, err_str);
 2240|      0|        break;
 2241|       |
 2242|    102|    case MFF_METADATA:
  ------------------
  |  Branch (2242:5): [True: 102, False: 27.0k]
  ------------------
 2243|    102|        match_set_metadata_masked(match, htonll(0), htonll(0));
 2244|    102|        break;
 2245|       |
 2246|     91|    case MFF_IN_PORT:
  ------------------
  |  Branch (2246:5): [True: 91, False: 27.0k]
  ------------------
 2247|    154|    case MFF_IN_PORT_OXM:
  ------------------
  |  Branch (2247:5): [True: 63, False: 27.1k]
  ------------------
 2248|    154|        match->flow.in_port.ofp_port = 0;
 2249|    154|        match->wc.masks.in_port.ofp_port = 0;
 2250|    154|        break;
 2251|     78|    case MFF_ACTSET_OUTPUT:
  ------------------
  |  Branch (2251:5): [True: 78, False: 27.1k]
  ------------------
 2252|     78|        match->flow.actset_output = 0;
 2253|     78|        match->wc.masks.actset_output = 0;
 2254|     78|        break;
 2255|       |
 2256|      0|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (2256:5): [True: 0, False: 27.1k]
  ------------------
 2257|      0|        match->flow.skb_priority = 0;
 2258|      0|        match->wc.masks.skb_priority = 0;
 2259|      0|        break;
 2260|       |
 2261|     90|    case MFF_PKT_MARK:
  ------------------
  |  Branch (2261:5): [True: 90, False: 27.0k]
  ------------------
 2262|     90|        match->flow.pkt_mark = 0;
 2263|     90|        match->wc.masks.pkt_mark = 0;
 2264|     90|        break;
 2265|       |
 2266|    224|    case MFF_CT_STATE:
  ------------------
  |  Branch (2266:5): [True: 224, False: 26.9k]
  ------------------
 2267|    224|        match->flow.ct_state = 0;
 2268|    224|        match->wc.masks.ct_state = 0;
 2269|    224|        break;
 2270|       |
 2271|     10|    case MFF_CT_ZONE:
  ------------------
  |  Branch (2271:5): [True: 10, False: 27.1k]
  ------------------
 2272|     10|        match->flow.ct_zone = 0;
 2273|     10|        match->wc.masks.ct_zone = 0;
 2274|     10|        break;
 2275|       |
 2276|      6|    case MFF_CT_MARK:
  ------------------
  |  Branch (2276:5): [True: 6, False: 27.1k]
  ------------------
 2277|      6|        match->flow.ct_mark = 0;
 2278|      6|        match->wc.masks.ct_mark = 0;
 2279|      6|        break;
 2280|       |
 2281|     71|    case MFF_CT_LABEL:
  ------------------
  |  Branch (2281:5): [True: 71, False: 27.1k]
  ------------------
 2282|     71|        memset(&match->flow.ct_label, 0, sizeof(match->flow.ct_label));
 2283|     71|        memset(&match->wc.masks.ct_label, 0, sizeof(match->wc.masks.ct_label));
 2284|     71|        break;
 2285|       |
 2286|     10|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (2286:5): [True: 10, False: 27.1k]
  ------------------
 2287|     10|        match->flow.ct_nw_proto = 0;
 2288|     10|        match->wc.masks.ct_nw_proto = 0;
 2289|     10|        break;
 2290|       |
 2291|     66|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (2291:5): [True: 66, False: 27.1k]
  ------------------
 2292|     66|        match->flow.ct_nw_src = 0;
 2293|     66|        match->wc.masks.ct_nw_src = 0;
 2294|     66|        break;
 2295|       |
 2296|     18|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (2296:5): [True: 18, False: 27.1k]
  ------------------
 2297|     18|        match->flow.ct_nw_dst = 0;
 2298|     18|        match->wc.masks.ct_nw_dst = 0;
 2299|     18|        break;
 2300|       |
 2301|     10|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (2301:5): [True: 10, False: 27.1k]
  ------------------
 2302|     10|        memset(&match->flow.ct_ipv6_src, 0, sizeof(match->flow.ct_ipv6_src));
 2303|     10|        WC_UNMASK_FIELD(&match->wc, ct_ipv6_src);
  ------------------
  |  |  205|     10|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 2304|     10|        break;
 2305|       |
 2306|     66|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (2306:5): [True: 66, False: 27.1k]
  ------------------
 2307|     66|        memset(&match->flow.ct_ipv6_dst, 0, sizeof(match->flow.ct_ipv6_dst));
 2308|     66|        WC_UNMASK_FIELD(&match->wc, ct_ipv6_dst);
  ------------------
  |  |  205|     66|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 2309|     66|        break;
 2310|       |
 2311|    210|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (2311:5): [True: 210, False: 26.9k]
  ------------------
 2312|    210|        match->flow.ct_tp_src = 0;
 2313|    210|        match->wc.masks.ct_tp_src = 0;
 2314|    210|        break;
 2315|       |
 2316|     58|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (2316:5): [True: 58, False: 27.1k]
  ------------------
 2317|     58|        match->flow.ct_tp_dst = 0;
 2318|     58|        match->wc.masks.ct_tp_dst = 0;
 2319|     58|        break;
 2320|       |
 2321|  3.72k|    CASE_MFF_REGS:
  ------------------
  |  | 2065|    153|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:     \
  |  |  ------------------
  |  |  |  Branch (2065:5): [True: 38, False: 27.1k]
  |  |  |  Branch (2065:20): [True: 71, False: 27.1k]
  |  |  |  Branch (2065:35): [True: 18, False: 27.1k]
  |  |  |  Branch (2065:50): [True: 26, False: 27.1k]
  |  |  ------------------
  |  | 2066|    513|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:     \
  |  |  ------------------
  |  |  |  Branch (2066:5): [True: 36, False: 27.1k]
  |  |  |  Branch (2066:20): [True: 231, False: 26.9k]
  |  |  |  Branch (2066:35): [True: 74, False: 27.1k]
  |  |  |  Branch (2066:50): [True: 19, False: 27.1k]
  |  |  ------------------
  |  | 2067|  1.59k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11:   \
  |  |  ------------------
  |  |  |  Branch (2067:5): [True: 315, False: 26.8k]
  |  |  |  Branch (2067:20): [True: 197, False: 26.9k]
  |  |  |  Branch (2067:35): [True: 564, False: 26.6k]
  |  |  |  Branch (2067:51): [True: 9, False: 27.1k]
  |  |  ------------------
  |  | 2068|  3.04k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15: \
  |  |  ------------------
  |  |  |  Branch (2068:5): [True: 151, False: 27.0k]
  |  |  |  Branch (2068:21): [True: 88, False: 27.1k]
  |  |  |  Branch (2068:37): [True: 395, False: 26.7k]
  |  |  |  Branch (2068:53): [True: 812, False: 26.3k]
  |  |  ------------------
  |  | 2069|  3.20k|    case MFF_REG16: case MFF_REG17: case MFF_REG18: case MFF_REG19: \
  |  |  ------------------
  |  |  |  Branch (2069:5): [True: 13, False: 27.1k]
  |  |  |  Branch (2069:21): [True: 97, False: 27.0k]
  |  |  |  Branch (2069:37): [True: 35, False: 27.1k]
  |  |  |  Branch (2069:53): [True: 18, False: 27.1k]
  |  |  ------------------
  |  | 2070|  3.35k|    case MFF_REG20: case MFF_REG21: case MFF_REG22: case MFF_REG23: \
  |  |  ------------------
  |  |  |  Branch (2070:5): [True: 26, False: 27.1k]
  |  |  |  Branch (2070:21): [True: 39, False: 27.1k]
  |  |  |  Branch (2070:37): [True: 19, False: 27.1k]
  |  |  |  Branch (2070:53): [True: 64, False: 27.1k]
  |  |  ------------------
  |  | 2071|  3.66k|    case MFF_REG24: case MFF_REG25: case MFF_REG26: case MFF_REG27: \
  |  |  ------------------
  |  |  |  Branch (2071:5): [True: 37, False: 27.1k]
  |  |  |  Branch (2071:21): [True: 230, False: 26.9k]
  |  |  |  Branch (2071:37): [True: 11, False: 27.1k]
  |  |  |  Branch (2071:53): [True: 28, False: 27.1k]
  |  |  ------------------
  |  | 2072|  3.72k|    case MFF_REG28: case MFF_REG29: case MFF_REG30: case MFF_REG31
  |  |  ------------------
  |  |  |  Branch (2072:5): [True: 11, False: 27.1k]
  |  |  |  Branch (2072:21): [True: 24, False: 27.1k]
  |  |  |  Branch (2072:37): [True: 11, False: 27.1k]
  |  |  ------------------
  ------------------
 2322|  3.72k|        match_set_reg_masked(match, mf->id - MFF_REG0, 0, 0);
 2323|  3.72k|        break;
 2324|       |
 2325|  2.13k|    CASE_MFF_XREGS:
  ------------------
  |  | 2081|  1.16k|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3:    \
  |  |  ------------------
  |  |  |  Branch (2081:5): [True: 190, False: 26.9k]
  |  |  |  Branch (2081:21): [True: 69, False: 27.1k]
  |  |  |  Branch (2081:37): [True: 80, False: 27.1k]
  |  |  |  Branch (2081:53): [True: 826, False: 26.3k]
  |  |  ------------------
  |  | 2082|  1.44k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7:    \
  |  |  ------------------
  |  |  |  Branch (2082:5): [True: 66, False: 27.1k]
  |  |  |  Branch (2082:21): [True: 94, False: 27.0k]
  |  |  |  Branch (2082:37): [True: 18, False: 27.1k]
  |  |  |  Branch (2082:53): [True: 106, False: 27.0k]
  |  |  ------------------
  |  | 2083|  1.58k|    case MFF_XREG8: case MFF_XREG9: case MFF_XREG10: case MFF_XREG11:  \
  |  |  ------------------
  |  |  |  Branch (2083:5): [True: 71, False: 27.1k]
  |  |  |  Branch (2083:21): [True: 25, False: 27.1k]
  |  |  |  Branch (2083:37): [True: 18, False: 27.1k]
  |  |  |  Branch (2083:54): [True: 18, False: 27.1k]
  |  |  ------------------
  |  | 2084|  2.13k|    case MFF_XREG12: case MFF_XREG13: case MFF_XREG14: case MFF_XREG15
  |  |  ------------------
  |  |  |  Branch (2084:5): [True: 314, False: 26.8k]
  |  |  |  Branch (2084:22): [True: 12, False: 27.1k]
  |  |  |  Branch (2084:39): [True: 208, False: 26.9k]
  |  |  ------------------
  ------------------
 2326|  2.13k|        match_set_xreg_masked(match, mf->id - MFF_XREG0, 0, 0);
 2327|  2.13k|        break;
 2328|       |
 2329|  4.35k|    CASE_MFF_XXREGS: {
  ------------------
  |  | 2093|  4.35k|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3: \
  |  |  ------------------
  |  |  |  Branch (2093:5): [True: 538, False: 26.6k]
  |  |  |  Branch (2093:22): [True: 35, False: 27.1k]
  |  |  |  Branch (2093:39): [True: 2.69k, False: 24.4k]
  |  |  |  Branch (2093:56): [True: 1.08k, False: 26.1k]
  |  |  ------------------
  |  | 2094|  4.35k|    case MFF_XXREG4: case MFF_XXREG5: case MFF_XXREG6: case MFF_XXREG7
  |  |  ------------------
  |  |  |  Branch (2094:5): [True: 0, False: 27.1k]
  |  |  |  Branch (2094:22): [True: 0, False: 27.1k]
  |  |  |  Branch (2094:39): [True: 0, False: 27.1k]
  |  |  ------------------
  ------------------
 2330|  4.35k|        match_set_xxreg_masked(match, mf->id - MFF_XXREG0, OVS_U128_ZERO,
  ------------------
  |  |  130|  4.35k|#define OVS_U128_ZERO OVS_U128_MIN
  ------------------
 2331|  4.35k|                               OVS_U128_ZERO);
  ------------------
  |  |  130|  4.35k|#define OVS_U128_ZERO OVS_U128_MIN
  ------------------
 2332|  4.35k|        break;
 2333|  21.8k|    }
 2334|       |
 2335|     68|    case MFF_ETH_SRC:
  ------------------
  |  Branch (2335:5): [True: 68, False: 27.1k]
  ------------------
 2336|     68|        match->flow.dl_src = eth_addr_zero;
 2337|     68|        match->wc.masks.dl_src = eth_addr_zero;
 2338|     68|        break;
 2339|       |
 2340|    228|    case MFF_ETH_DST:
  ------------------
  |  Branch (2340:5): [True: 228, False: 26.9k]
  ------------------
 2341|    228|        match->flow.dl_dst = eth_addr_zero;
 2342|    228|        match->wc.masks.dl_dst = eth_addr_zero;
 2343|    228|        break;
 2344|       |
 2345|    136|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (2345:5): [True: 136, False: 27.0k]
  ------------------
 2346|    136|        match->flow.dl_type = htons(0);
 2347|    136|        match->wc.masks.dl_type = htons(0);
 2348|    136|        break;
 2349|       |
 2350|     10|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (2350:5): [True: 10, False: 27.1k]
  ------------------
 2351|     10|        match_set_dl_tci_masked(match, htons(0), htons(0));
 2352|     10|        break;
 2353|       |
 2354|      0|    case MFF_DL_VLAN:
  ------------------
  |  Branch (2354:5): [True: 0, False: 27.1k]
  ------------------
 2355|    581|    case MFF_VLAN_VID:
  ------------------
  |  Branch (2355:5): [True: 581, False: 26.6k]
  ------------------
 2356|    581|        match_set_any_vid(match);
 2357|    581|        break;
 2358|       |
 2359|      0|    case MFF_DL_VLAN_PCP:
  ------------------
  |  Branch (2359:5): [True: 0, False: 27.1k]
  ------------------
 2360|    178|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (2360:5): [True: 178, False: 27.0k]
  ------------------
 2361|    178|        match_set_any_pcp(match);
 2362|    178|        break;
 2363|       |
 2364|  1.42k|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (2364:5): [True: 1.42k, False: 25.7k]
  ------------------
 2365|  1.42k|        match_set_any_mpls_label(match, 0);
 2366|  1.42k|        break;
 2367|       |
 2368|     42|    case MFF_MPLS_TC:
  ------------------
  |  Branch (2368:5): [True: 42, False: 27.1k]
  ------------------
 2369|     42|        match_set_any_mpls_tc(match, 0);
 2370|     42|        break;
 2371|       |
 2372|     66|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (2372:5): [True: 66, False: 27.1k]
  ------------------
 2373|     66|        match_set_any_mpls_bos(match, 0);
 2374|     66|        break;
 2375|       |
 2376|     50|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (2376:5): [True: 50, False: 27.1k]
  ------------------
 2377|     50|        match_set_any_mpls_ttl(match, 0);
 2378|     50|        break;
 2379|       |
 2380|     21|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (2380:5): [True: 21, False: 27.1k]
  ------------------
 2381|     56|    case MFF_ARP_SPA:
  ------------------
  |  Branch (2381:5): [True: 35, False: 27.1k]
  ------------------
 2382|     56|        match_set_nw_src_masked(match, htonl(0), htonl(0));
 2383|     56|        break;
 2384|       |
 2385|     67|    case MFF_IPV4_DST:
  ------------------
  |  Branch (2385:5): [True: 67, False: 27.1k]
  ------------------
 2386|    677|    case MFF_ARP_TPA:
  ------------------
  |  Branch (2386:5): [True: 610, False: 26.5k]
  ------------------
 2387|    677|        match_set_nw_dst_masked(match, htonl(0), htonl(0));
 2388|    677|        break;
 2389|       |
 2390|    185|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (2390:5): [True: 185, False: 27.0k]
  ------------------
 2391|    185|        memset(&match->wc.masks.ipv6_src, 0, sizeof match->wc.masks.ipv6_src);
 2392|    185|        memset(&match->flow.ipv6_src, 0, sizeof match->flow.ipv6_src);
 2393|    185|        break;
 2394|       |
 2395|     76|    case MFF_IPV6_DST:
  ------------------
  |  Branch (2395:5): [True: 76, False: 27.1k]
  ------------------
 2396|     76|        memset(&match->wc.masks.ipv6_dst, 0, sizeof match->wc.masks.ipv6_dst);
 2397|     76|        memset(&match->flow.ipv6_dst, 0, sizeof match->flow.ipv6_dst);
 2398|     76|        break;
 2399|       |
 2400|     66|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (2400:5): [True: 66, False: 27.1k]
  ------------------
 2401|     66|        match->wc.masks.ipv6_label = htonl(0);
 2402|     66|        match->flow.ipv6_label = htonl(0);
 2403|     66|        break;
 2404|       |
 2405|    157|    case MFF_IP_PROTO:
  ------------------
  |  Branch (2405:5): [True: 157, False: 27.0k]
  ------------------
 2406|    157|        match->wc.masks.nw_proto = 0;
 2407|    157|        match->flow.nw_proto = 0;
 2408|    157|        break;
 2409|       |
 2410|     21|    case MFF_IP_DSCP:
  ------------------
  |  Branch (2410:5): [True: 21, False: 27.1k]
  ------------------
 2411|    997|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (2411:5): [True: 976, False: 26.2k]
  ------------------
 2412|    997|        match->wc.masks.nw_tos &= ~IP_DSCP_MASK;
  ------------------
  |  |  724|    997|#define IP_DSCP_MASK 0xfc
  ------------------
 2413|    997|        match->flow.nw_tos &= ~IP_DSCP_MASK;
  ------------------
  |  |  724|    997|#define IP_DSCP_MASK 0xfc
  ------------------
 2414|    997|        break;
 2415|       |
 2416|     19|    case MFF_IP_ECN:
  ------------------
  |  Branch (2416:5): [True: 19, False: 27.1k]
  ------------------
 2417|     19|        match->wc.masks.nw_tos &= ~IP_ECN_MASK;
  ------------------
  |  |  722|     19|#define IP_ECN_MASK 0x03
  ------------------
 2418|     19|        match->flow.nw_tos &= ~IP_ECN_MASK;
  ------------------
  |  |  722|     19|#define IP_ECN_MASK 0x03
  ------------------
 2419|     19|        break;
 2420|       |
 2421|     66|    case MFF_IP_TTL:
  ------------------
  |  Branch (2421:5): [True: 66, False: 27.1k]
  ------------------
 2422|     66|        match->wc.masks.nw_ttl = 0;
 2423|     66|        match->flow.nw_ttl = 0;
 2424|     66|        break;
 2425|       |
 2426|     76|    case MFF_IP_FRAG:
  ------------------
  |  Branch (2426:5): [True: 76, False: 27.1k]
  ------------------
 2427|     76|        match->wc.masks.nw_frag &= ~FLOW_NW_FRAG_MASK;
  ------------------
  |  |   56|     76|#define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   54|     76|#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|     76|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  |  |  ------------------
  ------------------
 2428|     76|        match->flow.nw_frag &= ~FLOW_NW_FRAG_MASK;
  ------------------
  |  |   56|     76|#define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   54|     76|#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|     76|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  |  |  ------------------
  ------------------
 2429|     76|        break;
 2430|       |
 2431|    253|    case MFF_ARP_OP:
  ------------------
  |  Branch (2431:5): [True: 253, False: 26.9k]
  ------------------
 2432|    253|        match->wc.masks.nw_proto = 0;
 2433|    253|        match->flow.nw_proto = 0;
 2434|    253|        break;
 2435|       |
 2436|     10|    case MFF_ARP_SHA:
  ------------------
  |  Branch (2436:5): [True: 10, False: 27.1k]
  ------------------
 2437|    231|    case MFF_ND_SLL:
  ------------------
  |  Branch (2437:5): [True: 221, False: 26.9k]
  ------------------
 2438|    231|        match->flow.arp_sha = eth_addr_zero;
 2439|    231|        match->wc.masks.arp_sha = eth_addr_zero;
 2440|    231|        break;
 2441|       |
 2442|    326|    case MFF_ARP_THA:
  ------------------
  |  Branch (2442:5): [True: 326, False: 26.8k]
  ------------------
 2443|  3.29k|    case MFF_ND_TLL:
  ------------------
  |  Branch (2443:5): [True: 2.96k, False: 24.2k]
  ------------------
 2444|  3.29k|        match->flow.arp_tha = eth_addr_zero;
 2445|  3.29k|        match->wc.masks.arp_tha = eth_addr_zero;
 2446|  3.29k|        break;
 2447|       |
 2448|    496|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (2448:5): [True: 496, False: 26.6k]
  ------------------
 2449|    496|        match->wc.masks.igmp_group_ip4 = htonl(0);
 2450|    496|        match->flow.igmp_group_ip4 = htonl(0);
 2451|    496|        break;
 2452|       |
 2453|     42|    case MFF_TCP_SRC:
  ------------------
  |  Branch (2453:5): [True: 42, False: 27.1k]
  ------------------
 2454|     53|    case MFF_UDP_SRC:
  ------------------
  |  Branch (2454:5): [True: 11, False: 27.1k]
  ------------------
 2455|     88|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (2455:5): [True: 35, False: 27.1k]
  ------------------
 2456|    161|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (2456:5): [True: 73, False: 27.1k]
  ------------------
 2457|    512|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (2457:5): [True: 351, False: 26.8k]
  ------------------
 2458|    512|        match->wc.masks.tp_src = htons(0);
 2459|    512|        match->flow.tp_src = htons(0);
 2460|    512|        break;
 2461|       |
 2462|     35|    case MFF_TCP_DST:
  ------------------
  |  Branch (2462:5): [True: 35, False: 27.1k]
  ------------------
 2463|     59|    case MFF_UDP_DST:
  ------------------
  |  Branch (2463:5): [True: 24, False: 27.1k]
  ------------------
 2464|    495|    case MFF_SCTP_DST:
  ------------------
  |  Branch (2464:5): [True: 436, False: 26.7k]
  ------------------
 2465|    693|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (2465:5): [True: 198, False: 26.9k]
  ------------------
 2466|    734|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (2466:5): [True: 41, False: 27.1k]
  ------------------
 2467|    734|        match->wc.masks.tp_dst = htons(0);
 2468|    734|        match->flow.tp_dst = htons(0);
 2469|    734|        break;
 2470|       |
 2471|     87|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (2471:5): [True: 87, False: 27.1k]
  ------------------
 2472|    141|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (2472:5): [True: 54, False: 27.1k]
  ------------------
 2473|    141|        match->wc.masks.tcp_flags = htons(0);
 2474|    141|        match->flow.tcp_flags = htons(0);
 2475|    141|        break;
 2476|       |
 2477|      7|    case MFF_ND_TARGET:
  ------------------
  |  Branch (2477:5): [True: 7, False: 27.1k]
  ------------------
 2478|      7|        memset(&match->wc.masks.nd_target, 0,
 2479|      7|               sizeof match->wc.masks.nd_target);
 2480|      7|        memset(&match->flow.nd_target, 0, sizeof match->flow.nd_target);
 2481|      7|        break;
 2482|       |
 2483|    168|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (2483:5): [True: 168, False: 27.0k]
  ------------------
 2484|    168|        MATCH_SET_FIELD_MASKED(match, nsh.flags, 0, 0);
  ------------------
  |  |   50|    168|    do {                                                      \
  |  |   51|    168|        (match)->wc.masks.field = (msk);                      \
  |  |   52|    168|        (match)->flow.field = (value) & (msk);                \
  |  |   53|    168|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded, False: 168]
  |  |  ------------------
  ------------------
 2485|    168|        break;
 2486|    151|    case MFF_NSH_TTL:
  ------------------
  |  Branch (2486:5): [True: 151, False: 27.0k]
  ------------------
 2487|    151|        MATCH_SET_FIELD_MASKED(match, nsh.ttl, 0, 0);
  ------------------
  |  |   50|    151|    do {                                                      \
  |  |   51|    151|        (match)->wc.masks.field = (msk);                      \
  |  |   52|    151|        (match)->flow.field = (value) & (msk);                \
  |  |   53|    151|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded, False: 151]
  |  |  ------------------
  ------------------
 2488|    151|        break;
 2489|      0|    case MFF_NSH_MDTYPE:
  ------------------
  |  Branch (2489:5): [True: 0, False: 27.1k]
  ------------------
 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|  1.12k|    case MFF_NSH_NP:
  ------------------
  |  Branch (2492:5): [True: 1.12k, False: 26.0k]
  ------------------
 2493|  1.12k|        MATCH_SET_FIELD_MASKED(match, nsh.np, 0, 0);
  ------------------
  |  |   50|  1.12k|    do {                                                      \
  |  |   51|  1.12k|        (match)->wc.masks.field = (msk);                      \
  |  |   52|  1.12k|        (match)->flow.field = (value) & (msk);                \
  |  |   53|  1.12k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded, False: 1.12k]
  |  |  ------------------
  ------------------
 2494|  1.12k|        break;
 2495|     67|    case MFF_NSH_SPI:
  ------------------
  |  Branch (2495:5): [True: 67, False: 27.1k]
  ------------------
 2496|     67|        match->wc.masks.nsh.path_hdr &= ~htonl(NSH_SPI_MASK);
 2497|     67|        nsh_path_hdr_set_spi(&match->flow.nsh.path_hdr, htonl(0));
 2498|     67|        break;
 2499|     97|    case MFF_NSH_SI:
  ------------------
  |  Branch (2499:5): [True: 97, False: 27.0k]
  ------------------
 2500|     97|        match->wc.masks.nsh.path_hdr &= ~htonl(NSH_SI_MASK);
 2501|     97|        nsh_path_hdr_set_si(&match->flow.nsh.path_hdr, 0);
 2502|     97|        break;
 2503|     70|    case MFF_NSH_C1:
  ------------------
  |  Branch (2503:5): [True: 70, False: 27.1k]
  ------------------
 2504|    205|    case MFF_NSH_C2:
  ------------------
  |  Branch (2504:5): [True: 135, False: 27.0k]
  ------------------
 2505|    271|    case MFF_NSH_C3:
  ------------------
  |  Branch (2505:5): [True: 66, False: 27.1k]
  ------------------
 2506|    281|    case MFF_NSH_C4:
  ------------------
  |  Branch (2506:5): [True: 10, False: 27.1k]
  ------------------
 2507|    281|        MATCH_SET_FIELD_MASKED(match, nsh.context[mf->id - MFF_NSH_C1],
  ------------------
  |  |   50|    281|    do {                                                      \
  |  |   51|    281|        (match)->wc.masks.field = (msk);                      \
  |  |   52|    281|        (match)->flow.field = (value) & (msk);                \
  |  |   53|    281|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded, False: 281]
  |  |  ------------------
  ------------------
 2508|    281|                               htonl(0), htonl(0));
 2509|    281|        break;
 2510|       |
 2511|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (2511:5): [True: 0, False: 27.1k]
  ------------------
 2512|      0|    default:
  ------------------
  |  Branch (2512:5): [True: 0, False: 27.1k]
  ------------------
 2513|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 2514|  27.1k|    }
 2515|  27.1k|}
mf_set:
 2540|   198k|{
 2541|   198k|    if (!mask || is_all_ones(mask, mf->n_bytes)) {
  ------------------
  |  Branch (2541:9): [True: 0, False: 198k]
  |  Branch (2541:18): [True: 83.6k, False: 114k]
  ------------------
 2542|  83.6k|        mf_set_value(mf, value, match, err_str);
 2543|  83.6k|        return mf->usable_protocols_exact;
 2544|   114k|    } else if (is_all_zeros(mask, mf->n_bytes) && !mf_is_tun_metadata(mf)) {
  ------------------
  |  Branch (2544:16): [True: 60.8k, False: 53.7k]
  |  Branch (2544:51): [True: 27.1k, False: 33.6k]
  ------------------
 2545|       |        /* Tunnel metadata matches on the existence of the field itself, so
 2546|       |         * it still needs to be encoded even if the value is wildcarded. */
 2547|  27.1k|        mf_set_wild(mf, match, err_str);
 2548|  27.1k|        return OFPUTIL_P_ANY;
  ------------------
  |  |  100|  27.1k|#define OFPUTIL_P_ANY ((1 << 9) - 1)
  ------------------
 2549|  27.1k|    }
 2550|       |
 2551|  87.4k|    if (err_str) {
  ------------------
  |  Branch (2551:9): [True: 58.1k, False: 29.2k]
  ------------------
 2552|  58.1k|        *err_str = NULL;
 2553|  58.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|  87.4k|    switch (mf->id) {
 2562|     72|    case MFF_CT_ZONE:
  ------------------
  |  Branch (2562:5): [True: 72, False: 87.3k]
  ------------------
 2563|     86|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (2563:5): [True: 14, False: 87.4k]
  ------------------
 2564|    703|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (2564:5): [True: 617, False: 86.8k]
  ------------------
 2565|  1.39k|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (2565:5): [True: 695, False: 86.7k]
  ------------------
 2566|  2.12k|    case MFF_CONJ_ID:
  ------------------
  |  Branch (2566:5): [True: 724, False: 86.7k]
  ------------------
 2567|  2.16k|    case MFF_IN_PORT:
  ------------------
  |  Branch (2567:5): [True: 45, False: 87.3k]
  ------------------
 2568|  3.25k|    case MFF_IN_PORT_OXM:
  ------------------
  |  Branch (2568:5): [True: 1.08k, False: 86.3k]
  ------------------
 2569|  3.44k|    case MFF_ACTSET_OUTPUT:
  ------------------
  |  Branch (2569:5): [True: 191, False: 87.2k]
  ------------------
 2570|  3.44k|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (2570:5): [True: 0, False: 87.4k]
  ------------------
 2571|  3.45k|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (2571:5): [True: 10, False: 87.4k]
  ------------------
 2572|  3.45k|    case MFF_DL_VLAN:
  ------------------
  |  Branch (2572:5): [True: 0, False: 87.4k]
  ------------------
 2573|  3.45k|    case MFF_DL_VLAN_PCP:
  ------------------
  |  Branch (2573:5): [True: 0, False: 87.4k]
  ------------------
 2574|  3.45k|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (2574:5): [True: 0, False: 87.4k]
  ------------------
 2575|  3.45k|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (2575:5): [True: 0, False: 87.4k]
  ------------------
 2576|  3.45k|    case MFF_MPLS_TC:
  ------------------
  |  Branch (2576:5): [True: 0, False: 87.4k]
  ------------------
 2577|  3.45k|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (2577:5): [True: 0, False: 87.4k]
  ------------------
 2578|  3.45k|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (2578:5): [True: 0, False: 87.4k]
  ------------------
 2579|  3.45k|    case MFF_IP_PROTO:
  ------------------
  |  Branch (2579:5): [True: 0, False: 87.4k]
  ------------------
 2580|  3.45k|    case MFF_IP_TTL:
  ------------------
  |  Branch (2580:5): [True: 0, False: 87.4k]
  ------------------
 2581|  3.45k|    case MFF_IP_DSCP:
  ------------------
  |  Branch (2581:5): [True: 0, False: 87.4k]
  ------------------
 2582|  3.45k|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (2582:5): [True: 0, False: 87.4k]
  ------------------
 2583|  3.45k|    case MFF_IP_ECN:
  ------------------
  |  Branch (2583:5): [True: 0, False: 87.4k]
  ------------------
 2584|  3.45k|    case MFF_ARP_OP:
  ------------------
  |  Branch (2584:5): [True: 0, False: 87.4k]
  ------------------
 2585|  3.45k|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (2585:5): [True: 0, False: 87.4k]
  ------------------
 2586|  3.45k|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (2586:5): [True: 0, False: 87.4k]
  ------------------
 2587|  3.45k|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (2587:5): [True: 0, False: 87.4k]
  ------------------
 2588|  3.45k|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (2588:5): [True: 0, False: 87.4k]
  ------------------
 2589|  3.45k|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (2589:5): [True: 0, False: 87.4k]
  ------------------
 2590|  3.45k|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (2590:5): [True: 0, False: 87.4k]
  ------------------
 2591|  3.45k|        return OFPUTIL_P_NONE;
  ------------------
  |  |   53|  3.45k|#define OFPUTIL_P_NONE 0
  ------------------
 2592|       |
 2593|    490|    case MFF_DP_HASH:
  ------------------
  |  Branch (2593:5): [True: 490, False: 86.9k]
  ------------------
 2594|    490|        match_set_dp_hash_masked(match, ntohl(value->be32), ntohl(mask->be32));
 2595|    490|        break;
 2596|    922|    case MFF_TUN_ID:
  ------------------
  |  Branch (2596:5): [True: 922, False: 86.5k]
  ------------------
 2597|    922|        match_set_tun_id_masked(match, value->be64, mask->be64);
 2598|    922|        break;
 2599|    243|    case MFF_TUN_SRC:
  ------------------
  |  Branch (2599:5): [True: 243, False: 87.1k]
  ------------------
 2600|    243|        match_set_tun_src_masked(match, value->be32, mask->be32);
 2601|    243|        break;
 2602|    254|    case MFF_TUN_DST:
  ------------------
  |  Branch (2602:5): [True: 254, False: 87.1k]
  ------------------
 2603|    254|        match_set_tun_dst_masked(match, value->be32, mask->be32);
 2604|    254|        break;
 2605|  1.23k|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (2605:5): [True: 1.23k, False: 86.1k]
  ------------------
 2606|  1.23k|        match_set_tun_ipv6_src_masked(match, &value->ipv6, &mask->ipv6);
 2607|  1.23k|        break;
 2608|    872|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (2608:5): [True: 872, False: 86.5k]
  ------------------
 2609|    872|        match_set_tun_ipv6_dst_masked(match, &value->ipv6, &mask->ipv6);
 2610|    872|        break;
 2611|    562|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (2611:5): [True: 562, False: 86.8k]
  ------------------
 2612|    562|        match_set_tun_flags_masked(match, ntohs(value->be16), ntohs(mask->be16));
 2613|    562|        break;
 2614|     48|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (2614:5): [True: 48, False: 87.3k]
  ------------------
 2615|     48|        match_set_tun_gbp_id_masked(match, value->be16, mask->be16);
 2616|     48|        break;
 2617|    917|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (2617:5): [True: 917, False: 86.5k]
  ------------------
 2618|    917|        match_set_tun_gbp_flags_masked(match, value->u8, mask->u8);
 2619|    917|        break;
 2620|      0|    case MFF_TUN_TTL:
  ------------------
  |  Branch (2620:5): [True: 0, False: 87.4k]
  ------------------
 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: 87.4k]
  ------------------
 2624|      0|        match_set_tun_tos_masked(match, value->u8, mask->u8);
 2625|      0|        break;
 2626|     61|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (2626:5): [True: 61, False: 87.3k]
  ------------------
 2627|     61|        match_set_tun_erspan_ver_masked(match, value->u8, mask->u8);
 2628|     61|        break;
 2629|     37|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (2629:5): [True: 37, False: 87.3k]
  ------------------
 2630|     37|        match_set_tun_erspan_idx_masked(match, ntohl(value->be32),
 2631|     37|                                        ntohl(mask->be32));
 2632|     37|        break;
 2633|     95|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (2633:5): [True: 95, False: 87.3k]
  ------------------
 2634|     95|        match_set_tun_erspan_dir_masked(match, value->u8, mask->u8);
 2635|     95|        break;
 2636|    399|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (2636:5): [True: 399, False: 87.0k]
  ------------------
 2637|    399|        match_set_tun_erspan_hwid_masked(match, value->u8, mask->u8);
 2638|    399|        break;
 2639|    304|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (2639:5): [True: 304, False: 87.1k]
  ------------------
 2640|    304|        match_set_tun_gtpu_flags_masked(match, value->u8, mask->u8);
 2641|    304|        break;
 2642|    100|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (2642:5): [True: 100, False: 87.3k]
  ------------------
 2643|    100|        match_set_tun_gtpu_msgtype_masked(match, value->u8, mask->u8);
 2644|    100|        break;
 2645|  54.1k|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2110|  3.00k|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2110:5): [True: 884, False: 86.5k]
  |  |  |  Branch (2110:29): [True: 2.12k, False: 85.3k]
  |  |  ------------------
  |  | 2111|  4.33k|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2111:5): [True: 396, False: 87.0k]
  |  |  |  Branch (2111:29): [True: 931, False: 86.5k]
  |  |  ------------------
  |  | 2112|  5.45k|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2112:5): [True: 218, False: 87.2k]
  |  |  |  Branch (2112:29): [True: 905, False: 86.5k]
  |  |  ------------------
  |  | 2113|  9.94k|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2113:5): [True: 4.16k, False: 83.2k]
  |  |  |  Branch (2113:29): [True: 331, False: 87.1k]
  |  |  ------------------
  |  | 2114|  10.7k|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2114:5): [True: 517, False: 86.9k]
  |  |  |  Branch (2114:29): [True: 256, False: 87.1k]
  |  |  ------------------
  |  | 2115|  11.6k|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2115:5): [True: 707, False: 86.7k]
  |  |  |  Branch (2115:30): [True: 240, False: 87.1k]
  |  |  ------------------
  |  | 2116|  13.6k|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2116:5): [True: 1.60k, False: 85.8k]
  |  |  |  Branch (2116:30): [True: 380, False: 87.0k]
  |  |  ------------------
  |  | 2117|  14.1k|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2117:5): [True: 196, False: 87.2k]
  |  |  |  Branch (2117:30): [True: 292, False: 87.1k]
  |  |  ------------------
  |  | 2118|  15.9k|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2118:5): [True: 1.38k, False: 86.0k]
  |  |  |  Branch (2118:30): [True: 410, False: 87.0k]
  |  |  ------------------
  |  | 2119|  20.6k|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2119:5): [True: 3.40k, False: 84.0k]
  |  |  |  Branch (2119:30): [True: 1.26k, False: 86.1k]
  |  |  ------------------
  |  | 2120|  22.0k|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2120:5): [True: 569, False: 86.8k]
  |  |  |  Branch (2120:30): [True: 886, False: 86.5k]
  |  |  ------------------
  |  | 2121|  22.6k|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2121:5): [True: 538, False: 86.8k]
  |  |  |  Branch (2121:30): [True: 54, False: 87.3k]
  |  |  ------------------
  |  | 2122|  28.3k|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2122:5): [True: 1.39k, False: 86.0k]
  |  |  |  Branch (2122:30): [True: 4.26k, False: 83.1k]
  |  |  ------------------
  |  | 2123|  29.7k|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2123:5): [True: 877, False: 86.5k]
  |  |  |  Branch (2123:30): [True: 589, False: 86.8k]
  |  |  ------------------
  |  | 2124|  31.3k|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2124:5): [True: 230, False: 87.2k]
  |  |  |  Branch (2124:30): [True: 1.38k, False: 86.0k]
  |  |  ------------------
  |  | 2125|  32.0k|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2125:5): [True: 377, False: 87.0k]
  |  |  |  Branch (2125:30): [True: 270, False: 87.1k]
  |  |  ------------------
  |  | 2126|  34.2k|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2126:5): [True: 1.48k, False: 85.9k]
  |  |  |  Branch (2126:30): [True: 717, False: 86.7k]
  |  |  ------------------
  |  | 2127|  35.7k|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2127:5): [True: 1.30k, False: 86.1k]
  |  |  |  Branch (2127:30): [True: 174, False: 87.2k]
  |  |  ------------------
  |  | 2128|  36.8k|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2128:5): [True: 836, False: 86.5k]
  |  |  |  Branch (2128:30): [True: 276, False: 87.1k]
  |  |  ------------------
  |  | 2129|  37.8k|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2129:5): [True: 478, False: 86.9k]
  |  |  |  Branch (2129:30): [True: 550, False: 86.8k]
  |  |  ------------------
  |  | 2130|  39.8k|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2130:5): [True: 1.37k, False: 86.0k]
  |  |  |  Branch (2130:30): [True: 562, False: 86.8k]
  |  |  ------------------
  |  | 2131|  41.5k|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2131:5): [True: 1.29k, False: 86.1k]
  |  |  |  Branch (2131:30): [True: 494, False: 86.9k]
  |  |  ------------------
  |  | 2132|  42.6k|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2132:5): [True: 307, False: 87.1k]
  |  |  |  Branch (2132:30): [True: 736, False: 86.6k]
  |  |  ------------------
  |  | 2133|  43.8k|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2133:5): [True: 440, False: 86.9k]
  |  |  |  Branch (2133:30): [True: 762, False: 86.6k]
  |  |  ------------------
  |  | 2134|  45.1k|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2134:5): [True: 678, False: 86.7k]
  |  |  |  Branch (2134:30): [True: 602, False: 86.8k]
  |  |  ------------------
  |  | 2135|  46.2k|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2135:5): [True: 986, False: 86.4k]
  |  |  |  Branch (2135:30): [True: 171, False: 87.2k]
  |  |  ------------------
  |  | 2136|  47.5k|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2136:5): [True: 667, False: 86.7k]
  |  |  |  Branch (2136:30): [True: 558, False: 86.8k]
  |  |  ------------------
  |  | 2137|  48.6k|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2137:5): [True: 228, False: 87.2k]
  |  |  |  Branch (2137:30): [True: 902, False: 86.5k]
  |  |  ------------------
  |  | 2138|  49.7k|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2138:5): [True: 357, False: 87.0k]
  |  |  |  Branch (2138:30): [True: 735, False: 86.7k]
  |  |  ------------------
  |  | 2139|  51.2k|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2139:5): [True: 898, False: 86.5k]
  |  |  |  Branch (2139:30): [True: 662, False: 86.7k]
  |  |  ------------------
  |  | 2140|  52.6k|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2140:5): [True: 1.24k, False: 86.1k]
  |  |  |  Branch (2140:30): [True: 141, False: 87.2k]
  |  |  ------------------
  |  | 2141|  54.1k|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2141:5): [True: 280, False: 87.1k]
  |  |  ------------------
  ------------------
 2646|  54.1k|        tun_metadata_set_match(mf, value, mask, match, err_str);
 2647|  54.1k|        break;
 2648|       |
 2649|    126|    case MFF_METADATA:
  ------------------
  |  Branch (2649:5): [True: 126, False: 87.3k]
  ------------------
 2650|    126|        match_set_metadata_masked(match, value->be64, mask->be64);
 2651|    126|        break;
 2652|       |
 2653|  6.62k|    CASE_MFF_REGS:
  ------------------
  |  | 2065|  1.79k|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:     \
  |  |  ------------------
  |  |  |  Branch (2065:5): [True: 790, False: 86.6k]
  |  |  |  Branch (2065:20): [True: 278, False: 87.1k]
  |  |  |  Branch (2065:35): [True: 711, False: 86.7k]
  |  |  |  Branch (2065:50): [True: 16, False: 87.4k]
  |  |  ------------------
  |  | 2066|  2.52k|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:     \
  |  |  ------------------
  |  |  |  Branch (2066:5): [True: 49, False: 87.3k]
  |  |  |  Branch (2066:20): [True: 263, False: 87.1k]
  |  |  |  Branch (2066:35): [True: 346, False: 87.0k]
  |  |  |  Branch (2066:50): [True: 71, False: 87.3k]
  |  |  ------------------
  |  | 2067|  4.62k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11:   \
  |  |  ------------------
  |  |  |  Branch (2067:5): [True: 195, False: 87.2k]
  |  |  |  Branch (2067:20): [True: 716, False: 86.7k]
  |  |  |  Branch (2067:35): [True: 832, False: 86.6k]
  |  |  |  Branch (2067:51): [True: 354, False: 87.0k]
  |  |  ------------------
  |  | 2068|  5.96k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15: \
  |  |  ------------------
  |  |  |  Branch (2068:5): [True: 474, False: 86.9k]
  |  |  |  Branch (2068:21): [True: 239, False: 87.1k]
  |  |  |  Branch (2068:37): [True: 141, False: 87.2k]
  |  |  |  Branch (2068:53): [True: 491, False: 86.9k]
  |  |  ------------------
  |  | 2069|  6.13k|    case MFF_REG16: case MFF_REG17: case MFF_REG18: case MFF_REG19: \
  |  |  ------------------
  |  |  |  Branch (2069:5): [True: 69, False: 87.3k]
  |  |  |  Branch (2069:21): [True: 64, False: 87.3k]
  |  |  |  Branch (2069:37): [True: 18, False: 87.4k]
  |  |  |  Branch (2069:53): [True: 20, False: 87.4k]
  |  |  ------------------
  |  | 2070|  6.37k|    case MFF_REG20: case MFF_REG21: case MFF_REG22: case MFF_REG23: \
  |  |  ------------------
  |  |  |  Branch (2070:5): [True: 59, False: 87.3k]
  |  |  |  Branch (2070:21): [True: 31, False: 87.4k]
  |  |  |  Branch (2070:37): [True: 130, False: 87.3k]
  |  |  |  Branch (2070:53): [True: 16, False: 87.4k]
  |  |  ------------------
  |  | 2071|  6.52k|    case MFF_REG24: case MFF_REG25: case MFF_REG26: case MFF_REG27: \
  |  |  ------------------
  |  |  |  Branch (2071:5): [True: 86, False: 87.3k]
  |  |  |  Branch (2071:21): [True: 37, False: 87.3k]
  |  |  |  Branch (2071:37): [True: 8, False: 87.4k]
  |  |  |  Branch (2071:53): [True: 22, False: 87.4k]
  |  |  ------------------
  |  | 2072|  6.62k|    case MFF_REG28: case MFF_REG29: case MFF_REG30: case MFF_REG31
  |  |  ------------------
  |  |  |  Branch (2072:5): [True: 7, False: 87.4k]
  |  |  |  Branch (2072:21): [True: 18, False: 87.4k]
  |  |  |  Branch (2072:37): [True: 37, False: 87.3k]
  |  |  ------------------
  ------------------
 2654|  6.62k|        match_set_reg_masked(match, mf->id - MFF_REG0,
 2655|  6.62k|                             ntohl(value->be32), ntohl(mask->be32));
 2656|  6.62k|        break;
 2657|       |
 2658|  3.36k|    CASE_MFF_XREGS:
  ------------------
  |  | 2081|  1.06k|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3:    \
  |  |  ------------------
  |  |  |  Branch (2081:5): [True: 141, False: 87.2k]
  |  |  |  Branch (2081:21): [True: 744, False: 86.6k]
  |  |  |  Branch (2081:37): [True: 106, False: 87.3k]
  |  |  |  Branch (2081:53): [True: 78, False: 87.3k]
  |  |  ------------------
  |  | 2082|  2.51k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7:    \
  |  |  ------------------
  |  |  |  Branch (2082:5): [True: 46, False: 87.3k]
  |  |  |  Branch (2082:21): [True: 98, False: 87.3k]
  |  |  |  Branch (2082:37): [True: 920, False: 86.5k]
  |  |  |  Branch (2082:53): [True: 385, False: 87.0k]
  |  |  ------------------
  |  | 2083|  2.94k|    case MFF_XREG8: case MFF_XREG9: case MFF_XREG10: case MFF_XREG11:  \
  |  |  ------------------
  |  |  |  Branch (2083:5): [True: 61, False: 87.3k]
  |  |  |  Branch (2083:21): [True: 22, False: 87.4k]
  |  |  |  Branch (2083:37): [True: 333, False: 87.1k]
  |  |  |  Branch (2083:54): [True: 13, False: 87.4k]
  |  |  ------------------
  |  | 2084|  3.36k|    case MFF_XREG12: case MFF_XREG13: case MFF_XREG14: case MFF_XREG15
  |  |  ------------------
  |  |  |  Branch (2084:5): [True: 339, False: 87.0k]
  |  |  |  Branch (2084:22): [True: 25, False: 87.4k]
  |  |  |  Branch (2084:39): [True: 17, False: 87.4k]
  |  |  ------------------
  ------------------
 2659|  3.36k|        match_set_xreg_masked(match, mf->id - MFF_XREG0,
 2660|  3.36k|                              ntohll(value->be64), ntohll(mask->be64));
 2661|  3.36k|        break;
 2662|       |
 2663|  1.34k|    CASE_MFF_XXREGS: {
  ------------------
  |  | 2093|  1.34k|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3: \
  |  |  ------------------
  |  |  |  Branch (2093:5): [True: 142, False: 87.2k]
  |  |  |  Branch (2093:22): [True: 121, False: 87.3k]
  |  |  |  Branch (2093:39): [True: 986, False: 86.4k]
  |  |  |  Branch (2093:56): [True: 94, False: 87.3k]
  |  |  ------------------
  |  | 2094|  1.34k|    case MFF_XXREG4: case MFF_XXREG5: case MFF_XXREG6: case MFF_XXREG7
  |  |  ------------------
  |  |  |  Branch (2094:5): [True: 0, False: 87.4k]
  |  |  |  Branch (2094:22): [True: 0, False: 87.4k]
  |  |  |  Branch (2094:39): [True: 0, False: 87.4k]
  |  |  ------------------
  ------------------
 2664|  1.34k|        match_set_xxreg_masked(match, mf->id - MFF_XXREG0,
 2665|  1.34k|                ntoh128(value->be128), ntoh128(mask->be128));
 2666|  1.34k|        break;
 2667|  7.02k|    }
 2668|       |
 2669|    217|    case MFF_PKT_MARK:
  ------------------
  |  Branch (2669:5): [True: 217, False: 87.2k]
  ------------------
 2670|    217|        match_set_pkt_mark_masked(match, ntohl(value->be32),
 2671|    217|                                  ntohl(mask->be32));
 2672|    217|        break;
 2673|       |
 2674|    228|    case MFF_CT_STATE:
  ------------------
  |  Branch (2674:5): [True: 228, False: 87.2k]
  ------------------
 2675|    228|        match_set_ct_state_masked(match, ntohl(value->be32), ntohl(mask->be32));
 2676|    228|        break;
 2677|       |
 2678|  1.37k|    case MFF_CT_MARK:
  ------------------
  |  Branch (2678:5): [True: 1.37k, False: 86.0k]
  ------------------
 2679|  1.37k|        match_set_ct_mark_masked(match, ntohl(value->be32), ntohl(mask->be32));
 2680|  1.37k|        break;
 2681|       |
 2682|    288|    case MFF_CT_LABEL:
  ------------------
  |  Branch (2682:5): [True: 288, False: 87.1k]
  ------------------
 2683|    288|        match_set_ct_label_masked(match, ntoh128(value->be128),
 2684|    288|                                  ntoh128(mask->be128));
 2685|    288|        break;
 2686|       |
 2687|     72|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (2687:5): [True: 72, False: 87.3k]
  ------------------
 2688|     72|        match_set_ct_nw_src_masked(match, value->be32, mask->be32);
 2689|     72|        break;
 2690|       |
 2691|    106|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (2691:5): [True: 106, False: 87.3k]
  ------------------
 2692|    106|        match_set_ct_nw_dst_masked(match, value->be32, mask->be32);
 2693|    106|        break;
 2694|       |
 2695|    324|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (2695:5): [True: 324, False: 87.1k]
  ------------------
 2696|    324|        match_set_ct_ipv6_src_masked(match, &value->ipv6, &mask->ipv6);
 2697|    324|        break;
 2698|       |
 2699|    923|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (2699:5): [True: 923, False: 86.5k]
  ------------------
 2700|    923|        match_set_ct_ipv6_dst_masked(match, &value->ipv6, &mask->ipv6);
 2701|    923|        break;
 2702|       |
 2703|    332|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (2703:5): [True: 332, False: 87.1k]
  ------------------
 2704|    332|        match_set_ct_tp_src_masked(match, value->be16, mask->be16);
 2705|    332|        break;
 2706|       |
 2707|    305|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (2707:5): [True: 305, False: 87.1k]
  ------------------
 2708|    305|        match_set_ct_tp_dst_masked(match, value->be16, mask->be16);
 2709|    305|        break;
 2710|       |
 2711|     25|    case MFF_ETH_DST:
  ------------------
  |  Branch (2711:5): [True: 25, False: 87.4k]
  ------------------
 2712|     25|        match_set_dl_dst_masked(match, value->mac, mask->mac);
 2713|     25|        break;
 2714|       |
 2715|    105|    case MFF_ETH_SRC:
  ------------------
  |  Branch (2715:5): [True: 105, False: 87.3k]
  ------------------
 2716|    105|        match_set_dl_src_masked(match, value->mac, mask->mac);
 2717|    105|        break;
 2718|       |
 2719|     67|    case MFF_ARP_SHA:
  ------------------
  |  Branch (2719:5): [True: 67, False: 87.3k]
  ------------------
 2720|    161|    case MFF_ND_SLL:
  ------------------
  |  Branch (2720:5): [True: 94, False: 87.3k]
  ------------------
 2721|    161|        match_set_arp_sha_masked(match, value->mac, mask->mac);
 2722|    161|        break;
 2723|       |
 2724|     73|    case MFF_ARP_THA:
  ------------------
  |  Branch (2724:5): [True: 73, False: 87.3k]
  ------------------
 2725|    356|    case MFF_ND_TLL:
  ------------------
  |  Branch (2725:5): [True: 283, False: 87.1k]
  ------------------
 2726|    356|        match_set_arp_tha_masked(match, value->mac, mask->mac);
 2727|    356|        break;
 2728|       |
 2729|    477|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (2729:5): [True: 477, False: 86.9k]
  ------------------
 2730|    477|        match_set_dl_tci_masked(match, value->be16, mask->be16);
 2731|    477|        break;
 2732|       |
 2733|     96|    case MFF_VLAN_VID:
  ------------------
  |  Branch (2733:5): [True: 96, False: 87.3k]
  ------------------
 2734|     96|        match_set_vlan_vid_masked(match, value->be16, mask->be16);
 2735|     96|        break;
 2736|       |
 2737|     32|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (2737:5): [True: 32, False: 87.4k]
  ------------------
 2738|     32|        match_set_nw_src_masked(match, value->be32, mask->be32);
 2739|     32|        break;
 2740|       |
 2741|     98|    case MFF_IPV4_DST:
  ------------------
  |  Branch (2741:5): [True: 98, False: 87.3k]
  ------------------
 2742|     98|        match_set_nw_dst_masked(match, value->be32, mask->be32);
 2743|     98|        break;
 2744|       |
 2745|    269|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (2745:5): [True: 269, False: 87.1k]
  ------------------
 2746|    269|        match_set_ipv6_src_masked(match, &value->ipv6, &mask->ipv6);
 2747|    269|        break;
 2748|       |
 2749|    579|    case MFF_IPV6_DST:
  ------------------
  |  Branch (2749:5): [True: 579, False: 86.8k]
  ------------------
 2750|    579|        match_set_ipv6_dst_masked(match, &value->ipv6, &mask->ipv6);
 2751|    579|        break;
 2752|       |
 2753|    224|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (2753:5): [True: 224, False: 87.2k]
  ------------------
 2754|    224|        if ((mask->be32 & htonl(IPV6_LABEL_MASK)) == htonl(IPV6_LABEL_MASK)) {
  ------------------
  |  Branch (2754:13): [True: 201, False: 23]
  ------------------
 2755|    201|            mf_set_value(mf, value, match, err_str);
 2756|    201|        } else {
 2757|     23|            match_set_ipv6_label_masked(match, value->be32, mask->be32);
 2758|     23|        }
 2759|    224|        break;
 2760|       |
 2761|    224|    case MFF_ND_TARGET:
  ------------------
  |  Branch (2761:5): [True: 224, False: 87.2k]
  ------------------
 2762|    224|        match_set_nd_target_masked(match, &value->ipv6, &mask->ipv6);
 2763|    224|        break;
 2764|       |
 2765|  3.59k|    case MFF_IP_FRAG:
  ------------------
  |  Branch (2765:5): [True: 3.59k, False: 83.8k]
  ------------------
 2766|  3.59k|        match_set_nw_frag_masked(match, value->u8,
 2767|  3.59k|                                 mask->u8 & FLOW_NW_FRAG_MASK);
  ------------------
  |  |   56|  3.59k|#define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   54|  3.59k|#define FLOW_NW_FRAG_ANY   (1 << 0) /* Set for any IP frag. */
  |  |  ------------------
  |  |               #define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   55|  3.59k|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  |  |  ------------------
  ------------------
 2768|  3.59k|        break;
 2769|       |
 2770|     61|    case MFF_ARP_SPA:
  ------------------
  |  Branch (2770:5): [True: 61, False: 87.3k]
  ------------------
 2771|     61|        match_set_nw_src_masked(match, value->be32, mask->be32);
 2772|     61|        break;
 2773|       |
 2774|    125|    case MFF_ARP_TPA:
  ------------------
  |  Branch (2774:5): [True: 125, False: 87.3k]
  ------------------
 2775|    125|        match_set_nw_dst_masked(match, value->be32, mask->be32);
 2776|    125|        break;
 2777|       |
 2778|    197|    case MFF_TCP_SRC:
  ------------------
  |  Branch (2778:5): [True: 197, False: 87.2k]
  ------------------
 2779|    264|    case MFF_UDP_SRC:
  ------------------
  |  Branch (2779:5): [True: 67, False: 87.3k]
  ------------------
 2780|    516|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (2780:5): [True: 252, False: 87.1k]
  ------------------
 2781|    516|        match_set_tp_src_masked(match, value->be16, mask->be16);
 2782|    516|        break;
 2783|       |
 2784|     18|    case MFF_TCP_DST:
  ------------------
  |  Branch (2784:5): [True: 18, False: 87.4k]
  ------------------
 2785|    100|    case MFF_UDP_DST:
  ------------------
  |  Branch (2785:5): [True: 82, False: 87.3k]
  ------------------
 2786|    325|    case MFF_SCTP_DST:
  ------------------
  |  Branch (2786:5): [True: 225, False: 87.2k]
  ------------------
 2787|    325|        match_set_tp_dst_masked(match, value->be16, mask->be16);
 2788|    325|        break;
 2789|       |
 2790|      9|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (2790:5): [True: 9, False: 87.4k]
  ------------------
 2791|      9|        match_set_tcp_flags_masked(match, value->be16, mask->be16);
 2792|      9|        break;
 2793|       |
 2794|     67|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (2794:5): [True: 67, False: 87.3k]
  ------------------
 2795|     67|        MATCH_SET_FIELD_MASKED(match, nsh.flags, value->u8, mask->u8);
  ------------------
  |  |   50|     67|    do {                                                      \
  |  |   51|     67|        (match)->wc.masks.field = (msk);                      \
  |  |   52|     67|        (match)->flow.field = (value) & (msk);                \
  |  |   53|     67|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded, False: 67]
  |  |  ------------------
  ------------------
 2796|     67|        break;
 2797|      0|    case MFF_NSH_TTL:
  ------------------
  |  Branch (2797:5): [True: 0, False: 87.4k]
  ------------------
 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: 87.4k]
  ------------------
 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: 87.4k]
  ------------------
 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: 87.4k]
  ------------------
 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: 87.4k]
  ------------------
 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|     67|    case MFF_NSH_C1:
  ------------------
  |  Branch (2816:5): [True: 67, False: 87.3k]
  ------------------
 2817|    206|    case MFF_NSH_C2:
  ------------------
  |  Branch (2817:5): [True: 139, False: 87.2k]
  ------------------
 2818|    273|    case MFF_NSH_C3:
  ------------------
  |  Branch (2818:5): [True: 67, False: 87.3k]
  ------------------
 2819|    307|    case MFF_NSH_C4:
  ------------------
  |  Branch (2819:5): [True: 34, False: 87.4k]
  ------------------
 2820|    307|        MATCH_SET_FIELD_MASKED(match, nsh.context[mf->id - MFF_NSH_C1],
  ------------------
  |  |   50|    307|    do {                                                      \
  |  |   51|    307|        (match)->wc.masks.field = (msk);                      \
  |  |   52|    307|        (match)->flow.field = (value) & (msk);                \
  |  |   53|    307|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded, False: 307]
  |  |  ------------------
  ------------------
 2821|    307|                               value->be32, mask->be32);
 2822|    307|        break;
 2823|       |
 2824|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (2824:5): [True: 0, False: 87.4k]
  ------------------
 2825|      0|    default:
  ------------------
  |  Branch (2825:5): [True: 0, False: 87.4k]
  ------------------
 2826|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 2827|  87.4k|    }
 2828|       |
 2829|  83.9k|    return ((mf->usable_protocols_bitwise == mf->usable_protocols_cidr
  ------------------
  |  Branch (2829:14): [True: 83.6k, False: 316]
  ------------------
 2830|    316|             || ip_is_cidr(mask->be32))
  ------------------
  |  Branch (2830:17): [True: 58, False: 258]
  ------------------
 2831|  83.9k|            ? mf->usable_protocols_cidr
 2832|  83.9k|            : mf->usable_protocols_bitwise);
 2833|  87.4k|}
mf_check_src:
 2948|  42.9k|{
 2949|  42.9k|    return mf_check__(sf, match, "source");
 2950|  42.9k|}
mf_check_dst:
 2957|  12.3k|{
 2958|  12.3k|    int error = mf_check__(sf, match, "destination");
 2959|  12.3k|    if (!error && !sf->field->writable) {
  ------------------
  |  Branch (2959:9): [True: 11.0k, False: 1.36k]
  |  Branch (2959:19): [True: 42, False: 10.9k]
  ------------------
 2960|     42|        VLOG_WARN_RL(&rl, "destination field %s is not writable",
  ------------------
  |  |  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]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2961|     42|                     sf->field->name);
 2962|     42|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2963|     42|    }
 2964|  12.3k|    return error;
 2965|  12.3k|}
mf_get:
 2972|  32.9k|{
 2973|  32.9k|    mf_get_value(mf, &match->flow, value);
 2974|  32.9k|    mf_get_mask(mf, &match->wc, mask);
 2975|  32.9k|}
mf_format:
 3401|  15.2k|{
 3402|  15.2k|    if (mask) {
  ------------------
  |  Branch (3402:9): [True: 4.43k, False: 10.8k]
  ------------------
 3403|  4.43k|        if (is_all_zeros(mask, mf->n_bytes)) {
  ------------------
  |  Branch (3403:13): [True: 1.24k, False: 3.19k]
  ------------------
 3404|  1.24k|            ds_put_cstr(s, "ANY");
 3405|  1.24k|            return;
 3406|  3.19k|        } else if (is_all_ones(mask, mf->n_bytes)) {
  ------------------
  |  Branch (3406:20): [True: 2.41k, False: 773]
  ------------------
 3407|  2.41k|            mask = NULL;
 3408|  2.41k|        }
 3409|  4.43k|    }
 3410|       |
 3411|  14.0k|    switch (mf->string) {
 3412|  1.63k|    case MFS_OFP_PORT_OXM:
  ------------------
  |  Branch (3412:5): [True: 1.63k, False: 12.3k]
  ------------------
 3413|  1.63k|        if (!mask) {
  ------------------
  |  Branch (3413:13): [True: 1.55k, False: 81]
  ------------------
 3414|  1.55k|            ofp_port_t port;
 3415|  1.55k|            ofputil_port_from_ofp11(value->be32, &port);
 3416|  1.55k|            ofputil_format_port(port, port_map, s);
 3417|  1.55k|            break;
 3418|  1.55k|        }
 3419|       |        /* fall through */
 3420|    154|    case MFS_OFP_PORT:
  ------------------
  |  Branch (3420:5): [True: 73, False: 13.9k]
  ------------------
 3421|    154|        if (!mask) {
  ------------------
  |  Branch (3421:13): [True: 68, False: 86]
  ------------------
 3422|     68|            ofputil_format_port(u16_to_ofp(ntohs(value->be16)), port_map, s);
 3423|     68|            break;
 3424|     68|        }
 3425|       |        /* fall through */
 3426|  2.25k|    case MFS_DECIMAL:
  ------------------
  |  Branch (3426:5): [True: 2.16k, False: 11.8k]
  ------------------
 3427|  7.83k|    case MFS_HEXADECIMAL:
  ------------------
  |  Branch (3427:5): [True: 5.57k, False: 8.43k]
  ------------------
 3428|  7.83k|        mf_format_integer_string(mf, (uint8_t *) value, (uint8_t *) mask, s);
 3429|  7.83k|        break;
 3430|       |
 3431|    858|    case MFS_CT_STATE:
  ------------------
  |  Branch (3431:5): [True: 858, False: 13.1k]
  ------------------
 3432|    858|        mf_format_ct_state_string(value->be32,
 3433|    858|                                  mask ? mask->be32 : OVS_BE32_MAX, s);
  ------------------
  |  |   43|    858|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  |  Branch (3433:35): [True: 0, False: 858]
  ------------------
 3434|    858|        break;
 3435|       |
 3436|    205|    case MFS_ETHERNET:
  ------------------
  |  Branch (3436:5): [True: 205, False: 13.8k]
  ------------------
 3437|    205|        eth_format_masked(value->mac, mask ? &mask->mac : NULL, s);
  ------------------
  |  Branch (3437:39): [True: 0, False: 205]
  ------------------
 3438|    205|        break;
 3439|       |
 3440|     54|    case MFS_IPV4:
  ------------------
  |  Branch (3440:5): [True: 54, False: 13.9k]
  ------------------
 3441|     54|        ip_format_masked(value->be32, mask ? mask->be32 : OVS_BE32_MAX, s);
  ------------------
  |  |   43|     20|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  |  Branch (3441:39): [True: 34, False: 20]
  ------------------
 3442|     54|        break;
 3443|       |
 3444|     28|    case MFS_IPV6:
  ------------------
  |  Branch (3444:5): [True: 28, False: 13.9k]
  ------------------
 3445|     28|        ipv6_format_masked(&value->ipv6, mask ? &mask->ipv6 : NULL, s);
  ------------------
  |  Branch (3445:42): [True: 18, False: 10]
  ------------------
 3446|     28|        break;
 3447|       |
 3448|    302|    case MFS_FRAG:
  ------------------
  |  Branch (3448:5): [True: 302, False: 13.7k]
  ------------------
 3449|    302|        mf_format_frag_string(value->u8, mask ? mask->u8 : UINT8_MAX, s);
  ------------------
  |  Branch (3449:42): [True: 0, False: 302]
  ------------------
 3450|    302|        break;
 3451|       |
 3452|    510|    case MFS_TNL_FLAGS:
  ------------------
  |  Branch (3452:5): [True: 510, False: 13.5k]
  ------------------
 3453|    510|        mf_format_tnl_flags_string(value->be16,
 3454|    510|                                   mask ? mask->be16 : OVS_BE16_MAX, s);
  ------------------
  |  |   42|  1.01k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  |  Branch (3454:36): [True: 10, False: 500]
  ------------------
 3455|    510|        break;
 3456|       |
 3457|  1.43k|    case MFS_TCP_FLAGS:
  ------------------
  |  Branch (3457:5): [True: 1.43k, False: 12.5k]
  ------------------
 3458|  1.43k|        mf_format_tcp_flags_string(value->be16,
 3459|  1.43k|                                   mask ? mask->be16 : OVS_BE16_MAX, s);
  ------------------
  |  |   42|  2.87k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  |  Branch (3459:36): [True: 0, False: 1.43k]
  ------------------
 3460|  1.43k|        break;
 3461|       |
 3462|  1.15k|    case MFS_PACKET_TYPE:
  ------------------
  |  Branch (3462:5): [True: 1.15k, False: 12.8k]
  ------------------
 3463|  1.15k|        mf_format_packet_type_string(value->be32,
 3464|  1.15k|                                     mask ? mask->be32 : OVS_BE32_MAX, s);
  ------------------
  |  |   43|  1.15k|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  |  Branch (3464:38): [True: 0, False: 1.15k]
  ------------------
 3465|  1.15k|        break;
 3466|       |
 3467|      0|    default:
  ------------------
  |  Branch (3467:5): [True: 0, False: 14.0k]
  ------------------
 3468|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 3469|  14.0k|    }
 3470|  14.0k|}
mf_write_subfield_value:
 3507|  32.9k|{
 3508|  32.9k|    const struct mf_field *field = sf->field;
 3509|  32.9k|    union mf_value value, mask;
 3510|  32.9k|    unsigned int size = DIV_ROUND_UP(sf->n_bits, 8);
  ------------------
  |  |  300|  32.9k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  ------------------
 3511|       |
 3512|  32.9k|    mf_get(field, match, &value, &mask);
 3513|  32.9k|    bitwise_copy(src, size, 0, &value, field->n_bytes, sf->ofs, sf->n_bits);
 3514|  32.9k|    bitwise_one (              &mask,  field->n_bytes, sf->ofs, sf->n_bits);
 3515|       |    mf_set(field, &value, &mask, match, NULL);
 3516|  32.9k|}
field_array_set:
 3571|  9.11k|{
 3572|  9.11k|    size_t i, offset = 0;
 3573|       |
 3574|  9.11k|    ovs_assert(id < MFF_N_IDS);
  ------------------
  |  |   62|  9.11k|#define ovs_assert ovs_ignore
  ------------------
 3575|       |
 3576|       |    /* Find the spot for 'id'. */
 3577|  9.11k|    BITMAP_FOR_EACH_1 (i, id, fa->used.bm) {
  ------------------
  |  |  281|  9.11k|    BITMAP_FOR_EACH_1_RANGE(IDX, 0, SIZE, BITMAP)
  |  |  ------------------
  |  |  |  |  278|  13.5k|    for ((IDX) = bitmap_scan(BITMAP, true, BEGIN, END); (IDX) < (END);   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (278:57): [True: 4.41k, False: 9.11k]
  |  |  |  |  ------------------
  |  |  |  |  279|  9.11k|         (IDX) = bitmap_scan(BITMAP, true, (IDX) + 1, END))
  |  |  ------------------
  ------------------
 3578|  4.41k|        offset += mf_from_id(i)->n_bytes;
 3579|  4.41k|    }
 3580|       |
 3581|  9.11k|    size_t value_size = mf_from_id(id)->n_bytes;
 3582|       |
 3583|       |    /* make room if necessary. */
 3584|  9.11k|    if (!bitmap_is_set(fa->used.bm, id)) {
  ------------------
  |  Branch (3584:9): [True: 9.11k, False: 0]
  ------------------
 3585|  9.11k|        fa->values = xrealloc(fa->values, fa->values_size + value_size);
 3586|       |        /* Move remainder forward, if any. */
 3587|  9.11k|        if (offset < fa->values_size) {
  ------------------
  |  Branch (3587:13): [True: 2.35k, False: 6.76k]
  ------------------
 3588|  2.35k|            memmove(fa->values + offset + value_size, fa->values + offset,
 3589|  2.35k|                    fa->values_size - offset);
 3590|  2.35k|        }
 3591|  9.11k|        fa->values_size += value_size;
 3592|  9.11k|    }
 3593|  9.11k|    bitmap_set1(fa->used.bm, id);
 3594|       |
 3595|  9.11k|    memcpy(fa->values + offset, value, value_size);
 3596|  9.11k|}
mf_get_vl_mff:
 3670|   283k|{
 3671|   283k|    if (mff && mff->variable_len && vl_mff_map) {
  ------------------
  |  Branch (3671:9): [True: 283k, False: 0]
  |  Branch (3671:16): [True: 127k, False: 156k]
  |  Branch (3671:37): [True: 0, False: 127k]
  ------------------
 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|   283k|    return NULL;
 3678|   283k|}
mf_vl_mff_invalid:
 3781|   284k|{
 3782|   284k|    return map && mff && mff->variable_len && !mff->mapped;
  ------------------
  |  Branch (3782:12): [True: 0, False: 284k]
  |  Branch (3782:19): [True: 0, False: 0]
  |  Branch (3782:26): [True: 0, False: 0]
  |  Branch (3782:47): [True: 0, False: 0]
  ------------------
 3783|   284k|}
mf_vl_mff_set_tlv_bitmap:
 3787|  76.8k|{
 3788|  76.8k|    if (mff && mff->mapped) {
  ------------------
  |  Branch (3788:9): [True: 76.8k, False: 0]
  |  Branch (3788:16): [True: 0, False: 76.8k]
  ------------------
 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|  76.8k|}
mf_vl_mff_nx_pull_header:
 3833|  17.9k|{
 3834|  17.9k|    enum ofperr error = nx_pull_header(b, vl_mff_map, field, masked);
 3835|  17.9k|    if (error) {
  ------------------
  |  Branch (3835:9): [True: 2.80k, False: 15.1k]
  ------------------
 3836|  2.80k|        return error;
 3837|  2.80k|    }
 3838|       |
 3839|  15.1k|    mf_vl_mff_set_tlv_bitmap(*field, tlv_bitmap);
 3840|  15.1k|    return 0;
 3841|  17.9k|}
mf_vl_mff_nx_pull_entry:
 3847|  12.2k|{
 3848|  12.2k|    enum ofperr error = nx_pull_entry(b, vl_mff_map, field, value, mask, true);
 3849|  12.2k|    if (error) {
  ------------------
  |  Branch (3849:9): [True: 994, False: 11.2k]
  ------------------
 3850|    994|        return error;
 3851|    994|    }
 3852|       |
 3853|  11.2k|    mf_vl_mff_set_tlv_bitmap(*field, tlv_bitmap);
 3854|  11.2k|    return 0;
 3855|  12.2k|}
mf_vl_mff_mf_from_nxm_header:
 3862|  53.8k|{
 3863|  53.8k|    *field = mf_from_nxm_header(header, vl_mff_map);
 3864|  53.8k|    if (!*field) {
  ------------------
  |  Branch (3864:9): [True: 3.38k, False: 50.5k]
  ------------------
 3865|  3.38k|        return OFPERR_OFPBAC_BAD_SET_TYPE;
 3866|  50.5k|    } else if (mf_vl_mff_invalid(*field, vl_mff_map)) {
  ------------------
  |  Branch (3866:16): [True: 0, False: 50.5k]
  ------------------
 3867|      0|        return OFPERR_NXFMFC_INVALID_TLV_FIELD;
 3868|      0|    }
 3869|       |
 3870|  50.5k|    mf_vl_mff_set_tlv_bitmap(*field, tlv_bitmap);
 3871|  50.5k|    return 0;
 3872|  53.8k|}
mf_bitmap_and:
 3886|   109k|{
 3887|   109k|    bitmap_and(a.bm, b.bm, MFF_N_IDS);
 3888|   109k|    return a;
 3889|   109k|}
mf_bitmap_not:
 3902|  54.5k|{
 3903|  54.5k|    bitmap_not(x.bm, MFF_N_IDS);
 3904|  54.5k|    return x;
 3905|  54.5k|}
meta-flow.c:mf_are_prereqs_ok__:
  444|  55.3k|{
  445|  55.3k|    ovs_be16 dl_type = get_dl_type(flow);
  446|       |
  447|  55.3k|    switch (mf->prereqs) {
  ------------------
  |  Branch (447:13): [True: 55.3k, False: 0]
  ------------------
  448|  43.9k|    case MFP_NONE:
  ------------------
  |  Branch (448:5): [True: 43.9k, False: 11.3k]
  ------------------
  449|  43.9k|        return true;
  450|    367|    case MFP_ETHERNET:
  ------------------
  |  Branch (450:5): [True: 367, False: 54.9k]
  ------------------
  451|    367|        return is_ethernet(flow, wc);
  452|    695|    case MFP_ARP:
  ------------------
  |  Branch (452:5): [True: 695, False: 54.6k]
  ------------------
  453|    695|        return (dl_type == htons(ETH_TYPE_ARP) ||
  ------------------
  |  Branch (453:17): [True: 229, False: 466]
  ------------------
  454|    466|                dl_type == htons(ETH_TYPE_RARP));
  ------------------
  |  Branch (454:17): [True: 32, False: 434]
  ------------------
  455|     34|    case MFP_IPV4:
  ------------------
  |  Branch (455:5): [True: 34, False: 55.2k]
  ------------------
  456|     34|        return dl_type == htons(ETH_TYPE_IP);
  457|     55|    case MFP_IPV6:
  ------------------
  |  Branch (457:5): [True: 55, False: 55.2k]
  ------------------
  458|     55|        return dl_type == htons(ETH_TYPE_IPV6);
  459|    666|    case MFP_VLAN_VID:
  ------------------
  |  Branch (459:5): [True: 666, False: 54.6k]
  ------------------
  460|    666|        return is_vlan(flow, wc);
  461|     94|    case MFP_MPLS:
  ------------------
  |  Branch (461:5): [True: 94, False: 55.2k]
  ------------------
  462|     94|        return eth_type_mpls(dl_type);
  463|  3.20k|    case MFP_IP_ANY:
  ------------------
  |  Branch (463:5): [True: 3.20k, False: 52.1k]
  ------------------
  464|  3.20k|        return is_ip_any(flow);
  465|     68|    case MFP_NSH:
  ------------------
  |  Branch (465:5): [True: 68, False: 55.2k]
  ------------------
  466|     68|        return dl_type == htons(ETH_TYPE_NSH);
  467|  1.08k|    case MFP_CT_VALID:
  ------------------
  |  Branch (467:5): [True: 1.08k, False: 54.2k]
  ------------------
  468|  1.08k|        return is_ct_valid(flow, mask, wc);
  469|    237|    case MFP_TCP:
  ------------------
  |  Branch (469:5): [True: 237, False: 55.0k]
  ------------------
  470|       |        /* Matching !FRAG_LATER is not enforced (mask is not checked). */
  471|    237|        return is_tcp(flow, wc) && !(flow->nw_frag & FLOW_NW_FRAG_LATER);
  ------------------
  |  |   55|     19|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  |  Branch (471:16): [True: 19, False: 218]
  |  Branch (471:36): [True: 19, False: 0]
  ------------------
  472|    287|    case MFP_UDP:
  ------------------
  |  Branch (472:5): [True: 287, False: 55.0k]
  ------------------
  473|    287|        return is_udp(flow, wc) && !(flow->nw_frag & FLOW_NW_FRAG_LATER);
  ------------------
  |  |   55|    138|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  |  Branch (473:16): [True: 138, False: 149]
  |  Branch (473:36): [True: 138, False: 0]
  ------------------
  474|    447|    case MFP_SCTP:
  ------------------
  |  Branch (474:5): [True: 447, False: 54.8k]
  ------------------
  475|    447|        return is_sctp(flow, wc) && !(flow->nw_frag & FLOW_NW_FRAG_LATER);
  ------------------
  |  |   55|    176|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  |  Branch (475:16): [True: 176, False: 271]
  |  Branch (475:37): [True: 176, False: 0]
  ------------------
  476|    451|    case MFP_ICMPV4:
  ------------------
  |  Branch (476:5): [True: 451, False: 54.8k]
  ------------------
  477|    451|        return is_icmpv4(flow, wc);
  478|    834|    case MFP_ICMPV6:
  ------------------
  |  Branch (478:5): [True: 834, False: 54.4k]
  ------------------
  479|    834|        return is_icmpv6(flow, wc);
  480|    377|    case MFP_ND:
  ------------------
  |  Branch (480:5): [True: 377, False: 54.9k]
  ------------------
  481|    377|        return is_nd(flow, wc);
  482|  1.65k|    case MFP_ND_SOLICIT:
  ------------------
  |  Branch (482:5): [True: 1.65k, False: 53.6k]
  ------------------
  483|  1.65k|        return is_nd(flow, wc) && flow->tp_src == htons(ND_NEIGHBOR_SOLICIT);
  ------------------
  |  Branch (483:16): [True: 218, False: 1.43k]
  |  Branch (483:35): [True: 157, False: 61]
  ------------------
  484|    782|    case MFP_ND_ADVERT:
  ------------------
  |  Branch (484:5): [True: 782, False: 54.5k]
  ------------------
  485|    782|        return is_nd(flow, wc) && flow->tp_src == htons(ND_NEIGHBOR_ADVERT);
  ------------------
  |  Branch (485:16): [True: 279, False: 503]
  |  Branch (485:35): [True: 261, False: 18]
  ------------------
  486|  55.3k|    }
  487|       |
  488|      0|    OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  489|  55.3k|}
meta-flow.c:field_len:
 1371|   150k|{
 1372|   150k|    const uint8_t *value = &value_->u8;
 1373|   150k|    int i;
 1374|       |
 1375|   150k|    if (!mf->variable_len) {
  ------------------
  |  Branch (1375:9): [True: 0, False: 150k]
  ------------------
 1376|      0|        return mf->n_bytes;
 1377|      0|    }
 1378|       |
 1379|   150k|    if (!value) {
  ------------------
  |  Branch (1379:9): [True: 0, False: 150k]
  ------------------
 1380|      0|        return 0;
 1381|      0|    }
 1382|       |
 1383|  17.7M|    for (i = 0; i < mf->n_bytes; i++) {
  ------------------
  |  Branch (1383:17): [True: 17.6M, False: 105k]
  ------------------
 1384|  17.6M|        if (value[i] != 0) {
  ------------------
  |  Branch (1384:13): [True: 44.8k, False: 17.6M]
  ------------------
 1385|  44.8k|            break;
 1386|  44.8k|        }
 1387|  17.6M|    }
 1388|       |
 1389|   150k|    return mf->n_bytes - i;
 1390|   150k|}
meta-flow.c:mf_check__:
 2838|  55.2k|{
 2839|  55.2k|    if (!sf->field) {
  ------------------
  |  Branch (2839:9): [True: 0, False: 55.2k]
  ------------------
 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|  55.2k|    } else if (!sf->n_bits) {
  ------------------
  |  Branch (2842:16): [True: 2.62k, False: 52.6k]
  ------------------
 2843|  2.62k|        VLOG_WARN_RL(&rl, "zero bit %s field %s", type, sf->field->name);
  ------------------
  |  |  224|  2.62k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  2.62k|    do {                                                                \
  |  |  |  |  288|  2.62k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  2.62k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 2.62k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  2.62k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 2.62k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2844|  2.62k|        return OFPERR_OFPBAC_BAD_SET_LEN;
 2845|  52.6k|    } else if (sf->ofs >= sf->field->n_bits) {
  ------------------
  |  Branch (2845:16): [True: 3.58k, False: 49.0k]
  ------------------
 2846|  3.58k|        VLOG_WARN_RL(&rl, "bit offset %d exceeds %d-bit width of %s field %s",
  ------------------
  |  |  224|  3.58k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  3.58k|    do {                                                                \
  |  |  |  |  288|  3.58k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  3.58k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 3.58k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  3.58k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 3.58k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2847|  3.58k|                     sf->ofs, sf->field->n_bits, type, sf->field->name);
 2848|  3.58k|        return OFPERR_OFPBAC_BAD_SET_LEN;
 2849|  49.0k|    } else if (sf->ofs + sf->n_bits > sf->field->n_bits) {
  ------------------
  |  Branch (2849:16): [True: 382, False: 48.6k]
  ------------------
 2850|    382|        VLOG_WARN_RL(&rl, "bit offset %d and width %d exceeds %d-bit width "
  ------------------
  |  |  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]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2851|    382|                     "of %s field %s", sf->ofs, sf->n_bits,
 2852|    382|                     sf->field->n_bits, type, sf->field->name);
 2853|    382|        return OFPERR_OFPBAC_BAD_SET_LEN;
 2854|  48.6k|    } else if (match && !mf_are_match_prereqs_ok(sf->field, match)) {
  ------------------
  |  Branch (2854:16): [True: 36.6k, False: 12.0k]
  |  Branch (2854:25): [True: 743, False: 35.8k]
  ------------------
 2855|    743|        VLOG_WARN_RL(&rl, "%s field %s lacks correct prerequisites",
  ------------------
  |  |  224|    743|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    743|    do {                                                                \
  |  |  |  |  288|    743|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    743|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 743]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    743|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 743]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2856|    743|                     type, sf->field->name);
 2857|    743|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 2858|  47.9k|    } else {
 2859|  47.9k|        return 0;
 2860|  47.9k|    }
 2861|  55.2k|}
meta-flow.c:mf_format_integer_string:
 3327|  7.83k|{
 3328|  7.83k|    if (mf->string == MFS_HEXADECIMAL) {
  ------------------
  |  Branch (3328:9): [True: 5.57k, False: 2.25k]
  ------------------
 3329|  5.57k|        ds_put_hex(s, valuep, mf->n_bytes);
 3330|  5.57k|    } else {
 3331|  2.25k|        unsigned long long int integer = 0;
 3332|  2.25k|        int i;
 3333|       |
 3334|  2.25k|        ovs_assert(mf->n_bytes <= 8);
  ------------------
  |  |   62|  2.25k|#define ovs_assert ovs_ignore
  ------------------
 3335|  6.08k|        for (i = 0; i < mf->n_bytes; i++) {
  ------------------
  |  Branch (3335:21): [True: 3.82k, False: 2.25k]
  ------------------
 3336|  3.82k|            integer = (integer << 8) | valuep[i];
 3337|  3.82k|        }
 3338|  2.25k|        ds_put_format(s, "%lld", integer);
 3339|  2.25k|    }
 3340|       |
 3341|  7.83k|    if (maskp) {
  ------------------
  |  Branch (3341:9): [True: 711, False: 7.12k]
  ------------------
 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|    711|        ds_put_char(s, '/');
 3346|    711|        ds_put_hex(s, maskp, mf->n_bytes);
 3347|    711|    }
 3348|  7.83k|}
meta-flow.c:mf_format_ct_state_string:
 3383|    858|{
 3384|    858|    format_flags_masked(s, NULL, ct_state_to_string, ntohl(value),
 3385|    858|                        ntohl(mask), UINT16_MAX);
 3386|    858|}
meta-flow.c:mf_format_frag_string:
 3352|    302|{
 3353|    302|    const struct frag_handling *h;
 3354|       |
 3355|    302|    mask &= FLOW_NW_FRAG_MASK;
  ------------------
  |  |   56|    302|#define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   54|    302|#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|    302|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  |  |  ------------------
  ------------------
 3356|    302|    value &= mask;
 3357|       |
 3358|  2.20k|    for (h = all_frags; h < &all_frags[ARRAY_SIZE(all_frags)]; h++) {
  ------------------
  |  |  297|  2.20k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   46|  2.20k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|  2.20k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   47|  2.20k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.20k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|  2.20k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3358:25): [True: 1.93k, False: 269]
  ------------------
 3359|  1.93k|        if (value == h->value && mask == h->mask) {
  ------------------
  |  Branch (3359:13): [True: 302, False: 1.63k]
  |  Branch (3359:34): [True: 33, False: 269]
  ------------------
 3360|     33|            ds_put_cstr(s, h->name);
 3361|     33|            return;
 3362|     33|        }
 3363|  1.93k|    }
 3364|    269|    ds_put_cstr(s, "<error>");
 3365|    269|}
meta-flow.c:mf_format_tnl_flags_string:
 3369|    510|{
 3370|    510|    format_flags_masked(s, NULL, flow_tun_flag_to_string, ntohs(value),
 3371|    510|                        ntohs(mask) & FLOW_TNL_PUB_F_MASK, FLOW_TNL_PUB_F_MASK);
  ------------------
  |  |   58|    510|#define FLOW_TNL_PUB_F_MASK ((1 << 1) - 1)
  ------------------
                                      ntohs(mask) & FLOW_TNL_PUB_F_MASK, FLOW_TNL_PUB_F_MASK);
  ------------------
  |  |   58|    510|#define FLOW_TNL_PUB_F_MASK ((1 << 1) - 1)
  ------------------
 3372|    510|}
meta-flow.c:mf_format_tcp_flags_string:
 3376|  1.43k|{
 3377|  1.43k|    format_flags_masked(s, NULL, packet_tcp_flag_to_string, ntohs(value),
 3378|  1.43k|                        TCP_FLAGS(mask), TCP_FLAGS(OVS_BE16_MAX));
  ------------------
  |  |  904|  1.43k|#define TCP_FLAGS(tcp_ctl) (ntohs(tcp_ctl) & 0x0fff)
  ------------------
                                      TCP_FLAGS(mask), TCP_FLAGS(OVS_BE16_MAX));
  ------------------
  |  |  904|  1.43k|#define TCP_FLAGS(tcp_ctl) (ntohs(tcp_ctl) & 0x0fff)
  ------------------
 3379|  1.43k|}
meta-flow.c:mf_format_packet_type_string:
 3390|  1.15k|{
 3391|  1.15k|    format_packet_type_masked(s, value, mask);
 3392|  1.15k|}

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

netdev_features_to_bps:
 1263|  30.9k|{
 1264|  30.9k|    enum {
 1265|  30.9k|        F_1000000MB = NETDEV_F_1TB_FD,
 1266|  30.9k|        F_100000MB = NETDEV_F_100GB_FD,
 1267|  30.9k|        F_40000MB = NETDEV_F_40GB_FD,
 1268|  30.9k|        F_10000MB = NETDEV_F_10GB_FD,
 1269|  30.9k|        F_1000MB = NETDEV_F_1GB_HD | NETDEV_F_1GB_FD,
 1270|  30.9k|        F_100MB = NETDEV_F_100MB_HD | NETDEV_F_100MB_FD,
 1271|  30.9k|        F_10MB = NETDEV_F_10MB_HD | NETDEV_F_10MB_FD
 1272|  30.9k|    };
 1273|       |
 1274|  30.9k|    return (  features & F_1000000MB ? UINT64_C(1000000000000)
  ------------------
  |  Branch (1274:15): [True: 0, False: 30.9k]
  ------------------
 1275|  30.9k|            : features & F_100000MB  ? UINT64_C(100000000000)
  ------------------
  |  Branch (1275:15): [True: 0, False: 30.9k]
  ------------------
 1276|  30.9k|            : features & F_40000MB   ? UINT64_C(40000000000)
  ------------------
  |  Branch (1276:15): [True: 0, False: 30.9k]
  ------------------
 1277|  30.9k|            : features & F_10000MB   ? UINT64_C(10000000000)
  ------------------
  |  Branch (1277:15): [True: 8.88k, False: 22.0k]
  ------------------
 1278|  30.9k|            : features & F_1000MB    ? UINT64_C(1000000000)
  ------------------
  |  Branch (1278:15): [True: 4.21k, False: 17.8k]
  ------------------
 1279|  22.0k|            : features & F_100MB     ? UINT64_C(100000000)
  ------------------
  |  Branch (1279:15): [True: 5.53k, False: 12.2k]
  ------------------
 1280|  17.8k|            : features & F_10MB      ? UINT64_C(10000000)
  ------------------
  |  Branch (1280:15): [True: 2.08k, False: 10.2k]
  ------------------
 1281|  12.2k|                                     : default_bps);
 1282|  30.9k|}
netdev_features_format:
 1356|  53.5k|{
 1357|  53.5k|    ofp_print_bit_names(s, features, netdev_feature_to_name, ' ');
 1358|  53.5k|    ds_put_char(s, '\n');
 1359|  53.5k|}
netdev_free_custom_stats_counters:
 2433|  37.7k|{
 2434|  37.7k|    if (custom_stats) {
  ------------------
  |  Branch (2434:9): [True: 37.7k, False: 0]
  ------------------
 2435|  37.7k|        if (custom_stats->counters) {
  ------------------
  |  Branch (2435:13): [True: 7.94k, False: 29.8k]
  ------------------
 2436|  7.94k|            free(custom_stats->counters);
 2437|  7.94k|            custom_stats->counters = NULL;
 2438|  7.94k|            custom_stats->size = 0;
 2439|  7.94k|        }
 2440|  37.7k|        free(custom_stats->label);
 2441|       |        custom_stats->label = NULL;
 2442|  37.7k|    }
 2443|  37.7k|}
netdev.c:netdev_feature_to_name:
 1329|   266k|{
 1330|   266k|    enum netdev_features f = bit;
 1331|       |
 1332|   266k|    switch (f) {
  ------------------
  |  Branch (1332:13): [True: 266k, False: 0]
  ------------------
 1333|  21.7k|    case NETDEV_F_10MB_HD:    return "10MB-HD";
  ------------------
  |  Branch (1333:5): [True: 21.7k, False: 245k]
  ------------------
 1334|  21.4k|    case NETDEV_F_10MB_FD:    return "10MB-FD";
  ------------------
  |  Branch (1334:5): [True: 21.4k, False: 245k]
  ------------------
 1335|  21.1k|    case NETDEV_F_100MB_HD:   return "100MB-HD";
  ------------------
  |  Branch (1335:5): [True: 21.1k, False: 245k]
  ------------------
 1336|  28.9k|    case NETDEV_F_100MB_FD:   return "100MB-FD";
  ------------------
  |  Branch (1336:5): [True: 28.9k, False: 237k]
  ------------------
 1337|  18.2k|    case NETDEV_F_1GB_HD:     return "1GB-HD";
  ------------------
  |  Branch (1337:5): [True: 18.2k, False: 248k]
  ------------------
 1338|  21.9k|    case NETDEV_F_1GB_FD:     return "1GB-FD";
  ------------------
  |  Branch (1338:5): [True: 21.9k, False: 244k]
  ------------------
 1339|  22.0k|    case NETDEV_F_10GB_FD:    return "10GB-FD";
  ------------------
  |  Branch (1339:5): [True: 22.0k, False: 244k]
  ------------------
 1340|  1.85k|    case NETDEV_F_40GB_FD:    return "40GB-FD";
  ------------------
  |  Branch (1340:5): [True: 1.85k, False: 264k]
  ------------------
 1341|  2.26k|    case NETDEV_F_100GB_FD:   return "100GB-FD";
  ------------------
  |  Branch (1341:5): [True: 2.26k, False: 264k]
  ------------------
 1342|  1.76k|    case NETDEV_F_1TB_FD:     return "1TB-FD";
  ------------------
  |  Branch (1342:5): [True: 1.76k, False: 265k]
  ------------------
 1343|  1.66k|    case NETDEV_F_OTHER:      return "OTHER";
  ------------------
  |  Branch (1343:5): [True: 1.66k, False: 265k]
  ------------------
 1344|  15.9k|    case NETDEV_F_COPPER:     return "COPPER";
  ------------------
  |  Branch (1344:5): [True: 15.9k, False: 250k]
  ------------------
 1345|  23.0k|    case NETDEV_F_FIBER:      return "FIBER";
  ------------------
  |  Branch (1345:5): [True: 23.0k, False: 243k]
  ------------------
 1346|  21.2k|    case NETDEV_F_AUTONEG:    return "AUTO_NEG";
  ------------------
  |  Branch (1346:5): [True: 21.2k, False: 245k]
  ------------------
 1347|  20.9k|    case NETDEV_F_PAUSE:      return "AUTO_PAUSE";
  ------------------
  |  Branch (1347:5): [True: 20.9k, False: 245k]
  ------------------
 1348|  22.5k|    case NETDEV_F_PAUSE_ASYM: return "AUTO_PAUSE_ASYM";
  ------------------
  |  Branch (1348:5): [True: 22.5k, False: 244k]
  ------------------
 1349|   266k|    }
 1350|       |
 1351|      0|    return NULL;
 1352|   266k|}

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

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

ofpact_put_set_field:
 3385|  11.2k|{
 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|  11.2k|    size_t total_size = 2 * ROUND_UP(field->n_bytes, OFPACT_ALIGNTO);
  ------------------
  |  |  303|  11.2k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|  11.2k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
 3392|  11.2k|    struct ofpact_set_field *sf = ofpact_put_SET_FIELD(ofpacts);
 3393|  11.2k|    sf->field = field;
 3394|       |
 3395|       |    /* Fill with all zeroes to make sure the padding is initialized. */
 3396|  11.2k|    ofpbuf_put_zeros(ofpacts, total_size);
 3397|  11.2k|    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|  11.2k|    if (value) {
  ------------------
  |  Branch (3401:9): [True: 8.83k, False: 2.39k]
  ------------------
 3402|  8.83k|        memcpy(sf->value, value, field->n_bytes);
 3403|  8.83k|        if (mask) {
  ------------------
  |  Branch (3403:13): [True: 8.83k, False: 0]
  ------------------
 3404|  8.83k|            memcpy(ofpact_set_field_mask(sf), mask, field->n_bytes);
  ------------------
  |  |  563|  8.83k|    ALIGNED_CAST(union mf_value *,                                          \
  |  |  ------------------
  |  |  |  |  434|  8.83k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  ------------------
  |  |  564|  8.83k|                 (uint8_t *)(SF)->value +                                   \
  |  |  565|  8.83k|                            ROUND_UP((SF)->field->n_bytes, OFPACT_ALIGNTO))
  ------------------
 3405|  8.83k|        } 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|  8.83k|    }
 3409|       |
 3410|       |    /* Update length. */
 3411|  11.2k|    ofpact_finish_SET_FIELD(ofpacts, &sf);
 3412|       |
 3413|  11.2k|    return sf;
 3414|  11.2k|}
ofpact_put_reg_load:
 3424|  2.39k|{
 3425|  2.39k|    struct ofpact_set_field *sf = ofpact_put_set_field(ofpacts, field, value,
 3426|  2.39k|                                                       mask);
 3427|  2.39k|    sf->ofpact.raw = NXAST_RAW_REG_LOAD;
 3428|       |
 3429|  2.39k|    return sf;
 3430|  2.39k|}
ofpact_put_reg_load2:
 3435|  1.89k|{
 3436|  1.89k|    struct ofpact_set_field *sf = ofpact_put_set_field(ofpacts, field, value,
 3437|  1.89k|                                                       mask);
 3438|  1.89k|    sf->ofpact.raw = NXAST_RAW_REG_LOAD2;
 3439|       |
 3440|  1.89k|    return sf;
 3441|  1.89k|}
ofpacts_pull_openflow_actions:
 8121|   119k|{
 8122|   119k|    return ofpacts_pull_openflow_actions__(
 8123|   119k|        openflow, actions_len, version,
 8124|   119k|        (1u << OVSINST_OFPIT11_APPLY_ACTIONS) | (1u << OVSINST_OFPIT13_METER),
 8125|   119k|        ofpacts, 0, vl_mff_map, ofpacts_tlv_bitmap);
 8126|   119k|}
ovs_instruction_name_from_type:
 8363|  23.5k|{
 8364|  23.5k|    return type < ARRAY_SIZE(inst_info) ? inst_info[type].name : NULL;
  ------------------
  |  |  297|  23.5k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   46|  23.5k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|  23.5k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   47|  23.5k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  23.5k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|  23.5k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (8364:12): [True: 23.5k, False: 0]
  ------------------
 8365|  23.5k|}
ovs_instruction_type_from_ofpact_type:
 8382|   125k|{
 8383|   125k|    switch (type) {
 8384|    398|    case OFPACT_METER:
  ------------------
  |  Branch (8384:5): [True: 398, False: 125k]
  ------------------
 8385|    398|        return (version >= OFP15_VERSION
  ------------------
  |  Branch (8385:17): [True: 54, False: 344]
  ------------------
 8386|    398|                ? OVSINST_OFPIT11_APPLY_ACTIONS
 8387|    398|                : OVSINST_OFPIT13_METER);
 8388|    298|    case OFPACT_CLEAR_ACTIONS:
  ------------------
  |  Branch (8388:5): [True: 298, False: 125k]
  ------------------
 8389|    298|        return OVSINST_OFPIT11_CLEAR_ACTIONS;
 8390|  9.74k|    case OFPACT_WRITE_ACTIONS:
  ------------------
  |  Branch (8390:5): [True: 9.74k, False: 115k]
  ------------------
 8391|  9.74k|        return OVSINST_OFPIT11_WRITE_ACTIONS;
 8392|    970|    case OFPACT_WRITE_METADATA:
  ------------------
  |  Branch (8392:5): [True: 970, False: 124k]
  ------------------
 8393|    970|        return OVSINST_OFPIT11_WRITE_METADATA;
 8394|     72|    case OFPACT_GOTO_TABLE:
  ------------------
  |  Branch (8394:5): [True: 72, False: 125k]
  ------------------
 8395|     72|        return OVSINST_OFPIT11_GOTO_TABLE;
 8396|  7.57k|    case OFPACT_OUTPUT:
  ------------------
  |  Branch (8396:5): [True: 7.57k, False: 118k]
  ------------------
 8397|  7.58k|    case OFPACT_GROUP:
  ------------------
  |  Branch (8397:5): [True: 16, False: 125k]
  ------------------
 8398|  8.08k|    case OFPACT_CLONE:
  ------------------
  |  Branch (8398:5): [True: 501, False: 125k]
  ------------------
 8399|  11.9k|    case OFPACT_CONTROLLER:
  ------------------
  |  Branch (8399:5): [True: 3.84k, False: 121k]
  ------------------
 8400|  12.2k|    case OFPACT_ENQUEUE:
  ------------------
  |  Branch (8400:5): [True: 366, False: 125k]
  ------------------
 8401|  12.7k|    case OFPACT_OUTPUT_REG:
  ------------------
  |  Branch (8401:5): [True: 490, False: 125k]
  ------------------
 8402|  14.3k|    case OFPACT_OUTPUT_TRUNC:
  ------------------
  |  Branch (8402:5): [True: 1.53k, False: 124k]
  ------------------
 8403|  15.3k|    case OFPACT_BUNDLE:
  ------------------
  |  Branch (8403:5): [True: 998, False: 124k]
  ------------------
 8404|  20.6k|    case OFPACT_SET_VLAN_VID:
  ------------------
  |  Branch (8404:5): [True: 5.28k, False: 120k]
  ------------------
 8405|  23.0k|    case OFPACT_SET_VLAN_PCP:
  ------------------
  |  Branch (8405:5): [True: 2.43k, False: 123k]
  ------------------
 8406|  26.6k|    case OFPACT_STRIP_VLAN:
  ------------------
  |  Branch (8406:5): [True: 3.63k, False: 122k]
  ------------------
 8407|  26.8k|    case OFPACT_PUSH_VLAN:
  ------------------
  |  Branch (8407:5): [True: 172, False: 125k]
  ------------------
 8408|  26.8k|    case OFPACT_SET_ETH_SRC:
  ------------------
  |  Branch (8408:5): [True: 15, False: 125k]
  ------------------
 8409|  26.9k|    case OFPACT_SET_ETH_DST:
  ------------------
  |  Branch (8409:5): [True: 66, False: 125k]
  ------------------
 8410|  28.9k|    case OFPACT_SET_IPV4_SRC:
  ------------------
  |  Branch (8410:5): [True: 1.97k, False: 123k]
  ------------------
 8411|  33.4k|    case OFPACT_SET_IPV4_DST:
  ------------------
  |  Branch (8411:5): [True: 4.56k, False: 121k]
  ------------------
 8412|  38.2k|    case OFPACT_SET_IP_DSCP:
  ------------------
  |  Branch (8412:5): [True: 4.81k, False: 120k]
  ------------------
 8413|  38.5k|    case OFPACT_SET_IP_ECN:
  ------------------
  |  Branch (8413:5): [True: 292, False: 125k]
  ------------------
 8414|  38.5k|    case OFPACT_SET_IP_TTL:
  ------------------
  |  Branch (8414:5): [True: 16, False: 125k]
  ------------------
 8415|  43.5k|    case OFPACT_SET_L4_SRC_PORT:
  ------------------
  |  Branch (8415:5): [True: 4.93k, False: 120k]
  ------------------
 8416|  49.1k|    case OFPACT_SET_L4_DST_PORT:
  ------------------
  |  Branch (8416:5): [True: 5.60k, False: 120k]
  ------------------
 8417|  49.4k|    case OFPACT_REG_MOVE:
  ------------------
  |  Branch (8417:5): [True: 334, False: 125k]
  ------------------
 8418|  58.5k|    case OFPACT_SET_FIELD:
  ------------------
  |  Branch (8418:5): [True: 9.10k, False: 116k]
  ------------------
 8419|  58.6k|    case OFPACT_STACK_PUSH:
  ------------------
  |  Branch (8419:5): [True: 73, False: 125k]
  ------------------
 8420|  59.0k|    case OFPACT_STACK_POP:
  ------------------
  |  Branch (8420:5): [True: 430, False: 125k]
  ------------------
 8421|  60.0k|    case OFPACT_DEC_TTL:
  ------------------
  |  Branch (8421:5): [True: 1.00k, False: 124k]
  ------------------
 8422|  61.7k|    case OFPACT_SET_MPLS_LABEL:
  ------------------
  |  Branch (8422:5): [True: 1.66k, False: 124k]
  ------------------
 8423|  61.7k|    case OFPACT_SET_MPLS_TC:
  ------------------
  |  Branch (8423:5): [True: 13, False: 125k]
  ------------------
 8424|  62.4k|    case OFPACT_SET_MPLS_TTL:
  ------------------
  |  Branch (8424:5): [True: 728, False: 124k]
  ------------------
 8425|  62.5k|    case OFPACT_DEC_MPLS_TTL:
  ------------------
  |  Branch (8425:5): [True: 28, False: 125k]
  ------------------
 8426|  62.5k|    case OFPACT_PUSH_MPLS:
  ------------------
  |  Branch (8426:5): [True: 0, False: 125k]
  ------------------
 8427|  62.6k|    case OFPACT_POP_MPLS:
  ------------------
  |  Branch (8427:5): [True: 116, False: 125k]
  ------------------
 8428|  63.2k|    case OFPACT_SET_TUNNEL:
  ------------------
  |  Branch (8428:5): [True: 619, False: 125k]
  ------------------
 8429|  63.8k|    case OFPACT_SET_QUEUE:
  ------------------
  |  Branch (8429:5): [True: 581, False: 125k]
  ------------------
 8430|  65.0k|    case OFPACT_POP_QUEUE:
  ------------------
  |  Branch (8430:5): [True: 1.17k, False: 124k]
  ------------------
 8431|  65.7k|    case OFPACT_FIN_TIMEOUT:
  ------------------
  |  Branch (8431:5): [True: 718, False: 124k]
  ------------------
 8432|  67.8k|    case OFPACT_RESUBMIT:
  ------------------
  |  Branch (8432:5): [True: 2.09k, False: 123k]
  ------------------
 8433|  86.2k|    case OFPACT_LEARN:
  ------------------
  |  Branch (8433:5): [True: 18.3k, False: 107k]
  ------------------
 8434|  86.2k|    case OFPACT_CONJUNCTION:
  ------------------
  |  Branch (8434:5): [True: 0, False: 125k]
  ------------------
 8435|  88.7k|    case OFPACT_MULTIPATH:
  ------------------
  |  Branch (8435:5): [True: 2.58k, False: 123k]
  ------------------
 8436|  93.0k|    case OFPACT_NOTE:
  ------------------
  |  Branch (8436:5): [True: 4.29k, False: 121k]
  ------------------
 8437|  95.0k|    case OFPACT_EXIT:
  ------------------
  |  Branch (8437:5): [True: 1.97k, False: 123k]
  ------------------
 8438|  99.7k|    case OFPACT_UNROLL_XLATE:
  ------------------
  |  Branch (8438:5): [True: 4.72k, False: 120k]
  ------------------
 8439|   101k|    case OFPACT_SAMPLE:
  ------------------
  |  Branch (8439:5): [True: 1.87k, False: 123k]
  ------------------
 8440|   101k|    case OFPACT_DEBUG_RECIRC:
  ------------------
  |  Branch (8440:5): [True: 0, False: 125k]
  ------------------
 8441|   101k|    case OFPACT_DEBUG_SLOW:
  ------------------
  |  Branch (8441:5): [True: 0, False: 125k]
  ------------------
 8442|   106k|    case OFPACT_CT:
  ------------------
  |  Branch (8442:5): [True: 5.12k, False: 120k]
  ------------------
 8443|   106k|    case OFPACT_CT_CLEAR:
  ------------------
  |  Branch (8443:5): [True: 165, False: 125k]
  ------------------
 8444|   110k|    case OFPACT_NAT:
  ------------------
  |  Branch (8444:5): [True: 3.25k, False: 122k]
  ------------------
 8445|   110k|    case OFPACT_ENCAP:
  ------------------
  |  Branch (8445:5): [True: 310, False: 125k]
  ------------------
 8446|   113k|    case OFPACT_DECAP:
  ------------------
  |  Branch (8446:5): [True: 3.13k, False: 122k]
  ------------------
 8447|   113k|    case OFPACT_DEC_NSH_TTL:
  ------------------
  |  Branch (8447:5): [True: 6, False: 125k]
  ------------------
 8448|   114k|    case OFPACT_CHECK_PKT_LARGER:
  ------------------
  |  Branch (8448:5): [True: 495, False: 125k]
  ------------------
 8449|   114k|    case OFPACT_DELETE_FIELD:
  ------------------
  |  Branch (8449:5): [True: 57, False: 125k]
  ------------------
 8450|   114k|    default:
  ------------------
  |  Branch (8450:5): [True: 0, False: 125k]
  ------------------
 8451|   114k|        return OVSINST_OFPIT11_APPLY_ACTIONS;
 8452|   125k|    }
 8453|   125k|}
ovs_instruction_type_from_inst_type:
 8458|  2.23k|{
 8459|  2.23k|    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|     23|    DEFINE_INST(OFPIT13_METER,                              \
  |  |  ------------------
  |  |  |  | 8462|     23|    case ENUM:                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8462:5): [True: 23, False: 2.21k]
  |  |  |  |  ------------------
  |  |  |  | 8463|     23|        *instruction_type = OVSINST_##ENUM;         \
  |  |  |  | 8464|     23|        return 0;
  |  |  ------------------
  |  | 1345|     23|                ofp13_instruction_meter,          false,    \
  |  | 1346|     23|                "meter")                                    \
  |  | 1347|     23|                                                            \
  |  | 1348|     23|    DEFINE_INST(OFPIT11_APPLY_ACTIONS,                      \
  |  |  ------------------
  |  |  |  | 8462|     11|    case ENUM:                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8462:5): [True: 11, False: 2.22k]
  |  |  |  |  ------------------
  |  |  |  | 8463|     11|        *instruction_type = OVSINST_##ENUM;         \
  |  |  |  | 8464|     11|        return 0;
  |  |  ------------------
  |  | 1349|     11|                ofp11_instruction_actions,        true,     \
  |  | 1350|     11|                "apply_actions")                            \
  |  | 1351|     11|                                                            \
  |  | 1352|     12|    DEFINE_INST(OFPIT11_CLEAR_ACTIONS,                      \
  |  |  ------------------
  |  |  |  | 8462|     12|    case ENUM:                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8462:5): [True: 12, False: 2.22k]
  |  |  |  |  ------------------
  |  |  |  | 8463|     12|        *instruction_type = OVSINST_##ENUM;         \
  |  |  |  | 8464|     12|        return 0;
  |  |  ------------------
  |  | 1353|     12|                ofp11_instruction,                false,    \
  |  | 1354|     12|                "clear_actions")                            \
  |  | 1355|     12|                                                            \
  |  | 1356|     20|    DEFINE_INST(OFPIT11_WRITE_ACTIONS,                      \
  |  |  ------------------
  |  |  |  | 8462|     20|    case ENUM:                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8462:5): [True: 20, False: 2.21k]
  |  |  |  |  ------------------
  |  |  |  | 8463|     20|        *instruction_type = OVSINST_##ENUM;         \
  |  |  |  | 8464|     20|        return 0;
  |  |  ------------------
  |  | 1357|     20|                ofp11_instruction_actions,        true,     \
  |  | 1358|     20|                "write_actions")                            \
  |  | 1359|     20|                                                            \
  |  | 1360|     21|    DEFINE_INST(OFPIT11_WRITE_METADATA,                     \
  |  |  ------------------
  |  |  |  | 8462|     21|    case ENUM:                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8462:5): [True: 21, False: 2.21k]
  |  |  |  |  ------------------
  |  |  |  | 8463|     21|        *instruction_type = OVSINST_##ENUM;         \
  |  |  |  | 8464|     21|        return 0;
  |  |  ------------------
  |  | 1361|     21|                ofp11_instruction_write_metadata, false,    \
  |  | 1362|     21|                "write_metadata")                           \
  |  | 1363|     21|                                                            \
  |  | 1364|    271|    DEFINE_INST(OFPIT11_GOTO_TABLE,                         \
  |  |  ------------------
  |  |  |  | 8462|    271|    case ENUM:                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8462:5): [True: 271, False: 1.96k]
  |  |  |  |  ------------------
  |  |  |  | 8463|    271|        *instruction_type = OVSINST_##ENUM;         \
  |  |  |  | 8464|    271|        return 0;
  |  |  ------------------
  |  | 1365|    271|                ofp11_instruction_goto_table,     false,    \
  |  | 1366|    271|                "goto_table")
  ------------------
 8466|      0|#undef DEFINE_INST
 8467|       |
 8468|  1.87k|    default:
  ------------------
  |  Branch (8468:5): [True: 1.87k, False: 358]
  ------------------
 8469|  1.87k|        return OFPERR_OFPBIC_UNKNOWN_INST;
 8470|  2.23k|    }
 8471|  2.23k|}
ovsinst_bitmap_from_openflow:
 8529|  19.7k|{
 8530|  19.7k|    uint32_t ovsinst_bitmap = 0;
 8531|  19.7k|    const struct ovsinst_map *x;
 8532|       |
 8533|   118k|    for (x = get_ovsinst_map(version); x->ofpit >= 0; x++) {
  ------------------
  |  Branch (8533:40): [True: 98.6k, False: 19.7k]
  ------------------
 8534|  98.6k|        if (ofpit_bitmap & htonl(1u << x->ofpit)) {
  ------------------
  |  Branch (8534:13): [True: 31.6k, False: 66.9k]
  ------------------
 8535|  31.6k|            ovsinst_bitmap |= 1u << x->ovsinst;
 8536|  31.6k|        }
 8537|  98.6k|    }
 8538|  19.7k|    return ovsinst_bitmap;
 8539|  19.7k|}
ofpacts_pull_openflow_instructions:
 8647|  79.6k|{
 8648|  79.6k|    const struct ofp11_instruction *instructions;
 8649|  79.6k|    const struct ofp11_instruction *insts[N_OVS_INSTRUCTIONS];
 8650|  79.6k|    enum ofperr error;
 8651|       |
 8652|  79.6k|    ofpbuf_clear(ofpacts);
 8653|  79.6k|    if (version == OFP10_VERSION) {
  ------------------
  |  Branch (8653:9): [True: 46.2k, False: 33.4k]
  ------------------
 8654|  46.2k|        return ofpacts_pull_openflow_actions__(openflow, instructions_len,
 8655|  46.2k|                                               version,
 8656|  46.2k|                                               (1u << N_OVS_INSTRUCTIONS) - 1,
 8657|  46.2k|                                               ofpacts, 0, vl_mff_map,
 8658|  46.2k|                                               ofpacts_tlv_bitmap);
 8659|  46.2k|    }
 8660|       |
 8661|  33.4k|    if (instructions_len % OFP11_INSTRUCTION_ALIGN != 0) {
  ------------------
  |  |  262|  33.4k|#define OFP11_INSTRUCTION_ALIGN 8
  ------------------
  |  Branch (8661:9): [True: 535, False: 32.9k]
  ------------------
 8662|    535|        VLOG_WARN_RL(&rl, "OpenFlow message instructions length %u is not a "
  ------------------
  |  |  224|    535|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    535|    do {                                                                \
  |  |  |  |  288|    535|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    535|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 535]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    535|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 535]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8663|    535|                     "multiple of %d",
 8664|    535|                     instructions_len, OFP11_INSTRUCTION_ALIGN);
 8665|    535|        error = OFPERR_OFPBIC_BAD_LEN;
 8666|    535|        goto exit;
 8667|    535|    }
 8668|       |
 8669|  32.9k|    instructions = ofpbuf_try_pull(openflow, instructions_len);
 8670|  32.9k|    if (instructions == NULL) {
  ------------------
  |  Branch (8670:9): [True: 153, False: 32.7k]
  ------------------
 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|  32.7k|    error = decode_openflow11_instructions(
 8679|  32.7k|        instructions, instructions_len / OFP11_INSTRUCTION_ALIGN, version,
  ------------------
  |  |  262|  32.7k|#define OFP11_INSTRUCTION_ALIGN 8
  ------------------
 8680|  32.7k|        insts);
 8681|  32.7k|    if (error) {
  ------------------
  |  Branch (8681:9): [True: 4.87k, False: 27.8k]
  ------------------
 8682|  4.87k|        goto exit;
 8683|  4.87k|    }
 8684|       |
 8685|  27.8k|    if (insts[OVSINST_OFPIT13_METER]) {
  ------------------
  |  Branch (8685:9): [True: 355, False: 27.5k]
  ------------------
 8686|    355|        const struct ofp13_instruction_meter *oim;
 8687|    355|        struct ofpact_meter *om;
 8688|       |
 8689|    355|        oim = ALIGNED_CAST(const struct ofp13_instruction_meter *,
  ------------------
  |  |  434|    355|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 8690|    355|                           insts[OVSINST_OFPIT13_METER]);
 8691|       |
 8692|    355|        om = ofpact_put_METER(ofpacts);
 8693|    355|        om->meter_id = ntohl(oim->meter_id);
 8694|    355|        om->provider_meter_id = UINT32_MAX; /* No provider meter ID. */
 8695|    355|    }
 8696|  27.8k|    if (insts[OVSINST_OFPIT11_APPLY_ACTIONS]) {
  ------------------
  |  Branch (8696:9): [True: 3.76k, False: 24.1k]
  ------------------
 8697|  3.76k|        const struct ofp_action_header *actions;
 8698|  3.76k|        size_t actions_len;
 8699|       |
 8700|  3.76k|        get_actions_from_instruction(insts[OVSINST_OFPIT11_APPLY_ACTIONS],
 8701|  3.76k|                                     &actions, &actions_len);
 8702|  3.76k|        error = ofpacts_decode(actions, actions_len, version, vl_mff_map,
 8703|  3.76k|                               ofpacts_tlv_bitmap, ofpacts);
 8704|  3.76k|        if (error) {
  ------------------
  |  Branch (8704:13): [True: 443, False: 3.32k]
  ------------------
 8705|    443|            goto exit;
 8706|    443|        }
 8707|  3.76k|    }
 8708|  27.4k|    if (insts[OVSINST_OFPIT11_CLEAR_ACTIONS]) {
  ------------------
  |  Branch (8708:9): [True: 298, False: 27.1k]
  ------------------
 8709|    298|        instruction_get_OFPIT11_CLEAR_ACTIONS(
 8710|    298|            insts[OVSINST_OFPIT11_CLEAR_ACTIONS]);
 8711|    298|        ofpact_put_CLEAR_ACTIONS(ofpacts);
 8712|    298|    }
 8713|  27.4k|    if (insts[OVSINST_OFPIT11_WRITE_ACTIONS]) {
  ------------------
  |  Branch (8713:9): [True: 14.5k, False: 12.8k]
  ------------------
 8714|  14.5k|        struct ofpact_nest *on;
 8715|  14.5k|        const struct ofp_action_header *actions;
 8716|  14.5k|        size_t actions_len;
 8717|  14.5k|        size_t start = ofpacts->size;
 8718|  14.5k|        ofpact_put(ofpacts, OFPACT_WRITE_ACTIONS,
 8719|  14.5k|                   offsetof(struct ofpact_nest, actions));
 8720|  14.5k|        get_actions_from_instruction(insts[OVSINST_OFPIT11_WRITE_ACTIONS],
 8721|  14.5k|                                     &actions, &actions_len);
 8722|  14.5k|        error = ofpacts_decode_for_action_set(actions, actions_len,
 8723|  14.5k|                                              version, vl_mff_map,
 8724|  14.5k|                                              ofpacts_tlv_bitmap, ofpacts);
 8725|  14.5k|        if (error) {
  ------------------
  |  Branch (8725:13): [True: 4.82k, False: 9.74k]
  ------------------
 8726|  4.82k|            goto exit;
 8727|  4.82k|        }
 8728|  9.74k|        on = ofpbuf_at_assert(ofpacts, start, sizeof *on);
 8729|  9.74k|        on->ofpact.len = ofpacts->size - start;
 8730|  9.74k|    }
 8731|  22.6k|    if (insts[OVSINST_OFPIT11_WRITE_METADATA]) {
  ------------------
  |  Branch (8731:9): [True: 281, False: 22.3k]
  ------------------
 8732|    281|        const struct ofp11_instruction_write_metadata *oiwm;
 8733|    281|        struct ofpact_metadata *om;
 8734|       |
 8735|    281|        oiwm = ALIGNED_CAST(const struct ofp11_instruction_write_metadata *,
  ------------------
  |  |  434|    281|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 8736|    281|                            insts[OVSINST_OFPIT11_WRITE_METADATA]);
 8737|       |
 8738|    281|        om = ofpact_put_WRITE_METADATA(ofpacts);
 8739|    281|        om->metadata = oiwm->metadata;
 8740|    281|        om->mask = oiwm->metadata_mask;
 8741|    281|    }
 8742|  22.6k|    if (insts[OVSINST_OFPIT11_GOTO_TABLE]) {
  ------------------
  |  Branch (8742:9): [True: 72, False: 22.5k]
  ------------------
 8743|     72|        const struct ofp11_instruction_goto_table *oigt;
 8744|     72|        struct ofpact_goto_table *ogt;
 8745|       |
 8746|     72|        oigt = instruction_get_OFPIT11_GOTO_TABLE(
 8747|     72|            insts[OVSINST_OFPIT11_GOTO_TABLE]);
 8748|     72|        ogt = ofpact_put_GOTO_TABLE(ofpacts);
 8749|     72|        ogt->table_id = oigt->table_id;
 8750|     72|    }
 8751|       |
 8752|  22.6k|    error = ofpacts_verify(ofpacts->data, ofpacts->size, version,
 8753|  22.6k|                           (1u << N_OVS_INSTRUCTIONS) - 1, 0, NULL);
 8754|  33.4k|exit:
 8755|  33.4k|    if (error) {
  ------------------
  |  Branch (8755:9): [True: 10.8k, False: 22.6k]
  ------------------
 8756|  10.8k|        ofpbuf_clear(ofpacts);
 8757|  10.8k|    }
 8758|  33.4k|    return error;
 8759|  22.6k|}
ofpact_check_output_port:
 8782|  28.9k|{
 8783|  28.9k|    switch (port) {
 8784|  2.86k|    case OFPP_IN_PORT:
  ------------------
  |  |   39|  2.86k|#define OFPP_IN_PORT    OFP_PORT_C(0xfff8) /* Where the packet came in. */
  |  |  ------------------
  |  |  |  |  157|  2.86k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8784:5): [True: 2.86k, False: 26.1k]
  ------------------
 8785|  5.64k|    case OFPP_TABLE:
  ------------------
  |  |   40|  5.64k|#define OFPP_TABLE      OFP_PORT_C(0xfff9) /* Perform actions in flow table. */
  |  |  ------------------
  |  |  |  |  157|  5.64k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8785:5): [True: 2.78k, False: 26.2k]
  ------------------
 8786|  6.58k|    case OFPP_NORMAL:
  ------------------
  |  |   41|  6.58k|#define OFPP_NORMAL     OFP_PORT_C(0xfffa) /* Process with normal L2/L3. */
  |  |  ------------------
  |  |  |  |  157|  6.58k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8786:5): [True: 938, False: 28.0k]
  ------------------
 8787|  8.30k|    case OFPP_FLOOD:
  ------------------
  |  |   42|  8.30k|#define OFPP_FLOOD      OFP_PORT_C(0xfffb) /* All ports except input port and
  |  |  ------------------
  |  |  |  |  157|  8.30k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8787:5): [True: 1.71k, False: 27.2k]
  ------------------
 8788|  9.39k|    case OFPP_ALL:
  ------------------
  |  |   44|  9.39k|#define OFPP_ALL        OFP_PORT_C(0xfffc) /* All ports except input port. */
  |  |  ------------------
  |  |  |  |  157|  9.39k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8788:5): [True: 1.09k, False: 27.9k]
  ------------------
 8789|  11.0k|    case OFPP_CONTROLLER:
  ------------------
  |  |   45|  11.0k|#define OFPP_CONTROLLER OFP_PORT_C(0xfffd) /* Send to controller. */
  |  |  ------------------
  |  |  |  |  157|  11.0k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8789:5): [True: 1.63k, False: 27.3k]
  ------------------
 8790|  11.2k|    case OFPP_LOCAL:
  ------------------
  |  |   46|  11.2k|#define OFPP_LOCAL      OFP_PORT_C(0xfffe) /* Local openflow "port". */
  |  |  ------------------
  |  |  |  |  157|  11.2k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8790:5): [True: 182, False: 28.8k]
  ------------------
 8791|  11.2k|        return 0;
 8792|       |
 8793|     14|    case OFPP_NONE:
  ------------------
  |  |   47|     14|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|     14|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8793:5): [True: 14, False: 28.9k]
  ------------------
 8794|     14|        return OFPERR_OFPBAC_BAD_OUT_PORT;
 8795|       |
 8796|  17.7k|    default:
  ------------------
  |  Branch (8796:5): [True: 17.7k, False: 11.2k]
  ------------------
 8797|  17.7k|        if (ofp_to_u16(port) < ofp_to_u16(max_ports)) {
  ------------------
  |  Branch (8797:13): [True: 17.1k, False: 610]
  ------------------
 8798|  17.1k|            return 0;
 8799|  17.1k|        }
 8800|    610|        return OFPERR_OFPBAC_BAD_OUT_PORT;
 8801|  28.9k|    }
 8802|  28.9k|}
ofpacts_check:
 8851|  53.9k|{
 8852|       |    /* Save fields that might temporarily be modified. */
 8853|  53.9k|    struct flow *flow = &cp->match->flow;
 8854|  53.9k|    ovs_be32 packet_type = flow->packet_type;
 8855|  53.9k|    ovs_be16 dl_type = flow->dl_type;
 8856|  53.9k|    uint8_t nw_proto = flow->nw_proto;
 8857|  53.9k|    union flow_vlan_hdr vlans[FLOW_MAX_VLAN_HEADERS];
 8858|  53.9k|    memcpy(vlans, flow->vlans, sizeof vlans);
 8859|       |
 8860|       |    /* Check all the actions. */
 8861|  53.9k|    cp->usable_protocols = OFPUTIL_P_ANY;
  ------------------
  |  |  100|  53.9k|#define OFPUTIL_P_ANY ((1 << 9) - 1)
  ------------------
 8862|  53.9k|    enum ofperr error = 0;
 8863|  53.9k|    struct ofpact *a;
 8864|   114k|    OFPACT_FOR_EACH (a, ofpacts, ofpacts_len) {
  ------------------
  |  |  261|   165k|    for ((POS) = (OFPACTS); (POS) < ofpact_end(OFPACTS, OFPACTS_LEN);  \
  |  |  ------------------
  |  |  |  Branch (261:29): [True: 114k, False: 50.3k]
  |  |  ------------------
  |  |  262|   111k|         (POS) = ofpact_next(POS))
  ------------------
 8865|   114k|        error = ofpact_check__(a, cp);
 8866|   114k|        if (error) {
  ------------------
  |  Branch (8866:13): [True: 3.60k, False: 111k]
  ------------------
 8867|  3.60k|            break;
 8868|  3.60k|        }
 8869|   114k|    }
 8870|       |
 8871|       |    /* Restore fields that may have been modified. */
 8872|  53.9k|    flow->packet_type = packet_type;
 8873|  53.9k|    flow->dl_type = dl_type;
 8874|  53.9k|    memcpy(flow->vlans, vlans, sizeof vlans);
 8875|  53.9k|    flow->nw_proto = nw_proto;
 8876|       |
 8877|  53.9k|    return error;
 8878|  53.9k|}
ofpacts_check_consistency:
 8886|  42.4k|{
 8887|  42.4k|    enum ofperr error = ofpacts_check(ofpacts, ofpacts_len, cp);
 8888|  42.4k|    if (!error && needed_protocols & ~cp->usable_protocols) {
  ------------------
  |  Branch (8888:9): [True: 39.8k, False: 2.57k]
  |  Branch (8888:19): [True: 1.67k, False: 38.2k]
  ------------------
 8889|  1.67k|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 8890|  1.67k|    }
 8891|  40.7k|    return error;
 8892|  42.4k|}
ofpact_get_mf_dst:
 8898|   128k|{
 8899|   128k|    if (ofpact->type == OFPACT_SET_FIELD) {
  ------------------
  |  Branch (8899:9): [True: 9.25k, False: 119k]
  ------------------
 8900|  9.25k|        const struct ofpact_set_field *orl;
 8901|       |
 8902|  9.25k|        orl = CONTAINER_OF(ofpact, struct ofpact_set_field, ofpact);
  ------------------
  |  |  124|  9.25k|        ((STRUCT *) (void *) ((char *) (POINTER) - offsetof (STRUCT, MEMBER)))
  ------------------
 8903|  9.25k|        return orl->field;
 8904|   119k|    } else if (ofpact->type == OFPACT_REG_MOVE) {
  ------------------
  |  Branch (8904:16): [True: 334, False: 119k]
  ------------------
 8905|    334|        const struct ofpact_reg_move *orm;
 8906|       |
 8907|    334|        orm = CONTAINER_OF(ofpact, struct ofpact_reg_move, ofpact);
  ------------------
  |  |  124|    334|        ((STRUCT *) (void *) ((char *) (POINTER) - offsetof (STRUCT, MEMBER)))
  ------------------
 8908|    334|        return orm->dst.field;
 8909|    334|    }
 8910|       |
 8911|   119k|    return NULL;
 8912|   128k|}
ofpact_bitmap_from_openflow:
 9265|  48.1k|{
 9266|  48.1k|    uint64_t ofpact_bitmap = 0;
 9267|  48.1k|    const struct ofpact_map *x;
 9268|       |
 9269|   753k|    for (x = get_ofpact_map(version); x->ofpat >= 0; x++) {
  ------------------
  |  Branch (9269:39): [True: 705k, False: 48.1k]
  ------------------
 9270|   705k|        if (ofpat_bitmap & htonl(1u << x->ofpat)) {
  ------------------
  |  Branch (9270:13): [True: 217k, False: 488k]
  ------------------
 9271|       |            ofpact_bitmap |= UINT64_C(1) << x->ofpact;
 9272|   217k|        }
 9273|   705k|    }
 9274|  48.1k|    return ofpact_bitmap;
 9275|  48.1k|}
ofpact_bitmap_format:
 9281|  25.0k|{
 9282|  25.0k|    if (!ofpacts_bitmap) {
  ------------------
  |  Branch (9282:9): [True: 805, False: 24.2k]
  ------------------
 9283|    805|        ds_put_cstr(s, "<none>");
 9284|  24.2k|    } else {
 9285|   143k|        while (ofpacts_bitmap) {
  ------------------
  |  Branch (9285:16): [True: 119k, False: 24.2k]
  ------------------
 9286|   119k|            ds_put_format(s, "%s ",
 9287|   119k|                          ofpact_name(rightmost_1bit_idx(ofpacts_bitmap)));
 9288|   119k|            ofpacts_bitmap = zero_rightmost_1bit(ofpacts_bitmap);
 9289|   119k|        }
 9290|  24.2k|        ds_chomp(s, ' ');
 9291|  24.2k|    }
 9292|  25.0k|}
ofpacts_format:
 9484|  85.9k|{
 9485|  85.9k|    if (!ofpacts_len) {
  ------------------
  |  Branch (9485:9): [True: 18.4k, False: 67.5k]
  ------------------
 9486|  18.4k|        ds_put_format(fp->s, "%sdrop%s", colors.drop, colors.end);
 9487|  67.5k|    } else {
 9488|  67.5k|        const struct ofpact *a;
 9489|       |
 9490|   137k|        OFPACT_FOR_EACH (a, ofpacts, ofpacts_len) {
  ------------------
  |  |  261|   204k|    for ((POS) = (OFPACTS); (POS) < ofpact_end(OFPACTS, OFPACTS_LEN);  \
  |  |  ------------------
  |  |  |  Branch (261:29): [True: 137k, False: 67.5k]
  |  |  ------------------
  |  |  262|   137k|         (POS) = ofpact_next(POS))
  ------------------
 9491|   137k|            if (a != ofpacts) {
  ------------------
  |  Branch (9491:17): [True: 69.7k, False: 67.5k]
  ------------------
 9492|  69.7k|                ds_put_char(fp->s, ',');
 9493|  69.7k|            }
 9494|       |
 9495|   137k|            ofpact_format(a, fp);
 9496|   137k|        }
 9497|  67.5k|    }
 9498|  85.9k|}
ofpact_put:
 9505|   249k|{
 9506|   249k|    struct ofpact *ofpact;
 9507|       |
 9508|   249k|    ofpacts->header = ofpbuf_put_uninit(ofpacts, len);
 9509|   249k|    ofpact = ofpacts->header;
 9510|   249k|    ofpact_init(ofpact, type, len);
 9511|   249k|    return ofpact;
 9512|   249k|}
ofpact_init:
 9517|   249k|{
 9518|   249k|    memset(ofpact, 0, len);
 9519|   249k|    ofpact->type = type;
 9520|   249k|    ofpact->raw = -1;
 9521|   249k|    ofpact->len = len;
 9522|   249k|}
ofpact_finish:
 9535|  60.7k|{
 9536|  60.7k|    ptrdiff_t len;
 9537|       |
 9538|  60.7k|    ovs_assert(ofpact == ofpacts->header);
  ------------------
  |  |   62|  60.7k|#define ovs_assert ovs_ignore
  ------------------
 9539|  60.7k|    len = (char *) ofpbuf_tail(ofpacts) - (char *) ofpact;
 9540|  60.7k|    ovs_assert(len > 0 && len <= UINT16_MAX);
  ------------------
  |  |   62|  60.7k|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (9540:16): [True: 60.7k, False: 0]
  |  Branch (9540:27): [True: 60.7k, False: 0]
  ------------------
 9541|  60.7k|    ofpact->len = len;
 9542|  60.7k|    ofpbuf_padto(ofpacts, OFPACT_ALIGN(ofpacts->size));
  ------------------
  |  |  205|  60.7k|#define OFPACT_ALIGN(SIZE) ROUND_UP(SIZE, OFPACT_ALIGNTO)
  |  |  ------------------
  |  |  |  |  303|  60.7k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|  60.7k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9543|       |
 9544|  60.7k|    return ofpacts->header;
 9545|  60.7k|}
ofpact_name:
 9713|   121k|{
 9714|   121k|    switch (type) {
  ------------------
  |  Branch (9714:13): [True: 121k, False: 0]
  ------------------
 9715|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
 9716|   121k|        OFPACTS
  ------------------
  |  |   64|  9.78k|    OFPACT(OUTPUT,          ofpact_output,      ofpact, "output")       \
  |  |  ------------------
  |  |  |  | 9715|  9.78k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 9.78k, False: 111k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   65|  9.78k|    OFPACT(GROUP,           ofpact_group,       ofpact, "group")        \
  |  |  ------------------
  |  |  |  | 9715|  6.77k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 6.77k, False: 114k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   66|  6.77k|    OFPACT(CONTROLLER,      ofpact_controller,  userdata, "controller") \
  |  |  ------------------
  |  |  |  | 9715|     31|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 31, False: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   67|    103|    OFPACT(ENQUEUE,         ofpact_enqueue,     ofpact, "enqueue")      \
  |  |  ------------------
  |  |  |  | 9715|    103|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 103, False: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   68|    103|    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: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   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: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   70|      0|                                                                        \
  |  |   71|      0|    /* Header changes. */                                               \
  |  |   72|  4.96k|    OFPACT(SET_FIELD,       ofpact_set_field,   ofpact, "set_field")    \
  |  |  ------------------
  |  |  |  | 9715|  4.96k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 4.96k, False: 116k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   73|  4.96k|    OFPACT(SET_VLAN_VID,    ofpact_vlan_vid,    ofpact, "set_vlan_vid") \
  |  |  ------------------
  |  |  |  | 9715|  4.53k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 4.53k, False: 117k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   74|  4.53k|    OFPACT(SET_VLAN_PCP,    ofpact_vlan_pcp,    ofpact, "set_vlan_pcp") \
  |  |  ------------------
  |  |  |  | 9715|  2.66k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 2.66k, False: 119k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   75|  7.48k|    OFPACT(STRIP_VLAN,      ofpact_null,        ofpact, "strip_vlan")   \
  |  |  ------------------
  |  |  |  | 9715|  7.48k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 7.48k, False: 114k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   76|  7.48k|    OFPACT(PUSH_VLAN,       ofpact_push_vlan,   ofpact, "push_vlan")    \
  |  |  ------------------
  |  |  |  | 9715|  7.20k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 7.20k, False: 114k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|  7.20k|    OFPACT(SET_ETH_SRC,     ofpact_mac,         ofpact, "mod_dl_src")   \
  |  |  ------------------
  |  |  |  | 9715|  2.54k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 2.54k, False: 119k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   78|  2.54k|    OFPACT(SET_ETH_DST,     ofpact_mac,         ofpact, "mod_dl_dst")   \
  |  |  ------------------
  |  |  |  | 9715|  2.27k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 2.27k, False: 119k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   79|  2.29k|    OFPACT(SET_IPV4_SRC,    ofpact_ipv4,        ofpact, "mod_nw_src")   \
  |  |  ------------------
  |  |  |  | 9715|  2.29k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 2.29k, False: 119k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   80|  2.46k|    OFPACT(SET_IPV4_DST,    ofpact_ipv4,        ofpact, "mod_nw_dst")   \
  |  |  ------------------
  |  |  |  | 9715|  2.46k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 2.46k, False: 119k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   81|  2.46k|    OFPACT(SET_IP_DSCP,     ofpact_dscp,        ofpact, "mod_nw_tos")   \
  |  |  ------------------
  |  |  |  | 9715|  2.35k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 2.35k, False: 119k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|  2.59k|    OFPACT(SET_IP_ECN,      ofpact_ecn,         ofpact, "mod_nw_ecn")   \
  |  |  ------------------
  |  |  |  | 9715|  2.59k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 2.59k, False: 119k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|  6.08k|    OFPACT(SET_IP_TTL,      ofpact_ip_ttl,      ofpact, "mod_nw_ttl")   \
  |  |  ------------------
  |  |  |  | 9715|  6.08k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 6.08k, False: 115k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   84|  6.08k|    OFPACT(SET_L4_SRC_PORT, ofpact_l4_port,     ofpact, "mod_tp_src")   \
  |  |  ------------------
  |  |  |  | 9715|  2.74k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 2.74k, False: 118k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   85|  2.74k|    OFPACT(SET_L4_DST_PORT, ofpact_l4_port,     ofpact, "mod_tp_dst")   \
  |  |  ------------------
  |  |  |  | 9715|  2.58k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 2.58k, False: 119k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   86|  2.58k|    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: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   87|      2|    OFPACT(STACK_PUSH,      ofpact_stack,       ofpact, "push")         \
  |  |  ------------------
  |  |  |  | 9715|      2|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 2, False: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   88|      2|    OFPACT(STACK_POP,       ofpact_stack,       ofpact, "pop")          \
  |  |  ------------------
  |  |  |  | 9715|      1|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 1, False: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|  10.4k|    OFPACT(DEC_TTL,         ofpact_cnt_ids,     cnt_ids, "dec_ttl")     \
  |  |  ------------------
  |  |  |  | 9715|  10.4k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 10.4k, False: 111k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|  10.4k|    OFPACT(SET_MPLS_LABEL,  ofpact_mpls_label,  ofpact, "set_mpls_label") \
  |  |  ------------------
  |  |  |  | 9715|  2.22k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 2.22k, False: 119k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   91|  2.40k|    OFPACT(SET_MPLS_TC,     ofpact_mpls_tc,     ofpact, "set_mpls_tc")  \
  |  |  ------------------
  |  |  |  | 9715|  2.40k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 2.40k, False: 119k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   92|  5.56k|    OFPACT(SET_MPLS_TTL,    ofpact_mpls_ttl,    ofpact, "set_mpls_ttl") \
  |  |  ------------------
  |  |  |  | 9715|  5.56k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 5.56k, False: 116k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   93|  9.08k|    OFPACT(DEC_MPLS_TTL,    ofpact_null,        ofpact, "dec_mpls_ttl") \
  |  |  ------------------
  |  |  |  | 9715|  9.08k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 9.08k, False: 112k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   94|  9.08k|    OFPACT(PUSH_MPLS,       ofpact_push_mpls,   ofpact, "push_mpls")    \
  |  |  ------------------
  |  |  |  | 9715|  7.74k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 7.74k, False: 113k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   95|  7.74k|    OFPACT(POP_MPLS,        ofpact_pop_mpls,    ofpact, "pop_mpls")     \
  |  |  ------------------
  |  |  |  | 9715|  6.36k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 6.36k, False: 115k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   96|  6.36k|    OFPACT(DEC_NSH_TTL,     ofpact_null,        ofpact, "dec_nsh_ttl")  \
  |  |  ------------------
  |  |  |  | 9715|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 0, False: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   97|      0|    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: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   98|      0|                                                                        \
  |  |   99|      0|    /* Generic encap & decap */                                         \
  |  |  100|    132|    OFPACT(ENCAP,           ofpact_encap,       props, "encap")         \
  |  |  ------------------
  |  |  |  | 9715|    132|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 132, False: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  101|    132|    OFPACT(DECAP,           ofpact_decap,       ofpact, "decap")        \
  |  |  ------------------
  |  |  |  | 9715|      7|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 7, False: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  102|      7|                                                                        \
  |  |  103|      7|    /* Metadata. */                                                     \
  |  |  104|    457|    OFPACT(SET_TUNNEL,      ofpact_tunnel,      ofpact, "set_tunnel")   \
  |  |  ------------------
  |  |  |  | 9715|    457|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 457, False: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  105|  6.36k|    OFPACT(SET_QUEUE,       ofpact_queue,       ofpact, "set_queue")    \
  |  |  ------------------
  |  |  |  | 9715|  6.36k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 6.36k, False: 115k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  106|  6.36k|    OFPACT(POP_QUEUE,       ofpact_null,        ofpact, "pop_queue")    \
  |  |  ------------------
  |  |  |  | 9715|    923|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 923, False: 120k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  107|    923|    OFPACT(FIN_TIMEOUT,     ofpact_fin_timeout, ofpact, "fin_timeout")  \
  |  |  ------------------
  |  |  |  | 9715|     12|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 12, False: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  108|     12|                                                                        \
  |  |  109|     12|    /* Flow table interaction. */                                       \
  |  |  110|     49|    OFPACT(RESUBMIT,        ofpact_resubmit,    ofpact, "resubmit")     \
  |  |  ------------------
  |  |  |  | 9715|     49|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 49, False: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  111|     49|    OFPACT(LEARN,           ofpact_learn,       specs, "learn")         \
  |  |  ------------------
  |  |  |  | 9715|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 0, False: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|      0|    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: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  113|      0|                                                                        \
  |  |  114|      0|    /* Arithmetic. */                                                   \
  |  |  115|      7|    OFPACT(MULTIPATH,       ofpact_multipath,   ofpact, "multipath")    \
  |  |  ------------------
  |  |  |  | 9715|      7|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 7, False: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  116|      7|                                                                        \
  |  |  117|      7|    /* Other. */                                                        \
  |  |  118|     21|    OFPACT(NOTE,            ofpact_note,        data, "note")           \
  |  |  ------------------
  |  |  |  | 9715|     21|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 21, False: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|     21|    OFPACT(EXIT,            ofpact_null,        ofpact, "exit")         \
  |  |  ------------------
  |  |  |  | 9715|      1|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 1, False: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  120|     21|    OFPACT(SAMPLE,          ofpact_sample,      ofpact, "sample")       \
  |  |  ------------------
  |  |  |  | 9715|     21|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 21, False: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|     21|    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: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  122|    261|    OFPACT(CT,              ofpact_conntrack,   ofpact, "ct")           \
  |  |  ------------------
  |  |  |  | 9715|    261|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 261, False: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  123|    261|    OFPACT(CT_CLEAR,        ofpact_null,        ofpact, "ct_clear")     \
  |  |  ------------------
  |  |  |  | 9715|     25|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 25, False: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  124|     27|    OFPACT(NAT,             ofpact_nat,         ofpact, "nat")          \
  |  |  ------------------
  |  |  |  | 9715|     27|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 27, False: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  125|     30|    OFPACT(OUTPUT_TRUNC,    ofpact_output_trunc,ofpact, "output_trunc") \
  |  |  ------------------
  |  |  |  | 9715|     30|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 30, False: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  126|     30|    OFPACT(CLONE,           ofpact_nest,        actions, "clone")       \
  |  |  ------------------
  |  |  |  | 9715|      2|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 2, False: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  127|      4|    OFPACT(CHECK_PKT_LARGER, ofpact_check_pkt_larger, ofpact,           \
  |  |  ------------------
  |  |  |  | 9715|      4|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 4, False: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  128|      4|           "check_pkt_larger")                                          \
  |  |  129|      4|                                                                        \
  |  |  130|      4|    /* Debugging actions.                                               \
  |  |  131|      4|     *                                                                  \
  |  |  132|      4|     * These are intentionally undocumented, subject to change, and     \
  |  |  133|      4|     * only accepted if ovs-vswitchd is started with --enable-dummy. */ \
  |  |  134|      4|    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: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  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: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  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: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  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: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  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: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  141|      0|    OFPACT(WRITE_METADATA,  ofpact_metadata,    ofpact, "write_metadata") \
  |  |  ------------------
  |  |  |  | 9715|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 0, False: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  142|      0|    OFPACT(GOTO_TABLE,      ofpact_goto_table,  ofpact, "goto_table")
  |  |  ------------------
  |  |  |  | 9715|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 0, False: 121k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9717|   121k|#undef OFPACT
 9718|   121k|    }
 9719|      0|    return "<unknown>";
 9720|   121k|}
ofp-actions.c:ofpacts_pull_openflow_actions__:
 8060|   172k|{
 8061|   172k|    const struct ofp_action_header *actions;
 8062|   172k|    enum ofperr error;
 8063|       |
 8064|   172k|    if (actions_len % OFP_ACTION_ALIGN != 0) {
  ------------------
  |  |  384|   172k|#define OFP_ACTION_ALIGN 8
  ------------------
  |  Branch (8064:9): [True: 5.99k, False: 166k]
  ------------------
 8065|  5.99k|        VLOG_WARN_RL(&rl, "OpenFlow message actions length %u is not a "
  ------------------
  |  |  224|  5.99k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  5.99k|    do {                                                                \
  |  |  |  |  288|  5.99k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  5.99k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 5.99k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  5.99k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 5.99k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8066|  5.99k|                     "multiple of %d", actions_len, OFP_ACTION_ALIGN);
 8067|  5.99k|        return OFPERR_OFPBRC_BAD_LEN;
 8068|  5.99k|    }
 8069|       |
 8070|   166k|    actions = ofpbuf_try_pull(openflow, actions_len);
 8071|   166k|    if (actions == NULL) {
  ------------------
  |  Branch (8071:9): [True: 1.55k, False: 165k]
  ------------------
 8072|  1.55k|        VLOG_WARN_RL(&rl, "OpenFlow message actions length %u exceeds "
  ------------------
  |  |  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]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8073|  1.55k|                     "remaining message length (%"PRIu32")",
 8074|  1.55k|                     actions_len, openflow->size);
 8075|  1.55k|        return OFPERR_OFPBRC_BAD_LEN;
 8076|  1.55k|    }
 8077|       |
 8078|   165k|    error = ofpacts_decode(actions, actions_len, version, vl_mff_map,
 8079|   165k|                           ofpacts_tlv_bitmap, ofpacts);
 8080|   165k|    if (!error) {
  ------------------
  |  Branch (8080:9): [True: 88.2k, False: 76.9k]
  ------------------
 8081|  88.2k|        error = ofpacts_verify(ofpacts->data, ofpacts->size, version,
 8082|  88.2k|                               allowed_ovsinsts, outer_action, NULL);
 8083|  88.2k|    }
 8084|   165k|    if (error) {
  ------------------
  |  Branch (8084:9): [True: 81.8k, False: 83.2k]
  ------------------
 8085|  81.8k|        ofpbuf_clear(ofpacts);
 8086|  81.8k|    }
 8087|   165k|    return error;
 8088|   166k|}
ofp-actions.c:action_set_classify:
 8189|  39.0k|{
 8190|  39.0k|    switch (a->type) {
 8191|      0|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
 8192|      0|        ACTION_SET_ORDER
  ------------------
  |  | 8140|  3.35k|    SLOT(OFPACT_STRIP_VLAN)                     \
  |  |  ------------------
  |  |  |  | 8191|  3.35k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 3.35k, False: 35.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8141|  3.79k|    SLOT(OFPACT_POP_MPLS)                       \
  |  |  ------------------
  |  |  |  | 8191|  3.79k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 3.79k, False: 35.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8142|  5.31k|    SLOT(OFPACT_DECAP)                          \
  |  |  ------------------
  |  |  |  | 8191|  5.31k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 5.31k, False: 33.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8143|  5.31k|    SLOT(OFPACT_ENCAP)                          \
  |  |  ------------------
  |  |  |  | 8191|  1.24k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 1.24k, False: 37.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8144|  6.51k|    SLOT(OFPACT_PUSH_MPLS)                      \
  |  |  ------------------
  |  |  |  | 8191|  6.51k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 6.51k, False: 32.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8145|  6.51k|    SLOT(OFPACT_PUSH_VLAN)                      \
  |  |  ------------------
  |  |  |  | 8191|  1.91k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 1.91k, False: 37.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8146|  2.12k|    SLOT(OFPACT_DEC_TTL)                        \
  |  |  ------------------
  |  |  |  | 8191|  2.12k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 2.12k, False: 36.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8147|  3.98k|    SLOT(OFPACT_DEC_MPLS_TTL)                   \
  |  |  ------------------
  |  |  |  | 8191|  3.98k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 3.98k, False: 35.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8148|  3.98k|    SLOT(OFPACT_DEC_NSH_TTL)
  |  |  ------------------
  |  |  |  | 8191|    673|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 673, False: 38.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8193|      0|#undef SLOT
 8194|       |
 8195|      0|#define FINAL(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
 8196|    673|        ACTION_SET_FINAL_PRIORITY
  ------------------
  |  | 8155|    285|    FINAL(OFPACT_CT)                            \
  |  |  ------------------
  |  |  |  | 8195|    285|#define FINAL(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8195:23): [True: 285, False: 38.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8156|    285|    FINAL(OFPACT_CT_CLEAR)                      \
  |  |  ------------------
  |  |  |  | 8195|     11|#define FINAL(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8195:23): [True: 11, False: 39.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8157|     17|    FINAL(OFPACT_RESUBMIT)                      \
  |  |  ------------------
  |  |  |  | 8195|     17|#define FINAL(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8195:23): [True: 17, False: 39.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8158|    471|    FINAL(OFPACT_OUTPUT)                        \
  |  |  ------------------
  |  |  |  | 8195|    471|#define FINAL(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8195:23): [True: 471, False: 38.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8159|    687|    FINAL(OFPACT_GROUP)
  |  |  ------------------
  |  |  |  | 8195|    687|#define FINAL(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8195:23): [True: 687, False: 38.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8197|      0|#undef FINAL
 8198|       |
 8199|     34|    case OFPACT_SET_FIELD:
  ------------------
  |  Branch (8199:5): [True: 34, False: 39.0k]
  ------------------
 8200|    278|    case OFPACT_REG_MOVE:
  ------------------
  |  Branch (8200:5): [True: 244, False: 38.8k]
  ------------------
 8201|    317|    case OFPACT_SET_ETH_DST:
  ------------------
  |  Branch (8201:5): [True: 39, False: 39.0k]
  ------------------
 8202|    394|    case OFPACT_SET_ETH_SRC:
  ------------------
  |  Branch (8202:5): [True: 77, False: 38.9k]
  ------------------
 8203|  1.02k|    case OFPACT_SET_IP_DSCP:
  ------------------
  |  Branch (8203:5): [True: 632, False: 38.4k]
  ------------------
 8204|  1.91k|    case OFPACT_SET_IP_ECN:
  ------------------
  |  Branch (8204:5): [True: 886, False: 38.1k]
  ------------------
 8205|  3.11k|    case OFPACT_SET_IP_TTL:
  ------------------
  |  Branch (8205:5): [True: 1.20k, False: 37.8k]
  ------------------
 8206|  3.33k|    case OFPACT_SET_IPV4_DST:
  ------------------
  |  Branch (8206:5): [True: 219, False: 38.8k]
  ------------------
 8207|  3.43k|    case OFPACT_SET_IPV4_SRC:
  ------------------
  |  Branch (8207:5): [True: 104, False: 38.9k]
  ------------------
 8208|  3.60k|    case OFPACT_SET_L4_DST_PORT:
  ------------------
  |  Branch (8208:5): [True: 172, False: 38.8k]
  ------------------
 8209|  3.98k|    case OFPACT_SET_L4_SRC_PORT:
  ------------------
  |  Branch (8209:5): [True: 377, False: 38.6k]
  ------------------
 8210|  4.47k|    case OFPACT_SET_MPLS_LABEL:
  ------------------
  |  Branch (8210:5): [True: 491, False: 38.5k]
  ------------------
 8211|  5.01k|    case OFPACT_SET_MPLS_TC:
  ------------------
  |  Branch (8211:5): [True: 533, False: 38.5k]
  ------------------
 8212|  6.13k|    case OFPACT_SET_MPLS_TTL:
  ------------------
  |  Branch (8212:5): [True: 1.12k, False: 37.9k]
  ------------------
 8213|  6.23k|    case OFPACT_SET_QUEUE:
  ------------------
  |  Branch (8213:5): [True: 102, False: 38.9k]
  ------------------
 8214|  6.24k|    case OFPACT_SET_TUNNEL:
  ------------------
  |  Branch (8214:5): [True: 9, False: 39.0k]
  ------------------
 8215|  7.67k|    case OFPACT_SET_VLAN_PCP:
  ------------------
  |  Branch (8215:5): [True: 1.42k, False: 37.6k]
  ------------------
 8216|  7.71k|    case OFPACT_SET_VLAN_VID:
  ------------------
  |  Branch (8216:5): [True: 43, False: 39.0k]
  ------------------
 8217|  7.71k|        return ACTION_SLOT_SET_OR_MOVE;
 8218|       |
 8219|      0|    case OFPACT_BUNDLE:
  ------------------
  |  Branch (8219:5): [True: 0, False: 39.0k]
  ------------------
 8220|      0|    case OFPACT_CLEAR_ACTIONS:
  ------------------
  |  Branch (8220:5): [True: 0, False: 39.0k]
  ------------------
 8221|      3|    case OFPACT_CLONE:
  ------------------
  |  Branch (8221:5): [True: 3, False: 39.0k]
  ------------------
 8222|     12|    case OFPACT_NAT:
  ------------------
  |  Branch (8222:5): [True: 9, False: 39.0k]
  ------------------
 8223|     17|    case OFPACT_CONTROLLER:
  ------------------
  |  Branch (8223:5): [True: 5, False: 39.0k]
  ------------------
 8224|     17|    case OFPACT_ENQUEUE:
  ------------------
  |  Branch (8224:5): [True: 0, False: 39.0k]
  ------------------
 8225|    176|    case OFPACT_EXIT:
  ------------------
  |  Branch (8225:5): [True: 159, False: 38.9k]
  ------------------
 8226|    176|    case OFPACT_UNROLL_XLATE:
  ------------------
  |  Branch (8226:5): [True: 0, False: 39.0k]
  ------------------
 8227|    240|    case OFPACT_FIN_TIMEOUT:
  ------------------
  |  Branch (8227:5): [True: 64, False: 38.9k]
  ------------------
 8228|    240|    case OFPACT_GOTO_TABLE:
  ------------------
  |  Branch (8228:5): [True: 0, False: 39.0k]
  ------------------
 8229|    252|    case OFPACT_LEARN:
  ------------------
  |  Branch (8229:5): [True: 12, False: 39.0k]
  ------------------
 8230|    252|    case OFPACT_CONJUNCTION:
  ------------------
  |  Branch (8230:5): [True: 0, False: 39.0k]
  ------------------
 8231|    792|    case OFPACT_METER:
  ------------------
  |  Branch (8231:5): [True: 540, False: 38.5k]
  ------------------
 8232|    793|    case OFPACT_MULTIPATH:
  ------------------
  |  Branch (8232:5): [True: 1, False: 39.0k]
  ------------------
 8233|    797|    case OFPACT_NOTE:
  ------------------
  |  Branch (8233:5): [True: 4, False: 39.0k]
  ------------------
 8234|    797|    case OFPACT_OUTPUT_REG:
  ------------------
  |  Branch (8234:5): [True: 0, False: 39.0k]
  ------------------
 8235|    955|    case OFPACT_OUTPUT_TRUNC:
  ------------------
  |  Branch (8235:5): [True: 158, False: 38.9k]
  ------------------
 8236|    956|    case OFPACT_POP_QUEUE:
  ------------------
  |  Branch (8236:5): [True: 1, False: 39.0k]
  ------------------
 8237|    956|    case OFPACT_SAMPLE:
  ------------------
  |  Branch (8237:5): [True: 0, False: 39.0k]
  ------------------
 8238|    957|    case OFPACT_STACK_POP:
  ------------------
  |  Branch (8238:5): [True: 1, False: 39.0k]
  ------------------
 8239|    957|    case OFPACT_STACK_PUSH:
  ------------------
  |  Branch (8239:5): [True: 0, False: 39.0k]
  ------------------
 8240|    957|    case OFPACT_WRITE_ACTIONS:
  ------------------
  |  Branch (8240:5): [True: 0, False: 39.0k]
  ------------------
 8241|    957|    case OFPACT_WRITE_METADATA:
  ------------------
  |  Branch (8241:5): [True: 0, False: 39.0k]
  ------------------
 8242|    957|    case OFPACT_DEBUG_RECIRC:
  ------------------
  |  Branch (8242:5): [True: 0, False: 39.0k]
  ------------------
 8243|    957|    case OFPACT_DEBUG_SLOW:
  ------------------
  |  Branch (8243:5): [True: 0, False: 39.0k]
  ------------------
 8244|    957|    case OFPACT_CHECK_PKT_LARGER:
  ------------------
  |  Branch (8244:5): [True: 0, False: 39.0k]
  ------------------
 8245|    957|    case OFPACT_DELETE_FIELD:
  ------------------
  |  Branch (8245:5): [True: 0, False: 39.0k]
  ------------------
 8246|    957|        return ACTION_SLOT_INVALID;
 8247|       |
 8248|      0|    default:
  ------------------
  |  Branch (8248:5): [True: 0, False: 39.0k]
  ------------------
 8249|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 8250|  39.0k|    }
 8251|  39.0k|}
ofp-actions.c:get_ovsinst_map:
 8482|  19.7k|{
 8483|       |    /* OpenFlow 1.1, 1.2, and 1.5 instructions. */
 8484|  19.7k|    static const struct ovsinst_map of11[] = {
 8485|  19.7k|        { OVSINST_OFPIT11_GOTO_TABLE, 1 },
 8486|  19.7k|        { OVSINST_OFPIT11_WRITE_METADATA, 2 },
 8487|  19.7k|        { OVSINST_OFPIT11_WRITE_ACTIONS, 3 },
 8488|  19.7k|        { OVSINST_OFPIT11_APPLY_ACTIONS, 4 },
 8489|  19.7k|        { OVSINST_OFPIT11_CLEAR_ACTIONS, 5 },
 8490|  19.7k|        { 0, -1 },
 8491|  19.7k|    };
 8492|       |
 8493|       |    /* OpenFlow 1.3 and 1.4 instructions. */
 8494|  19.7k|    static const struct ovsinst_map of13[] = {
 8495|  19.7k|        { OVSINST_OFPIT11_GOTO_TABLE, 1 },
 8496|  19.7k|        { OVSINST_OFPIT11_WRITE_METADATA, 2 },
 8497|  19.7k|        { OVSINST_OFPIT11_WRITE_ACTIONS, 3 },
 8498|  19.7k|        { OVSINST_OFPIT11_APPLY_ACTIONS, 4 },
 8499|  19.7k|        { OVSINST_OFPIT11_CLEAR_ACTIONS, 5 },
 8500|  19.7k|        { OVSINST_OFPIT13_METER, 6 },
 8501|  19.7k|        { 0, -1 },
 8502|  19.7k|    };
 8503|       |
 8504|  19.7k|    return version == OFP13_VERSION || version == OFP14_VERSION ? of13 : of11;
  ------------------
  |  Branch (8504:12): [True: 0, False: 19.7k]
  |  Branch (8504:40): [True: 0, False: 19.7k]
  ------------------
 8505|  19.7k|}
ofp-actions.c:decode_openflow11_instructions:
 8598|  32.7k|{
 8599|  32.7k|    const struct ofp11_instruction *inst;
 8600|  32.7k|    size_t left;
 8601|       |
 8602|  32.7k|    memset(out, 0, N_OVS_INSTRUCTIONS * sizeof *out);
 8603|  32.7k|    INSTRUCTION_FOR_EACH (inst, left, insts, n_insts) {
  ------------------
  |  | 8560|  32.7k|    for ((ITER) = (INSTRUCTIONS), (LEFT) = (N_INSTRUCTIONS);            \
  |  | 8561|  52.4k|         (LEFT) > 0 && instruction_is_valid(ITER, LEFT);                \
  |  |  ------------------
  |  |  |  Branch (8561:10): [True: 24.5k, False: 27.8k]
  |  |  |  Branch (8561:24): [True: 21.9k, False: 2.69k]
  |  |  ------------------
  |  | 8562|  32.7k|         ((LEFT) -= (ntohs((ITER)->len)                                 \
  |  | 8563|  19.7k|                     / sizeof(struct ofp11_instruction)),               \
  |  | 8564|  19.7k|          (ITER) = instruction_next(ITER)))
  ------------------
 8604|  21.9k|        enum ovs_instruction_type type;
 8605|  21.9k|        enum ofperr error;
 8606|       |
 8607|  21.9k|        error = decode_openflow11_instruction(inst, &type);
 8608|  21.9k|        if (error) {
  ------------------
  |  Branch (8608:13): [True: 1.73k, False: 20.1k]
  ------------------
 8609|  1.73k|            return error;
 8610|  1.73k|        }
 8611|       |
 8612|  20.1k|        if (type == OVSINST_OFPIT13_METER && version >= OFP15_VERSION) {
  ------------------
  |  Branch (8612:13): [True: 664, False: 19.5k]
  |  Branch (8612:46): [True: 304, False: 360]
  ------------------
 8613|       |            /* "meter" is an action, not an instruction, in OpenFlow 1.5. */
 8614|    304|            return OFPERR_OFPBIC_UNKNOWN_INST;
 8615|    304|        }
 8616|       |
 8617|  19.8k|        if (out[type]) {
  ------------------
  |  Branch (8617:13): [True: 144, False: 19.7k]
  ------------------
 8618|    144|            return OFPERR_OFPBIC_DUP_INST;
 8619|    144|        }
 8620|  19.7k|        out[type] = inst;
 8621|  19.7k|    }
 8622|       |
 8623|  30.5k|    if (left) {
  ------------------
  |  Branch (8623:9): [True: 2.69k, False: 27.8k]
  ------------------
 8624|  2.69k|        VLOG_WARN_RL(&rl, "bad instruction format at offset %"PRIuSIZE,
  ------------------
  |  |  224|  2.69k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  2.69k|    do {                                                                \
  |  |  |  |  288|  2.69k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  2.69k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 2.69k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  2.69k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 2.69k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8625|  2.69k|                     (n_insts - left) * sizeof *inst);
 8626|  2.69k|        return OFPERR_OFPBIC_BAD_LEN;
 8627|  2.69k|    }
 8628|  27.8k|    return 0;
 8629|  30.5k|}
ofp-actions.c:instruction_is_valid:
 8551|  24.5k|{
 8552|  24.5k|    uint16_t len = ntohs(inst->len);
 8553|  24.5k|    return (!(len % OFP11_INSTRUCTION_ALIGN)
  ------------------
  |  |  262|  24.5k|#define OFP11_INSTRUCTION_ALIGN 8
  ------------------
  |  Branch (8553:13): [True: 22.3k, False: 2.27k]
  ------------------
 8554|  22.3k|            && len >= sizeof *inst
  ------------------
  |  Branch (8554:16): [True: 22.1k, False: 170]
  ------------------
 8555|  22.1k|            && len / sizeof *inst <= n_instructions);
  ------------------
  |  Branch (8555:16): [True: 21.9k, False: 246]
  ------------------
 8556|  24.5k|}
ofp-actions.c:decode_openflow11_instruction:
 8569|  21.9k|{
 8570|  21.9k|    uint16_t len = ntohs(inst->len);
 8571|       |
 8572|  21.9k|    switch (inst->type) {
 8573|    116|    case CONSTANT_HTONS(OFPIT11_EXPERIMENTER):
  ------------------
  |  |   84|    116|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |   85|    116|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  ------------------
  |  Branch (8573:5): [True: 116, False: 21.7k]
  ------------------
 8574|    116|        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|    116|OVS_INSTRUCTIONS
  ------------------
  |  | 1344|    698|    DEFINE_INST(OFPIT13_METER,                              \
  |  |  ------------------
  |  |  |  | 8577|    698|        case CONSTANT_HTONS(ENUM):                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |   84|    698|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |  |  |  |  |   85|    698|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8577:9): [True: 698, False: 21.2k]
  |  |  |  |  ------------------
  |  |  |  | 8578|    698|            if (EXTENSIBLE                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8578:17): [Folded, False: 698]
  |  |  |  |  |  Branch (8578:17): [True: 664, False: 34]
  |  |  |  |  ------------------
  |  |  |  | 8579|    698|                ? len >= sizeof(struct STRUCT)          \
  |  |  |  | 8580|    698|                : len == sizeof(struct STRUCT)) {       \
  |  |  |  | 8581|    664|                *type = OVSINST_##ENUM;                 \
  |  |  |  | 8582|    664|                return 0;                               \
  |  |  |  | 8583|    664|            } else {                                    \
  |  |  |  | 8584|     34|                return OFPERR_OFPBIC_BAD_LEN;           \
  |  |  |  | 8585|     34|            }
  |  |  ------------------
  |  | 1345|    698|                ofp13_instruction_meter,          false,    \
  |  | 1346|    698|                "meter")                                    \
  |  | 1347|    698|                                                            \
  |  | 1348|  3.76k|    DEFINE_INST(OFPIT11_APPLY_ACTIONS,                      \
  |  |  ------------------
  |  |  |  | 8577|  3.76k|        case CONSTANT_HTONS(ENUM):                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |   84|  3.76k|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |  |  |  |  |   85|  3.76k|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8577:9): [True: 3.76k, False: 18.1k]
  |  |  |  |  ------------------
  |  |  |  | 8578|  3.76k|            if (EXTENSIBLE                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8578:17): [True: 3.76k, Folded]
  |  |  |  |  |  Branch (8578:17): [True: 3.76k, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 8579|  3.76k|                ? len >= sizeof(struct STRUCT)          \
  |  |  |  | 8580|  3.76k|                : len == sizeof(struct STRUCT)) {       \
  |  |  |  | 8581|  3.76k|                *type = OVSINST_##ENUM;                 \
  |  |  |  | 8582|  3.76k|                return 0;                               \
  |  |  |  | 8583|  3.76k|            } else {                                    \
  |  |  |  | 8584|      0|                return OFPERR_OFPBIC_BAD_LEN;           \
  |  |  |  | 8585|      0|            }
  |  |  ------------------
  |  | 1349|  3.76k|                ofp11_instruction_actions,        true,     \
  |  | 1350|  3.76k|                "apply_actions")                            \
  |  | 1351|  3.76k|                                                            \
  |  | 1352|  3.76k|    DEFINE_INST(OFPIT11_CLEAR_ACTIONS,                      \
  |  |  ------------------
  |  |  |  | 8577|    572|        case CONSTANT_HTONS(ENUM):                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |   84|    572|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |  |  |  |  |   85|    572|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8577:9): [True: 572, False: 21.3k]
  |  |  |  |  ------------------
  |  |  |  | 8578|    572|            if (EXTENSIBLE                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8578:17): [Folded, False: 572]
  |  |  |  |  |  Branch (8578:17): [True: 561, False: 11]
  |  |  |  |  ------------------
  |  |  |  | 8579|    572|                ? len >= sizeof(struct STRUCT)          \
  |  |  |  | 8580|    572|                : len == sizeof(struct STRUCT)) {       \
  |  |  |  | 8581|    561|                *type = OVSINST_##ENUM;                 \
  |  |  |  | 8582|    561|                return 0;                               \
  |  |  |  | 8583|    561|            } else {                                    \
  |  |  |  | 8584|     11|                return OFPERR_OFPBIC_BAD_LEN;           \
  |  |  |  | 8585|     11|            }
  |  |  ------------------
  |  | 1353|    572|                ofp11_instruction,                false,    \
  |  | 1354|    572|                "clear_actions")                            \
  |  | 1355|    572|                                                            \
  |  | 1356|  14.7k|    DEFINE_INST(OFPIT11_WRITE_ACTIONS,                      \
  |  |  ------------------
  |  |  |  | 8577|  14.7k|        case CONSTANT_HTONS(ENUM):                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |   84|  14.7k|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |  |  |  |  |   85|  14.7k|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8577:9): [True: 14.7k, False: 7.10k]
  |  |  |  |  ------------------
  |  |  |  | 8578|  14.7k|            if (EXTENSIBLE                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8578:17): [True: 14.7k, Folded]
  |  |  |  |  |  Branch (8578:17): [True: 14.7k, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 8579|  14.7k|                ? len >= sizeof(struct STRUCT)          \
  |  |  |  | 8580|  14.7k|                : len == sizeof(struct STRUCT)) {       \
  |  |  |  | 8581|  14.7k|                *type = OVSINST_##ENUM;                 \
  |  |  |  | 8582|  14.7k|                return 0;                               \
  |  |  |  | 8583|  14.7k|            } else {                                    \
  |  |  |  | 8584|      0|                return OFPERR_OFPBIC_BAD_LEN;           \
  |  |  |  | 8585|      0|            }
  |  |  ------------------
  |  | 1357|  14.7k|                ofp11_instruction_actions,        true,     \
  |  | 1358|  14.7k|                "write_actions")                            \
  |  | 1359|  14.7k|                                                            \
  |  | 1360|  14.7k|    DEFINE_INST(OFPIT11_WRITE_METADATA,                     \
  |  |  ------------------
  |  |  |  | 8577|    293|        case CONSTANT_HTONS(ENUM):                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |   84|    293|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |  |  |  |  |   85|    293|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8577:9): [True: 293, False: 21.6k]
  |  |  |  |  ------------------
  |  |  |  | 8578|    293|            if (EXTENSIBLE                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8578:17): [Folded, False: 293]
  |  |  |  |  |  Branch (8578:17): [True: 281, False: 12]
  |  |  |  |  ------------------
  |  |  |  | 8579|    293|                ? len >= sizeof(struct STRUCT)          \
  |  |  |  | 8580|    293|                : len == sizeof(struct STRUCT)) {       \
  |  |  |  | 8581|    281|                *type = OVSINST_##ENUM;                 \
  |  |  |  | 8582|    281|                return 0;                               \
  |  |  |  | 8583|    281|            } else {                                    \
  |  |  |  | 8584|     12|                return OFPERR_OFPBIC_BAD_LEN;           \
  |  |  |  | 8585|     12|            }
  |  |  ------------------
  |  | 1361|    293|                ofp11_instruction_write_metadata, false,    \
  |  | 1362|    293|                "write_metadata")                           \
  |  | 1363|    293|                                                            \
  |  | 1364|    293|    DEFINE_INST(OFPIT11_GOTO_TABLE,                         \
  |  |  ------------------
  |  |  |  | 8577|    216|        case CONSTANT_HTONS(ENUM):                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |   84|    216|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |  |  |  |  |   85|    216|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8577:9): [True: 216, False: 21.6k]
  |  |  |  |  ------------------
  |  |  |  | 8578|    216|            if (EXTENSIBLE                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8578:17): [Folded, False: 216]
  |  |  |  |  |  Branch (8578:17): [True: 94, False: 122]
  |  |  |  |  ------------------
  |  |  |  | 8579|    216|                ? len >= sizeof(struct STRUCT)          \
  |  |  |  | 8580|    216|                : len == sizeof(struct STRUCT)) {       \
  |  |  |  | 8581|     94|                *type = OVSINST_##ENUM;                 \
  |  |  |  | 8582|     94|                return 0;                               \
  |  |  |  | 8583|    122|            } else {                                    \
  |  |  |  | 8584|    122|                return OFPERR_OFPBIC_BAD_LEN;           \
  |  |  |  | 8585|    122|            }
  |  |  ------------------
  |  | 1365|    216|                ofp11_instruction_goto_table,     false,    \
  |  | 1366|    216|                "goto_table")
  ------------------
 8587|      0|#undef DEFINE_INST
 8588|       |
 8589|  1.43k|    default:
  ------------------
  |  Branch (8589:5): [True: 1.43k, False: 20.4k]
  ------------------
 8590|  1.43k|        return OFPERR_OFPBIC_UNKNOWN_INST;
 8591|  21.9k|    }
 8592|  21.9k|}
ofp-actions.c:instruction_next:
 8543|  19.7k|{
 8544|  19.7k|    return ((struct ofp11_instruction *) (void *)
 8545|       |            ((uint8_t *) inst + ntohs(inst->len)));
 8546|  19.7k|}
ofp-actions.c:get_actions_from_instruction:
 8635|  18.3k|{
 8636|  18.3k|    *actions = ALIGNED_CAST(const struct ofp_action_header *, inst + 1);
  ------------------
  |  |  434|  18.3k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 8637|       |    *actions_len = ntohs(inst->len) - sizeof *inst;
 8638|  18.3k|}
ofp-actions.c:ofpacts_decode:
 8029|   183k|{
 8030|   183k|    size_t bad_action_offset = 0;
 8031|   183k|    struct ofpbuf aligned_buf;
 8032|       |
 8033|   183k|    if (!OFPACT_IS_ALIGNED(actions)) {
  ------------------
  |  |  206|   183k|#define OFPACT_IS_ALIGNED(ADDR) ((uintptr_t) (ADDR) % OFPACT_ALIGNTO == 0)
  |  |  ------------------
  |  |  |  |  204|   183k|#define OFPACT_ALIGNTO 8
  |  |  ------------------
  ------------------
  |  Branch (8033:9): [True: 106k, False: 76.8k]
  ------------------
 8034|   106k|        ofpbuf_init(&aligned_buf, actions_len);
 8035|   106k|        ofpbuf_put(&aligned_buf, actions, actions_len);
 8036|   106k|    } else {
 8037|  76.8k|        ofpbuf_use_data(&aligned_buf, actions, actions_len);
 8038|  76.8k|    }
 8039|       |
 8040|   183k|    enum ofperr error
 8041|   183k|        = ofpacts_decode_aligned(&aligned_buf, ofp_version, vl_mff_map,
 8042|   183k|                                 ofpacts_tlv_bitmap, ofpacts,
 8043|   183k|                                 &bad_action_offset);
 8044|   183k|    if (error) {
  ------------------
  |  Branch (8044:9): [True: 81.2k, False: 102k]
  ------------------
 8045|  81.2k|        log_bad_action(actions, actions_len, bad_action_offset, error);
 8046|  81.2k|    }
 8047|   183k|    ofpbuf_uninit(&aligned_buf);
 8048|   183k|    return error;
 8049|   183k|}
ofp-actions.c:ofpacts_decode_aligned:
 7986|   183k|{
 7987|   183k|    size_t decoded_len = 0;
 7988|   183k|    enum ofperr error = 0;
 7989|       |
 7990|   183k|    ovs_assert(OFPACT_IS_ALIGNED(openflow->data));
  ------------------
  |  |   62|   183k|#define ovs_assert ovs_ignore
  ------------------
                  ovs_assert(OFPACT_IS_ALIGNED(openflow->data));
  ------------------
  |  |  206|   183k|#define OFPACT_IS_ALIGNED(ADDR) ((uintptr_t) (ADDR) % OFPACT_ALIGNTO == 0)
  |  |  ------------------
  |  |  |  |  204|   183k|#define OFPACT_ALIGNTO 8
  |  |  ------------------
  ------------------
 7991|   370k|    while (openflow->size) {
  ------------------
  |  Branch (7991:12): [True: 268k, False: 102k]
  ------------------
 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|   268k|        if (!OFPACT_IS_ALIGNED(openflow->data)) {
  ------------------
  |  |  206|   268k|#define OFPACT_IS_ALIGNED(ADDR) ((uintptr_t) (ADDR) % OFPACT_ALIGNTO == 0)
  |  |  ------------------
  |  |  |  |  204|   268k|#define OFPACT_ALIGNTO 8
  |  |  ------------------
  ------------------
  |  Branch (7998:13): [True: 0, False: 268k]
  ------------------
 7999|      0|            ofpbuf_align(openflow);
 8000|      0|        }
 8001|       |
 8002|   268k|        const struct ofp_action_header *action = openflow->data;
 8003|   268k|        enum ofp_raw_action_type raw;
 8004|   268k|        size_t act_len = 0;
 8005|   268k|        uint64_t arg;
 8006|       |
 8007|   268k|        error = ofpact_pull_raw(openflow, ofp_version, &raw, &arg, &act_len);
 8008|   268k|        if (!error) {
  ------------------
  |  Branch (8008:13): [True: 239k, False: 29.0k]
  ------------------
 8009|   239k|            error = ofpact_decode(action, raw, ofp_version, arg, vl_mff_map,
 8010|   239k|                                  ofpacts_tlv_bitmap, ofpacts);
 8011|   239k|        }
 8012|       |
 8013|   268k|        if (error) {
  ------------------
  |  Branch (8013:13): [True: 81.2k, False: 187k]
  ------------------
 8014|  81.2k|            *bad_action_offset = decoded_len;
 8015|  81.2k|            goto done;
 8016|  81.2k|        }
 8017|   187k|        decoded_len += act_len;
 8018|   187k|    }
 8019|       |
 8020|   183k|done:
 8021|   183k|    return error;
 8022|   183k|}
ofp-actions.c:ofpact_pull_raw:
 9903|   268k|{
 9904|   268k|    const struct ofp_action_header *oah = buf->data;
 9905|   268k|    const struct ofpact_raw_instance *action;
 9906|   268k|    unsigned int length;
 9907|   268k|    enum ofperr error;
 9908|       |
 9909|   268k|    *raw = *arg = *raw_len = 0;
 9910|   268k|    error = ofpact_decode_raw(ofp_version, oah, buf->size, &action);
 9911|   268k|    if (error) {
  ------------------
  |  Branch (9911:9): [True: 20.4k, False: 248k]
  ------------------
 9912|  20.4k|        return error;
 9913|  20.4k|    }
 9914|       |
 9915|   248k|    if (action->deprecation) {
  ------------------
  |  Branch (9915:9): [True: 12.2k, False: 235k]
  ------------------
 9916|  12.2k|        VLOG_INFO_RL(&rl, "%s is deprecated in %s (%s)",
  ------------------
  |  |  225|  12.2k|#define VLOG_INFO_RL(RL, ...) VLOG_RL(RL, VLL_INFO, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  12.2k|    do {                                                                \
  |  |  |  |  288|  12.2k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  12.2k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 12.2k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  12.2k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 12.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9917|  12.2k|                     action->name, ofputil_version_to_string(ofp_version),
 9918|  12.2k|                     action->deprecation);
 9919|  12.2k|    }
 9920|       |
 9921|   248k|    length = ntohs(oah->len);
 9922|   248k|    if (length > buf->size) {
  ------------------
  |  Branch (9922:9): [True: 3.74k, False: 244k]
  ------------------
 9923|  3.74k|        VLOG_WARN_RL(&rl, "OpenFlow action %s length %u exceeds action buffer "
  ------------------
  |  |  224|  3.74k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  3.74k|    do {                                                                \
  |  |  |  |  288|  3.74k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  3.74k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 3.74k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  3.74k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 3.74k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9924|  3.74k|                     "length %"PRIu32, action->name, length, buf->size);
 9925|  3.74k|        return OFPERR_OFPBAC_BAD_LEN;
 9926|  3.74k|    }
 9927|   244k|    if (length < action->min_length || length > action->max_length) {
  ------------------
  |  Branch (9927:9): [True: 2.02k, False: 242k]
  |  Branch (9927:40): [True: 1.44k, False: 240k]
  ------------------
 9928|  3.47k|        VLOG_WARN_RL(&rl, "OpenFlow action %s length %u not in valid range "
  ------------------
  |  |  224|  3.47k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  3.47k|    do {                                                                \
  |  |  |  |  288|  3.47k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  3.47k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 3.47k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  3.47k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 3.47k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9929|  3.47k|                     "[%hu,%hu]", action->name, length,
 9930|  3.47k|                     action->min_length, action->max_length);
 9931|  3.47k|        return OFPERR_OFPBAC_BAD_LEN;
 9932|  3.47k|    }
 9933|   240k|    if (length % 8) {
  ------------------
  |  Branch (9933:9): [True: 1.31k, False: 239k]
  ------------------
 9934|  1.31k|        VLOG_WARN_RL(&rl, "OpenFlow action %s length %u is not a multiple "
  ------------------
  |  |  224|  1.31k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.31k|    do {                                                                \
  |  |  |  |  288|  1.31k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.31k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.31k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.31k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.31k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9935|  1.31k|                     "of 8", action->name, length);
 9936|  1.31k|        return OFPERR_OFPBAC_BAD_LEN;
 9937|  1.31k|    }
 9938|       |
 9939|   239k|    *raw = action->raw;
 9940|   239k|    *arg = 0;
 9941|   239k|    if (action->arg_len) {
  ------------------
  |  Branch (9941:9): [True: 71.2k, False: 168k]
  ------------------
 9942|  71.2k|        const uint8_t *p;
 9943|  71.2k|        int i;
 9944|       |
 9945|  71.2k|        p = ofpbuf_at_assert(buf, action->arg_ofs, action->arg_len);
 9946|   225k|        for (i = 0; i < action->arg_len; i++) {
  ------------------
  |  Branch (9946:21): [True: 154k, False: 71.2k]
  ------------------
 9947|   154k|            *arg = (*arg << 8) | p[i];
 9948|   154k|        }
 9949|  71.2k|    }
 9950|       |
 9951|   239k|    ofpbuf_pull(buf, length);
 9952|   239k|    *raw_len = length;
 9953|       |
 9954|   239k|    return 0;
 9955|   240k|}
ofp-actions.c:ofpact_decode_raw:
 9850|   268k|{
 9851|   268k|    const struct ofpact_raw_instance *inst;
 9852|   268k|    struct ofpact_hdrs hdrs;
 9853|       |
 9854|   268k|    *instp = NULL;
 9855|   268k|    if (length < sizeof *oah) {
  ------------------
  |  Branch (9855:9): [True: 0, False: 268k]
  ------------------
 9856|      0|        return OFPERR_OFPBAC_BAD_LEN;
 9857|      0|    }
 9858|       |
 9859|       |    /* Get base action type. */
 9860|   268k|    if (oah->type == htons(OFPAT_VENDOR)) {
  ------------------
  |  Branch (9860:9): [True: 143k, False: 125k]
  ------------------
 9861|       |        /* Get vendor. */
 9862|   143k|        hdrs.vendor = ntohl(oah->vendor);
 9863|   143k|        if (hdrs.vendor == NX_VENDOR_ID || hdrs.vendor == ONF_VENDOR_ID) {
  ------------------
  |  |  110|   286k|#define NX_VENDOR_ID    0x00002320 /* Nicira. */
  ------------------
                      if (hdrs.vendor == NX_VENDOR_ID || hdrs.vendor == ONF_VENDOR_ID) {
  ------------------
  |  |  111|  9.16k|#define ONF_VENDOR_ID   0x4f4e4600 /* Open Networking Foundation. */
  ------------------
  |  Branch (9863:13): [True: 134k, False: 9.16k]
  |  Branch (9863:44): [True: 55, False: 9.10k]
  ------------------
 9864|       |            /* Get extension subtype. */
 9865|   134k|            const struct ext_action_header *nah;
 9866|       |
 9867|   134k|            nah = ALIGNED_CAST(const struct ext_action_header *, oah);
  ------------------
  |  |  434|   134k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 9868|   134k|            if (length < sizeof *nah) {
  ------------------
  |  Branch (9868:17): [True: 26, False: 134k]
  ------------------
 9869|     26|                return OFPERR_OFPBAC_BAD_LEN;
 9870|     26|            }
 9871|   134k|            hdrs.type = ntohs(nah->subtype);
 9872|   134k|        } else {
 9873|  9.10k|            VLOG_WARN_RL(&rl, "OpenFlow action has unknown vendor %#"PRIx32,
  ------------------
  |  |  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]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9874|  9.10k|                         hdrs.vendor);
 9875|  9.10k|            return OFPERR_OFPBAC_BAD_VENDOR;
 9876|  9.10k|        }
 9877|   143k|    } else {
 9878|   125k|        hdrs.vendor = 0;
 9879|   125k|        hdrs.type = ntohs(oah->type);
 9880|   125k|    }
 9881|       |
 9882|   259k|    hdrs.ofp_version = ofp_version;
 9883|   259k|    HMAP_FOR_EACH_WITH_HASH (inst, decode_node, ofpact_hdrs_hash(&hdrs),
  ------------------
  |  |  138|   259k|    for (INIT_MULTIVAR(NODE, MEMBER, hmap_first_with_hash(HMAP, HASH),        \
  |  |  ------------------
  |  |  |  |  171|   259k|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|   259k|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  139|   259k|                       struct hmap_node);                                     \
  |  |  140|   259k|         CONDITION_MULTIVAR(NODE, MEMBER, ITER_VAR(NODE) != NULL);            \
  |  |  ------------------
  |  |  |  |  185|   259k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 248k, False: 11.3k]
  |  |  |  |  |  Branch (185:6): [True: 248k, False: 11.3k]
  |  |  |  |  ------------------
  |  |  |  |  186|   259k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|   248k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|   248k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|   248k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|   259k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |  141|   259k|         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|   259k|                             ofpact_decode_hmap()) {
 9885|   248k|        if (ofpact_hdrs_equal(&hdrs, &inst->hdrs)) {
  ------------------
  |  Branch (9885:13): [True: 248k, False: 0]
  ------------------
 9886|   248k|            *instp = inst;
 9887|   248k|            return 0;
 9888|   248k|        }
 9889|   248k|    }
 9890|       |
 9891|  11.3k|    VLOG_WARN_RL(&rl, "unknown %s action for vendor %#"PRIx32" and "
  ------------------
  |  |  224|  11.3k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  11.3k|    do {                                                                \
  |  |  |  |  288|  11.3k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  11.3k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 11.3k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  11.3k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 11.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9892|  11.3k|                 "type %"PRIu16, ofputil_version_to_string(ofp_version),
 9893|  11.3k|                 hdrs.vendor, hdrs.type);
 9894|  11.3k|    return (hdrs.vendor
  ------------------
  |  Branch (9894:13): [True: 1.83k, False: 9.52k]
  ------------------
 9895|  11.3k|            ? OFPERR_OFPBAC_BAD_VENDOR_TYPE
 9896|  11.3k|            : OFPERR_OFPBAC_BAD_TYPE);
 9897|   259k|}
ofp-actions.c:ofpact_decode_hmap:
 9806|   259k|{
 9807|   259k|    static struct ovsthread_once once = OVSTHREAD_ONCE_INITIALIZER;
  ------------------
  |  |  134|   259k|    {                                           \
  |  |  135|   259k|        false,                                  \
  |  |  136|   259k|        OVS_MUTEX_INITIALIZER,                  \
  |  |  ------------------
  |  |  |  |   45|   259k|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|   259k|                                "<unlocked>" }
  |  |  ------------------
  |  |  137|   259k|    }
  ------------------
 9808|   259k|    static struct hmap hmap;
 9809|       |
 9810|   259k|    if (ovsthread_once_start(&once)) {
  ------------------
  |  Branch (9810:9): [True: 1, False: 259k]
  ------------------
 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|   259k|    return &hmap;
 9823|   259k|}
ofp-actions.c:ofpact_hdrs_hash:
 9797|   259k|{
 9798|   259k|    return hash_2words(hdrs->vendor,
 9799|   259k|                       ((uint32_t) hdrs->type << 16) | hdrs->ofp_version);
 9800|   259k|}
ofp-actions.c:ofpact_hdrs_equal:
 9789|   248k|{
 9790|   248k|    return (a->vendor == b->vendor
  ------------------
  |  Branch (9790:13): [True: 248k, False: 0]
  ------------------
 9791|   248k|            && a->type == b->type
  ------------------
  |  Branch (9791:16): [True: 248k, False: 0]
  ------------------
 9792|   248k|            && a->ofp_version == b->ofp_version);
  ------------------
  |  Branch (9792:16): [True: 248k, False: 0]
  ------------------
 9793|   248k|}
ofp-actions.c:decode_OFPAT_RAW10_OUTPUT:
  578|  9.50k|{
  579|  9.50k|    struct ofpact_output *output;
  580|       |
  581|  9.50k|    output = ofpact_put_OUTPUT(out);
  582|  9.50k|    output->port = u16_to_ofp(ntohs(oao->port));
  583|  9.50k|    output->max_len = ntohs(oao->max_len);
  584|       |
  585|  9.50k|    return ofpact_check_output_port(output->port, OFPP_MAX);
  ------------------
  |  |   33|  9.50k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|  9.50k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  586|  9.50k|}
ofp-actions.c:decode_OFPAT_RAW11_OUTPUT:
  592|  1.32k|{
  593|  1.32k|    struct ofpact_output *output;
  594|  1.32k|    enum ofperr error;
  595|       |
  596|  1.32k|    output = ofpact_put_OUTPUT(out);
  597|  1.32k|    output->max_len = ntohs(oao->max_len);
  598|       |
  599|  1.32k|    error = ofputil_port_from_ofp11(oao->port, &output->port);
  600|  1.32k|    if (error) {
  ------------------
  |  Branch (600:9): [True: 256, False: 1.07k]
  ------------------
  601|    256|        return error;
  602|    256|    }
  603|       |
  604|  1.07k|    return ofpact_check_output_port(output->port, OFPP_MAX);
  ------------------
  |  |   33|  1.07k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|  1.07k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  605|  1.32k|}
ofp-actions.c:decode_OFPAT_RAW10_SET_VLAN_VID:
 1575|  7.59k|{
 1576|       |    return decode_set_vlan_vid(vid, true, out);
 1577|  7.59k|}
ofp-actions.c:decode_set_vlan_vid:
 1560|  8.55k|{
 1561|  8.55k|    if (vid & ~0xfff) {
  ------------------
  |  Branch (1561:9): [True: 190, False: 8.36k]
  ------------------
 1562|    190|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 1563|  8.36k|    } else {
 1564|  8.36k|        struct ofpact_vlan_vid *vlan_vid = ofpact_put_SET_VLAN_VID(out);
 1565|  8.36k|        vlan_vid->vlan_vid = vid;
 1566|  8.36k|        vlan_vid->push_vlan_if_needed = push_vlan_if_needed;
 1567|  8.36k|        return 0;
 1568|  8.36k|    }
 1569|  8.55k|}
ofp-actions.c:decode_OFPAT_RAW10_SET_VLAN_PCP:
 1683|  3.45k|{
 1684|       |    return decode_set_vlan_pcp(pcp, true, out);
 1685|  3.45k|}
ofp-actions.c:decode_set_vlan_pcp:
 1668|  5.06k|{
 1669|  5.06k|    if (pcp & ~7) {
  ------------------
  |  Branch (1669:9): [True: 175, False: 4.89k]
  ------------------
 1670|    175|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 1671|  4.89k|    } else {
 1672|  4.89k|        struct ofpact_vlan_pcp *vlan_pcp = ofpact_put_SET_VLAN_PCP(out);
 1673|  4.89k|        vlan_pcp->vlan_pcp = pcp;
 1674|  4.89k|        vlan_pcp->push_vlan_if_needed = push_vlan_if_needed;
 1675|  4.89k|        return 0;
 1676|  4.89k|    }
 1677|  5.06k|}
ofp-actions.c:decode_OFPAT_RAW11_SET_VLAN_VID:
 1583|    956|{
 1584|       |    return decode_set_vlan_vid(vid, false, out);
 1585|    956|}
ofp-actions.c:decode_OFPAT_RAW11_SET_VLAN_PCP:
 1691|  1.61k|{
 1692|       |    return decode_set_vlan_pcp(pcp, false, out);
 1693|  1.61k|}
ofp-actions.c:decode_OFPAT_RAW11_PUSH_VLAN:
 1840|  2.62k|{
 1841|  2.62k|    struct ofpact_push_vlan *push_vlan;
 1842|  2.62k|    if (!eth_type_vlan(eth_type)) {
  ------------------
  |  Branch (1842:9): [True: 441, False: 2.18k]
  ------------------
 1843|    441|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 1844|    441|    }
 1845|  2.18k|    push_vlan = ofpact_put_PUSH_VLAN(out);
 1846|  2.18k|    push_vlan->ethertype = eth_type;
 1847|  2.18k|    return 0;
 1848|  2.62k|}
ofp-actions.c:decode_OFPAT_RAW10_STRIP_VLAN:
 1776|  5.07k|{
 1777|  5.07k|    ofpact_put_STRIP_VLAN(out)->ofpact.raw = OFPAT_RAW10_STRIP_VLAN;
 1778|  5.07k|    return 0;
 1779|  5.07k|}
ofp-actions.c:decode_OFPAT_RAW11_POP_VLAN:
 1783|  3.94k|{
 1784|  3.94k|    ofpact_put_STRIP_VLAN(out)->ofpact.raw = OFPAT_RAW11_POP_VLAN;
 1785|  3.94k|    return 0;
 1786|  3.94k|}
ofp-actions.c:decode_OFPAT_RAW_SET_DL_SRC:
 1919|     92|{
 1920|     92|    ofpact_put_SET_ETH_SRC(out)->mac = a->dl_addr;
 1921|     92|    return 0;
 1922|     92|}
ofp-actions.c:decode_OFPAT_RAW_SET_DL_DST:
 1928|    113|{
 1929|    113|    ofpact_put_SET_ETH_DST(out)->mac = a->dl_addr;
 1930|    113|    return 0;
 1931|    113|}
ofp-actions.c:decode_OFPAT_RAW_SET_NW_SRC:
 2015|  2.77k|{
 2016|  2.77k|    ofpact_put_SET_IPV4_SRC(out)->ipv4 = ipv4;
 2017|  2.77k|    return 0;
 2018|  2.77k|}
ofp-actions.c:decode_OFPAT_RAW_SET_NW_DST:
 2024|  6.49k|{
 2025|  6.49k|    ofpact_put_SET_IPV4_DST(out)->ipv4 = ipv4;
 2026|  6.49k|    return 0;
 2027|  6.49k|}
ofp-actions.c:decode_OFPAT_RAW_SET_NW_TOS:
 2117|  7.37k|{
 2118|  7.37k|    if (dscp & ~IP_DSCP_MASK) {
  ------------------
  |  |  724|  7.37k|#define IP_DSCP_MASK 0xfc
  ------------------
  |  Branch (2118:9): [True: 135, False: 7.23k]
  ------------------
 2119|    135|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 2120|  7.23k|    } else {
 2121|  7.23k|        ofpact_put_SET_IP_DSCP(out)->dscp = dscp;
 2122|  7.23k|        return 0;
 2123|  7.23k|    }
 2124|  7.37k|}
ofp-actions.c:decode_OFPAT_RAW11_SET_NW_ECN:
 2186|  2.29k|{
 2187|  2.29k|    if (ecn & ~IP_ECN_MASK) {
  ------------------
  |  |  722|  2.29k|#define IP_ECN_MASK 0x03
  ------------------
  |  Branch (2187:9): [True: 811, False: 1.48k]
  ------------------
 2188|    811|        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|  2.29k|}
ofp-actions.c:decode_OFPAT_RAW_SET_TP_SRC:
 2305|  6.36k|{
 2306|       |    ofpact_put_SET_L4_SRC_PORT(out)->port = ntohs(port);
 2307|  6.36k|    return 0;
 2308|  6.36k|}
ofp-actions.c:decode_OFPAT_RAW_SET_TP_DST:
 2314|  8.11k|{
 2315|       |    ofpact_put_SET_L4_DST_PORT(out)->port = ntohs(port);
 2316|  8.11k|    return 0;
 2317|  8.11k|}
ofp-actions.c:decode_OFPAT_RAW10_ENQUEUE:
 1094|    380|{
 1095|    380|    struct ofpact_enqueue *enqueue;
 1096|       |
 1097|    380|    enqueue = ofpact_put_ENQUEUE(out);
 1098|    380|    enqueue->port = u16_to_ofp(ntohs(oae->port));
 1099|    380|    enqueue->queue = ntohl(oae->queue_id);
 1100|    380|    if (ofp_to_u16(enqueue->port) >= ofp_to_u16(OFPP_MAX)
  ------------------
  |  |   33|    380|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|    380|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1100:9): [True: 326, False: 54]
  ------------------
 1101|    380|        && enqueue->port != OFPP_IN_PORT
  ------------------
  |  |   39|    326|#define OFPP_IN_PORT    OFP_PORT_C(0xfff8) /* Where the packet came in. */
  |  |  ------------------
  |  |  |  |  157|    706|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1101:12): [True: 229, False: 97]
  ------------------
 1102|    229|        && enqueue->port != OFPP_LOCAL) {
  ------------------
  |  |   46|    229|#define OFPP_LOCAL      OFP_PORT_C(0xfffe) /* Local openflow "port". */
  |  |  ------------------
  |  |  |  |  157|    229|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1102:12): [True: 14, False: 215]
  ------------------
 1103|     14|        return OFPERR_OFPBAC_BAD_OUT_PORT;
 1104|     14|    }
 1105|    366|    return 0;
 1106|    380|}
ofp-actions.c:decode_OFPAT_RAW_SET_MPLS_LABEL:
 3765|  2.17k|{
 3766|  2.17k|    ofpact_put_SET_MPLS_LABEL(out)->label = label;
 3767|  2.17k|    return 0;
 3768|  2.17k|}
ofp-actions.c:decode_OFPAT_RAW_SET_MPLS_TC:
 3838|    572|{
 3839|    572|    ofpact_put_SET_MPLS_TC(out)->tc = tc;
 3840|    572|    return 0;
 3841|    572|}
ofp-actions.c:decode_OFPAT_RAW_SET_MPLS_TTL:
 3899|  1.94k|{
 3900|  1.94k|    ofpact_put_SET_MPLS_TTL(out)->ttl = ttl;
 3901|  1.94k|    return 0;
 3902|  1.94k|}
ofp-actions.c:decode_OFPAT_RAW_DEC_MPLS_TTL:
 3955|  4.46k|{
 3956|  4.46k|    ofpact_put_DEC_MPLS_TTL(out);
 3957|  4.46k|    return 0;
 3958|  4.46k|}
ofp-actions.c:decode_OFPAT_RAW_PUSH_MPLS:
 3994|  6.98k|{
 3995|  6.98k|    struct ofpact_push_mpls *oam;
 3996|       |
 3997|  6.98k|    if (!eth_type_mpls(ethertype)) {
  ------------------
  |  Branch (3997:9): [True: 192, False: 6.79k]
  ------------------
 3998|    192|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 3999|    192|    }
 4000|  6.79k|    oam = ofpact_put_PUSH_MPLS(out);
 4001|  6.79k|    oam->ethertype = ethertype;
 4002|       |
 4003|  6.79k|    return 0;
 4004|  6.98k|}
ofp-actions.c:decode_OFPAT_RAW_POP_MPLS:
 4059|  4.70k|{
 4060|  4.70k|    ofpact_put_POP_MPLS(out)->ethertype = ethertype;
 4061|  4.70k|    return 0;
 4062|  4.70k|}
ofp-actions.c:decode_OFPAT_RAW_SET_QUEUE:
 4270|    692|{
 4271|    692|    ofpact_put_SET_QUEUE(out)->queue_id = queue_id;
 4272|    692|    return 0;
 4273|    692|}
ofp-actions.c:decode_OFPAT_RAW_GROUP:
  727|    748|{
  728|    748|    ofpact_put_GROUP(out)->group_id = group_id;
  729|    748|    return 0;
  730|    748|}
ofp-actions.c:decode_OFPAT_RAW11_SET_NW_TTL:
 2250|  1.22k|{
 2251|  1.22k|    ofpact_put_SET_IP_TTL(out)->ttl = ttl;
 2252|  1.22k|    return 0;
 2253|  1.22k|}
ofp-actions.c:decode_OFPAT_RAW_DEC_NW_TTL:
 3612|  2.80k|{
 3613|  2.80k|    uint16_t id = 0;
 3614|  2.80k|    struct ofpact_cnt_ids *ids;
 3615|  2.80k|    enum ofperr error = 0;
 3616|       |
 3617|  2.80k|    ids = ofpact_put_DEC_TTL(out);
 3618|  2.80k|    ids->n_controllers = 1;
 3619|  2.80k|    ofpbuf_put(out, &id, sizeof id);
 3620|  2.80k|    ids = out->header;
 3621|  2.80k|    ofpact_finish_DEC_TTL(out, &ids);
 3622|  2.80k|    return error;
 3623|  2.80k|}
ofp-actions.c:decode_NXAST_RAW_DEC_TTL_CNT_IDS:
 3629|  2.96k|{
 3630|  2.96k|    struct ofpact_cnt_ids *ids;
 3631|  2.96k|    size_t ids_size;
 3632|  2.96k|    int i;
 3633|       |
 3634|  2.96k|    ids = ofpact_put_DEC_TTL(out);
 3635|  2.96k|    ids->ofpact.raw = NXAST_RAW_DEC_TTL_CNT_IDS;
 3636|  2.96k|    ids->n_controllers = ntohs(nac_ids->n_controllers);
 3637|  2.96k|    ids_size = ntohs(nac_ids->len) - sizeof *nac_ids;
 3638|       |
 3639|  2.96k|    if (!is_all_zeros(nac_ids->zeros, sizeof nac_ids->zeros)) {
  ------------------
  |  Branch (3639:9): [True: 343, False: 2.62k]
  ------------------
 3640|    343|        return OFPERR_NXBRC_MUST_BE_ZERO;
 3641|    343|    }
 3642|       |
 3643|  2.62k|    if (ids_size < ids->n_controllers * sizeof(ovs_be16)) {
  ------------------
  |  Branch (3643:9): [True: 249, False: 2.37k]
  ------------------
 3644|    249|        VLOG_WARN_RL(&rl, "Nicira action dec_ttl_cnt_ids only has %"PRIuSIZE" "
  ------------------
  |  |  224|    249|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    249|    do {                                                                \
  |  |  |  |  288|    249|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    249|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 249]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    249|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 249]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3645|    249|                     "bytes allocated for controller ids.  %"PRIuSIZE" bytes "
 3646|    249|                     "are required for %u controllers.",
 3647|    249|                     ids_size, ids->n_controllers * sizeof(ovs_be16),
 3648|    249|                     ids->n_controllers);
 3649|    249|        return OFPERR_OFPBAC_BAD_LEN;
 3650|    249|    }
 3651|       |
 3652|  7.89k|    for (i = 0; i < ids->n_controllers; i++) {
  ------------------
  |  Branch (3652:17): [True: 5.52k, False: 2.37k]
  ------------------
 3653|  5.52k|        uint16_t id = ntohs(((ovs_be16 *)(nac_ids + 1))[i]);
 3654|  5.52k|        ofpbuf_put(out, &id, sizeof id);
 3655|  5.52k|        ids = out->header;
 3656|  5.52k|    }
 3657|       |
 3658|  2.37k|    ofpact_finish_DEC_TTL(out, &ids);
 3659|       |
 3660|  2.37k|    return 0;
 3661|  2.62k|}
ofp-actions.c:decode_OFPAT_RAW12_SET_FIELD:
 2850|  3.65k|{
 2851|       |    return decode_ofpat_set_field(oasf, false, vl_mff_map, tlv_bitmap,
 2852|  3.65k|                                  ofpacts);
 2853|  3.65k|}
ofp-actions.c:decode_ofpat_set_field:
 2789|  9.53k|{
 2790|  9.53k|    struct ofpbuf b = ofpbuf_const_initializer(oasf, ntohs(oasf->len));
 2791|  9.53k|    ofpbuf_pull(&b, OBJECT_OFFSETOF(oasf, pad));
  ------------------
  |  |  108|  9.53k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 2792|       |
 2793|  9.53k|    union mf_value value, mask;
 2794|  9.53k|    const struct mf_field *field;
 2795|  9.53k|    enum ofperr error;
 2796|  9.53k|    error  = mf_vl_mff_nx_pull_entry(&b, vl_mff_map, &field, &value,
 2797|  9.53k|                                     may_mask ? &mask : NULL, tlv_bitmap);
  ------------------
  |  Branch (2797:38): [True: 5.87k, False: 3.65k]
  ------------------
 2798|  9.53k|    if (error) {
  ------------------
  |  Branch (2798:9): [True: 886, False: 8.65k]
  ------------------
 2799|    886|        return (error == OFPERR_OFPBMC_BAD_MASK
  ------------------
  |  Branch (2799:17): [True: 167, False: 719]
  ------------------
 2800|    886|                ? OFPERR_OFPBAC_BAD_SET_MASK
 2801|    886|                : error);
 2802|    886|    }
 2803|       |
 2804|  8.65k|    if (!may_mask) {
  ------------------
  |  Branch (2804:9): [True: 3.05k, False: 5.59k]
  ------------------
 2805|  3.05k|        memset(&mask, 0xff, field->n_bytes);
 2806|  3.05k|    }
 2807|       |
 2808|  8.65k|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (2808:9): [True: 570, False: 8.08k]
  ------------------
 2809|    570|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2810|    570|    }
 2811|       |
 2812|       |    /* OpenFlow says specifically that one may not set OXM_OF_IN_PORT via
 2813|       |     * Set-Field. */
 2814|  8.08k|    if (field->id == MFF_IN_PORT_OXM) {
  ------------------
  |  Branch (2814:9): [True: 79, False: 8.00k]
  ------------------
 2815|     79|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2816|     79|    }
 2817|       |
 2818|       |    /* oxm_length is now validated to be compatible with mf_value. */
 2819|  8.00k|    if (!field->writable) {
  ------------------
  |  Branch (2819:9): [True: 203, False: 7.79k]
  ------------------
 2820|    203|        VLOG_WARN_RL(&rl, "destination field %s is not writable",
  ------------------
  |  |  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]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2821|    203|                     field->name);
 2822|    203|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2823|    203|    }
 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|  7.79k|    if (!mf_is_value_valid(field, &value)
  ------------------
  |  Branch (2828:9): [True: 70, False: 7.72k]
  ------------------
 2829|  7.72k|        || (field->id == MFF_VLAN_VID
  ------------------
  |  Branch (2829:13): [True: 819, False: 6.90k]
  ------------------
 2830|    819|            && (!(mask.be16 & htons(OFPVID12_PRESENT))
  ------------------
  |  Branch (2830:17): [True: 18, False: 801]
  ------------------
 2831|    855|                || !(value.be16 & htons(OFPVID12_PRESENT))))) {
  ------------------
  |  Branch (2831:20): [True: 767, False: 34]
  ------------------
 2832|    855|        struct ds ds = DS_EMPTY_INITIALIZER;
  ------------------
  |  |   46|    855|#define DS_EMPTY_INITIALIZER { NULL, 0, 0 }
  ------------------
 2833|    855|        mf_format(field, &value, NULL, NULL, &ds);
 2834|    855|        VLOG_WARN_RL(&rl, "Invalid value for set field %s: %s",
  ------------------
  |  |  224|    855|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    855|    do {                                                                \
  |  |  |  |  288|    855|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    855|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 855]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    855|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 855]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2835|    855|                     field->name, ds_cstr(&ds));
 2836|    855|        ds_destroy(&ds);
 2837|       |
 2838|    855|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2839|    855|    }
 2840|       |
 2841|  6.94k|    ofpact_put_set_field(ofpacts, field, &value, &mask);
 2842|  6.94k|    return 0;
 2843|  7.79k|}
ofp-actions.c:decode_OFPAT_RAW15_SET_FIELD:
 2860|  5.87k|{
 2861|       |    return decode_ofpat_set_field(oasf, true, vl_mff_map, tlv_bitmap, ofpacts);
 2862|  5.87k|}
ofp-actions.c:decode_NXAST_RAW_REG_LOAD:
 2869|  3.40k|{
 2870|  3.40k|    struct mf_subfield dst;
 2871|  3.40k|    enum ofperr error;
 2872|       |
 2873|  3.40k|    dst.ofs = nxm_decode_ofs(narl->ofs_nbits);
 2874|  3.40k|    dst.n_bits = nxm_decode_n_bits(narl->ofs_nbits);
 2875|  3.40k|    error = mf_vl_mff_mf_from_nxm_header(ntohl(narl->dst), vl_mff_map,
 2876|  3.40k|                                         &dst.field, tlv_bitmap);
 2877|  3.40k|    if (error) {
  ------------------
  |  Branch (2877:9): [True: 94, False: 3.30k]
  ------------------
 2878|     94|        return error;
 2879|     94|    }
 2880|       |
 2881|  3.30k|    error = mf_check_dst(&dst, NULL);
 2882|  3.30k|    if (error) {
  ------------------
  |  Branch (2882:9): [True: 138, False: 3.16k]
  ------------------
 2883|    138|        return error;
 2884|    138|    }
 2885|       |
 2886|       |    /* Reject 'narl' if a bit numbered 'n_bits' or higher is set to 1 in
 2887|       |     * narl->value. */
 2888|  3.16k|    if (dst.n_bits < 64 && ntohll(narl->value) >> dst.n_bits) {
  ------------------
  |  Branch (2888:9): [True: 2.88k, False: 288]
  |  Branch (2888:28): [True: 779, False: 2.10k]
  ------------------
 2889|    779|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 2890|    779|    }
 2891|       |
 2892|  2.39k|    struct ofpact_set_field *sf = ofpact_put_reg_load(out, dst.field, NULL,
 2893|  2.39k|                                                      NULL);
 2894|  2.39k|    bitwise_put(ntohll(narl->value),
 2895|  2.39k|                sf->value, dst.field->n_bytes, dst.ofs,
 2896|  2.39k|                dst.n_bits);
 2897|  2.39k|    bitwise_put(UINT64_MAX,
 2898|  2.39k|                ofpact_set_field_mask(sf), dst.field->n_bytes, dst.ofs,
  ------------------
  |  |  563|  2.39k|    ALIGNED_CAST(union mf_value *,                                          \
  |  |  ------------------
  |  |  |  |  434|  2.39k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  ------------------
  |  |  564|  2.39k|                 (uint8_t *)(SF)->value +                                   \
  |  |  565|  2.39k|                            ROUND_UP((SF)->field->n_bytes, OFPACT_ALIGNTO))
  ------------------
 2899|  2.39k|                dst.n_bits);
 2900|  2.39k|    return 0;
 2901|  3.16k|}
ofp-actions.c:decode_NXAST_RAW_REG_LOAD2:
 2908|  2.68k|{
 2909|  2.68k|    struct ofpbuf b = ofpbuf_const_initializer(eah, ntohs(eah->len));
 2910|  2.68k|    ofpbuf_pull(&b, OBJECT_OFFSETOF(eah, pad));
  ------------------
  |  |  108|  2.68k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 2911|       |
 2912|  2.68k|    union mf_value value, mask;
 2913|  2.68k|    const struct mf_field *field;
 2914|  2.68k|    enum ofperr error;
 2915|  2.68k|    error = mf_vl_mff_nx_pull_entry(&b, vl_mff_map, &field, &value, &mask,
 2916|  2.68k|                                    tlv_bitmap);
 2917|  2.68k|    if (error) {
  ------------------
  |  Branch (2917:9): [True: 108, False: 2.57k]
  ------------------
 2918|    108|        return error;
 2919|    108|    }
 2920|       |
 2921|  2.57k|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (2921:9): [True: 18, False: 2.55k]
  ------------------
 2922|     18|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2923|     18|    }
 2924|       |
 2925|  2.55k|    if (!field->writable) {
  ------------------
  |  Branch (2925:9): [True: 664, False: 1.89k]
  ------------------
 2926|    664|        VLOG_WARN_RL(&rl, "destination field %s is not writable", field->name);
  ------------------
  |  |  224|    664|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    664|    do {                                                                \
  |  |  |  |  288|    664|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    664|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 664]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    664|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 664]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2927|    664|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2928|    664|    }
 2929|       |
 2930|       |    /* Put value and mask. */
 2931|  1.89k|    ofpact_put_reg_load2(out, field, &value, &mask);
 2932|  1.89k|    return 0;
 2933|  2.55k|}
ofp-actions.c:decode_OFPAT_RAW15_COPY_FIELD:
 2610|  3.75k|{
 2611|  3.75k|    return decode_copy_field__(oacf->src_offset, oacf->dst_offset,
 2612|  3.75k|                               oacf->n_bits, oacf, oacf->len,
 2613|       |                               OBJECT_OFFSETOF(oacf, pad2), vl_mff_map,
  ------------------
  |  |  108|  3.75k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 2614|  3.75k|                               tlv_bitmap, ofpacts);
 2615|  3.75k|}
ofp-actions.c:decode_copy_field__:
 2574|  3.78k|{
 2575|  3.78k|    struct ofpact_reg_move *move = ofpact_put_REG_MOVE(ofpacts);
 2576|  3.78k|    enum ofperr error;
 2577|       |
 2578|  3.78k|    move->ofpact.raw = ONFACT_RAW13_COPY_FIELD;
 2579|  3.78k|    move->src.ofs = ntohs(src_offset);
 2580|  3.78k|    move->src.n_bits = ntohs(n_bits);
 2581|  3.78k|    move->dst.ofs = ntohs(dst_offset);
 2582|  3.78k|    move->dst.n_bits = ntohs(n_bits);
 2583|       |
 2584|  3.78k|    struct ofpbuf b = ofpbuf_const_initializer(action, ntohs(action_len));
 2585|  3.78k|    ofpbuf_pull(&b, oxm_offset);
 2586|       |
 2587|  3.78k|    error = mf_vl_mff_nx_pull_header(&b, vl_mff_map, &move->src.field, NULL,
 2588|  3.78k|                                     tlv_bitmap);
 2589|  3.78k|    if (error) {
  ------------------
  |  Branch (2589:9): [True: 715, False: 3.07k]
  ------------------
 2590|    715|        return error;
 2591|    715|    }
 2592|  3.07k|    error = mf_vl_mff_nx_pull_header(&b, vl_mff_map, &move->dst.field, NULL,
 2593|  3.07k|                                     tlv_bitmap);
 2594|  3.07k|    if (error) {
  ------------------
  |  Branch (2594:9): [True: 358, False: 2.71k]
  ------------------
 2595|    358|        return error;
 2596|    358|    }
 2597|       |
 2598|  2.71k|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (2598:9): [True: 692, False: 2.02k]
  ------------------
 2599|    692|        return OFPERR_NXBRC_MUST_BE_ZERO;
 2600|    692|    }
 2601|       |
 2602|  2.02k|    return nxm_reg_move_check(move, NULL);
 2603|  2.71k|}
ofp-actions.c:decode_ONFACT_RAW13_COPY_FIELD:
 2622|     34|{
 2623|     34|    return decode_copy_field__(oacf->src_offset, oacf->dst_offset,
 2624|     34|                               oacf->n_bits, oacf, oacf->len,
 2625|       |                               OBJECT_OFFSETOF(oacf, pad3), vl_mff_map,
  ------------------
  |  |  108|     34|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 2626|     34|                               tlv_bitmap, ofpacts);
 2627|     34|}
ofp-actions.c:decode_NXAST_RAW_REG_MOVE:
 2634|  3.69k|{
 2635|  3.69k|    struct ofpact_reg_move *move = ofpact_put_REG_MOVE(ofpacts);
 2636|  3.69k|    enum ofperr error;
 2637|       |
 2638|  3.69k|    move->ofpact.raw = NXAST_RAW_REG_MOVE;
 2639|  3.69k|    move->src.ofs = ntohs(narm->src_ofs);
 2640|  3.69k|    move->src.n_bits = ntohs(narm->n_bits);
 2641|  3.69k|    move->dst.ofs = ntohs(narm->dst_ofs);
 2642|  3.69k|    move->dst.n_bits = ntohs(narm->n_bits);
 2643|       |
 2644|  3.69k|    struct ofpbuf b = ofpbuf_const_initializer(narm, ntohs(narm->len));
 2645|  3.69k|    ofpbuf_pull(&b, sizeof *narm);
 2646|       |
 2647|  3.69k|    error = mf_vl_mff_nx_pull_header(&b, vl_mff_map, &move->src.field, NULL,
 2648|  3.69k|                                     tlv_bitmap);
 2649|  3.69k|    if (error) {
  ------------------
  |  Branch (2649:9): [True: 303, False: 3.38k]
  ------------------
 2650|    303|        return error;
 2651|    303|    }
 2652|       |
 2653|  3.38k|    error = mf_vl_mff_nx_pull_header(&b, vl_mff_map, &move->dst.field, NULL,
 2654|  3.38k|                                     tlv_bitmap);
 2655|  3.38k|    if (error) {
  ------------------
  |  Branch (2655:9): [True: 145, False: 3.24k]
  ------------------
 2656|    145|        return error;
 2657|    145|    }
 2658|       |
 2659|  3.24k|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (2659:9): [True: 35, False: 3.20k]
  ------------------
 2660|     35|        return OFPERR_NXBRC_MUST_BE_ZERO;
 2661|     35|    }
 2662|       |
 2663|  3.20k|    return nxm_reg_move_check(move, NULL);
 2664|  3.24k|}
ofp-actions.c:decode_OFPAT_RAW15_METER:
 7565|  1.11k|{
 7566|  1.11k|    struct ofpact_meter *om = ofpact_put_METER(out);
 7567|  1.11k|    om->meter_id = meter_id;
 7568|       |    om->provider_meter_id = UINT32_MAX; /* No provider meter ID. */
 7569|  1.11k|    return 0;
 7570|  1.11k|}
ofp-actions.c:decode_NXAST_RAW_RESUBMIT:
 4919|    437|{
 4920|    437|    struct ofpact_resubmit *resubmit;
 4921|       |
 4922|    437|    resubmit = ofpact_put_RESUBMIT(out);
 4923|    437|    resubmit->ofpact.raw = NXAST_RAW_RESUBMIT;
 4924|    437|    resubmit->in_port = u16_to_ofp(port);
 4925|    437|    resubmit->table_id = 0xff;
 4926|    437|    return 0;
 4927|    437|}
ofp-actions.c:decode_NXAST_RAW_RESUBMIT_TABLE:
 4933|  3.50k|{
 4934|  3.50k|    struct ofpact_resubmit *resubmit;
 4935|       |
 4936|  3.50k|    if (nar->pad[0] || nar->pad[1] || nar->pad[2]) {
  ------------------
  |  Branch (4936:9): [True: 212, False: 3.29k]
  |  Branch (4936:24): [True: 201, False: 3.09k]
  |  Branch (4936:39): [True: 975, False: 2.11k]
  ------------------
 4937|  1.38k|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 4938|  1.38k|    }
 4939|       |
 4940|  2.11k|    resubmit = ofpact_put_RESUBMIT(out);
 4941|  2.11k|    resubmit->ofpact.raw = NXAST_RAW_RESUBMIT_TABLE;
 4942|       |    resubmit->in_port = u16_to_ofp(ntohs(nar->in_port));
 4943|  2.11k|    resubmit->table_id = nar->table;
 4944|  2.11k|    return 0;
 4945|  3.50k|}
ofp-actions.c:decode_NXAST_RAW_RESUBMIT_TABLE_CT:
 4951|  3.09k|{
 4952|  3.09k|    enum ofperr error = decode_NXAST_RAW_RESUBMIT_TABLE(nar, ofp_version, out);
 4953|  3.09k|    if (error) {
  ------------------
  |  Branch (4953:9): [True: 1.05k, False: 2.04k]
  ------------------
 4954|  1.05k|        return error;
 4955|  1.05k|    }
 4956|  2.04k|    struct ofpact_resubmit *resubmit = out->header;
 4957|  2.04k|    resubmit->ofpact.raw = NXAST_RAW_RESUBMIT_TABLE_CT;
 4958|       |    resubmit->with_ct_orig = true;
 4959|  2.04k|    return 0;
 4960|  3.09k|}
ofp-actions.c:decode_NXAST_RAW_SET_TUNNEL:
 4111|    921|{
 4112|    921|    struct ofpact_tunnel *tunnel = ofpact_put_SET_TUNNEL(out);
 4113|    921|    tunnel->ofpact.raw = NXAST_RAW_SET_TUNNEL;
 4114|    921|    tunnel->tun_id = tun_id;
 4115|    921|    return 0;
 4116|    921|}
ofp-actions.c:decode_NXAST_RAW_SET_TUNNEL64:
 4122|     77|{
 4123|     77|    struct ofpact_tunnel *tunnel = ofpact_put_SET_TUNNEL(out);
 4124|     77|    tunnel->ofpact.raw = NXAST_RAW_SET_TUNNEL64;
 4125|     77|    tunnel->tun_id = tun_id;
 4126|     77|    return 0;
 4127|     77|}
ofp-actions.c:decode_NXAST_RAW_POP_QUEUE:
 4307|  1.18k|{
 4308|  1.18k|    ofpact_put_POP_QUEUE(out);
 4309|  1.18k|    return 0;
 4310|  1.18k|}
ofp-actions.c:decode_NXAST_RAW_NOTE:
 5899|  8.56k|{
 5900|  8.56k|    struct ofpact_note *note;
 5901|  8.56k|    unsigned int length;
 5902|       |
 5903|  8.56k|    length = ntohs(nan->len) - offsetof(struct nx_action_note, note);
 5904|  8.56k|    note = ofpact_put_NOTE(out);
 5905|  8.56k|    note->length = length;
 5906|  8.56k|    ofpbuf_put(out, nan->note, length);
 5907|  8.56k|    note = out->header;
 5908|  8.56k|    ofpact_finish_NOTE(out, &note);
 5909|       |
 5910|  8.56k|    return 0;
 5911|  8.56k|}
ofp-actions.c:decode_NXAST_RAW_MULTIPATH:
 5804|  5.43k|{
 5805|  5.43k|    uint32_t n_links = ntohs(nam->max_link) + 1;
 5806|  5.43k|    size_t min_n_bits = log_2_ceil(n_links);
 5807|  5.43k|    struct ofpact_multipath *mp;
 5808|  5.43k|    enum ofperr error;
 5809|       |
 5810|  5.43k|    mp = ofpact_put_MULTIPATH(out);
 5811|  5.43k|    mp->fields = ntohs(nam->fields);
 5812|  5.43k|    mp->basis = ntohs(nam->basis);
 5813|  5.43k|    mp->algorithm = ntohs(nam->algorithm);
 5814|  5.43k|    mp->max_link = ntohs(nam->max_link);
 5815|  5.43k|    mp->arg = ntohl(nam->arg);
 5816|  5.43k|    mp->dst.ofs = nxm_decode_ofs(nam->ofs_nbits);
 5817|  5.43k|    mp->dst.n_bits = nxm_decode_n_bits(nam->ofs_nbits);
 5818|  5.43k|    error = mf_vl_mff_mf_from_nxm_header(ntohl(nam->dst), vl_mff_map,
 5819|  5.43k|                                         &mp->dst.field, tlv_bitmap);
 5820|  5.43k|    if (error) {
  ------------------
  |  Branch (5820:9): [True: 343, False: 5.09k]
  ------------------
 5821|    343|        return error;
 5822|    343|    }
 5823|       |
 5824|  5.09k|    if (!flow_hash_fields_valid(mp->fields)) {
  ------------------
  |  Branch (5824:9): [True: 359, False: 4.73k]
  ------------------
 5825|    359|        VLOG_WARN_RL(&rl, "unsupported fields %d", (int) mp->fields);
  ------------------
  |  |  224|    359|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    359|    do {                                                                \
  |  |  |  |  288|    359|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    359|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 359]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    359|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 359]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5826|    359|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5827|  4.73k|    } else if (mp->algorithm != NX_MP_ALG_MODULO_N
  ------------------
  |  Branch (5827:16): [True: 4.52k, False: 212]
  ------------------
 5828|  4.52k|               && mp->algorithm != NX_MP_ALG_HASH_THRESHOLD
  ------------------
  |  Branch (5828:19): [True: 4.48k, False: 35]
  ------------------
 5829|  4.48k|               && mp->algorithm != NX_MP_ALG_HRW
  ------------------
  |  Branch (5829:19): [True: 3.96k, False: 520]
  ------------------
 5830|  3.96k|               && mp->algorithm != NX_MP_ALG_ITER_HASH) {
  ------------------
  |  Branch (5830:19): [True: 1.28k, False: 2.68k]
  ------------------
 5831|  1.28k|        VLOG_WARN_RL(&rl, "unsupported algorithm %d", (int) mp->algorithm);
  ------------------
  |  |  224|  1.28k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.28k|    do {                                                                \
  |  |  |  |  288|  1.28k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.28k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.28k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.28k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.28k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5832|  1.28k|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5833|  3.44k|    } else if (mp->dst.n_bits < min_n_bits) {
  ------------------
  |  Branch (5833:16): [True: 22, False: 3.42k]
  ------------------
 5834|     22|        VLOG_WARN_RL(&rl, "multipath action requires at least %"PRIuSIZE" bits for "
  ------------------
  |  |  224|     22|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     22|    do {                                                                \
  |  |  |  |  288|     22|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     22|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 22]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     22|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 22]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5835|     22|                     "%"PRIu32" links", min_n_bits, n_links);
 5836|     22|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5837|     22|    }
 5838|       |
 5839|  3.42k|    return multipath_check(mp, NULL);
 5840|  5.09k|}
ofp-actions.c:decode_NXAST_RAW_BUNDLE:
 1486|  2.91k|{
 1487|  2.91k|    return decode_bundle(false, nab, NULL, NULL, out);
 1488|  2.91k|}
ofp-actions.c:decode_bundle:
 1403|  4.77k|{
 1404|  4.77k|    static struct vlog_rate_limit rll = VLOG_RATE_LIMIT_INIT(1, 5);
  ------------------
  |  |  110|  4.77k|        {                                                                 \
  |  |  111|  4.77k|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|  19.1k|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [True: 0, Folded]
  |  |  |  |  |  Branch (37:48): [Folded, False: 4.77k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  4.77k|            0,                              /* first_dropped */           \
  |  |  113|  4.77k|            0,                              /* last_dropped */            \
  |  |  114|  4.77k|            0,                              /* n_dropped */               \
  |  |  115|  4.77k|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  4.77k|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  4.77k|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  4.77k|        }
  ------------------
 1405|  4.77k|    struct ofpact_bundle *bundle;
 1406|  4.77k|    uint32_t member_type;
 1407|  4.77k|    size_t members_size, i;
 1408|  4.77k|    enum ofperr error;
 1409|       |
 1410|  4.77k|    bundle = ofpact_put_BUNDLE(ofpacts);
 1411|       |
 1412|  4.77k|    bundle->n_members = ntohs(nab->n_members);
 1413|  4.77k|    bundle->basis = ntohs(nab->basis);
 1414|  4.77k|    bundle->fields = ntohs(nab->fields);
 1415|  4.77k|    bundle->algorithm = ntohs(nab->algorithm);
 1416|  4.77k|    member_type = ntohl(nab->member_type);
 1417|  4.77k|    members_size = ntohs(nab->len) - sizeof *nab;
 1418|       |
 1419|  4.77k|    error = OFPERR_OFPBAC_BAD_ARGUMENT;
 1420|  4.77k|    if (!flow_hash_fields_valid(bundle->fields)) {
  ------------------
  |  Branch (1420:9): [True: 1.81k, False: 2.96k]
  ------------------
 1421|  1.81k|        VLOG_WARN_RL(&rll, "unsupported fields %d", (int) bundle->fields);
  ------------------
  |  |  224|  1.81k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.81k|    do {                                                                \
  |  |  |  |  288|  1.81k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.81k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.81k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.81k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.81k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1422|  2.96k|    } else if (bundle->n_members > BUNDLE_MAX_MEMBERS) {
  ------------------
  |  |   43|  2.96k|#define BUNDLE_MAX_MEMBERS 2048
  ------------------
  |  Branch (1422:16): [True: 761, False: 2.20k]
  ------------------
 1423|    761|        VLOG_WARN_RL(&rll, "too many members");
  ------------------
  |  |  224|    761|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    761|    do {                                                                \
  |  |  |  |  288|    761|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    761|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 761]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    761|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 761]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1424|  2.20k|    } else if (bundle->algorithm != NX_BD_ALG_HRW
  ------------------
  |  Branch (1424:16): [True: 892, False: 1.30k]
  ------------------
 1425|    892|               && bundle->algorithm != NX_BD_ALG_ACTIVE_BACKUP) {
  ------------------
  |  Branch (1425:19): [True: 259, False: 633]
  ------------------
 1426|    259|        VLOG_WARN_RL(&rll, "unsupported algorithm %d", (int) bundle->algorithm);
  ------------------
  |  |  224|    259|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    259|    do {                                                                \
  |  |  |  |  288|    259|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    259|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 259]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    259|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 259]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1427|  1.94k|    } else if (member_type != mf_nxm_header(MFF_IN_PORT)) {
  ------------------
  |  Branch (1427:16): [True: 1.38k, False: 552]
  ------------------
 1428|  1.38k|        VLOG_WARN_RL(&rll, "unsupported member type %"PRIu32, member_type);
  ------------------
  |  |  224|  1.38k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.38k|    do {                                                                \
  |  |  |  |  288|  1.38k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.38k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.38k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.38k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.38k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1429|  1.38k|    } else {
 1430|    552|        error = 0;
 1431|    552|    }
 1432|       |
 1433|  4.77k|    if (!is_all_zeros(nab->zero, sizeof nab->zero)) {
  ------------------
  |  Branch (1433:9): [True: 3.72k, False: 1.05k]
  ------------------
 1434|  3.72k|        VLOG_WARN_RL(&rll, "reserved field is nonzero");
  ------------------
  |  |  224|  3.72k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  3.72k|    do {                                                                \
  |  |  |  |  288|  3.72k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  3.72k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 3.72k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  3.72k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 3.72k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1435|  3.72k|        error = OFPERR_OFPBAC_BAD_ARGUMENT;
 1436|  3.72k|    }
 1437|       |
 1438|  4.77k|    if (load) {
  ------------------
  |  Branch (1438:9): [True: 1.86k, False: 2.91k]
  ------------------
 1439|  1.86k|        bundle->dst.ofs = nxm_decode_ofs(nab->ofs_nbits);
 1440|  1.86k|        bundle->dst.n_bits = nxm_decode_n_bits(nab->ofs_nbits);
 1441|  1.86k|        error = mf_vl_mff_mf_from_nxm_header(ntohl(nab->dst), vl_mff_map,
 1442|  1.86k|                                             &bundle->dst.field, tlv_bitmap);
 1443|  1.86k|        if (error) {
  ------------------
  |  Branch (1443:13): [True: 175, False: 1.68k]
  ------------------
 1444|    175|            return error;
 1445|    175|        }
 1446|       |
 1447|  1.68k|        if (bundle->dst.n_bits < 16) {
  ------------------
  |  Branch (1447:13): [True: 80, False: 1.60k]
  ------------------
 1448|     80|            VLOG_WARN_RL(&rll, "bundle_load action requires at least 16 bit "
  ------------------
  |  |  224|     80|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     80|    do {                                                                \
  |  |  |  |  288|     80|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     80|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 80]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     80|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 80]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1449|     80|                         "destination.");
 1450|     80|            error = OFPERR_OFPBAC_BAD_ARGUMENT;
 1451|     80|        }
 1452|  2.91k|    } else {
 1453|  2.91k|        if (nab->ofs_nbits || nab->dst) {
  ------------------
  |  Branch (1453:13): [True: 2.08k, False: 831]
  |  Branch (1453:31): [True: 242, False: 589]
  ------------------
 1454|  2.32k|            VLOG_WARN_RL(&rll, "bundle action has nonzero reserved fields");
  ------------------
  |  |  224|  2.32k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  2.32k|    do {                                                                \
  |  |  |  |  288|  2.32k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  2.32k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 2.32k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  2.32k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 2.32k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1455|  2.32k|            error = OFPERR_OFPBAC_BAD_ARGUMENT;
 1456|  2.32k|        }
 1457|  2.91k|    }
 1458|       |
 1459|  4.60k|    if (members_size < bundle->n_members * sizeof(ovs_be16)) {
  ------------------
  |  Branch (1459:9): [True: 2.30k, False: 2.29k]
  ------------------
 1460|  2.30k|        VLOG_WARN_RL(&rll, "Nicira action %s only has %"PRIuSIZE" bytes "
  ------------------
  |  |  224|  2.30k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  2.30k|    do {                                                                \
  |  |  |  |  288|  2.30k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  2.30k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 2.30k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (290:56): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  2.30k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 2.30k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1461|  2.30k|                     "allocated for members.  %"PRIuSIZE" bytes are "
 1462|  2.30k|                     "required for %u members.",
 1463|  2.30k|                     load ? "bundle_load" : "bundle", members_size,
 1464|  2.30k|                     bundle->n_members * sizeof(ovs_be16), bundle->n_members);
 1465|  2.30k|        error = OFPERR_OFPBAC_BAD_LEN;
 1466|  2.30k|    } else {
 1467|  13.6k|        for (i = 0; i < bundle->n_members; i++) {
  ------------------
  |  Branch (1467:21): [True: 11.3k, False: 2.29k]
  ------------------
 1468|  11.3k|            ofp_port_t ofp_port
 1469|  11.3k|                = u16_to_ofp(ntohs(((ovs_be16 *)(nab + 1))[i]));
 1470|  11.3k|            ofpbuf_put(ofpacts, &ofp_port, sizeof ofp_port);
 1471|  11.3k|            bundle = ofpacts->header;
 1472|  11.3k|        }
 1473|  2.29k|    }
 1474|       |
 1475|  4.60k|    ofpact_finish_BUNDLE(ofpacts, &bundle);
 1476|  4.60k|    if (!error) {
  ------------------
  |  Branch (1476:9): [True: 2.12k, False: 2.47k]
  ------------------
 1477|  2.12k|        error = bundle_check(bundle, OFPP_MAX, NULL);
  ------------------
  |  |   33|  2.12k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|  2.12k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
 1478|  2.12k|    }
 1479|  4.60k|    return error;
 1480|  4.77k|}
ofp-actions.c:decode_NXAST_RAW_BUNDLE_LOAD:
 1495|  1.86k|{
 1496|       |    return decode_bundle(true, nab, vl_mff_map, tlv_bitmap, out);
 1497|  1.86k|}
ofp-actions.c:decode_NXAST_RAW_OUTPUT_REG:
 1226|    749|{
 1227|    749|    struct ofpact_output_reg *output_reg;
 1228|    749|    enum ofperr error;
 1229|       |
 1230|    749|    if (!is_all_zeros(naor->zero, sizeof naor->zero)) {
  ------------------
  |  Branch (1230:9): [True: 298, False: 451]
  ------------------
 1231|    298|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 1232|    298|    }
 1233|       |
 1234|    451|    output_reg = ofpact_put_OUTPUT_REG(out);
 1235|    451|    output_reg->ofpact.raw = NXAST_RAW_OUTPUT_REG;
 1236|    451|    output_reg->src.ofs = nxm_decode_ofs(naor->ofs_nbits);
 1237|    451|    output_reg->src.n_bits = nxm_decode_n_bits(naor->ofs_nbits);
 1238|    451|    output_reg->max_len = ntohs(naor->max_len);
 1239|    451|    error = mf_vl_mff_mf_from_nxm_header(ntohl(naor->src), vl_mff_map,
 1240|    451|                                         &output_reg->src.field, tlv_bitmap);
 1241|    451|    if (error) {
  ------------------
  |  Branch (1241:9): [True: 80, False: 371]
  ------------------
 1242|     80|        return error;
 1243|     80|    }
 1244|       |
 1245|    371|    return mf_check_src(&output_reg->src, NULL);
 1246|    451|}
ofp-actions.c:decode_NXAST_RAW_OUTPUT_REG2:
 1253|    240|{
 1254|    240|    struct ofpact_output_reg *output_reg;
 1255|    240|    enum ofperr error;
 1256|       |
 1257|    240|    output_reg = ofpact_put_OUTPUT_REG(out);
 1258|    240|    output_reg->ofpact.raw = NXAST_RAW_OUTPUT_REG2;
 1259|    240|    output_reg->src.ofs = nxm_decode_ofs(naor->ofs_nbits);
 1260|    240|    output_reg->src.n_bits = nxm_decode_n_bits(naor->ofs_nbits);
 1261|    240|    output_reg->max_len = ntohs(naor->max_len);
 1262|       |
 1263|    240|    struct ofpbuf b = ofpbuf_const_initializer(naor, ntohs(naor->len));
 1264|    240|    ofpbuf_pull(&b, OBJECT_OFFSETOF(naor, pad));
  ------------------
  |  |  108|    240|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 1265|       |
 1266|    240|    error = mf_vl_mff_nx_pull_header(&b, vl_mff_map, &output_reg->src.field,
 1267|    240|                                     NULL, tlv_bitmap);
 1268|    240|    if (error) {
  ------------------
  |  Branch (1268:9): [True: 80, False: 160]
  ------------------
 1269|     80|        return error;
 1270|     80|    }
 1271|       |
 1272|    160|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (1272:9): [True: 18, False: 142]
  ------------------
 1273|     18|        return OFPERR_NXBRC_MUST_BE_ZERO;
 1274|     18|    }
 1275|       |
 1276|    142|    return mf_check_src(&output_reg->src, NULL);
 1277|    160|}
ofp-actions.c:decode_NXAST_RAW_LEARN:
 5476|  22.7k|{
 5477|  22.7k|    struct ofpact_learn *learn;
 5478|  22.7k|    enum ofperr error;
 5479|       |
 5480|  22.7k|    learn = ofpact_put_LEARN(ofpacts);
 5481|       |
 5482|  22.7k|    error = decode_LEARN_common(nal, NXAST_RAW_LEARN, learn);
 5483|  22.7k|    if (error) {
  ------------------
  |  Branch (5483:9): [True: 1.27k, False: 21.5k]
  ------------------
 5484|  1.27k|        return error;
 5485|  1.27k|    }
 5486|       |
 5487|  21.5k|    if (learn->flags & ~(NX_LEARN_F_SEND_FLOW_REM |
  ------------------
  |  Branch (5487:9): [True: 478, False: 21.0k]
  ------------------
 5488|  21.5k|                         NX_LEARN_F_DELETE_LEARNED)) {
 5489|    478|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5490|    478|    }
 5491|       |
 5492|  21.0k|    return decode_LEARN_specs(nal + 1, (char *) nal + ntohs(nal->len),
 5493|  21.0k|                              vl_mff_map, tlv_bitmap, ofpacts);
 5494|  21.5k|}
ofp-actions.c:decode_LEARN_common:
 5365|  24.7k|{
 5366|  24.7k|    if (nal->pad) {
  ------------------
  |  Branch (5366:9): [True: 2.66k, False: 22.0k]
  ------------------
 5367|  2.66k|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5368|  2.66k|    }
 5369|       |
 5370|  22.0k|    learn->ofpact.raw = raw;
 5371|  22.0k|    learn->idle_timeout = ntohs(nal->idle_timeout);
 5372|  22.0k|    learn->hard_timeout = ntohs(nal->hard_timeout);
 5373|  22.0k|    learn->priority = ntohs(nal->priority);
 5374|  22.0k|    learn->cookie = nal->cookie;
 5375|  22.0k|    learn->table_id = nal->table_id;
 5376|  22.0k|    learn->fin_idle_timeout = ntohs(nal->fin_idle_timeout);
 5377|  22.0k|    learn->fin_hard_timeout = ntohs(nal->fin_hard_timeout);
 5378|  22.0k|    learn->flags = ntohs(nal->flags);
 5379|       |
 5380|  22.0k|    if (learn->table_id == 0xff) {
  ------------------
  |  Branch (5380:9): [True: 251, False: 21.8k]
  ------------------
 5381|    251|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5382|    251|    }
 5383|       |
 5384|  21.8k|    return 0;
 5385|  22.0k|}
ofp-actions.c:decode_LEARN_specs:
 5391|  21.1k|{
 5392|  21.1k|    struct ofpact_learn *learn = ofpacts->header;
 5393|       |
 5394|  58.8k|    while (p != end) {
  ------------------
  |  Branch (5394:12): [True: 49.6k, False: 9.22k]
  ------------------
 5395|  49.6k|        struct ofpact_learn_spec *spec;
 5396|  49.6k|        uint16_t header = ntohs(get_be16(&p));
 5397|       |
 5398|  49.6k|        if (!header) {
  ------------------
  |  Branch (5398:13): [True: 9.39k, False: 40.2k]
  ------------------
 5399|  9.39k|            break;
 5400|  9.39k|        }
 5401|       |
 5402|  40.2k|        spec = ofpbuf_put_zeros(ofpacts, sizeof *spec);
 5403|  40.2k|        learn = ofpacts->header;
 5404|       |
 5405|  40.2k|        spec->src_type = header & NX_LEARN_SRC_MASK;
  ------------------
  |  |  823|  40.2k|#define NX_LEARN_SRC_MASK      (1 << 13)
  ------------------
 5406|  40.2k|        spec->dst_type = header & NX_LEARN_DST_MASK;
  ------------------
  |  |  829|  40.2k|#define NX_LEARN_DST_MASK      (3 << 11)
  ------------------
 5407|  40.2k|        spec->n_bits = header & NX_LEARN_N_BITS_MASK;
  ------------------
  |  |  819|  40.2k|#define NX_LEARN_N_BITS_MASK    0x3ff
  ------------------
 5408|       |
 5409|       |        /* Check for valid src and dst type combination. */
 5410|  40.2k|        if (spec->dst_type == NX_LEARN_DST_MATCH ||
  ------------------
  |  |  825|  80.5k|#define NX_LEARN_DST_MATCH     (0 << 11) /* Add match criterion. */
  ------------------
  |  Branch (5410:13): [True: 38.0k, False: 2.22k]
  ------------------
 5411|  2.22k|            spec->dst_type == NX_LEARN_DST_LOAD ||
  ------------------
  |  |  826|  42.4k|#define NX_LEARN_DST_LOAD      (1 << 11) /* Add NXAST_REG_LOAD action. */
  ------------------
  |  Branch (5411:13): [True: 1.51k, False: 712]
  ------------------
 5412|    712|            (spec->dst_type == NX_LEARN_DST_OUTPUT &&
  ------------------
  |  |  827|  1.42k|#define NX_LEARN_DST_OUTPUT    (2 << 11) /* Add OFPAT_OUTPUT action. */
  ------------------
  |  Branch (5412:14): [True: 377, False: 335]
  ------------------
 5413|  39.8k|             spec->src_type == NX_LEARN_SRC_FIELD)) {
  ------------------
  |  |  821|    377|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
  |  Branch (5413:14): [True: 353, False: 24]
  ------------------
 5414|       |            /* OK. */
 5415|  39.8k|        } else {
 5416|    359|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 5417|    359|        }
 5418|       |
 5419|       |        /* Check that the arguments don't overrun the end of the action. */
 5420|  39.8k|        if ((char *) end - (char *) p < learn_min_len(header)) {
  ------------------
  |  Branch (5420:13): [True: 789, False: 39.1k]
  ------------------
 5421|    789|            return OFPERR_OFPBAC_BAD_LEN;
 5422|    789|        }
 5423|       |
 5424|       |        /* Get the source. */
 5425|  39.1k|        const uint8_t *imm = NULL;
 5426|  39.1k|        unsigned int imm_bytes = 0;
 5427|  39.1k|        enum ofperr error;
 5428|  39.1k|        if (spec->src_type == NX_LEARN_SRC_FIELD) {
  ------------------
  |  |  821|  39.1k|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
  |  Branch (5428:13): [True: 644, False: 38.4k]
  ------------------
 5429|    644|            error = get_subfield(spec->n_bits, &p, &spec->src, vl_mff_map,
 5430|    644|                                 tlv_bitmap);
 5431|    644|            if (error) {
  ------------------
  |  Branch (5431:17): [True: 226, False: 418]
  ------------------
 5432|    226|                return error;
 5433|    226|            }
 5434|  38.4k|        } else {
 5435|  38.4k|            int p_bytes = 2 * DIV_ROUND_UP(spec->n_bits, 16);
  ------------------
  |  |  300|  38.4k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  ------------------
 5436|  38.4k|            p = (const uint8_t *) p + p_bytes;
 5437|       |
 5438|  38.4k|            imm_bytes = DIV_ROUND_UP(spec->n_bits, 8);
  ------------------
  |  |  300|  38.4k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  ------------------
 5439|  38.4k|            imm = (const uint8_t *) p - imm_bytes;
 5440|  38.4k|        }
 5441|       |
 5442|       |        /* Get the destination. */
 5443|  38.8k|        if (spec->dst_type == NX_LEARN_DST_MATCH ||
  ------------------
  |  |  825|  77.7k|#define NX_LEARN_DST_MATCH     (0 << 11) /* Add match criterion. */
  ------------------
  |  Branch (5443:13): [True: 37.3k, False: 1.55k]
  ------------------
 5444|  38.6k|            spec->dst_type == NX_LEARN_DST_LOAD) {
  ------------------
  |  |  826|  1.55k|#define NX_LEARN_DST_LOAD      (1 << 11) /* Add NXAST_REG_LOAD action. */
  ------------------
  |  Branch (5444:13): [True: 1.30k, False: 254]
  ------------------
 5445|  38.6k|            error = get_subfield(spec->n_bits, &p, &spec->dst, vl_mff_map,
 5446|  38.6k|                                 tlv_bitmap);
 5447|  38.6k|            if (error) {
  ------------------
  |  Branch (5447:17): [True: 1.18k, False: 37.4k]
  ------------------
 5448|  1.18k|                return error;
 5449|  1.18k|            }
 5450|  38.6k|        }
 5451|       |
 5452|  37.6k|        if (imm) {
  ------------------
  |  Branch (5452:13): [True: 37.2k, False: 399]
  ------------------
 5453|  37.2k|            uint8_t *src_imm = ofpbuf_put_zeros(ofpacts,
 5454|  37.2k|                                                OFPACT_ALIGN(imm_bytes));
  ------------------
  |  |  205|  37.2k|#define OFPACT_ALIGN(SIZE) ROUND_UP(SIZE, OFPACT_ALIGNTO)
  |  |  ------------------
  |  |  |  |  303|  37.2k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|  37.2k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5455|  37.2k|            memcpy(src_imm, imm, imm_bytes);
 5456|       |
 5457|  37.2k|            learn = ofpacts->header;
 5458|  37.2k|        }
 5459|  37.6k|    }
 5460|  18.6k|    ofpact_finish_LEARN(ofpacts, &learn);
 5461|       |
 5462|  18.6k|    if (!is_all_zeros(p, (char *) end - (char *) p)) {
  ------------------
  |  Branch (5462:9): [True: 207, False: 18.4k]
  ------------------
 5463|    207|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5464|    207|    }
 5465|       |
 5466|  18.4k|    return 0;
 5467|  18.6k|}
ofp-actions.c:get_be16:
 5309|  88.9k|{
 5310|  88.9k|    const ovs_be16 *p = *pp;
 5311|  88.9k|    ovs_be16 value = *p;
 5312|  88.9k|    *pp = p + 1;
 5313|  88.9k|    return value;
 5314|  88.9k|}
ofp-actions.c:learn_min_len:
 5340|  39.8k|{
 5341|  39.8k|    int n_bits = header & NX_LEARN_N_BITS_MASK;
  ------------------
  |  |  819|  39.8k|#define NX_LEARN_N_BITS_MASK    0x3ff
  ------------------
 5342|  39.8k|    int src_type = header & NX_LEARN_SRC_MASK;
  ------------------
  |  |  823|  39.8k|#define NX_LEARN_SRC_MASK      (1 << 13)
  ------------------
 5343|  39.8k|    int dst_type = header & NX_LEARN_DST_MASK;
  ------------------
  |  |  829|  39.8k|#define NX_LEARN_DST_MASK      (3 << 11)
  ------------------
 5344|  39.8k|    unsigned int min_len;
 5345|       |
 5346|  39.8k|    min_len = 0;
 5347|  39.8k|    if (src_type == NX_LEARN_SRC_FIELD) {
  ------------------
  |  |  821|  39.8k|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
  |  Branch (5347:9): [True: 1.05k, False: 38.8k]
  ------------------
 5348|  1.05k|        min_len += sizeof(ovs_be32); /* src_field */
 5349|  1.05k|        min_len += sizeof(ovs_be16); /* src_ofs */
 5350|  38.8k|    } else {
 5351|  38.8k|        min_len += 2 * DIV_ROUND_UP(n_bits, 16);
  ------------------
  |  |  300|  38.8k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  ------------------
 5352|  38.8k|    }
 5353|  39.8k|    if (dst_type == NX_LEARN_DST_MATCH ||
  ------------------
  |  |  825|  79.7k|#define NX_LEARN_DST_MATCH     (0 << 11) /* Add match criterion. */
  ------------------
  |  Branch (5353:9): [True: 38.0k, False: 1.86k]
  ------------------
 5354|  39.5k|        dst_type == NX_LEARN_DST_LOAD) {
  ------------------
  |  |  826|  1.86k|#define NX_LEARN_DST_LOAD      (1 << 11) /* Add NXAST_REG_LOAD action. */
  ------------------
  |  Branch (5354:9): [True: 1.51k, False: 353]
  ------------------
 5355|  39.5k|        min_len += sizeof(ovs_be32); /* dst_field */
 5356|  39.5k|        min_len += sizeof(ovs_be16); /* dst_ofs */
 5357|  39.5k|    }
 5358|  39.8k|    return min_len;
 5359|  39.8k|}
ofp-actions.c:get_subfield:
 5328|  39.2k|{
 5329|  39.2k|    enum ofperr error;
 5330|       |
 5331|  39.2k|    error = mf_vl_mff_mf_from_nxm_header(ntohl(get_be32(p)), vl_mff_map,
 5332|  39.2k|                                         &sf->field, tlv_bitmap);
 5333|       |    sf->ofs = ntohs(get_be16(p));
 5334|  39.2k|    sf->n_bits = n_bits;
 5335|  39.2k|    return error;
 5336|  39.2k|}
ofp-actions.c:get_be32:
 5318|  39.2k|{
 5319|  39.2k|    const ovs_be32 *p = *pp;
 5320|  39.2k|    ovs_be32 value = get_unaligned_be32(p);
 5321|  39.2k|    *pp = p + 1;
 5322|  39.2k|    return value;
 5323|  39.2k|}
ofp-actions.c:decode_NXAST_RAW_LEARN2:
 5503|  2.65k|{
 5504|  2.65k|    struct ofpbuf b = ofpbuf_const_initializer(nal, ntohs(nal->up.len));
 5505|  2.65k|    struct ofpact_learn *learn;
 5506|  2.65k|    enum ofperr error;
 5507|       |
 5508|  2.65k|    if (nal->pad2) {
  ------------------
  |  Branch (5508:9): [True: 706, False: 1.94k]
  ------------------
 5509|    706|        return OFPERR_NXBAC_MUST_BE_ZERO;
 5510|    706|    }
 5511|       |
 5512|  1.94k|    learn = ofpact_put_LEARN(ofpacts);
 5513|  1.94k|    error = decode_LEARN_common(&nal->up, NXAST_RAW_LEARN2, learn);
 5514|  1.94k|    if (error) {
  ------------------
  |  Branch (5514:9): [True: 1.64k, False: 304]
  ------------------
 5515|  1.64k|        return error;
 5516|  1.64k|    }
 5517|       |
 5518|    304|    learn->limit = ntohl(nal->limit);
 5519|       |
 5520|    304|    if (learn->flags & ~(NX_LEARN_F_SEND_FLOW_REM |
  ------------------
  |  Branch (5520:9): [True: 19, False: 285]
  ------------------
 5521|    304|                         NX_LEARN_F_DELETE_LEARNED |
 5522|    304|                         NX_LEARN_F_WRITE_RESULT)) {
 5523|     19|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5524|     19|    }
 5525|       |
 5526|    285|    ofpbuf_pull(&b, sizeof *nal);
 5527|       |
 5528|    285|    if (learn->flags & NX_LEARN_F_WRITE_RESULT) {
  ------------------
  |  Branch (5528:9): [True: 190, False: 95]
  ------------------
 5529|    190|        error = nx_pull_header(&b, vl_mff_map, &learn->result_dst.field, NULL);
 5530|    190|        if (error) {
  ------------------
  |  Branch (5530:13): [True: 99, False: 91]
  ------------------
 5531|     99|            return error;
 5532|     99|        }
 5533|     91|        if (!learn->result_dst.field->writable) {
  ------------------
  |  Branch (5533:13): [True: 14, False: 77]
  ------------------
 5534|     14|            return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 5535|     14|        }
 5536|     77|        learn->result_dst.ofs = ntohs(nal->result_dst_ofs);
 5537|     77|        learn->result_dst.n_bits = 1;
 5538|     95|    } else if (nal->result_dst_ofs) {
  ------------------
  |  Branch (5538:16): [True: 19, False: 76]
  ------------------
 5539|     19|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5540|     19|    }
 5541|       |
 5542|    153|    return decode_LEARN_specs(b.data, (char *) nal + ntohs(nal->up.len),
 5543|    153|                              vl_mff_map, tlv_bitmap, ofpacts);
 5544|    285|}
ofp-actions.c:decode_NXAST_RAW_EXIT:
 5967|  2.14k|{
 5968|  2.14k|    ofpact_put_EXIT(out);
 5969|  2.14k|    return 0;
 5970|  2.14k|}
ofp-actions.c:decode_NXAST_RAW_FIN_TIMEOUT:
 4379|    794|{
 4380|    794|    struct ofpact_fin_timeout *oft;
 4381|       |
 4382|    794|    oft = ofpact_put_FIN_TIMEOUT(out);
 4383|    794|    oft->fin_idle_timeout = ntohs(naft->fin_idle_timeout);
 4384|       |    oft->fin_hard_timeout = ntohs(naft->fin_hard_timeout);
 4385|    794|    return 0;
 4386|    794|}
ofp-actions.c:decode_NXAST_RAW_CONTROLLER:
  804|  3.07k|{
  805|  3.07k|    struct ofpact_controller *oc;
  806|       |
  807|  3.07k|    oc = ofpact_put_CONTROLLER(out);
  808|  3.07k|    oc->ofpact.raw = NXAST_RAW_CONTROLLER;
  809|  3.07k|    oc->max_len = ntohs(nac->max_len);
  810|  3.07k|    oc->controller_id = ntohs(nac->controller_id);
  811|  3.07k|    oc->reason = nac->reason;
  812|  3.07k|    oc->meter_id = NX_CTLR_NO_METER;
  ------------------
  |  |  307|  3.07k|#define NX_CTLR_NO_METER 0
  ------------------
  813|  3.07k|    ofpact_finish_CONTROLLER(out, &oc);
  814|       |
  815|  3.07k|    return 0;
  816|  3.07k|}
ofp-actions.c:decode_NXAST_RAW_CONTROLLER2:
  822|  1.87k|{
  823|  1.87k|    if (!is_all_zeros(eah->pad, sizeof eah->pad)) {
  ------------------
  |  Branch (823:9): [True: 197, False: 1.67k]
  ------------------
  824|    197|        return OFPERR_NXBRC_MUST_BE_ZERO;
  825|    197|    }
  826|       |
  827|  1.67k|    size_t start_ofs = out->size;
  828|  1.67k|    struct ofpact_controller *oc = ofpact_put_CONTROLLER(out);
  829|  1.67k|    oc->ofpact.raw = NXAST_RAW_CONTROLLER2;
  830|  1.67k|    oc->max_len = UINT16_MAX;
  831|  1.67k|    oc->reason = OFPR_ACTION;
  832|  1.67k|    oc->meter_id = NX_CTLR_NO_METER;
  ------------------
  |  |  307|  1.67k|#define NX_CTLR_NO_METER 0
  ------------------
  833|       |
  834|  1.67k|    struct ofpbuf properties;
  835|  1.67k|    ofpbuf_use_const(&properties, eah, ntohs(eah->len));
  836|  1.67k|    ofpbuf_pull(&properties, sizeof *eah);
  837|       |
  838|  3.28k|    while (properties.size > 0) {
  ------------------
  |  Branch (838:12): [True: 2.19k, False: 1.08k]
  ------------------
  839|  2.19k|        struct ofpbuf payload;
  840|  2.19k|        uint64_t type;
  841|       |
  842|  2.19k|        enum ofperr error = ofpprop_pull(&properties, &payload, &type);
  843|  2.19k|        if (error) {
  ------------------
  |  Branch (843:13): [True: 74, False: 2.11k]
  ------------------
  844|     74|            return error;
  845|     74|        }
  846|       |
  847|  2.11k|        switch (type) {
  848|    467|        case NXAC2PT_MAX_LEN:
  ------------------
  |  Branch (848:9): [True: 467, False: 1.65k]
  ------------------
  849|    467|            error = ofpprop_parse_u16(&payload, &oc->max_len);
  850|    467|            break;
  851|       |
  852|    119|        case NXAC2PT_CONTROLLER_ID:
  ------------------
  |  Branch (852:9): [True: 119, False: 1.99k]
  ------------------
  853|    119|            error = ofpprop_parse_u16(&payload, &oc->controller_id);
  854|    119|            break;
  855|       |
  856|    698|        case NXAC2PT_REASON: {
  ------------------
  |  Branch (856:9): [True: 698, False: 1.42k]
  ------------------
  857|    698|            uint8_t u8;
  858|    698|            error = ofpprop_parse_u8(&payload, &u8);
  859|    698|            if (!error) {
  ------------------
  |  Branch (859:17): [True: 276, False: 422]
  ------------------
  860|    276|                oc->reason = u8;
  861|    276|            }
  862|    698|            break;
  863|      0|        }
  864|       |
  865|     81|        case NXAC2PT_USERDATA:
  ------------------
  |  Branch (865:9): [True: 81, False: 2.03k]
  ------------------
  866|     81|            out->size = start_ofs + sizeof(struct ofpact_controller);
  867|     81|            ofpbuf_put(out, payload.msg, ofpbuf_msgsize(&payload));
  868|     81|            oc = ofpbuf_at_assert(out, start_ofs, sizeof *oc);
  869|     81|            oc->userdata_len = ofpbuf_msgsize(&payload);
  870|     81|            break;
  871|       |
  872|    498|        case NXAC2PT_PAUSE:
  ------------------
  |  Branch (872:9): [True: 498, False: 1.62k]
  ------------------
  873|    498|            oc->pause = true;
  874|    498|            break;
  875|       |
  876|    231|        case NXAC2PT_METER_ID:
  ------------------
  |  Branch (876:9): [True: 231, False: 1.88k]
  ------------------
  877|    231|            error = ofpprop_parse_u32(&payload, &oc->meter_id);
  878|    231|            break;
  879|       |
  880|     24|        default:
  ------------------
  |  Branch (880:9): [True: 24, False: 2.09k]
  ------------------
  881|     24|            error = OFPPROP_UNKNOWN(false, "NXAST_RAW_CONTROLLER2", type);
  ------------------
  |  |  144|     24|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  882|     24|            break;
  883|  2.11k|        }
  884|  2.11k|        if (error) {
  ------------------
  |  Branch (884:13): [True: 510, False: 1.60k]
  ------------------
  885|    510|            return error;
  886|    510|        }
  887|  2.11k|    }
  888|       |
  889|  1.08k|    ofpact_finish_CONTROLLER(out, &oc);
  890|       |
  891|  1.08k|    return 0;
  892|  1.67k|}
ofp-actions.c:decode_NXAST_RAW_WRITE_METADATA:
 7723|  1.48k|{
 7724|  1.48k|    struct ofpact_metadata *om;
 7725|       |
 7726|  1.48k|    if (!is_all_zeros(nawm->zeros, sizeof nawm->zeros)) {
  ------------------
  |  Branch (7726:9): [True: 65, False: 1.41k]
  ------------------
 7727|     65|        return OFPERR_NXBRC_MUST_BE_ZERO;
 7728|     65|    }
 7729|       |
 7730|  1.41k|    om = ofpact_put_WRITE_METADATA(out);
 7731|  1.41k|    om->metadata = nawm->metadata;
 7732|  1.41k|    om->mask = nawm->mask;
 7733|       |
 7734|  1.41k|    return 0;
 7735|  1.48k|}
ofp-actions.c:decode_NXAST_RAW_STACK_PUSH:
 3494|    462|{
 3495|    462|    struct ofpact_stack *push = ofpact_put_STACK_PUSH(ofpacts);
 3496|    462|    enum ofperr error = decode_stack_action(nasp, vl_mff_map, tlv_bitmap,
 3497|    462|                                            push);
 3498|    462|    return error ? error : nxm_stack_push_check(push, NULL);
  ------------------
  |  Branch (3498:12): [True: 130, False: 332]
  ------------------
 3499|    462|}
ofp-actions.c:decode_stack_action:
 3467|  1.17k|{
 3468|  1.17k|    enum ofperr error;
 3469|  1.17k|    stack_action->subfield.ofs = ntohs(nasp->offset);
 3470|       |
 3471|  1.17k|    struct ofpbuf b = ofpbuf_const_initializer(nasp, sizeof *nasp);
 3472|  1.17k|    ofpbuf_pull(&b, OBJECT_OFFSETOF(nasp, pad));
  ------------------
  |  |  108|  1.17k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 3473|  1.17k|    error  = mf_vl_mff_nx_pull_header(&b, vl_mff_map,
 3474|  1.17k|                                      &stack_action->subfield.field, NULL,
 3475|  1.17k|                                      tlv_bitmap);
 3476|  1.17k|    if (error) {
  ------------------
  |  Branch (3476:9): [True: 210, False: 963]
  ------------------
 3477|    210|        return error;
 3478|    210|    }
 3479|       |
 3480|    963|    stack_action->subfield.n_bits = ntohs(*(const ovs_be16 *) b.data);
 3481|    963|    ofpbuf_pull(&b, 2);
 3482|    963|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (3482:9): [True: 154, False: 809]
  ------------------
 3483|    154|        return OFPERR_NXBRC_MUST_BE_ZERO;
 3484|    154|    }
 3485|       |
 3486|    809|    return 0;
 3487|    963|}
ofp-actions.c:decode_NXAST_RAW_STACK_POP:
 3506|    711|{
 3507|    711|    struct ofpact_stack *pop = ofpact_put_STACK_POP(ofpacts);
 3508|    711|    enum ofperr error = decode_stack_action(nasp, vl_mff_map, tlv_bitmap,
 3509|    711|                                            pop);
 3510|    711|    return error ? error : nxm_stack_pop_check(pop, NULL);
  ------------------
  |  Branch (3510:12): [True: 234, False: 477]
  ------------------
 3511|    711|}
ofp-actions.c:decode_NXAST_RAW_SAMPLE:
 6215|    117|{
 6216|    117|    struct ofpact_sample *sample;
 6217|       |
 6218|    117|    sample = ofpact_put_SAMPLE(out);
 6219|    117|    sample->ofpact.raw = NXAST_RAW_SAMPLE;
 6220|    117|    sample->probability = ntohs(nas->probability);
 6221|    117|    sample->collector_set_id = ntohl(nas->collector_set_id);
 6222|    117|    sample->obs_domain_imm = ntohl(nas->obs_domain_id);
 6223|    117|    sample->obs_domain_src.field = NULL;
 6224|    117|    sample->obs_point_imm = ntohl(nas->obs_point_id);
 6225|    117|    sample->obs_point_src.field = NULL;
 6226|    117|    sample->sampling_port = OFPP_NONE;
  ------------------
  |  |   47|    117|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|    117|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
 6227|    117|    sample->direction = NX_ACTION_SAMPLE_DEFAULT;
 6228|    117|    sample->obs_domain_src.field = NULL;
 6229|    117|    sample->obs_point_src.field = NULL;
 6230|    117|    if (sample->probability == 0) {
  ------------------
  |  Branch (6230:9): [True: 11, False: 106]
  ------------------
 6231|     11|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 6232|     11|    }
 6233|       |
 6234|    106|    return 0;
 6235|    117|}
ofp-actions.c:decode_NXAST_RAW_SAMPLE2:
 6264|     74|{
 6265|     74|    return decode_SAMPLE2(nas, NXAST_RAW_SAMPLE2, NX_ACTION_SAMPLE_DEFAULT,
 6266|     74|                          ofpact_put_SAMPLE(out));
 6267|     74|}
ofp-actions.c:decode_SAMPLE2:
 6242|  1.76k|{
 6243|  1.76k|    sample->ofpact.raw = raw;
 6244|  1.76k|    sample->probability = ntohs(nas->probability);
 6245|  1.76k|    sample->collector_set_id = ntohl(nas->collector_set_id);
 6246|  1.76k|    sample->obs_domain_imm = ntohl(nas->obs_domain_id);
 6247|  1.76k|    sample->obs_domain_src.field = NULL;
 6248|  1.76k|    sample->obs_point_imm = ntohl(nas->obs_point_id);
 6249|  1.76k|    sample->obs_point_src.field = NULL;
 6250|  1.76k|    sample->sampling_port = u16_to_ofp(ntohs(nas->sampling_port));
 6251|  1.76k|    sample->direction = direction;
 6252|       |
 6253|  1.76k|    if (sample->probability == 0) {
  ------------------
  |  Branch (6253:9): [True: 469, False: 1.29k]
  ------------------
 6254|    469|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 6255|    469|    }
 6256|       |
 6257|  1.29k|    return 0;
 6258|  1.76k|}
ofp-actions.c:decode_NXAST_RAW_SAMPLE3:
 6285|  2.22k|{
 6286|  2.22k|    struct ofpact_sample *sample = ofpact_put_SAMPLE(out);
 6287|  2.22k|    int err;
 6288|       |
 6289|  2.22k|    if (!is_all_zeros(nas->zeros, sizeof nas->zeros)) {
  ------------------
  |  Branch (6289:9): [True: 465, False: 1.76k]
  ------------------
 6290|    465|        return OFPERR_NXBRC_MUST_BE_ZERO;
 6291|    465|    }
 6292|  1.76k|    err = check_sample_direction(nas->direction);
 6293|  1.76k|    if (err) {
  ------------------
  |  Branch (6293:9): [True: 68, False: 1.69k]
  ------------------
 6294|     68|        return err;
 6295|     68|    }
 6296|  1.69k|    return decode_SAMPLE2(nas, NXAST_RAW_SAMPLE3, nas->direction, sample);
 6297|  1.76k|}
ofp-actions.c:check_sample_direction:
 6271|  2.79k|{
 6272|  2.79k|    if (direction != NX_ACTION_SAMPLE_DEFAULT &&
  ------------------
  |  Branch (6272:9): [True: 1.01k, False: 1.78k]
  ------------------
 6273|  1.01k|        direction != NX_ACTION_SAMPLE_INGRESS &&
  ------------------
  |  Branch (6273:9): [True: 828, False: 182]
  ------------------
 6274|    828|        direction != NX_ACTION_SAMPLE_EGRESS) {
  ------------------
  |  Branch (6274:9): [True: 197, False: 631]
  ------------------
 6275|    197|        VLOG_WARN_RL(&rl, "invalid sample direction %"PRIu8, direction);
  ------------------
  |  |  224|    197|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    197|    do {                                                                \
  |  |  |  |  288|    197|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    197|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 197]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    197|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 197]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6276|    197|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 6277|    197|    }
 6278|  2.59k|    return 0;
 6279|  2.79k|}
ofp-actions.c:decode_NXAST_RAW_SAMPLE4:
 6340|  1.14k|{
 6341|  1.14k|    struct ofpact_sample *sample = ofpact_put_SAMPLE(out);
 6342|  1.14k|    int err;
 6343|       |
 6344|  1.14k|    if (!is_all_zeros(nas->zeros, sizeof nas->zeros)) {
  ------------------
  |  Branch (6344:9): [True: 109, False: 1.03k]
  ------------------
 6345|    109|        return OFPERR_NXBRC_MUST_BE_ZERO;
 6346|    109|    }
 6347|       |
 6348|  1.03k|    err = check_sample_direction(nas->direction);
 6349|  1.03k|    if (err) {
  ------------------
  |  Branch (6349:9): [True: 129, False: 905]
  ------------------
 6350|    129|        return err;
 6351|    129|    }
 6352|       |
 6353|    905|    sample->ofpact.raw = NXAST_RAW_SAMPLE4;
 6354|    905|    sample->probability = ntohs(nas->probability);
 6355|    905|    sample->collector_set_id = ntohl(nas->collector_set_id);
 6356|    905|    sample->sampling_port = u16_to_ofp(ntohs(nas->sampling_port));
 6357|    905|    sample->direction = nas->direction;
 6358|       |
 6359|    905|    if (sample->probability == 0) {
  ------------------
  |  Branch (6359:9): [True: 6, False: 899]
  ------------------
 6360|      6|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 6361|      6|    }
 6362|       |
 6363|    899|    err = decode_sample_obs_id(nas->obs_domain_src,
 6364|    899|                               nas->obs_domain_ofs_nbits,
 6365|    899|                               nas->obs_domain_imm,
 6366|    899|                               vl_mff_map, tlv_bitmap,
 6367|    899|                               &sample->obs_domain_src,
 6368|    899|                               &sample->obs_domain_imm);
 6369|    899|    if (err) {
  ------------------
  |  Branch (6369:9): [True: 165, False: 734]
  ------------------
 6370|    165|        return err;
 6371|    165|    }
 6372|       |
 6373|    734|    return decode_sample_obs_id(nas->obs_point_src,
 6374|    734|                                nas->obs_point_ofs_nbits,
 6375|    734|                                nas->obs_point_imm,
 6376|    734|                                vl_mff_map, tlv_bitmap,
 6377|    734|                                &sample->obs_point_src,
 6378|    734|                                &sample->obs_point_imm);
 6379|    899|}
ofp-actions.c:decode_sample_obs_id:
 6303|  1.63k|{
 6304|  1.63k|    if (src) {
  ------------------
  |  Branch (6304:9): [True: 903, False: 730]
  ------------------
 6305|    903|        enum ofperr error;
 6306|       |
 6307|    903|        src_out->ofs = nxm_decode_ofs(ofs_nbits);
 6308|    903|        src_out->n_bits = nxm_decode_n_bits(ofs_nbits);
 6309|    903|        error = mf_vl_mff_mf_from_nxm_header(ntohl(src),
 6310|    903|                                             vl_mff_map, &src_out->field,
 6311|    903|                                             tlv_bitmap);
 6312|    903|        if (error) {
  ------------------
  |  Branch (6312:13): [True: 288, False: 615]
  ------------------
 6313|    288|            return error;
 6314|    288|        }
 6315|       |
 6316|    615|        error = mf_check_src(src_out, NULL);
 6317|    615|        if (error) {
  ------------------
  |  Branch (6317:13): [True: 58, False: 557]
  ------------------
 6318|     58|            return error;
 6319|     58|        }
 6320|       |
 6321|    557|        if (src_out->n_bits > 32) {
  ------------------
  |  Branch (6321:13): [True: 55, False: 502]
  ------------------
 6322|     55|            VLOG_WARN_RL(&rl, "size of field used in observation_id (%d) "
  ------------------
  |  |  224|     55|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     55|    do {                                                                \
  |  |  |  |  288|     55|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     55|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 55]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     55|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 55]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6323|     55|                               "exceeds maximum (32)", src_out->n_bits);
 6324|     55|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 6325|     55|        }
 6326|    730|    } else {
 6327|    730|        src_out->field = NULL;
 6328|    730|        *imm_out = ntohl(imm);
 6329|    730|    }
 6330|       |
 6331|  1.23k|    return 0;
 6332|  1.63k|}
ofp-actions.c:decode_NXAST_RAW_CONJUNCTION:
 5678|  3.96k|{
 5679|  3.96k|    if (nac->n_clauses < 2 || nac->n_clauses > 64
  ------------------
  |  Branch (5679:9): [True: 841, False: 3.11k]
  |  Branch (5679:31): [True: 15, False: 3.10k]
  ------------------
 5680|  3.10k|        || nac->clause >= nac->n_clauses) {
  ------------------
  |  Branch (5680:12): [True: 281, False: 2.82k]
  ------------------
 5681|  1.13k|        return OFPERR_NXBAC_BAD_CONJUNCTION;
 5682|  2.82k|    } else {
 5683|       |        add_conjunction(out, ntohl(nac->id), nac->clause, nac->n_clauses);
 5684|  2.82k|        return 0;
 5685|  2.82k|    }
 5686|  3.96k|}
ofp-actions.c:add_conjunction:
 5665|  2.82k|{
 5666|  2.82k|    struct ofpact_conjunction *oc;
 5667|       |
 5668|  2.82k|    oc = ofpact_put_CONJUNCTION(out);
 5669|  2.82k|    oc->id = id;
 5670|  2.82k|    oc->clause = clause;
 5671|  2.82k|    oc->n_clauses = n_clauses;
 5672|  2.82k|}
ofp-actions.c:decode_NXAST_RAW_CT:
 6828|  8.63k|{
 6829|  8.63k|    const size_t ct_offset = ofpacts_pull(out);
 6830|  8.63k|    struct ofpact_conntrack *conntrack = ofpact_put_CT(out);
 6831|  8.63k|    int error;
 6832|       |
 6833|  8.63k|    conntrack->flags = ntohs(nac->flags);
 6834|  8.63k|    if (conntrack->flags & NX_CT_F_FORCE &&
  ------------------
  |  Branch (6834:9): [True: 2.39k, False: 6.24k]
  ------------------
 6835|  2.39k|        !(conntrack->flags & NX_CT_F_COMMIT)) {
  ------------------
  |  Branch (6835:9): [True: 343, False: 2.04k]
  ------------------
 6836|    343|        error = OFPERR_OFPBAC_BAD_ARGUMENT;
 6837|    343|        goto out;
 6838|    343|    }
 6839|       |
 6840|  8.29k|    error = decode_ct_zone(nac, conntrack, vl_mff_map, tlv_bitmap);
 6841|  8.29k|    if (error) {
  ------------------
  |  Branch (6841:9): [True: 1.49k, False: 6.80k]
  ------------------
 6842|  1.49k|        goto out;
 6843|  1.49k|    }
 6844|  6.80k|    conntrack->recirc_table = nac->recirc_table;
 6845|  6.80k|    conntrack->alg = ntohs(nac->alg);
 6846|       |
 6847|  6.80k|    ofpbuf_pull(out, sizeof(*conntrack));
 6848|       |
 6849|  6.80k|    struct ofpbuf openflow = ofpbuf_const_initializer(
 6850|  6.80k|        nac + 1, ntohs(nac->len) - sizeof(*nac));
 6851|  6.80k|    error = ofpacts_pull_openflow_actions__(&openflow, openflow.size,
 6852|  6.80k|                                            ofp_version,
 6853|  6.80k|                                            1u << OVSINST_OFPIT11_APPLY_ACTIONS,
 6854|  6.80k|                                            out, OFPACT_CT, vl_mff_map,
 6855|  6.80k|                                            tlv_bitmap);
 6856|  6.80k|    if (error) {
  ------------------
  |  Branch (6856:9): [True: 1.04k, False: 5.75k]
  ------------------
 6857|  1.04k|        return error;
 6858|  1.04k|    }
 6859|       |
 6860|  5.75k|    conntrack = ofpbuf_push_uninit(out, sizeof(*conntrack));
 6861|  5.75k|    out->header = &conntrack->ofpact;
 6862|  5.75k|    ofpact_finish_CT(out, &conntrack);
 6863|       |
 6864|  5.75k|    if (conntrack->ofpact.len > sizeof(*conntrack)
  ------------------
  |  Branch (6864:9): [True: 3.92k, False: 1.83k]
  ------------------
 6865|  3.92k|        && !(conntrack->flags & NX_CT_F_COMMIT)) {
  ------------------
  |  Branch (6865:12): [True: 479, False: 3.44k]
  ------------------
 6866|    479|        const struct ofpact *a;
 6867|    479|        size_t ofpacts_len = conntrack->ofpact.len - sizeof(*conntrack);
 6868|       |
 6869|    479|        OFPACT_FOR_EACH (a, conntrack->actions, ofpacts_len) {
  ------------------
  |  |  261|    623|    for ((POS) = (OFPACTS); (POS) < ofpact_end(OFPACTS, OFPACTS_LEN);  \
  |  |  ------------------
  |  |  |  Branch (261:29): [True: 479, False: 144]
  |  |  ------------------
  |  |  262|    479|         (POS) = ofpact_next(POS))
  ------------------
 6870|    479|            if (a->type != OFPACT_NAT || ofpact_get_NAT(a)->flags
  ------------------
  |  Branch (6870:17): [True: 248, False: 231]
  |  Branch (6870:42): [True: 69, False: 162]
  ------------------
 6871|    335|                || ofpact_get_NAT(a)->range_af != AF_UNSPEC) {
  ------------------
  |  Branch (6871:20): [True: 18, False: 144]
  ------------------
 6872|    335|                VLOG_WARN_RL(&rl, "CT action requires commit flag if actions "
  ------------------
  |  |  224|    335|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    335|    do {                                                                \
  |  |  |  |  288|    335|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    335|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 335]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    335|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 335]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6873|    335|                             "other than NAT without arguments are specified.");
 6874|    335|                error = OFPERR_OFPBAC_BAD_ARGUMENT;
 6875|    335|                goto out;
 6876|    335|            }
 6877|    479|        }
 6878|    479|    }
 6879|       |
 6880|  7.59k|out:
 6881|  7.59k|    ofpbuf_push_uninit(out, ct_offset);
 6882|  7.59k|    return error;
 6883|  5.75k|}
ofp-actions.c:ofpacts_pull:
  536|  9.24k|{
  537|  9.24k|    size_t ofs;
  538|       |
  539|  9.24k|    ofs = ofpacts->size;
  540|  9.24k|    ofpbuf_pull(ofpacts, ofs);
  541|       |
  542|  9.24k|    return ofs;
  543|  9.24k|}
ofp-actions.c:decode_ct_zone:
 6792|  8.29k|{
 6793|  8.29k|    if (nac->zone_src) {
  ------------------
  |  Branch (6793:9): [True: 2.56k, False: 5.72k]
  ------------------
 6794|  2.56k|        enum ofperr error;
 6795|       |
 6796|  2.56k|        out->zone_src.ofs = nxm_decode_ofs(nac->zone_ofs_nbits);
 6797|  2.56k|        out->zone_src.n_bits = nxm_decode_n_bits(nac->zone_ofs_nbits);
 6798|  2.56k|        error = mf_vl_mff_mf_from_nxm_header(ntohl(nac->zone_src),
 6799|  2.56k|                                             vl_mff_map, &out->zone_src.field,
 6800|  2.56k|                                             tlv_bitmap);
 6801|  2.56k|        if (error) {
  ------------------
  |  Branch (6801:13): [True: 990, False: 1.57k]
  ------------------
 6802|    990|            return error;
 6803|    990|        }
 6804|       |
 6805|  1.57k|        error = mf_check_src(&out->zone_src, NULL);
 6806|  1.57k|        if (error) {
  ------------------
  |  Branch (6806:13): [True: 395, False: 1.18k]
  ------------------
 6807|    395|            return error;
 6808|    395|        }
 6809|       |
 6810|  1.18k|        if (out->zone_src.n_bits != 16) {
  ------------------
  |  Branch (6810:13): [True: 108, False: 1.07k]
  ------------------
 6811|    108|            VLOG_WARN_RL(&rl, "zone n_bits %d not within valid range [16..16]",
  ------------------
  |  |  224|    108|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    108|    do {                                                                \
  |  |  |  |  288|    108|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    108|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 108]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    108|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 108]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6812|    108|                         out->zone_src.n_bits);
 6813|    108|            return OFPERR_OFPBAC_BAD_SET_LEN;
 6814|    108|        }
 6815|  5.72k|    } else {
 6816|  5.72k|        out->zone_src.field = NULL;
 6817|  5.72k|        out->zone_imm = ntohs(nac->zone_imm);
 6818|  5.72k|    }
 6819|       |
 6820|  6.80k|    return 0;
 6821|  8.29k|}
ofp-actions.c:decode_NXAST_RAW_NAT:
 7207|  13.9k|{
 7208|  13.9k|    struct ofpact_nat *nat;
 7209|  13.9k|    uint16_t range_present = ntohs(nan->range_present);
 7210|  13.9k|    const char *opts = (char *)(nan + 1);
 7211|  13.9k|    uint16_t len = ntohs(nan->len) - sizeof *nan;
 7212|       |
 7213|  13.9k|    nat = ofpact_put_NAT(out);
 7214|  13.9k|    nat->flags = ntohs(nan->flags);
 7215|       |
 7216|       |    /* Check for unknown or mutually exclusive flags. */
 7217|  13.9k|    if ((nat->flags & ~NX_NAT_F_MASK)
  ------------------
  |  Branch (7217:9): [True: 3.08k, False: 10.8k]
  ------------------
 7218|  10.8k|        || (nat->flags & NX_NAT_F_SRC && nat->flags & NX_NAT_F_DST)
  ------------------
  |  Branch (7218:13): [True: 3.16k, False: 7.68k]
  |  Branch (7218:42): [True: 154, False: 3.00k]
  ------------------
 7219|  10.6k|        || (nat->flags & NX_NAT_F_PROTO_HASH
  ------------------
  |  Branch (7219:13): [True: 232, False: 10.4k]
  ------------------
 7220|  3.27k|            && nat->flags & NX_NAT_F_PROTO_RANDOM)) {
  ------------------
  |  Branch (7220:16): [True: 34, False: 198]
  ------------------
 7221|  3.27k|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 7222|  3.27k|    }
 7223|       |
 7224|  10.6k|#define NX_NAT_GET_OPT(DST, SRC, LEN, TYPE)                     \
 7225|  10.6k|    (LEN >= sizeof(TYPE)                                        \
 7226|  10.6k|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
 7227|  10.6k|        SRC += sizeof(TYPE))                                    \
 7228|  10.6k|     : NULL)
 7229|       |
 7230|  10.6k|    nat->range_af = AF_UNSPEC;
 7231|  10.6k|    if (range_present & NX_NAT_RANGE_IPV4_MIN) {
  ------------------
  |  Branch (7231:9): [True: 6.37k, False: 4.28k]
  ------------------
 7232|  6.37k|        if (range_present & (NX_NAT_RANGE_IPV6_MIN | NX_NAT_RANGE_IPV6_MAX)) {
  ------------------
  |  Branch (7232:13): [True: 674, False: 5.69k]
  ------------------
 7233|    674|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 7234|    674|        }
 7235|       |
 7236|  5.69k|        if (!NX_NAT_GET_OPT(&nat->range.addr.ipv4.min, opts, len, ovs_be32)
  ------------------
  |  | 7225|  11.3k|    (LEN >= sizeof(TYPE)                                        \
  |  |  ------------------
  |  |  |  Branch (7225:6): [True: 5.68k, False: 10]
  |  |  ------------------
  |  | 7226|  11.3k|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
  |  | 7227|  5.68k|        SRC += sizeof(TYPE))                                    \
  |  | 7228|  11.3k|     : NULL)
  ------------------
  |  Branch (7236:13): [True: 10, False: 5.68k]
  ------------------
 7237|  5.68k|            || !nat->range.addr.ipv4.min) {
  ------------------
  |  Branch (7237:16): [True: 139, False: 5.54k]
  ------------------
 7238|    149|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 7239|    149|        }
 7240|       |
 7241|  5.54k|        nat->range_af = AF_INET;
 7242|       |
 7243|  5.54k|        if (range_present & NX_NAT_RANGE_IPV4_MAX) {
  ------------------
  |  Branch (7243:13): [True: 1.08k, False: 4.46k]
  ------------------
 7244|  1.08k|            if (!NX_NAT_GET_OPT(&nat->range.addr.ipv4.max, opts, len,
  ------------------
  |  | 7225|  1.08k|    (LEN >= sizeof(TYPE)                                        \
  |  |  ------------------
  |  |  |  Branch (7225:6): [True: 1.08k, False: 0]
  |  |  ------------------
  |  | 7226|  1.08k|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
  |  | 7227|  1.08k|        SRC += sizeof(TYPE))                                    \
  |  | 7228|  1.08k|     : NULL)
  ------------------
  |  Branch (7244:17): [True: 0, False: 1.08k]
  ------------------
 7245|  1.08k|                                ovs_be32)) {
 7246|      0|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 7247|      0|            }
 7248|  1.08k|            if (ntohl(nat->range.addr.ipv4.max)
  ------------------
  |  Branch (7248:17): [True: 651, False: 431]
  ------------------
 7249|  1.08k|                < ntohl(nat->range.addr.ipv4.min)) {
 7250|    651|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 7251|    651|            }
 7252|  1.08k|        }
 7253|  5.54k|    } else if (range_present & NX_NAT_RANGE_IPV4_MAX) {
  ------------------
  |  Branch (7253:16): [True: 149, False: 4.13k]
  ------------------
 7254|    149|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 7255|  4.13k|    } else if (range_present & NX_NAT_RANGE_IPV6_MIN) {
  ------------------
  |  Branch (7255:16): [True: 2.47k, False: 1.66k]
  ------------------
 7256|  2.47k|        if (!NX_NAT_GET_OPT(&nat->range.addr.ipv6.min, opts, len,
  ------------------
  |  | 7225|  4.94k|    (LEN >= sizeof(TYPE)                                        \
  |  |  ------------------
  |  |  |  Branch (7225:6): [True: 1.04k, False: 1.42k]
  |  |  ------------------
  |  | 7226|  4.94k|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
  |  | 7227|  1.04k|        SRC += sizeof(TYPE))                                    \
  |  | 7228|  4.94k|     : NULL)
  ------------------
  |  Branch (7256:13): [True: 1.42k, False: 1.04k]
  ------------------
 7257|  2.47k|                            struct in6_addr)
 7258|  1.47k|            || ipv6_mask_is_any(&nat->range.addr.ipv6.min)) {
  ------------------
  |  Branch (7258:16): [True: 53, False: 995]
  ------------------
 7259|  1.47k|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 7260|  1.47k|        }
 7261|       |
 7262|    995|        nat->range_af = AF_INET6;
 7263|       |
 7264|    995|        if (range_present & NX_NAT_RANGE_IPV6_MAX) {
  ------------------
  |  Branch (7264:13): [True: 861, False: 134]
  ------------------
 7265|    861|            if (!NX_NAT_GET_OPT(&nat->range.addr.ipv6.max, opts, len,
  ------------------
  |  | 7225|    861|    (LEN >= sizeof(TYPE)                                        \
  |  |  ------------------
  |  |  |  Branch (7225:6): [True: 811, False: 50]
  |  |  ------------------
  |  | 7226|    861|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
  |  | 7227|    811|        SRC += sizeof(TYPE))                                    \
  |  | 7228|    861|     : NULL)
  ------------------
  |  Branch (7265:17): [True: 50, False: 811]
  ------------------
 7266|    861|                                struct in6_addr)) {
 7267|     50|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 7268|     50|            }
 7269|    811|            if (memcmp(&nat->range.addr.ipv6.max, &nat->range.addr.ipv6.min,
  ------------------
  |  Branch (7269:17): [True: 121, False: 690]
  ------------------
 7270|    811|                       sizeof(struct in6_addr)) < 0) {
 7271|    121|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 7272|    121|            }
 7273|    811|        }
 7274|  1.66k|    } else if (range_present & NX_NAT_RANGE_IPV6_MAX) {
  ------------------
  |  Branch (7274:16): [True: 452, False: 1.21k]
  ------------------
 7275|    452|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 7276|    452|    }
 7277|       |
 7278|  6.93k|    if (range_present & NX_NAT_RANGE_PROTO_MIN) {
  ------------------
  |  Branch (7278:9): [True: 2.45k, False: 4.48k]
  ------------------
 7279|  2.45k|        ovs_be16 proto;
 7280|       |
 7281|  2.45k|        if (nat->range_af == AF_UNSPEC) {
  ------------------
  |  Branch (7281:13): [True: 253, False: 2.20k]
  ------------------
 7282|    253|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 7283|    253|        }
 7284|  2.20k|        if (!NX_NAT_GET_OPT(&proto, opts, len, ovs_be16) || proto == 0) {
  ------------------
  |  | 7225|  4.40k|    (LEN >= sizeof(TYPE)                                        \
  |  |  ------------------
  |  |  |  Branch (7225:6): [True: 1.94k, False: 258]
  |  |  ------------------
  |  | 7226|  4.40k|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
  |  | 7227|  1.94k|        SRC += sizeof(TYPE))                                    \
  |  | 7228|  4.40k|     : NULL)
  ------------------
  |  Branch (7284:13): [True: 258, False: 1.94k]
  |  Branch (7284:61): [True: 67, False: 1.87k]
  ------------------
 7285|    325|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 7286|    325|        }
 7287|  1.87k|        nat->range.proto.min = ntohs(proto);
 7288|  1.87k|        if (range_present & NX_NAT_RANGE_PROTO_MAX) {
  ------------------
  |  Branch (7288:13): [True: 685, False: 1.19k]
  ------------------
 7289|    685|            if (!NX_NAT_GET_OPT(&proto, opts, len, ovs_be16)) {
  ------------------
  |  | 7225|    685|    (LEN >= sizeof(TYPE)                                        \
  |  |  ------------------
  |  |  |  Branch (7225:6): [True: 685, False: 0]
  |  |  ------------------
  |  | 7226|    685|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
  |  | 7227|    685|        SRC += sizeof(TYPE))                                    \
  |  | 7228|    685|     : NULL)
  ------------------
  |  Branch (7289:17): [True: 0, False: 685]
  ------------------
 7290|      0|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 7291|      0|            }
 7292|    685|            nat->range.proto.max = ntohs(proto);
 7293|    685|            if (nat->range.proto.max < nat->range.proto.min) {
  ------------------
  |  Branch (7293:17): [True: 343, False: 342]
  ------------------
 7294|    343|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 7295|    343|            }
 7296|    685|        }
 7297|  4.48k|    } else if (range_present & NX_NAT_RANGE_PROTO_MAX) {
  ------------------
  |  Branch (7297:16): [True: 109, False: 4.37k]
  ------------------
 7298|    109|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 7299|    109|    }
 7300|       |
 7301|  5.90k|    return 0;
 7302|  6.93k|}
ofp-actions.c:decode_NXAST_RAW_OUTPUT_TRUNC:
 7505|  1.76k|{
 7506|  1.76k|    struct ofpact_output_trunc *output_trunc;
 7507|       |
 7508|  1.76k|    output_trunc = ofpact_put_OUTPUT_TRUNC(out);
 7509|  1.76k|    output_trunc->max_len = ntohl(natrc->max_len);
 7510|  1.76k|    output_trunc->port = u16_to_ofp(ntohs(natrc->port));
 7511|       |
 7512|  1.76k|    if (output_trunc->max_len < ETH_HEADER_LEN) {
  ------------------
  |  |  439|  1.76k|#define ETH_HEADER_LEN 14
  ------------------
  |  Branch (7512:9): [True: 19, False: 1.74k]
  ------------------
 7513|     19|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 7514|     19|    }
 7515|  1.74k|    return 0;
 7516|  1.76k|}
ofp-actions.c:decode_NXAST_RAW_CLONE:
 6047|    606|{
 6048|    606|    int error;
 6049|    606|    struct ofpbuf openflow;
 6050|    606|    const size_t clone_offset = ofpacts_pull(out);
 6051|    606|    struct ofpact_nest *clone = ofpact_put_CLONE(out);
 6052|       |
 6053|       |    /* decode action list */
 6054|    606|    ofpbuf_pull(out, sizeof(*clone));
 6055|    606|    openflow = ofpbuf_const_initializer(
 6056|    606|                    eah + 1, ntohs(eah->len) - sizeof *eah);
 6057|    606|    error = ofpacts_pull_openflow_actions__(&openflow, openflow.size,
 6058|    606|                                            ofp_version,
 6059|    606|                                            1u << OVSINST_OFPIT11_APPLY_ACTIONS,
 6060|    606|                                            out, 0, vl_mff_map, tlv_bitmap);
 6061|    606|    if (error) {
  ------------------
  |  Branch (6061:9): [True: 37, False: 569]
  ------------------
 6062|     37|        return error;
 6063|     37|    }
 6064|    569|    clone = ofpbuf_push_uninit(out, sizeof *clone);
 6065|    569|    out->header = &clone->ofpact;
 6066|    569|    ofpact_finish_CLONE(out, &clone);
 6067|    569|    ofpbuf_push_uninit(out, clone_offset);
 6068|    569|    return error;
 6069|    606|}
ofp-actions.c:decode_NXAST_RAW_CT_CLEAR:
 7092|    526|{
 7093|    526|    ofpact_put_CT_CLEAR(out);
 7094|    526|    return 0;
 7095|    526|}
ofp-actions.c:decode_NXAST_RAW_ENCAP:
 4467|  6.89k|{
 4468|  6.89k|    struct ofpact_encap *encap;
 4469|  6.89k|    const struct ofp_ed_prop_header *ofp_prop;
 4470|  6.89k|    const size_t encap_ofs = out->size;
 4471|  6.89k|    size_t props_len;
 4472|  6.89k|    uint16_t n_props = 0;
 4473|  6.89k|    int err;
 4474|       |
 4475|  6.89k|    encap = ofpact_put_ENCAP(out);
 4476|  6.89k|    encap->ofpact.raw = NXAST_RAW_ENCAP;
 4477|  6.89k|    switch (ntohl(nae->new_pkt_type)) {
 4478|  4.77k|    case PT_ETH:
  ------------------
  |  Branch (4478:5): [True: 4.77k, False: 2.12k]
  ------------------
 4479|  5.35k|    case PT_NSH:
  ------------------
  |  Branch (4479:5): [True: 579, False: 6.32k]
  ------------------
 4480|  5.59k|    case PT_MPLS:
  ------------------
  |  Branch (4480:5): [True: 236, False: 6.66k]
  ------------------
 4481|  6.26k|    case PT_MPLS_MC:
  ------------------
  |  Branch (4481:5): [True: 674, False: 6.22k]
  ------------------
 4482|       |        /* Add supported encap header types here. */
 4483|  6.26k|        break;
 4484|    633|    default:
  ------------------
  |  Branch (4484:5): [True: 633, False: 6.26k]
  ------------------
 4485|    633|        return OFPERR_NXBAC_BAD_HEADER_TYPE;
 4486|  6.89k|    }
 4487|  6.26k|    encap->new_pkt_type = nae->new_pkt_type;
 4488|  6.26k|    encap->hdr_size = ntohs(nae->hdr_size);
 4489|       |
 4490|  6.26k|    ofp_prop = nae->props;
 4491|  6.26k|    props_len = ntohs(nae->len) - offsetof(struct nx_action_encap, props);
 4492|  6.26k|    n_props = 0;
 4493|  14.2k|    while (props_len > 0) {
  ------------------
  |  Branch (4493:12): [True: 12.0k, False: 2.12k]
  ------------------
 4494|  12.0k|        err = decode_ed_prop(&ofp_prop, out, &props_len);
 4495|  12.0k|        if (err) {
  ------------------
  |  Branch (4495:13): [True: 4.14k, False: 7.93k]
  ------------------
 4496|  4.14k|            return err;
 4497|  4.14k|        }
 4498|  7.93k|        n_props++;
 4499|  7.93k|    }
 4500|  2.12k|    encap = ofpbuf_at_assert(out, encap_ofs, sizeof *encap);
 4501|  2.12k|    encap->n_props = n_props;
 4502|  2.12k|    out->header = &encap->ofpact;
 4503|  2.12k|    ofpact_finish_ENCAP(out, &encap);
 4504|       |
 4505|  2.12k|    return 0;
 4506|  6.26k|}
ofp-actions.c:decode_NXAST_RAW_DECAP:
 4698|  10.6k|{
 4699|  10.6k|    struct ofpact_decap * decap;
 4700|       |
 4701|  10.6k|    if (ntohs(nad->len) > sizeof *nad) {
  ------------------
  |  Branch (4701:9): [True: 61, False: 10.5k]
  ------------------
 4702|       |        /* No properties supported yet. */
 4703|     61|        return OFPERR_NXBAC_UNKNOWN_ED_PROP;
 4704|     61|    }
 4705|       |
 4706|  10.5k|    decap = ofpact_put_DECAP(ofpacts);
 4707|  10.5k|    decap->ofpact.raw = NXAST_RAW_DECAP;
 4708|  10.5k|    decap->new_pkt_type = nad->new_pkt_type;
 4709|  10.5k|    return 0;
 4710|  10.6k|}
ofp-actions.c:decode_NXAST_RAW_DEC_NSH_TTL:
 4800|    684|{
 4801|    684|    ofpact_put_DEC_NSH_TTL(out);
 4802|    684|    return 0;
 4803|    684|}
ofp-actions.c:decode_NXAST_RAW_CHECK_PKT_LARGER:
 7821|  2.03k|{
 7822|  2.03k|    struct ofpact_check_pkt_larger *check_pkt_larger;
 7823|  2.03k|    enum ofperr error;
 7824|       |
 7825|  2.03k|    check_pkt_larger = ofpact_put_CHECK_PKT_LARGER(out);
 7826|  2.03k|    check_pkt_larger->pkt_len = ntohs(ncpl->pkt_len);
 7827|  2.03k|    check_pkt_larger->dst.ofs = ntohs(ncpl->offset);
 7828|  2.03k|    check_pkt_larger->dst.n_bits = 1;
 7829|       |
 7830|  2.03k|    struct ofpbuf b = ofpbuf_const_initializer(ncpl, ntohs(ncpl->len));
 7831|  2.03k|    ofpbuf_pull(&b, OBJECT_OFFSETOF(ncpl, pad));
  ------------------
  |  |  108|  2.03k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 7832|       |
 7833|  2.03k|    error = mf_vl_mff_nx_pull_header(&b, vl_mff_map,
 7834|  2.03k|                                     &check_pkt_larger->dst.field,
 7835|  2.03k|                                     NULL, tlv_bitmap);
 7836|  2.03k|    if (error) {
  ------------------
  |  Branch (7836:9): [True: 526, False: 1.50k]
  ------------------
 7837|    526|        return error;
 7838|    526|    }
 7839|       |
 7840|  1.50k|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (7840:9): [True: 1.00k, False: 499]
  ------------------
 7841|  1.00k|        return OFPERR_NXBRC_MUST_BE_ZERO;
 7842|  1.00k|    }
 7843|       |
 7844|    499|    return mf_check_dst(&check_pkt_larger->dst, NULL);
 7845|  1.50k|}
ofp-actions.c:decode_NXAST_RAW_DELETE_FIELD:
 4201|    522|{
 4202|    522|    struct ofpact_delete_field *delete_field;
 4203|    522|    enum ofperr err;
 4204|       |
 4205|    522|    delete_field = ofpact_put_DELETE_FIELD(out);
 4206|    522|    delete_field->ofpact.raw = NXAST_RAW_DELETE_FIELD;
 4207|       |
 4208|    522|    struct ofpbuf b = ofpbuf_const_initializer(nadf, ntohs(nadf->len));
 4209|    522|    ofpbuf_pull(&b, OBJECT_OFFSETOF(nadf, pad));
  ------------------
  |  |  108|    522|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 4210|       |
 4211|    522|    err = mf_vl_mff_nx_pull_header(&b, vl_mff_map, &delete_field->field,
 4212|    522|                                   NULL, tlv_bitmap);
 4213|    522|    if (err) {
  ------------------
  |  Branch (4213:9): [True: 465, False: 57]
  ------------------
 4214|    465|        return err;
 4215|    465|    }
 4216|       |
 4217|     57|    return 0;
 4218|    522|}
ofp-actions.c:decode_NXAST_RAW_DEBUG_SLOW:
 6617|    352|{
 6618|    352|    if (!enable_debug) {
  ------------------
  |  Branch (6618:9): [True: 352, False: 0]
  ------------------
 6619|    352|        return OFPERR_OFPBAC_BAD_VENDOR_TYPE;
 6620|    352|    }
 6621|       |
 6622|      0|    ofpact_put_DEBUG_SLOW(out);
 6623|      0|    return 0;
 6624|    352|}
ofp-actions.c:decode_NXAST_RAW_DEBUG_RECIRC:
 6577|     15|{
 6578|     15|    if (!enable_debug) {
  ------------------
  |  Branch (6578:9): [True: 15, False: 0]
  ------------------
 6579|     15|        return OFPERR_OFPBAC_BAD_VENDOR_TYPE;
 6580|     15|    }
 6581|       |
 6582|      0|    ofpact_put_DEBUG_RECIRC(out);
 6583|      0|    return 0;
 6584|     15|}
ofp-actions.c:log_bad_action:
 7969|  81.2k|{
 7970|  81.2k|    if (!VLOG_DROP_WARN(&rl)) {
  ------------------
  |  |  234|  81.2k|#define VLOG_DROP_WARN(RL) vlog_should_drop(&this_module, VLL_WARN, RL)
  ------------------
  |  Branch (7970:9): [True: 0, False: 81.2k]
  ------------------
 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|  81.2k|}
ofp-actions.c:ofpacts_decode_for_action_set:
 8326|  14.5k|{
 8327|  14.5k|    enum ofperr error;
 8328|  14.5k|    struct ofpact *a;
 8329|  14.5k|    size_t start = out->size;
 8330|       |
 8331|  14.5k|    error = ofpacts_decode(in, n_in, version, vl_mff_map, ofpacts_tlv_bitmap,
 8332|  14.5k|                           out);
 8333|       |
 8334|  14.5k|    if (error) {
  ------------------
  |  Branch (8334:9): [True: 3.87k, False: 10.7k]
  ------------------
 8335|  3.87k|        return error;
 8336|  3.87k|    }
 8337|       |
 8338|  39.0k|    OFPACT_FOR_EACH (a, ofpact_end(out->data, start), out->size - start) {
  ------------------
  |  |  261|  48.8k|    for ((POS) = (OFPACTS); (POS) < ofpact_end(OFPACTS, OFPACTS_LEN);  \
  |  |  ------------------
  |  |  |  Branch (261:29): [True: 39.0k, False: 9.74k]
  |  |  ------------------
  |  |  262|  38.1k|         (POS) = ofpact_next(POS))
  ------------------
 8339|  39.0k|        if (!ofpact_is_allowed_in_actions_set(a)) {
  ------------------
  |  Branch (8339:13): [True: 957, False: 38.1k]
  ------------------
 8340|    957|            VLOG_WARN_RL(&rl, "disallowed action in action set");
  ------------------
  |  |  224|    957|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    957|    do {                                                                \
  |  |  |  |  288|    957|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    957|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 957]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    957|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 957]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8341|    957|            return OFPERR_OFPBAC_BAD_TYPE;
 8342|    957|        }
 8343|  39.0k|    }
 8344|       |
 8345|  9.74k|    return 0;
 8346|  10.7k|}
ofp-actions.c:ofpact_is_allowed_in_actions_set:
 8257|  39.0k|{
 8258|  39.0k|    return action_set_classify(a) != ACTION_SLOT_INVALID;
 8259|  39.0k|}
ofp-actions.c:ofpact_check__:
 8823|   114k|{
 8824|   114k|    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|  5.74k|    OFPACT(OUTPUT,          ofpact_output,      ofpact, "output")       \
  |  |  ------------------
  |  |  |  | 8826|  5.74k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 5.74k, False: 108k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  5.74k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   65|  5.74k|    OFPACT(GROUP,           ofpact_group,       ofpact, "group")        \
  |  |  ------------------
  |  |  |  | 8826|    671|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 671, False: 114k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    671|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   66|    671|    OFPACT(CONTROLLER,      ofpact_controller,  userdata, "controller") \
  |  |  ------------------
  |  |  |  | 8826|     80|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 80, False: 114k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     80|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   67|    112|    OFPACT(ENQUEUE,         ofpact_enqueue,     ofpact, "enqueue")      \
  |  |  ------------------
  |  |  |  | 8826|    112|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 112, False: 114k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    112|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   68|    133|    OFPACT(OUTPUT_REG,      ofpact_output_reg,  ofpact, "output_reg")   \
  |  |  ------------------
  |  |  |  | 8826|    133|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 133, False: 114k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    133|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   69|    676|    OFPACT(BUNDLE,          ofpact_bundle,      members, "bundle")      \
  |  |  ------------------
  |  |  |  | 8826|    676|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 676, False: 114k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    676|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   70|    676|                                                                        \
  |  |   71|    676|    /* Header changes. */                                               \
  |  |   72|  1.46k|    OFPACT(SET_FIELD,       ofpact_set_field,   ofpact, "set_field")    \
  |  |  ------------------
  |  |  |  | 8826|  1.46k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.46k, False: 113k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.46k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   73|  5.16k|    OFPACT(SET_VLAN_VID,    ofpact_vlan_vid,    ofpact, "set_vlan_vid") \
  |  |  ------------------
  |  |  |  | 8826|  5.16k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 5.16k, False: 109k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  5.16k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   74|  5.16k|    OFPACT(SET_VLAN_PCP,    ofpact_vlan_pcp,    ofpact, "set_vlan_pcp") \
  |  |  ------------------
  |  |  |  | 8826|  3.22k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 3.22k, False: 111k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  3.22k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   75|  5.99k|    OFPACT(STRIP_VLAN,      ofpact_null,        ofpact, "strip_vlan")   \
  |  |  ------------------
  |  |  |  | 8826|  5.99k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 5.99k, False: 108k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  5.99k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   76|  5.99k|    OFPACT(PUSH_VLAN,       ofpact_push_vlan,   ofpact, "push_vlan")    \
  |  |  ------------------
  |  |  |  | 8826|  1.84k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.84k, False: 112k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.84k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   77|  1.84k|    OFPACT(SET_ETH_SRC,     ofpact_mac,         ofpact, "mod_dl_src")   \
  |  |  ------------------
  |  |  |  | 8826|     85|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 85, False: 114k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     85|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   78|     85|    OFPACT(SET_ETH_DST,     ofpact_mac,         ofpact, "mod_dl_dst")   \
  |  |  ------------------
  |  |  |  | 8826|     47|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 47, False: 114k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     47|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   79|  1.94k|    OFPACT(SET_IPV4_SRC,    ofpact_ipv4,        ofpact, "mod_nw_src")   \
  |  |  ------------------
  |  |  |  | 8826|  1.94k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.94k, False: 112k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.94k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   80|  4.24k|    OFPACT(SET_IPV4_DST,    ofpact_ipv4,        ofpact, "mod_nw_dst")   \
  |  |  ------------------
  |  |  |  | 8826|  4.24k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 4.24k, False: 110k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  4.24k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   81|  5.04k|    OFPACT(SET_IP_DSCP,     ofpact_dscp,        ofpact, "mod_nw_tos")   \
  |  |  ------------------
  |  |  |  | 8826|  5.04k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 5.04k, False: 109k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  5.04k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   82|  5.04k|    OFPACT(SET_IP_ECN,      ofpact_ecn,         ofpact, "mod_nw_ecn")   \
  |  |  ------------------
  |  |  |  | 8826|    877|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 877, False: 113k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    877|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   83|  1.20k|    OFPACT(SET_IP_TTL,      ofpact_ip_ttl,      ofpact, "mod_nw_ttl")   \
  |  |  ------------------
  |  |  |  | 8826|  1.20k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.20k, False: 113k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.20k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   84|  3.25k|    OFPACT(SET_L4_SRC_PORT, ofpact_l4_port,     ofpact, "mod_tp_src")   \
  |  |  ------------------
  |  |  |  | 8826|  3.25k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 3.25k, False: 111k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  3.25k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   85|  5.73k|    OFPACT(SET_L4_DST_PORT, ofpact_l4_port,     ofpact, "mod_tp_dst")   \
  |  |  ------------------
  |  |  |  | 8826|  5.73k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 5.73k, False: 108k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  5.73k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   86|  5.73k|    OFPACT(REG_MOVE,        ofpact_reg_move,    ofpact, "move")         \
  |  |  ------------------
  |  |  |  | 8826|    244|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 244, False: 114k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    244|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   87|    244|    OFPACT(STACK_PUSH,      ofpact_stack,       ofpact, "push")         \
  |  |  ------------------
  |  |  |  | 8826|     67|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 67, False: 114k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     67|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   88|    390|    OFPACT(STACK_POP,       ofpact_stack,       ofpact, "pop")          \
  |  |  ------------------
  |  |  |  | 8826|    390|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 390, False: 114k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    390|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   89|  2.13k|    OFPACT(DEC_TTL,         ofpact_cnt_ids,     cnt_ids, "dec_ttl")     \
  |  |  ------------------
  |  |  |  | 8826|  2.13k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 2.13k, False: 112k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  2.13k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   90|  2.13k|    OFPACT(SET_MPLS_LABEL,  ofpact_mpls_label,  ofpact, "set_mpls_label") \
  |  |  ------------------
  |  |  |  | 8826|  2.10k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 2.10k, False: 112k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  2.10k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   91|  2.10k|    OFPACT(SET_MPLS_TC,     ofpact_mpls_tc,     ofpact, "set_mpls_tc")  \
  |  |  ------------------
  |  |  |  | 8826|    536|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 536, False: 114k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    536|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   92|  1.12k|    OFPACT(SET_MPLS_TTL,    ofpact_mpls_ttl,    ofpact, "set_mpls_ttl") \
  |  |  ------------------
  |  |  |  | 8826|  1.12k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.12k, False: 113k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.12k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   93|  3.98k|    OFPACT(DEC_MPLS_TTL,    ofpact_null,        ofpact, "dec_mpls_ttl") \
  |  |  ------------------
  |  |  |  | 8826|  3.98k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 3.98k, False: 110k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  3.98k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   94|  6.51k|    OFPACT(PUSH_MPLS,       ofpact_push_mpls,   ofpact, "push_mpls")    \
  |  |  ------------------
  |  |  |  | 8826|  6.51k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 6.51k, False: 108k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  6.51k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   95|  6.51k|    OFPACT(POP_MPLS,        ofpact_pop_mpls,    ofpact, "pop_mpls")     \
  |  |  ------------------
  |  |  |  | 8826|  3.79k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 3.79k, False: 110k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  3.79k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   96|  3.79k|    OFPACT(DEC_NSH_TTL,     ofpact_null,        ofpact, "dec_nsh_ttl")  \
  |  |  ------------------
  |  |  |  | 8826|    674|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 674, False: 114k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    674|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   97|    674|    OFPACT(DELETE_FIELD,    ofpact_delete_field, ofpact, "delete_field") \
  |  |  ------------------
  |  |  |  | 8826|     55|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 55, False: 114k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     55|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   98|     55|                                                                        \
  |  |   99|     55|    /* Generic encap & decap */                                         \
  |  |  100|  1.23k|    OFPACT(ENCAP,           ofpact_encap,       props, "encap")         \
  |  |  ------------------
  |  |  |  | 8826|  1.23k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.23k, False: 113k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.23k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  101|  8.42k|    OFPACT(DECAP,           ofpact_decap,       ofpact, "decap")        \
  |  |  ------------------
  |  |  |  | 8826|  8.42k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 8.42k, False: 106k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  8.42k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  102|  8.42k|                                                                        \
  |  |  103|  8.42k|    /* Metadata. */                                                     \
  |  |  104|  8.42k|    OFPACT(SET_TUNNEL,      ofpact_tunnel,      ofpact, "set_tunnel")   \
  |  |  ------------------
  |  |  |  | 8826|     44|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 44, False: 114k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     44|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  105|    109|    OFPACT(SET_QUEUE,       ofpact_queue,       ofpact, "set_queue")    \
  |  |  ------------------
  |  |  |  | 8826|    109|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 109, False: 114k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    109|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  106|    109|    OFPACT(POP_QUEUE,       ofpact_null,        ofpact, "pop_queue")    \
  |  |  ------------------
  |  |  |  | 8826|     24|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 24, False: 114k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     24|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  107|    172|    OFPACT(FIN_TIMEOUT,     ofpact_fin_timeout, ofpact, "fin_timeout")  \
  |  |  ------------------
  |  |  |  | 8826|    172|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 172, False: 114k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    172|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  108|    172|                                                                        \
  |  |  109|    172|    /* Flow table interaction. */                                       \
  |  |  110|    172|    OFPACT(RESUBMIT,        ofpact_resubmit,    ofpact, "resubmit")     \
  |  |  ------------------
  |  |  |  | 8826|    129|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 129, False: 114k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    129|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  111|  17.6k|    OFPACT(LEARN,           ofpact_learn,       specs, "learn")         \
  |  |  ------------------
  |  |  |  | 8826|  17.6k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 17.6k, False: 96.9k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  17.6k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  112|  17.6k|    OFPACT(CONJUNCTION,     ofpact_conjunction, ofpact, "conjunction")  \
  |  |  ------------------
  |  |  |  | 8826|    137|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 137, False: 114k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    137|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  113|    137|                                                                        \
  |  |  114|    137|    /* Arithmetic. */                                                   \
  |  |  115|    424|    OFPACT(MULTIPATH,       ofpact_multipath,   ofpact, "multipath")    \
  |  |  ------------------
  |  |  |  | 8826|    424|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 424, False: 114k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    424|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  116|    424|                                                                        \
  |  |  117|    424|    /* Other. */                                                        \
  |  |  118|    424|    OFPACT(NOTE,            ofpact_note,        data, "note")           \
  |  |  ------------------
  |  |  |  | 8826|    132|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 132, False: 114k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    132|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  119|    155|    OFPACT(EXIT,            ofpact_null,        ofpact, "exit")         \
  |  |  ------------------
  |  |  |  | 8826|    155|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 155, False: 114k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    155|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  120|    155|    OFPACT(SAMPLE,          ofpact_sample,      ofpact, "sample")       \
  |  |  ------------------
  |  |  |  | 8826|     18|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 18, False: 114k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     18|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  121|     18|    OFPACT(UNROLL_XLATE,    ofpact_unroll_xlate, ofpact, "unroll_xlate") \
  |  |  ------------------
  |  |  |  | 8826|      0|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 0, False: 114k]
  |  |  |  |  ------------------
  |  |  |  | 8827|      0|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  122|  2.74k|    OFPACT(CT,              ofpact_conntrack,   ofpact, "ct")           \
  |  |  ------------------
  |  |  |  | 8826|  2.74k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 2.74k, False: 111k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  2.74k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  123|  2.74k|    OFPACT(CT_CLEAR,        ofpact_null,        ofpact, "ct_clear")     \
  |  |  ------------------
  |  |  |  | 8826|     95|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 95, False: 114k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     95|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  124|  1.97k|    OFPACT(NAT,             ofpact_nat,         ofpact, "nat")          \
  |  |  ------------------
  |  |  |  | 8826|  1.97k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.97k, False: 112k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.97k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  125|  1.97k|    OFPACT(OUTPUT_TRUNC,    ofpact_output_trunc,ofpact, "output_trunc") \
  |  |  ------------------
  |  |  |  | 8826|  1.49k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.49k, False: 113k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.49k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  126|  1.49k|    OFPACT(CLONE,           ofpact_nest,        actions, "clone")       \
  |  |  ------------------
  |  |  |  | 8826|     23|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 23, False: 114k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     23|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  127|     23|    OFPACT(CHECK_PKT_LARGER, ofpact_check_pkt_larger, ofpact,           \
  |  |  ------------------
  |  |  |  | 8826|     10|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 10, False: 114k]
  |  |  |  |  ------------------
  |  |  |  | 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: 114k]
  |  |  |  |  ------------------
  |  |  |  | 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: 114k]
  |  |  |  |  ------------------
  |  |  |  | 8827|      0|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  136|      0|                                                                        \
  |  |  137|      0|    /* Instructions ("meter" is an action in OF1.5+). */                \
  |  |  138|    340|    OFPACT(METER,           ofpact_meter,       ofpact, "meter")        \
  |  |  ------------------
  |  |  |  | 8826|    340|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 340, False: 114k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    340|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  139|    340|    OFPACT(CLEAR_ACTIONS,   ofpact_null,        ofpact, "clear_actions") \
  |  |  ------------------
  |  |  |  | 8826|    294|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 294, False: 114k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    294|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  140|  9.54k|    OFPACT(WRITE_ACTIONS,   ofpact_nest,        actions, "write_actions") \
  |  |  ------------------
  |  |  |  | 8826|  9.54k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 9.54k, False: 105k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  9.54k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  141|  9.54k|    OFPACT(WRITE_METADATA,  ofpact_metadata,    ofpact, "write_metadata") \
  |  |  ------------------
  |  |  |  | 8826|    236|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 236, False: 114k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    236|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  142|    236|    OFPACT(GOTO_TABLE,      ofpact_goto_table,  ofpact, "goto_table")
  |  |  ------------------
  |  |  |  | 8826|     64|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 64, False: 114k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     64|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  ------------------
 8829|      0|#undef OFPACT
 8830|      0|    default:
  ------------------
  |  Branch (8830:5): [True: 0, False: 114k]
  ------------------
 8831|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 8832|   114k|    }
 8833|   114k|}
ofp-actions.c:check_OUTPUT:
  717|  5.74k|{
  718|  5.74k|    return ofpact_check_output_port(a->port, cp->max_ports);
  719|  5.74k|}
ofp-actions.c:check_GROUP:
  756|    671|{
  757|    671|    return 0;
  758|    671|}
ofp-actions.c:check_CONTROLLER:
 1074|     80|{
 1075|     80|    return 0;
 1076|     80|}
ofp-actions.c:check_ENQUEUE:
 1161|    112|{
 1162|    112|    if (ofp_to_u16(a->port) >= ofp_to_u16(cp->max_ports)
  ------------------
  |  Branch (1162:9): [True: 76, False: 36]
  ------------------
 1163|    112|        && a->port != OFPP_IN_PORT
  ------------------
  |  |   39|     76|#define OFPP_IN_PORT    OFP_PORT_C(0xfff8) /* Where the packet came in. */
  |  |  ------------------
  |  |  |  |  157|    188|#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|    112|    return 0;
 1168|    112|}
ofp-actions.c:check_OUTPUT_REG:
 1326|    133|{
 1327|    133|    return mf_check_src(&a->src, cp->match);
 1328|    133|}
ofp-actions.c:check_BUNDLE:
 1552|    676|{
 1553|    676|    return bundle_check(a, cp->max_ports, cp->match);
 1554|    676|}
ofp-actions.c:check_SET_FIELD:
 3352|  1.46k|{
 3353|  1.46k|    const struct mf_field *mf = a->field;
 3354|  1.46k|    struct flow *flow = &cp->match->flow;
 3355|  1.46k|    ovs_be16 *tci = &flow->vlans[0].tci;
 3356|       |
 3357|       |    /* Require OXM_OF_VLAN_VID to have an existing VLAN header. */
 3358|  1.46k|    if (!mf_are_prereqs_ok(mf, flow, NULL)
  ------------------
  |  Branch (3358:9): [True: 298, False: 1.16k]
  ------------------
 3359|  1.16k|        || (mf->id == MFF_VLAN_VID && !(*tci & htons(VLAN_CFI)))) {
  ------------------
  |  Branch (3359:13): [True: 240, False: 924]
  |  Branch (3359:39): [True: 38, False: 202]
  ------------------
 3360|    336|        VLOG_WARN_RL(&rl, "set_field %s lacks correct prerequisites",
  ------------------
  |  |  224|    336|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    336|    do {                                                                \
  |  |  |  |  288|    336|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    336|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 336]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    336|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 336]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3361|    336|                     mf->name);
 3362|    336|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 3363|    336|    }
 3364|       |
 3365|       |    /* Remember if we saw a VLAN tag in the flow, to aid translating to
 3366|       |     * OpenFlow 1.1 if need be. */
 3367|  1.12k|    a->flow_has_vlan = (*tci & htons(VLAN_CFI)) != 0;
 3368|  1.12k|    if (mf->id == MFF_VLAN_TCI) {
  ------------------
  |  Branch (3368:9): [True: 33, False: 1.09k]
  ------------------
 3369|       |        /* The set field may add or remove the VLAN tag,
 3370|       |         * Mark the status temporarily. */
 3371|     33|        *tci = a->value->be16;
 3372|     33|    }
 3373|       |
 3374|  1.12k|    return 0;
 3375|  1.46k|}
ofp-actions.c:check_SET_VLAN_VID:
 1649|  5.16k|{
 1650|       |    /* Remember if we saw a vlan tag in the flow to aid translating to OpenFlow
 1651|       |     * 1.1+ if need be. */
 1652|  5.16k|    ovs_be16 *tci = &cp->match->flow.vlans[0].tci;
 1653|  5.16k|    a->flow_has_vlan = (*tci & htons(VLAN_CFI)) != 0;
 1654|  5.16k|    if (!a->flow_has_vlan && !a->push_vlan_if_needed) {
  ------------------
  |  Branch (1654:9): [True: 964, False: 4.19k]
  |  Branch (1654:30): [True: 55, False: 909]
  ------------------
 1655|     55|        inconsistent_match(&cp->usable_protocols);
 1656|     55|    }
 1657|       |
 1658|       |    /* Temporarily mark that we have a vlan tag. */
 1659|  5.16k|    *tci |= htons(VLAN_CFI);
 1660|       |
 1661|  5.16k|    return 0;
 1662|  5.16k|}
ofp-actions.c:inconsistent_match:
 8812|  24.4k|{
 8813|  24.4k|    *usable_protocols &= OFPUTIL_P_OF10_ANY;
  ------------------
  |  |   60|  24.4k|#define OFPUTIL_P_OF10_ANY (OFPUTIL_P_OF10_STD_ANY | OFPUTIL_P_OF10_NXM_ANY)
  |  |  ------------------
  |  |  |  |   58|  24.4k|#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|  24.4k|#define OFPUTIL_P_OF10_NXM_ANY (OFPUTIL_P_OF10_NXM | OFPUTIL_P_OF10_NXM_TID)
  |  |  ------------------
  ------------------
 8814|  24.4k|}
ofp-actions.c:check_SET_VLAN_PCP:
 1757|  3.22k|{
 1758|       |    /* Remember if we saw a vlan tag in the flow to aid translating to OpenFlow
 1759|       |     * 1.1+ if need be. */
 1760|  3.22k|    ovs_be16 *tci = &cp->match->flow.vlans[0].tci;
 1761|  3.22k|    a->flow_has_vlan = (*tci & htons(VLAN_CFI)) != 0;
 1762|  3.22k|    if (!a->flow_has_vlan && !a->push_vlan_if_needed) {
  ------------------
  |  Branch (1762:9): [True: 2.17k, False: 1.04k]
  |  Branch (1762:30): [True: 895, False: 1.27k]
  ------------------
 1763|    895|        inconsistent_match(&cp->usable_protocols);
 1764|    895|    }
 1765|       |
 1766|       |    /* Temporarily mark that we have a vlan tag. */
 1767|  3.22k|    *tci |= htons(VLAN_CFI);
 1768|       |
 1769|  3.22k|    return 0;
 1770|  3.22k|}
ofp-actions.c:check_STRIP_VLAN:
 1826|  5.99k|{
 1827|  5.99k|    if (!(cp->match->flow.vlans[0].tci & htons(VLAN_CFI))) {
  ------------------
  |  Branch (1827:9): [True: 2.41k, False: 3.58k]
  ------------------
 1828|  2.41k|        inconsistent_match(&cp->usable_protocols);
 1829|  2.41k|    }
 1830|       |    flow_pop_vlan(&cp->match->flow, NULL);
 1831|  5.99k|    return 0;
 1832|  5.99k|}
ofp-actions.c:check_PUSH_VLAN:
 1894|  1.84k|{
 1895|  1.84k|    struct flow *flow = &cp->match->flow;
 1896|  1.84k|    if (flow->vlans[FLOW_MAX_VLAN_HEADERS - 1].tci & htons(VLAN_CFI)) {
  ------------------
  |  |   75|  1.84k|#define FLOW_MAX_VLAN_HEADERS 2
  ------------------
  |  Branch (1896:9): [True: 296, False: 1.54k]
  ------------------
 1897|       |        /* Support maximum (FLOW_MAX_VLAN_HEADERS) VLAN headers. */
 1898|    296|        return OFPERR_OFPBAC_BAD_TAG;
 1899|    296|    }
 1900|       |    /* Temporary mark that we have a vlan tag. */
 1901|  1.54k|    flow_push_vlan_uninit(flow, NULL);
 1902|       |    flow->vlans[0].tci |= htons(VLAN_CFI);
 1903|  1.54k|    return 0;
 1904|  1.84k|}
ofp-actions.c:check_SET_ETH_SRC:
 1998|     85|{
 1999|     85|    return 0;
 2000|     85|}
ofp-actions.c:check_SET_ETH_DST:
 2005|     47|{
 2006|     47|    return 0;
 2007|     47|}
ofp-actions.c:check_SET_IPV4_SRC:
 2100|  1.94k|{
 2101|  1.94k|    return check_set_ipv4(cp);
 2102|  1.94k|}
ofp-actions.c:check_set_ipv4:
 2089|  6.18k|{
 2090|  6.18k|    ovs_be16 dl_type = get_dl_type(&cp->match->flow);
 2091|  6.18k|    if (dl_type != htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (2091:9): [True: 2.48k, False: 3.69k]
  ------------------
 2092|  2.48k|        inconsistent_match(&cp->usable_protocols);
 2093|  2.48k|    }
 2094|  6.18k|    return 0;
 2095|  6.18k|}
ofp-actions.c:check_SET_IPV4_DST:
 2107|  4.24k|{
 2108|  4.24k|    return check_set_ipv4(cp);
 2109|  4.24k|}
ofp-actions.c:check_SET_IP_DSCP:
 2176|  5.04k|{
 2177|  5.04k|    return check_set_ip(cp);
 2178|  5.04k|}
ofp-actions.c:check_set_ip:
 2166|  9.26k|{
 2167|  9.26k|    if (!is_ip_any(&cp->match->flow)) {
  ------------------
  |  Branch (2167:9): [True: 4.64k, False: 4.62k]
  ------------------
 2168|  4.64k|        inconsistent_match(&cp->usable_protocols);
 2169|  4.64k|    }
 2170|  9.26k|    return 0;
 2171|  9.26k|}
ofp-actions.c:check_SET_IP_ECN:
 2240|    877|{
 2241|    877|    return check_set_ip(cp);
 2242|    877|}
ofp-actions.c:check_SET_IP_TTL:
 2295|  1.20k|{
 2296|  1.20k|    return check_set_ip(cp);
 2297|  1.20k|}
ofp-actions.c:check_SET_L4_SRC_PORT:
 2411|  3.25k|{
 2412|  3.25k|    return check_set_l4_port(a, cp);
 2413|  3.25k|}
ofp-actions.c:check_set_l4_port:
 2392|  8.99k|{
 2393|  8.99k|    const struct flow *flow = &cp->match->flow;
 2394|  8.99k|    if (!is_ip_any(flow)
  ------------------
  |  Branch (2394:9): [True: 4.54k, False: 4.45k]
  ------------------
 2395|  4.45k|        || flow->nw_frag & FLOW_NW_FRAG_LATER
  ------------------
  |  |   55|  13.4k|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  |  Branch (2395:12): [True: 0, False: 4.45k]
  ------------------
 2396|  4.45k|        || (flow->nw_proto != IPPROTO_TCP &&
  ------------------
  |  Branch (2396:13): [True: 3.46k, False: 985]
  ------------------
 2397|  3.46k|            flow->nw_proto != IPPROTO_UDP &&
  ------------------
  |  Branch (2397:13): [True: 2.90k, False: 561]
  ------------------
 2398|  5.84k|            flow->nw_proto != IPPROTO_SCTP)) {
  ------------------
  |  Branch (2398:13): [True: 1.30k, False: 1.60k]
  ------------------
 2399|  5.84k|        inconsistent_match(&cp->usable_protocols);
 2400|  5.84k|    }
 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|  8.99k|    a->flow_ip_proto = flow->nw_proto;
 2405|       |
 2406|  8.99k|    return 0;
 2407|  8.99k|}
ofp-actions.c:check_SET_L4_DST_PORT:
 2417|  5.73k|{
 2418|  5.73k|    return check_set_l4_port(a, cp);
 2419|  5.73k|}
ofp-actions.c:check_REG_MOVE:
 2722|    244|{
 2723|    244|    return nxm_reg_move_check(a, cp->match);
 2724|    244|}
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|    390|{
 3580|    390|    return nxm_stack_pop_check(a, cp->match);
 3581|    390|}
ofp-actions.c:check_DEC_TTL:
 3755|  2.13k|{
 3756|  2.13k|    return check_set_ip(cp);
 3757|  2.13k|}
ofp-actions.c:check_SET_MPLS_LABEL:
 3828|  2.10k|{
 3829|  2.10k|    return check_set_mpls(cp);
 3830|  2.10k|}
ofp-actions.c:check_set_mpls:
 3817|  7.75k|{
 3818|  7.75k|    ovs_be16 dl_type = get_dl_type(&cp->match->flow);
 3819|  7.75k|    if (!eth_type_mpls(dl_type)) {
  ------------------
  |  Branch (3819:9): [True: 4.81k, False: 2.93k]
  ------------------
 3820|  4.81k|        inconsistent_match(&cp->usable_protocols);
 3821|  4.81k|    }
 3822|  7.75k|    return 0;
 3823|  7.75k|}
ofp-actions.c:check_SET_MPLS_TC:
 3889|    536|{
 3890|    536|    return check_set_mpls(cp);
 3891|    536|}
ofp-actions.c:check_SET_MPLS_TTL:
 3947|  1.12k|{
 3948|  1.12k|    return check_set_mpls(cp);
 3949|  1.12k|}
ofp-actions.c:check_DEC_MPLS_TTL:
 3984|  3.98k|{
 3985|  3.98k|    return check_set_mpls(cp);
 3986|  3.98k|}
ofp-actions.c:check_PUSH_MPLS:
 4037|  6.51k|{
 4038|  6.51k|    struct flow *flow = &cp->match->flow;
 4039|       |
 4040|  6.51k|    if (flow->packet_type != htonl(PT_ETH)) {
  ------------------
  |  Branch (4040:9): [True: 11, False: 6.49k]
  ------------------
 4041|     11|        inconsistent_match(&cp->usable_protocols);
 4042|     11|    }
 4043|  6.51k|    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|  6.51k|    flow->nw_proto = 0;
 4049|       |
 4050|  6.51k|    return 0;
 4051|  6.51k|}
ofp-actions.c:check_POP_MPLS:
 4094|  3.79k|{
 4095|  3.79k|    struct flow *flow = &cp->match->flow;
 4096|  3.79k|    ovs_be16 dl_type = get_dl_type(flow);
 4097|       |
 4098|  3.79k|    if (flow->packet_type != htonl(PT_ETH) || !eth_type_mpls(dl_type)) {
  ------------------
  |  Branch (4098:9): [True: 1.01k, False: 2.78k]
  |  Branch (4098:47): [True: 2.02k, False: 756]
  ------------------
 4099|  3.04k|        inconsistent_match(&cp->usable_protocols);
 4100|  3.04k|    }
 4101|  3.79k|    flow->dl_type = a->ethertype;
 4102|  3.79k|    return 0;
 4103|  3.79k|}
ofp-actions.c:check_DEC_NSH_TTL:
 4829|    674|{
 4830|    674|    struct flow *flow = &cp->match->flow;
 4831|    674|    if (flow->packet_type != htonl(PT_NSH) &&
  ------------------
  |  Branch (4831:9): [True: 275, False: 399]
  ------------------
 4832|    275|        flow->dl_type != htons(ETH_TYPE_NSH)) {
  ------------------
  |  Branch (4832:9): [True: 182, False: 93]
  ------------------
 4833|    182|        inconsistent_match(&cp->usable_protocols);
 4834|    182|    }
 4835|    674|    return 0;
 4836|    674|}
ofp-actions.c:check_DELETE_FIELD:
 4256|     55|{
 4257|     55|    if (odf->field->id < MFF_TUN_METADATA0 ||
  ------------------
  |  Branch (4257:9): [True: 42, False: 13]
  ------------------
 4258|     48|        odf->field->id > MFF_TUN_METADATA63) {
  ------------------
  |  Branch (4258:9): [True: 6, False: 7]
  ------------------
 4259|     48|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 4260|     48|    }
 4261|      7|    return 0;
 4262|     55|}
ofp-actions.c:check_ENCAP:
 4664|  1.23k|{
 4665|  1.23k|    struct flow *flow = &cp->match->flow;
 4666|  1.23k|    flow->packet_type = a->new_pkt_type;
 4667|  1.23k|    if (pt_ns(flow->packet_type) == OFPHTN_ETHERTYPE) {
  ------------------
  |  Branch (4667:9): [True: 1.06k, False: 176]
  ------------------
 4668|  1.06k|        flow->dl_type = htons(pt_ns_type(flow->packet_type));
 4669|  1.06k|    }
 4670|  1.23k|    if (!is_ip_any(flow)) {
  ------------------
  |  Branch (4670:9): [True: 1.16k, False: 73]
  ------------------
 4671|  1.16k|        flow->nw_proto = 0;
 4672|  1.16k|    }
 4673|  1.23k|    return 0;
 4674|  1.23k|}
ofp-actions.c:check_DECAP:
 4781|  8.42k|{
 4782|  8.42k|    struct flow *flow = &cp->match->flow;
 4783|  8.42k|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (4783:9): [True: 5.22k, False: 3.20k]
  ------------------
 4784|       |        /* Adjust the packet_type to allow subsequent actions. */
 4785|  5.22k|        flow->packet_type = PACKET_TYPE_BE(OFPHTN_ETHERTYPE,
  ------------------
  |  | 1565|  5.22k|#define PACKET_TYPE_BE(NS, NS_TYPE) (htonl((NS) << 16 | (NS_TYPE)))
  ------------------
 4786|  5.22k|                                           ntohs(flow->dl_type));
 4787|  5.22k|    } else {
 4788|       |        /* The actual packet_type is only known after decapsulation.
 4789|       |         * Do not allow subsequent actions that depend on packet headers. */
 4790|  3.20k|        flow->packet_type = htonl(PT_UNKNOWN);
 4791|  3.20k|        flow->dl_type = OVS_BE16_MAX;
  ------------------
  |  |   42|  3.20k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
 4792|  3.20k|    }
 4793|  8.42k|    return 0;
 4794|  8.42k|}
ofp-actions.c:check_SET_TUNNEL:
 4177|     44|{
 4178|     44|    return 0;
 4179|     44|}
ofp-actions.c:check_SET_QUEUE:
 4299|    109|{
 4300|    109|    return 0;
 4301|    109|}
ofp-actions.c:check_POP_QUEUE:
 4337|     24|{
 4338|     24|    return 0;
 4339|     24|}
ofp-actions.c:check_FIN_TIMEOUT:
 4444|    172|{
 4445|    172|    if (cp->match->flow.nw_proto != IPPROTO_TCP) {
  ------------------
  |  Branch (4445:9): [True: 73, False: 99]
  ------------------
 4446|     73|        inconsistent_match(&cp->usable_protocols);
 4447|     73|    }
 4448|    172|    return 0;
 4449|    172|}
ofp-actions.c:check_RESUBMIT:
 5051|    129|{
 5052|    129|    if (a->with_ct_orig && !is_ct_valid(&cp->match->flow, &cp->match->wc,
  ------------------
  |  Branch (5052:9): [True: 11, False: 118]
  |  Branch (5052:28): [True: 11, False: 0]
  ------------------
 5053|     11|                                        NULL)) {
 5054|     11|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 5055|     11|    }
 5056|    118|    return 0;
 5057|    129|}
ofp-actions.c:check_LEARN:
 5646|  17.6k|{
 5647|  17.6k|    return learn_check(a, cp->match);
 5648|  17.6k|}
ofp-actions.c:check_CONJUNCTION:
 5739|    137|{
 5740|    137|    return 0;
 5741|    137|}
ofp-actions.c:check_MULTIPATH:
 5873|    424|{
 5874|    424|    return multipath_check(a, cp->match);
 5875|    424|}
ofp-actions.c:check_NOTE:
 5959|    132|{
 5960|    132|    return 0;
 5961|    132|}
ofp-actions.c:check_EXIT:
 5996|    155|{
 5997|    155|    return 0;
 5998|    155|}
ofp-actions.c:check_SAMPLE:
 6561|     18|{
 6562|     18|    return 0;
 6563|     18|}
ofp-actions.c:check_CT:
 7068|  2.74k|{
 7069|  2.74k|    struct flow *flow = &cp->match->flow;
 7070|       |
 7071|  2.74k|    if (!dl_type_is_ip_any(get_dl_type(flow))
  ------------------
  |  Branch (7071:9): [True: 296, False: 2.44k]
  ------------------
 7072|  2.44k|        || (flow->ct_state & CS_INVALID && a->flags & NX_CT_F_COMMIT)
  ------------------
  |  Branch (7072:13): [True: 0, False: 2.44k]
  |  Branch (7072:44): [True: 0, False: 0]
  ------------------
 7073|  2.44k|        || (a->alg == IPPORT_FTP && flow->nw_proto != IPPROTO_TCP)
  ------------------
  |  |  695|  4.88k|#define IPPORT_FTP  21
  ------------------
  |  Branch (7073:13): [True: 40, False: 2.40k]
  |  Branch (7073:37): [True: 35, False: 5]
  ------------------
 7074|  2.40k|        || (a->alg == IPPORT_TFTP && flow->nw_proto != IPPROTO_UDP)) {
  ------------------
  |  |  699|  4.81k|#define IPPORT_TFTP  69
  ------------------
  |  Branch (7074:13): [True: 20, False: 2.38k]
  |  Branch (7074:38): [True: 10, False: 10]
  ------------------
 7075|       |        /* We can't downgrade to OF1.0 and expect inconsistent CT actions
 7076|       |         * be silently discarded.  Instead, datapath flow install fails, so
 7077|       |         * it is better to flag inconsistent CT actions as hard errors. */
 7078|    341|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 7079|    341|    }
 7080|       |
 7081|  2.39k|    if (a->zone_src.field) {
  ------------------
  |  Branch (7081:9): [True: 423, False: 1.97k]
  ------------------
 7082|    423|        return mf_check_src(&a->zone_src, cp->match);
 7083|    423|    }
 7084|       |
 7085|  1.97k|    return check_subactions(a->actions, ofpact_ct_get_action_len(a), cp);
 7086|  2.39k|}
ofp-actions.c:check_subactions:
 6123|  1.99k|{
 6124|  1.99k|    struct ofpact_check_params sub = *cp;
 6125|  1.99k|    enum ofperr error = ofpacts_check(ofpacts, ofpacts_len, &sub);
 6126|  1.99k|    cp->usable_protocols &= sub.usable_protocols;
 6127|  1.99k|    return error;
 6128|  1.99k|}
ofp-actions.c:check_CT_CLEAR:
 7122|     95|{
 7123|     95|    return 0;
 7124|     95|}
ofp-actions.c:check_NAT:
 7480|  1.97k|{
 7481|  1.97k|    ovs_be16 dl_type = get_dl_type(&cp->match->flow);
 7482|  1.97k|    if (!dl_type_is_ip_any(dl_type) ||
  ------------------
  |  Branch (7482:9): [True: 0, False: 1.97k]
  ------------------
 7483|  1.97k|        (a->range_af == AF_INET && dl_type != htons(ETH_TYPE_IP)) ||
  ------------------
  |  Branch (7483:10): [True: 1.35k, False: 618]
  |  Branch (7483:36): [True: 182, False: 1.17k]
  ------------------
 7484|  1.79k|        (a->range_af == AF_INET6 && dl_type != htons(ETH_TYPE_IPV6))) {
  ------------------
  |  Branch (7484:10): [True: 0, False: 1.79k]
  |  Branch (7484:37): [True: 0, False: 0]
  ------------------
 7485|    182|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 7486|    182|    }
 7487|  1.79k|    return 0;
 7488|  1.97k|}
ofp-actions.c:check_OUTPUT_TRUNC:
 7550|  1.49k|{
 7551|  1.49k|    return ofpact_check_output_port(a->port, cp->max_ports);
 7552|  1.49k|}
ofp-actions.c:check_CLONE:
 6132|     23|{
 6133|     23|    return check_subactions(a->actions, ofpact_nest_get_action_len(a), cp);
 6134|     23|}
ofp-actions.c:check_CHECK_PKT_LARGER:
 7911|     10|{
 7912|     10|    return 0;
 7913|     10|}
ofp-actions.c:check_METER:
 7601|    340|{
 7602|    340|    uint32_t mid = a->meter_id;
 7603|    340|    return mid == 0 || mid > OFPM13_MAX ? OFPERR_OFPMMFC_INVALID_METER : 0;
  ------------------
  |  Branch (7603:12): [True: 34, False: 306]
  |  Branch (7603:24): [True: 2, False: 304]
  ------------------
 7604|    340|}
ofp-actions.c:check_CLEAR_ACTIONS:
 7635|    294|{
 7636|    294|    return 0;
 7637|    294|}
ofp-actions.c:check_WRITE_ACTIONS:
 7698|  9.54k|{
 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|  9.54k|    struct ofpact_check_params tmp = *cp;
 7702|  9.54k|    return ofpacts_check(a->actions, ofpact_nest_get_action_len(a), &tmp);
 7703|  9.54k|}
ofp-actions.c:check_WRITE_METADATA:
 7794|    236|{
 7795|    236|    return 0;
 7796|    236|}
ofp-actions.c:check_GOTO_TABLE:
 7958|     64|{
 7959|     64|    if ((cp->table_id != 255 && a->table_id <= cp->table_id)
  ------------------
  |  Branch (7959:10): [True: 54, False: 10]
  |  Branch (7959:33): [True: 35, False: 19]
  ------------------
 7960|     35|        || (cp->n_tables != 255 && a->table_id >= cp->n_tables)) {
  ------------------
  |  Branch (7960:13): [True: 0, False: 29]
  |  Branch (7960:36): [True: 0, False: 0]
  ------------------
 7961|     35|        return OFPERR_OFPBIC_BAD_TABLE_ID;
 7962|     35|    }
 7963|     29|    return 0;
 7964|     64|}
ofp-actions.c:ofpacts_verify:
 9006|   110k|{
 9007|   110k|    const struct ofpact *a;
 9008|   110k|    enum ovs_instruction_type inst;
 9009|       |
 9010|   110k|    inst = OVSINST_OFPIT13_METER;
 9011|   131k|    OFPACT_FOR_EACH (a, ofpacts, ofpacts_len) {
  ------------------
  |  |  261|   236k|    for ((POS) = (OFPACTS); (POS) < ofpact_end(OFPACTS, OFPACTS_LEN);  \
  |  |  ------------------
  |  |  |  Branch (261:29): [True: 131k, False: 104k]
  |  |  ------------------
  |  |  262|   125k|         (POS) = ofpact_next(POS))
  ------------------
 9012|   131k|        enum ovs_instruction_type next;
 9013|   131k|        enum ofperr error;
 9014|       |
 9015|   131k|        if (a->type == OFPACT_CONJUNCTION) {
  ------------------
  |  Branch (9015:13): [True: 2.70k, False: 128k]
  ------------------
 9016|  5.87k|            OFPACT_FOR_EACH (a, ofpacts, ofpacts_len) {
  ------------------
  |  |  261|  7.00k|    for ((POS) = (OFPACTS); (POS) < ofpact_end(OFPACTS, OFPACTS_LEN);  \
  |  |  ------------------
  |  |  |  Branch (261:29): [True: 5.87k, False: 1.12k]
  |  |  ------------------
  |  |  262|  4.30k|         (POS) = ofpact_next(POS))
  ------------------
 9017|  5.87k|                if (a->type != OFPACT_CONJUNCTION && a->type != OFPACT_NOTE) {
  ------------------
  |  Branch (9017:21): [True: 4.52k, False: 1.34k]
  |  Branch (9017:54): [True: 1.57k, False: 2.95k]
  ------------------
 9018|  1.57k|                    verify_error(errorp, "\"conjunction\" actions may be used "
 9019|  1.57k|                                 "along with \"note\" but not any other kind "
 9020|  1.57k|                                 "of action (such as the \"%s\" action used "
 9021|  1.57k|                                 "here)", ofpact_name(a->type));
 9022|  1.57k|                    return OFPERR_NXBAC_BAD_CONJUNCTION;
 9023|  1.57k|                }
 9024|  5.87k|            }
 9025|  1.12k|            return 0;
 9026|  2.70k|        }
 9027|       |
 9028|   128k|        error = ofpacts_verify_nested(a, outer_action, errorp);
 9029|   128k|        if (error) {
  ------------------
  |  Branch (9029:13): [True: 2.95k, False: 125k]
  ------------------
 9030|  2.95k|            return error;
 9031|  2.95k|        }
 9032|       |
 9033|   125k|        next = ovs_instruction_type_from_ofpact_type(a->type, version);
 9034|   125k|        if (a > ofpacts
  ------------------
  |  Branch (9034:13): [True: 53.8k, False: 71.7k]
  ------------------
 9035|  53.8k|            && (inst == OVSINST_OFPIT11_APPLY_ACTIONS
  ------------------
  |  Branch (9035:16): [True: 421, False: 53.4k]
  |  Branch (9035:17): [True: 53.1k, False: 725]
  ------------------
 9036|  53.8k|                ? next < inst
 9037|  53.8k|                : next <= inst)) {
 9038|    421|            const char *name = ovs_instruction_name_from_type(inst);
 9039|    421|            const char *next_name = ovs_instruction_name_from_type(next);
 9040|       |
 9041|    421|            if (next == inst) {
  ------------------
  |  Branch (9041:17): [True: 250, False: 171]
  ------------------
 9042|    250|                verify_error(errorp, "duplicate %s instruction not allowed, "
 9043|    250|                             "for OpenFlow 1.1+ compatibility", name);
 9044|    250|            } else {
 9045|    171|                verify_error(errorp, "invalid instruction ordering: "
 9046|    171|                             "%s must appear before %s, "
 9047|    171|                             "for OpenFlow 1.1+ compatibility",
 9048|    171|                             next_name, name);
 9049|    171|            }
 9050|    421|            return OFPERR_OFPBAC_UNSUPPORTED_ORDER;
 9051|    421|        }
 9052|   125k|        if (!((1u << next) & allowed_ovsinsts)) {
  ------------------
  |  Branch (9052:13): [True: 18, False: 125k]
  ------------------
 9053|     18|            const char *name = ovs_instruction_name_from_type(next);
 9054|       |
 9055|     18|            if (next == OVSINST_OFPIT13_METER && version >= OFP15_VERSION) {
  ------------------
  |  Branch (9055:17): [True: 0, False: 18]
  |  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|     18|            } else {
 9059|     18|                verify_error(errorp, "%s instruction not allowed here", name);
 9060|     18|                return OFPERR_OFPBIC_UNSUP_INST;
 9061|     18|            }
 9062|     18|        }
 9063|       |
 9064|   125k|        inst = next;
 9065|   125k|    }
 9066|       |
 9067|   104k|    return 0;
 9068|   110k|}
ofp-actions.c:verify_error:
 8916|  4.96k|{
 8917|  4.96k|    va_list args;
 8918|  4.96k|    va_start(args, format);
 8919|  4.96k|    char *error = xvasprintf(format, args);
 8920|  4.96k|    va_end(args);
 8921|       |
 8922|  4.96k|    if (errorp) {
  ------------------
  |  Branch (8922:9): [True: 0, False: 4.96k]
  ------------------
 8923|      0|        *errorp = error;
 8924|  4.96k|    } else {
 8925|  4.96k|        VLOG_WARN("%s", error);
  ------------------
  |  |  209|  4.96k|#define VLOG_WARN(...) VLOG(VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  280|  4.96k|    do {                                                \
  |  |  |  |  281|  4.96k|        enum vlog_level level__ = LEVEL;                \
  |  |  |  |  282|  4.96k|        if (this_module.min_level >= level__) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (282:13): [True: 0, False: 4.96k]
  |  |  |  |  ------------------
  |  |  |  |  283|      0|            vlog(&this_module, level__, __VA_ARGS__);   \
  |  |  |  |  284|      0|        }                                               \
  |  |  |  |  285|  4.96k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (285:14): [Folded, False: 4.96k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8926|  4.96k|        free(error);
 8927|  4.96k|    }
 8928|  4.96k|}
ofp-actions.c:ofpacts_verify_nested:
 8949|   128k|{
 8950|   128k|    const struct mf_field *field = ofpact_get_mf_dst(a);
 8951|       |
 8952|   128k|    if (field && field_requires_ct(field->id) && outer_action != OFPACT_CT) {
  ------------------
  |  Branch (8952:9): [True: 9.59k, False: 119k]
  |  Branch (8952:18): [True: 751, False: 8.84k]
  |  Branch (8952:50): [True: 87, False: 664]
  ------------------
 8953|     87|        verify_error(errorp, "cannot set CT fields outside of ct action");
 8954|     87|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 8955|     87|    }
 8956|   128k|    if (a->type == OFPACT_NAT) {
  ------------------
  |  Branch (8956:9): [True: 5.86k, False: 122k]
  ------------------
 8957|  5.86k|        if (outer_action != OFPACT_CT) {
  ------------------
  |  Branch (8957:13): [True: 2.60k, False: 3.25k]
  ------------------
 8958|  2.60k|            verify_error(errorp,
 8959|  2.60k|                         "Cannot have NAT action outside of \"ct\" action");
 8960|  2.60k|            return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 8961|  2.60k|        }
 8962|  3.25k|        return 0;
 8963|  5.86k|    }
 8964|       |
 8965|   122k|    if (outer_action) {
  ------------------
  |  Branch (8965:9): [True: 923, False: 121k]
  ------------------
 8966|    923|        ovs_assert(outer_action == OFPACT_WRITE_ACTIONS
  ------------------
  |  |   62|    923|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (8966:20): [True: 0, False: 923]
  ------------------
 8967|    923|                   || outer_action == OFPACT_CT
  ------------------
  |  Branch (8967:23): [True: 923, False: 0]
  ------------------
 8968|      0|                   || outer_action == OFPACT_CLONE);
  ------------------
  |  Branch (8968:23): [True: 0, False: 0]
  ------------------
 8969|       |
 8970|    923|        if (outer_action == OFPACT_CT) {
  ------------------
  |  Branch (8970:13): [True: 923, False: 0]
  ------------------
 8971|    923|            if (!field) {
  ------------------
  |  Branch (8971:17): [True: 191, False: 732]
  ------------------
 8972|    191|                return unsupported_nesting(a->type, outer_action, errorp);
 8973|    732|            } else if (!field_requires_ct(field->id)) {
  ------------------
  |  Branch (8973:24): [True: 68, False: 664]
  ------------------
 8974|     68|                verify_error(errorp,
 8975|     68|                             "%s action doesn't support nested modification "
 8976|     68|                             "of %s", ofpact_name(outer_action), field->name);
 8977|     68|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 8978|     68|            }
 8979|    923|        }
 8980|       |
 8981|    664|        if (a->type == OFPACT_METER) {
  ------------------
  |  Branch (8981:13): [True: 0, False: 664]
  ------------------
 8982|      0|            return unsupported_nesting(a->type, outer_action, errorp);
 8983|      0|        }
 8984|    664|    }
 8985|       |
 8986|   122k|    return 0;
 8987|   122k|}
ofp-actions.c:field_requires_ct:
 8941|  10.3k|{
 8942|  10.3k|    return field == MFF_CT_MARK || field == MFF_CT_LABEL;
  ------------------
  |  Branch (8942:12): [True: 1.41k, False: 8.90k]
  |  Branch (8942:36): [True: 0, False: 8.90k]
  ------------------
 8943|  10.3k|}
ofp-actions.c:unsupported_nesting:
 8933|    191|{
 8934|    191|    verify_error(errorp, "%s action doesn't support nested action %s",
 8935|    191|                 ofpact_name(outer_action), ofpact_name(action));
 8936|    191|    return OFPERR_OFPBAC_BAD_ARGUMENT;
 8937|    191|}
ofp-actions.c:next_load_segment:
 2967|  3.89k|{
 2968|  3.89k|    int n_bits = sf->field->n_bits;
 2969|  3.89k|    int n_bytes = sf->field->n_bytes;
 2970|  3.89k|    int start = dst->ofs + dst->n_bits;
 2971|       |
 2972|  3.89k|    if (start < n_bits) {
  ------------------
  |  Branch (2972:9): [True: 3.22k, False: 669]
  ------------------
 2973|  3.22k|        dst->field = sf->field;
 2974|  3.22k|        dst->ofs = bitwise_scan(ofpact_set_field_mask(sf), n_bytes, 1, start,
  ------------------
  |  |  563|  3.22k|    ALIGNED_CAST(union mf_value *,                                          \
  |  |  ------------------
  |  |  |  |  434|  3.22k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  ------------------
  |  |  564|  3.22k|                 (uint8_t *)(SF)->value +                                   \
  |  |  565|  3.22k|                            ROUND_UP((SF)->field->n_bytes, OFPACT_ALIGNTO))
  ------------------
 2975|  3.22k|                                n_bits);
 2976|  3.22k|        if (dst->ofs < n_bits) {
  ------------------
  |  Branch (2976:13): [True: 1.94k, False: 1.27k]
  ------------------
 2977|  1.94k|            dst->n_bits = bitwise_scan(ofpact_set_field_mask(sf), n_bytes, 0,
  ------------------
  |  |  563|  1.94k|    ALIGNED_CAST(union mf_value *,                                          \
  |  |  ------------------
  |  |  |  |  434|  1.94k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  ------------------
  |  |  564|  1.94k|                 (uint8_t *)(SF)->value +                                   \
  |  |  565|  1.94k|                            ROUND_UP((SF)->field->n_bytes, OFPACT_ALIGNTO))
  ------------------
 2978|  1.94k|                                       dst->ofs + 1,
 2979|  1.94k|                                       MIN(dst->ofs + 64, n_bits)) - dst->ofs;
  ------------------
  |  |   91|  1.94k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (91:20): [True: 1.17k, False: 775]
  |  |  ------------------
  ------------------
 2980|  1.94k|            *value = bitwise_get(sf->value, n_bytes, dst->ofs, dst->n_bits);
 2981|  1.94k|            return true;
 2982|  1.94k|        }
 2983|  3.22k|    }
 2984|  1.94k|    return false;
 2985|  3.89k|}
ofp-actions.c:get_ofpact_map:
 9158|  48.1k|{
 9159|       |    /* OpenFlow 1.0 actions. */
 9160|  48.1k|    static const struct ofpact_map of10[] = {
 9161|  48.1k|        { OFPACT_OUTPUT, 0 },
 9162|  48.1k|        { OFPACT_SET_VLAN_VID, 1 },
 9163|  48.1k|        { OFPACT_SET_VLAN_PCP, 2 },
 9164|  48.1k|        { OFPACT_STRIP_VLAN, 3 },
 9165|  48.1k|        { OFPACT_SET_ETH_SRC, 4 },
 9166|  48.1k|        { OFPACT_SET_ETH_DST, 5 },
 9167|  48.1k|        { OFPACT_SET_IPV4_SRC, 6 },
 9168|  48.1k|        { OFPACT_SET_IPV4_DST, 7 },
 9169|  48.1k|        { OFPACT_SET_IP_DSCP, 8 },
 9170|  48.1k|        { OFPACT_SET_L4_SRC_PORT, 9 },
 9171|  48.1k|        { OFPACT_SET_L4_DST_PORT, 10 },
 9172|  48.1k|        { OFPACT_ENQUEUE, 11 },
 9173|  48.1k|        { 0, -1 },
 9174|  48.1k|    };
 9175|       |
 9176|       |    /* OpenFlow 1.1 actions. */
 9177|  48.1k|    static const struct ofpact_map of11[] = {
 9178|  48.1k|        { OFPACT_OUTPUT, 0 },
 9179|  48.1k|        { OFPACT_SET_VLAN_VID, 1 },
 9180|  48.1k|        { OFPACT_SET_VLAN_PCP, 2 },
 9181|  48.1k|        { OFPACT_SET_ETH_SRC, 3 },
 9182|  48.1k|        { OFPACT_SET_ETH_DST, 4 },
 9183|  48.1k|        { OFPACT_SET_IPV4_SRC, 5 },
 9184|  48.1k|        { OFPACT_SET_IPV4_DST, 6 },
 9185|  48.1k|        { OFPACT_SET_IP_DSCP, 7 },
 9186|  48.1k|        { OFPACT_SET_IP_ECN, 8 },
 9187|  48.1k|        { OFPACT_SET_L4_SRC_PORT, 9 },
 9188|  48.1k|        { OFPACT_SET_L4_DST_PORT, 10 },
 9189|       |        /* OFPAT_COPY_TTL_OUT (11) not supported. */
 9190|       |        /* OFPAT_COPY_TTL_IN (12) not supported. */
 9191|  48.1k|        { OFPACT_SET_MPLS_LABEL, 13 },
 9192|  48.1k|        { OFPACT_SET_MPLS_TC, 14 },
 9193|  48.1k|        { OFPACT_SET_MPLS_TTL, 15 },
 9194|  48.1k|        { OFPACT_DEC_MPLS_TTL, 16 },
 9195|  48.1k|        { OFPACT_PUSH_VLAN, 17 },
 9196|  48.1k|        { OFPACT_STRIP_VLAN, 18 },
 9197|  48.1k|        { OFPACT_PUSH_MPLS, 19 },
 9198|  48.1k|        { OFPACT_POP_MPLS, 20 },
 9199|  48.1k|        { OFPACT_SET_QUEUE, 21 },
 9200|  48.1k|        { OFPACT_GROUP, 22 },
 9201|  48.1k|        { OFPACT_SET_IP_TTL, 23 },
 9202|  48.1k|        { OFPACT_DEC_TTL, 24 },
 9203|  48.1k|        { 0, -1 },
 9204|  48.1k|    };
 9205|       |
 9206|       |    /* OpenFlow 1.2, 1.3, and 1.4 actions. */
 9207|  48.1k|    static const struct ofpact_map of12[] = {
 9208|  48.1k|        { OFPACT_OUTPUT, 0 },
 9209|       |        /* OFPAT_COPY_TTL_OUT (11) not supported. */
 9210|       |        /* OFPAT_COPY_TTL_IN (12) not supported. */
 9211|  48.1k|        { OFPACT_SET_MPLS_TTL, 15 },
 9212|  48.1k|        { OFPACT_DEC_MPLS_TTL, 16 },
 9213|  48.1k|        { OFPACT_PUSH_VLAN, 17 },
 9214|  48.1k|        { OFPACT_STRIP_VLAN, 18 },
 9215|  48.1k|        { OFPACT_PUSH_MPLS, 19 },
 9216|  48.1k|        { OFPACT_POP_MPLS, 20 },
 9217|  48.1k|        { OFPACT_SET_QUEUE, 21 },
 9218|  48.1k|        { OFPACT_GROUP, 22 },
 9219|  48.1k|        { OFPACT_SET_IP_TTL, 23 },
 9220|  48.1k|        { OFPACT_DEC_TTL, 24 },
 9221|  48.1k|        { OFPACT_SET_FIELD, 25 },
 9222|       |        /* OF1.3+ OFPAT_PUSH_PBB (26) not supported. */
 9223|       |        /* OF1.3+ OFPAT_POP_PBB (27) not supported. */
 9224|  48.1k|        { 0, -1 },
 9225|  48.1k|    };
 9226|       |
 9227|  48.1k|    switch (version) {
 9228|  2.12k|    case OFP10_VERSION:
  ------------------
  |  Branch (9228:5): [True: 2.12k, False: 46.0k]
  ------------------
 9229|  2.12k|        return of10;
 9230|       |
 9231|  11.6k|    case OFP11_VERSION:
  ------------------
  |  Branch (9231:5): [True: 11.6k, False: 36.5k]
  ------------------
 9232|  11.6k|        return of11;
 9233|       |
 9234|  27.8k|    case OFP12_VERSION:
  ------------------
  |  Branch (9234:5): [True: 27.8k, False: 20.3k]
  ------------------
 9235|  27.8k|    case OFP13_VERSION:
  ------------------
  |  Branch (9235:5): [True: 14, False: 48.1k]
  ------------------
 9236|  33.0k|    case OFP14_VERSION:
  ------------------
  |  Branch (9236:5): [True: 5.17k, False: 42.9k]
  ------------------
 9237|  34.4k|    case OFP15_VERSION:
  ------------------
  |  Branch (9237:5): [True: 1.39k, False: 46.7k]
  ------------------
 9238|  34.4k|    default:
  ------------------
  |  Branch (9238:5): [True: 0, False: 48.1k]
  ------------------
 9239|  34.4k|        return of12;
 9240|  48.1k|    }
 9241|  48.1k|}
ofp-actions.c:ofpact_format:
 9465|   137k|{
 9466|   137k|    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|  7.77k|    OFPACT(OUTPUT,          ofpact_output,      ofpact, "output")       \
  |  |  ------------------
  |  |  |  | 9468|  7.77k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 7.77k, False: 129k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  7.77k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  7.77k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  7.77k|            break;
  |  |  ------------------
  |  |   65|  7.77k|    OFPACT(GROUP,           ofpact_group,       ofpact, "group")        \
  |  |  ------------------
  |  |  |  | 9468|    380|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 380, False: 136k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    380|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    380|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    380|            break;
  |  |  ------------------
  |  |   66|  3.81k|    OFPACT(CONTROLLER,      ofpact_controller,  userdata, "controller") \
  |  |  ------------------
  |  |  |  | 9468|  3.81k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 3.81k, False: 133k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  3.81k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  3.81k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  3.81k|            break;
  |  |  ------------------
  |  |   67|  3.81k|    OFPACT(ENQUEUE,         ofpact_enqueue,     ofpact, "enqueue")      \
  |  |  ------------------
  |  |  |  | 9468|    366|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 366, False: 136k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    366|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    366|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    366|            break;
  |  |  ------------------
  |  |   68|    387|    OFPACT(OUTPUT_REG,      ofpact_output_reg,  ofpact, "output_reg")   \
  |  |  ------------------
  |  |  |  | 9468|    387|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 387, False: 136k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    387|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    387|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    387|            break;
  |  |  ------------------
  |  |   69|    997|    OFPACT(BUNDLE,          ofpact_bundle,      members, "bundle")      \
  |  |  ------------------
  |  |  |  | 9468|    997|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 997, False: 136k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    997|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    997|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    997|            break;
  |  |  ------------------
  |  |   70|    997|                                                                        \
  |  |   71|    997|    /* Header changes. */                                               \
  |  |   72|  6.38k|    OFPACT(SET_FIELD,       ofpact_set_field,   ofpact, "set_field")    \
  |  |  ------------------
  |  |  |  | 9468|  6.38k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 6.38k, False: 130k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  6.38k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  6.38k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  6.38k|            break;
  |  |  ------------------
  |  |   73|  6.38k|    OFPACT(SET_VLAN_VID,    ofpact_vlan_vid,    ofpact, "set_vlan_vid") \
  |  |  ------------------
  |  |  |  | 9468|  5.10k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 5.10k, False: 132k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  5.10k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  5.10k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  5.10k|            break;
  |  |  ------------------
  |  |   74|  5.10k|    OFPACT(SET_VLAN_PCP,    ofpact_vlan_pcp,    ofpact, "set_vlan_pcp") \
  |  |  ------------------
  |  |  |  | 9468|  2.93k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 2.93k, False: 134k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  2.93k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  2.93k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  2.93k|            break;
  |  |  ------------------
  |  |   75|  5.96k|    OFPACT(STRIP_VLAN,      ofpact_null,        ofpact, "strip_vlan")   \
  |  |  ------------------
  |  |  |  | 9468|  5.96k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 5.96k, False: 131k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  5.96k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  5.96k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  5.96k|            break;
  |  |  ------------------
  |  |   76|  5.96k|    OFPACT(PUSH_VLAN,       ofpact_push_vlan,   ofpact, "push_vlan")    \
  |  |  ------------------
  |  |  |  | 9468|  1.12k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.12k, False: 136k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.12k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.12k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.12k|            break;
  |  |  ------------------
  |  |   77|  1.12k|    OFPACT(SET_ETH_SRC,     ofpact_mac,         ofpact, "mod_dl_src")   \
  |  |  ------------------
  |  |  |  | 9468|     91|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 91, False: 137k]
  |  |  |  |  ------------------
  |  |  |  | 9469|     91|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|     91|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|     91|            break;
  |  |  ------------------
  |  |   78|     91|    OFPACT(SET_ETH_DST,     ofpact_mac,         ofpact, "mod_dl_dst")   \
  |  |  ------------------
  |  |  |  | 9468|     68|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 68, False: 137k]
  |  |  |  |  ------------------
  |  |  |  | 9469|     68|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|     68|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|     68|            break;
  |  |  ------------------
  |  |   79|  1.29k|    OFPACT(SET_IPV4_SRC,    ofpact_ipv4,        ofpact, "mod_nw_src")   \
  |  |  ------------------
  |  |  |  | 9468|  1.29k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.29k, False: 136k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.29k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.29k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.29k|            break;
  |  |  ------------------
  |  |   80|  3.52k|    OFPACT(SET_IPV4_DST,    ofpact_ipv4,        ofpact, "mod_nw_dst")   \
  |  |  ------------------
  |  |  |  | 9468|  3.52k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 3.52k, False: 133k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  3.52k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  3.52k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  3.52k|            break;
  |  |  ------------------
  |  |   81|  5.09k|    OFPACT(SET_IP_DSCP,     ofpact_dscp,        ofpact, "mod_nw_tos")   \
  |  |  ------------------
  |  |  |  | 9468|  5.09k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 5.09k, False: 132k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  5.09k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  5.09k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  5.09k|            break;
  |  |  ------------------
  |  |   82|  5.09k|    OFPACT(SET_IP_ECN,      ofpact_ecn,         ofpact, "mod_nw_ecn")   \
  |  |  ------------------
  |  |  |  | 9468|  1.16k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.16k, False: 136k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.16k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.16k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.16k|            break;
  |  |  ------------------
  |  |   83|  1.21k|    OFPACT(SET_IP_TTL,      ofpact_ip_ttl,      ofpact, "mod_nw_ttl")   \
  |  |  ------------------
  |  |  |  | 9468|  1.21k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.21k, False: 136k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.21k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.21k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.21k|            break;
  |  |  ------------------
  |  |   84|  4.47k|    OFPACT(SET_L4_SRC_PORT, ofpact_l4_port,     ofpact, "mod_tp_src")   \
  |  |  ------------------
  |  |  |  | 9468|  4.47k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 4.47k, False: 132k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  4.47k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  4.47k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  4.47k|            break;
  |  |  ------------------
  |  |   85|  5.75k|    OFPACT(SET_L4_DST_PORT, ofpact_l4_port,     ofpact, "mod_tp_dst")   \
  |  |  ------------------
  |  |  |  | 9468|  5.75k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 5.75k, False: 131k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  5.75k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  5.75k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  5.75k|            break;
  |  |  ------------------
  |  |   86|  5.75k|    OFPACT(REG_MOVE,        ofpact_reg_move,    ofpact, "move")         \
  |  |  ------------------
  |  |  |  | 9468|    334|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 334, False: 136k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    334|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    334|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    334|            break;
  |  |  ------------------
  |  |   87|    334|    OFPACT(STACK_PUSH,      ofpact_stack,       ofpact, "push")         \
  |  |  ------------------
  |  |  |  | 9468|      6|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 6, False: 137k]
  |  |  |  |  ------------------
  |  |  |  | 9469|      6|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|      6|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|      6|            break;
  |  |  ------------------
  |  |   88|    261|    OFPACT(STACK_POP,       ofpact_stack,       ofpact, "pop")          \
  |  |  ------------------
  |  |  |  | 9468|    261|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 261, False: 137k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    261|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    261|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    261|            break;
  |  |  ------------------
  |  |   89|  3.12k|    OFPACT(DEC_TTL,         ofpact_cnt_ids,     cnt_ids, "dec_ttl")     \
  |  |  ------------------
  |  |  |  | 9468|  3.12k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 3.12k, False: 134k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  3.12k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  3.12k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  3.12k|            break;
  |  |  ------------------
  |  |   90|  3.12k|    OFPACT(SET_MPLS_LABEL,  ofpact_mpls_label,  ofpact, "set_mpls_label") \
  |  |  ------------------
  |  |  |  | 9468|    418|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 418, False: 136k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    418|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    418|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    418|            break;
  |  |  ------------------
  |  |   91|    544|    OFPACT(SET_MPLS_TC,     ofpact_mpls_tc,     ofpact, "set_mpls_tc")  \
  |  |  ------------------
  |  |  |  | 9468|    544|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 544, False: 136k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    544|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    544|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    544|            break;
  |  |  ------------------
  |  |   92|  1.67k|    OFPACT(SET_MPLS_TTL,    ofpact_mpls_ttl,    ofpact, "set_mpls_ttl") \
  |  |  ------------------
  |  |  |  | 9468|  1.67k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.67k, False: 135k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.67k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.67k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.67k|            break;
  |  |  ------------------
  |  |   93|  3.99k|    OFPACT(DEC_MPLS_TTL,    ofpact_null,        ofpact, "dec_mpls_ttl") \
  |  |  ------------------
  |  |  |  | 9468|  3.99k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 3.99k, False: 133k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  3.99k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  3.99k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  3.99k|            break;
  |  |  ------------------
  |  |   94|  6.51k|    OFPACT(PUSH_MPLS,       ofpact_push_mpls,   ofpact, "push_mpls")    \
  |  |  ------------------
  |  |  |  | 9468|  6.51k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 6.51k, False: 130k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  6.51k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  6.51k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  6.51k|            break;
  |  |  ------------------
  |  |   95|  6.51k|    OFPACT(POP_MPLS,        ofpact_pop_mpls,    ofpact, "pop_mpls")     \
  |  |  ------------------
  |  |  |  | 9468|  3.90k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 3.90k, False: 133k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  3.90k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  3.90k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  3.90k|            break;
  |  |  ------------------
  |  |   96|  3.90k|    OFPACT(DEC_NSH_TTL,     ofpact_null,        ofpact, "dec_nsh_ttl")  \
  |  |  ------------------
  |  |  |  | 9468|    678|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 678, False: 136k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    678|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    678|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    678|            break;
  |  |  ------------------
  |  |   97|    678|    OFPACT(DELETE_FIELD,    ofpact_delete_field, ofpact, "delete_field") \
  |  |  ------------------
  |  |  |  | 9468|      8|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 8, False: 137k]
  |  |  |  |  ------------------
  |  |  |  | 9469|      8|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|      8|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|      8|            break;
  |  |  ------------------
  |  |   98|      8|                                                                        \
  |  |   99|      8|    /* Generic encap & decap */                                         \
  |  |  100|  1.54k|    OFPACT(ENCAP,           ofpact_encap,       props, "encap")         \
  |  |  ------------------
  |  |  |  | 9468|  1.54k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.54k, False: 135k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.54k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.54k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.54k|            break;
  |  |  ------------------
  |  |  101|  4.79k|    OFPACT(DECAP,           ofpact_decap,       ofpact, "decap")        \
  |  |  ------------------
  |  |  |  | 9468|  4.79k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 4.79k, False: 132k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  4.79k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  4.79k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  4.79k|            break;
  |  |  ------------------
  |  |  102|  4.79k|                                                                        \
  |  |  103|  4.79k|    /* Metadata. */                                                     \
  |  |  104|  4.79k|    OFPACT(SET_TUNNEL,      ofpact_tunnel,      ofpact, "set_tunnel")   \
  |  |  ------------------
  |  |  |  | 9468|    168|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 168, False: 137k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    168|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    168|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    168|            break;
  |  |  ------------------
  |  |  105|    682|    OFPACT(SET_QUEUE,       ofpact_queue,       ofpact, "set_queue")    \
  |  |  ------------------
  |  |  |  | 9468|    682|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 682, False: 136k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    682|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    682|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    682|            break;
  |  |  ------------------
  |  |  106|    682|    OFPACT(POP_QUEUE,       ofpact_null,        ofpact, "pop_queue")    \
  |  |  ------------------
  |  |  |  | 9468|    248|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 248, False: 137k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    248|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    248|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    248|            break;
  |  |  ------------------
  |  |  107|    715|    OFPACT(FIN_TIMEOUT,     ofpact_fin_timeout, ofpact, "fin_timeout")  \
  |  |  ------------------
  |  |  |  | 9468|    715|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 715, False: 136k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    715|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    715|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    715|            break;
  |  |  ------------------
  |  |  108|    715|                                                                        \
  |  |  109|    715|    /* Flow table interaction. */                                       \
  |  |  110|  2.05k|    OFPACT(RESUBMIT,        ofpact_resubmit,    ofpact, "resubmit")     \
  |  |  ------------------
  |  |  |  | 9468|  2.05k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 2.05k, False: 135k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  2.05k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  2.05k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  2.05k|            break;
  |  |  ------------------
  |  |  111|  17.4k|    OFPACT(LEARN,           ofpact_learn,       specs, "learn")         \
  |  |  ------------------
  |  |  |  | 9468|  17.4k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 17.4k, False: 119k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  17.4k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  17.4k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  17.4k|            break;
  |  |  ------------------
  |  |  112|  17.4k|    OFPACT(CONJUNCTION,     ofpact_conjunction, ofpact, "conjunction")  \
  |  |  ------------------
  |  |  |  | 9468|  1.22k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.22k, False: 136k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.22k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.22k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.22k|            break;
  |  |  ------------------
  |  |  113|  1.22k|                                                                        \
  |  |  114|  1.22k|    /* Arithmetic. */                                                   \
  |  |  115|  2.58k|    OFPACT(MULTIPATH,       ofpact_multipath,   ofpact, "multipath")    \
  |  |  ------------------
  |  |  |  | 9468|  2.58k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 2.58k, False: 134k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  2.58k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  2.58k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  2.58k|            break;
  |  |  ------------------
  |  |  116|  2.58k|                                                                        \
  |  |  117|  2.58k|    /* Other. */                                                        \
  |  |  118|  2.64k|    OFPACT(NOTE,            ofpact_note,        data, "note")           \
  |  |  ------------------
  |  |  |  | 9468|  2.64k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 2.64k, False: 134k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  2.64k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  2.64k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  2.64k|            break;
  |  |  ------------------
  |  |  119|  2.64k|    OFPACT(EXIT,            ofpact_null,        ofpact, "exit")         \
  |  |  ------------------
  |  |  |  | 9468|  1.97k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.97k, False: 135k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.97k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.97k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.97k|            break;
  |  |  ------------------
  |  |  120|  1.97k|    OFPACT(SAMPLE,          ofpact_sample,      ofpact, "sample")       \
  |  |  ------------------
  |  |  |  | 9468|  1.60k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.60k, False: 135k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.60k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.60k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.60k|            break;
  |  |  ------------------
  |  |  121|  3.08k|    OFPACT(UNROLL_XLATE,    ofpact_unroll_xlate, ofpact, "unroll_xlate") \
  |  |  ------------------
  |  |  |  | 9468|  3.08k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 3.08k, False: 134k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  3.08k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  3.08k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  3.08k|            break;
  |  |  ------------------
  |  |  122|  4.88k|    OFPACT(CT,              ofpact_conntrack,   ofpact, "ct")           \
  |  |  ------------------
  |  |  |  | 9468|  4.88k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 4.88k, False: 132k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  4.88k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  4.88k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  4.88k|            break;
  |  |  ------------------
  |  |  123|  4.88k|    OFPACT(CT_CLEAR,        ofpact_null,        ofpact, "ct_clear")     \
  |  |  ------------------
  |  |  |  | 9468|    104|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 104, False: 137k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    104|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    104|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    104|            break;
  |  |  ------------------
  |  |  124|    104|    OFPACT(NAT,             ofpact_nat,         ofpact, "nat")          \
  |  |  ------------------
  |  |  |  | 9468|      0|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 0, False: 137k]
  |  |  |  |  ------------------
  |  |  |  | 9469|      0|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|      0|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|      0|            break;
  |  |  ------------------
  |  |  125|  1.50k|    OFPACT(OUTPUT_TRUNC,    ofpact_output_trunc,ofpact, "output_trunc") \
  |  |  ------------------
  |  |  |  | 9468|  1.50k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.50k, False: 135k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.50k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.50k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.50k|            break;
  |  |  ------------------
  |  |  126|  1.50k|    OFPACT(CLONE,           ofpact_nest,        actions, "clone")       \
  |  |  ------------------
  |  |  |  | 9468|    497|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 497, False: 136k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    497|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    497|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    497|            break;
  |  |  ------------------
  |  |  127|    497|    OFPACT(CHECK_PKT_LARGER, ofpact_check_pkt_larger, ofpact,           \
  |  |  ------------------
  |  |  |  | 9468|    495|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 495, False: 136k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    495|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    495|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    495|            break;
  |  |  ------------------
  |  |  128|    495|           "check_pkt_larger")                                          \
  |  |  129|    495|                                                                        \
  |  |  130|    495|    /* Debugging actions.                                               \
  |  |  131|    495|     *                                                                  \
  |  |  132|    495|     * These are intentionally undocumented, subject to change, and     \
  |  |  133|    495|     * only accepted if ovs-vswitchd is started with --enable-dummy. */ \
  |  |  134|    495|    OFPACT(DEBUG_RECIRC, ofpact_null,           ofpact, "debug_recirc") \
  |  |  ------------------
  |  |  |  | 9468|      0|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 0, False: 137k]
  |  |  |  |  ------------------
  |  |  |  | 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: 137k]
  |  |  |  |  ------------------
  |  |  |  | 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|    357|    OFPACT(METER,           ofpact_meter,       ofpact, "meter")        \
  |  |  ------------------
  |  |  |  | 9468|    357|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 357, False: 136k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    357|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    357|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    357|            break;
  |  |  ------------------
  |  |  139|    357|    OFPACT(CLEAR_ACTIONS,   ofpact_null,        ofpact, "clear_actions") \
  |  |  ------------------
  |  |  |  | 9468|    294|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 294, False: 137k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    294|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    294|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    294|            break;
  |  |  ------------------
  |  |  140|  8.68k|    OFPACT(WRITE_ACTIONS,   ofpact_nest,        actions, "write_actions") \
  |  |  ------------------
  |  |  |  | 9468|  8.68k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 8.68k, False: 128k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  8.68k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  8.68k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  8.68k|            break;
  |  |  ------------------
  |  |  141|  8.68k|    OFPACT(WRITE_METADATA,  ofpact_metadata,    ofpact, "write_metadata") \
  |  |  ------------------
  |  |  |  | 9468|    280|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 280, False: 137k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    280|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    280|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    280|            break;
  |  |  ------------------
  |  |  142|    280|    OFPACT(GOTO_TABLE,      ofpact_goto_table,  ofpact, "goto_table")
  |  |  ------------------
  |  |  |  | 9468|     29|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 29, False: 137k]
  |  |  |  |  ------------------
  |  |  |  | 9469|     29|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|     29|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|     29|            break;
  |  |  ------------------
  ------------------
 9472|      0|#undef OFPACT
 9473|      0|    default:
  ------------------
  |  Branch (9473:5): [True: 0, False: 137k]
  ------------------
 9474|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 9475|   137k|    }
 9476|   137k|}
ofp-actions.c:format_OUTPUT:
  704|  7.77k|{
  705|  7.77k|    if (ofp_to_u16(a->port) < ofp_to_u16(OFPP_MAX)) {
  ------------------
  |  |   33|  7.77k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|  7.77k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (705:9): [True: 4.08k, False: 3.69k]
  ------------------
  706|  4.08k|        ds_put_format(fp->s, "%soutput:%s", colors.special, colors.end);
  707|  4.08k|    }
  708|  7.77k|    ofputil_format_port(a->port, fp->port_map, fp->s);
  709|  7.77k|    if (a->port == OFPP_CONTROLLER) {
  ------------------
  |  |   45|  7.77k|#define OFPP_CONTROLLER OFP_PORT_C(0xfffd) /* Send to controller. */
  |  |  ------------------
  |  |  |  |  157|  7.77k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (709:9): [True: 976, False: 6.79k]
  ------------------
  710|       |        ds_put_format(fp->s, ":%"PRIu16, a->max_len);
  711|    976|    }
  712|  7.77k|}
ofp-actions.c:format_GROUP:
  748|    380|{
  749|       |    ds_put_format(fp->s, "%sgroup:%s%"PRIu32,
  750|    380|                  colors.special, colors.end, a->group_id);
  751|    380|}
ofp-actions.c:format_CONTROLLER:
 1029|  3.81k|{
 1030|  3.81k|    if (a->reason == OFPR_ACTION && !a->controller_id && !a->userdata_len
  ------------------
  |  Branch (1030:9): [True: 1.23k, False: 2.57k]
  |  Branch (1030:37): [True: 973, False: 263]
  |  Branch (1030:58): [True: 893, False: 80]
  ------------------
 1031|    893|        && !a->pause && a->meter_id == NX_CTLR_NO_METER) {
  ------------------
  |  |  307|    537|#define NX_CTLR_NO_METER 0
  ------------------
  |  Branch (1031:12): [True: 537, False: 356]
  |  Branch (1031:25): [True: 307, False: 230]
  ------------------
 1032|    307|        ds_put_format(fp->s, "%sCONTROLLER:%s%"PRIu16,
 1033|    307|                      colors.special, colors.end, a->max_len);
 1034|  3.50k|    } else {
 1035|  3.50k|        enum ofp_packet_in_reason reason = a->reason;
 1036|       |
 1037|  3.50k|        ds_put_format(fp->s, "%scontroller(%s", colors.paren, colors.end);
 1038|  3.50k|        if (reason != OFPR_ACTION) {
  ------------------
  |  Branch (1038:13): [True: 2.57k, False: 929]
  ------------------
 1039|  2.57k|            char reasonbuf[OFPUTIL_PACKET_IN_REASON_BUFSIZE];
 1040|       |
 1041|  2.57k|            ds_put_format(fp->s, "%sreason=%s%s,", colors.param, colors.end,
 1042|  2.57k|                          ofputil_packet_in_reason_to_string(
 1043|  2.57k|                              reason, reasonbuf, sizeof reasonbuf));
 1044|  2.57k|        }
 1045|  3.50k|        if (a->max_len != UINT16_MAX) {
  ------------------
  |  Branch (1045:13): [True: 3.01k, False: 491]
  ------------------
 1046|  3.01k|            ds_put_format(fp->s, "%smax_len=%s%"PRIu16",",
 1047|  3.01k|                          colors.param, colors.end, a->max_len);
 1048|  3.01k|        }
 1049|  3.50k|        if (a->controller_id != 0) {
  ------------------
  |  Branch (1049:13): [True: 2.22k, False: 1.28k]
  ------------------
 1050|  2.22k|            ds_put_format(fp->s, "%sid=%s%"PRIu16",",
 1051|  2.22k|                          colors.param, colors.end, a->controller_id);
 1052|  2.22k|        }
 1053|  3.50k|        if (a->userdata_len) {
  ------------------
  |  Branch (1053:13): [True: 80, False: 3.42k]
  ------------------
 1054|     80|            ds_put_format(fp->s, "%suserdata=%s", colors.param, colors.end);
 1055|     80|            ds_put_hex_with_delimiter(fp->s, a->userdata, a->userdata_len,
 1056|     80|                                      ".");
 1057|     80|            ds_put_char(fp->s, ',');
 1058|     80|        }
 1059|  3.50k|        if (a->pause) {
  ------------------
  |  Branch (1059:13): [True: 356, False: 3.14k]
  ------------------
 1060|    356|            ds_put_format(fp->s, "%spause%s,", colors.value, colors.end);
 1061|    356|        }
 1062|  3.50k|        if (a->meter_id != NX_CTLR_NO_METER) {
  ------------------
  |  |  307|  3.50k|#define NX_CTLR_NO_METER 0
  ------------------
  |  Branch (1062:13): [True: 230, False: 3.27k]
  ------------------
 1063|    230|            ds_put_format(fp->s, "%smeter_id=%s%"PRIu32",",
 1064|    230|                          colors.param, colors.end, a->meter_id);
 1065|    230|        }
 1066|  3.50k|        ds_chomp(fp->s, ',');
 1067|  3.50k|        ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 1068|  3.50k|    }
 1069|  3.81k|}
ofp-actions.c:format_ENQUEUE:
 1152|    366|{
 1153|    366|    ds_put_format(fp->s, "%senqueue:%s", colors.param, colors.end);
 1154|    366|    ofputil_format_port(a->port, fp->port_map, fp->s);
 1155|       |    ds_put_format(fp->s, ":%"PRIu32, a->queue);
 1156|    366|}
ofp-actions.c:format_OUTPUT_REG:
 1318|    387|{
 1319|    387|    ds_put_format(fp->s, "%soutput:%s", colors.special, colors.end);
 1320|    387|    mf_format_subfield(&a->src, fp->s);
 1321|    387|}
ofp-actions.c:format_BUNDLE:
 1545|    997|{
 1546|    997|    bundle_format(a, fp->port_map, fp->s);
 1547|    997|}
ofp-actions.c:format_SET_FIELD:
 3326|  6.38k|{
 3327|  6.38k|    if (a->ofpact.raw == NXAST_RAW_REG_LOAD) {
  ------------------
  |  Branch (3327:9): [True: 1.94k, False: 4.43k]
  ------------------
 3328|  1.94k|        struct mf_subfield dst;
 3329|  1.94k|        uint64_t value;
 3330|       |
 3331|  1.94k|        dst.ofs = dst.n_bits = 0;
 3332|  3.89k|        while (next_load_segment(a, &dst, &value)) {
  ------------------
  |  Branch (3332:16): [True: 1.94k, False: 1.94k]
  ------------------
 3333|  1.94k|            ds_put_format(fp->s, "%sload:%s%#"PRIx64"%s->%s",
 3334|  1.94k|                          colors.special, colors.end, value,
 3335|  1.94k|                          colors.special, colors.end);
 3336|  1.94k|            mf_format_subfield(&dst, fp->s);
 3337|  1.94k|            ds_put_char(fp->s, ',');
 3338|  1.94k|        }
 3339|  1.94k|        ds_chomp(fp->s, ',');
 3340|  4.43k|    } else {
 3341|  4.43k|        ds_put_format(fp->s, "%sset_field:%s", colors.special, colors.end);
 3342|  4.43k|        mf_format(a->field, a->value, ofpact_set_field_mask(a),
  ------------------
  |  |  563|  4.43k|    ALIGNED_CAST(union mf_value *,                                          \
  |  |  ------------------
  |  |  |  |  434|  4.43k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  ------------------
  |  |  564|  4.43k|                 (uint8_t *)(SF)->value +                                   \
  |  |  565|  4.43k|                            ROUND_UP((SF)->field->n_bytes, OFPACT_ALIGNTO))
  ------------------
 3343|  4.43k|                  fp->port_map, fp->s);
 3344|  4.43k|        ds_put_format(fp->s, "%s->%s%s",
 3345|  4.43k|                      colors.special, colors.end, a->field->name);
 3346|  4.43k|    }
 3347|  6.38k|}
ofp-actions.c:format_SET_VLAN_VID:
 1641|  5.10k|{
 1642|  5.10k|    ds_put_format(fp->s, "%s%s:%s%"PRIu16, colors.param,
 1643|  5.10k|                  a->push_vlan_if_needed ? "mod_vlan_vid" : "set_vlan_vid",
  ------------------
  |  Branch (1643:19): [True: 4.92k, False: 182]
  ------------------
 1644|  5.10k|                  colors.end, a->vlan_vid);
 1645|  5.10k|}
ofp-actions.c:format_SET_VLAN_PCP:
 1749|  2.93k|{
 1750|  2.93k|    ds_put_format(fp->s, "%s%s:%s%"PRIu8, colors.param,
 1751|  2.93k|                  a->push_vlan_if_needed ? "mod_vlan_pcp" : "set_vlan_pcp",
  ------------------
  |  Branch (1751:19): [True: 1.96k, False: 972]
  ------------------
 1752|  2.93k|                  colors.end, a->vlan_pcp);
 1753|  2.93k|}
ofp-actions.c:format_STRIP_VLAN:
 1816|  5.96k|{
 1817|  5.96k|    ds_put_format(fp->s, (a->ofpact.raw == OFPAT_RAW11_POP_VLAN
  ------------------
  |  Branch (1817:27): [True: 3.04k, False: 2.91k]
  ------------------
 1818|  5.96k|                    ? "%spop_vlan%s"
 1819|  5.96k|                    : "%sstrip_vlan%s"),
 1820|  5.96k|                  colors.value, colors.end);
 1821|  5.96k|}
ofp-actions.c:format_PUSH_VLAN:
 1886|  1.12k|{
 1887|  1.12k|    ds_put_format(fp->s, "%spush_vlan:%s%#"PRIx16,
 1888|       |                  colors.param, colors.end, ntohs(push_vlan->ethertype));
 1889|  1.12k|}
ofp-actions.c:format_SET_ETH_SRC:
 1982|     91|{
 1983|     91|    ds_put_format(fp->s, "%smod_dl_src:%s"ETH_ADDR_FMT,
  ------------------
  |  |  370|     91|    "%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8
  ------------------
 1984|     91|                  colors.param, colors.end, ETH_ADDR_ARGS(a->mac));
  ------------------
  |  |  371|     91|#define ETH_ADDR_ARGS(EA) ETH_ADDR_BYTES_ARGS((EA).ea)
  |  |  ------------------
  |  |  |  |  373|     91|         (EAB)[0], (EAB)[1], (EAB)[2], (EAB)[3], (EAB)[4], (EAB)[5]
  |  |  ------------------
  ------------------
 1985|     91|}
ofp-actions.c:format_SET_ETH_DST:
 1990|     68|{
 1991|     68|    ds_put_format(fp->s, "%smod_dl_dst:%s"ETH_ADDR_FMT,
  ------------------
  |  |  370|     68|    "%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8
  ------------------
 1992|     68|                  colors.param, colors.end, ETH_ADDR_ARGS(a->mac));
  ------------------
  |  |  371|     68|#define ETH_ADDR_ARGS(EA) ETH_ADDR_BYTES_ARGS((EA).ea)
  |  |  ------------------
  |  |  |  |  373|     68|         (EAB)[0], (EAB)[1], (EAB)[2], (EAB)[3], (EAB)[4], (EAB)[5]
  |  |  ------------------
  ------------------
 1993|     68|}
ofp-actions.c:format_SET_IPV4_SRC:
 2074|  1.29k|{
 2075|  1.29k|    ds_put_format(fp->s, "%smod_nw_src:%s"IP_FMT,
  ------------------
  |  |  628|  1.29k|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
 2076|       |                  colors.param, colors.end, IP_ARGS(a->ipv4));
  ------------------
  |  |  630|  1.29k|    ntohl(ip) >> 24,                            \
  |  |  631|  1.29k|    (ntohl(ip) >> 16) & 0xff,                   \
  |  |  632|  1.29k|    (ntohl(ip) >> 8) & 0xff,                    \
  |  |  633|  1.29k|    ntohl(ip) & 0xff
  ------------------
 2077|  1.29k|}
ofp-actions.c:format_SET_IPV4_DST:
 2082|  3.52k|{
 2083|  3.52k|    ds_put_format(fp->s, "%smod_nw_dst:%s"IP_FMT,
  ------------------
  |  |  628|  3.52k|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
 2084|       |                  colors.param, colors.end, IP_ARGS(a->ipv4));
  ------------------
  |  |  630|  3.52k|    ntohl(ip) >> 24,                            \
  |  |  631|  3.52k|    (ntohl(ip) >> 16) & 0xff,                   \
  |  |  632|  3.52k|    (ntohl(ip) >> 8) & 0xff,                    \
  |  |  633|  3.52k|    ntohl(ip) & 0xff
  ------------------
 2085|  3.52k|}
ofp-actions.c:format_SET_IP_DSCP:
 2159|  5.09k|{
 2160|  5.09k|    ds_put_format(fp->s, "%smod_nw_tos:%s%d",
 2161|  5.09k|                  colors.param, colors.end, a->dscp);
 2162|  5.09k|}
ofp-actions.c:format_SET_IP_ECN:
 2232|  1.16k|{
 2233|  1.16k|    ds_put_format(fp->s, "%smod_nw_ecn:%s%d",
 2234|  1.16k|                  colors.param, colors.end, a->ecn);
 2235|  1.16k|}
ofp-actions.c:format_SET_IP_TTL:
 2287|  1.21k|{
 2288|  1.21k|    ds_put_format(fp->s, "%smod_nw_ttl:%s%d",
 2289|  1.21k|                  colors.param, colors.end, a->ttl);
 2290|  1.21k|}
ofp-actions.c:format_SET_L4_SRC_PORT:
 2377|  4.47k|{
 2378|  4.47k|    ds_put_format(fp->s, "%smod_tp_src:%s%d",
 2379|  4.47k|                  colors.param, colors.end, a->port);
 2380|  4.47k|}
ofp-actions.c:format_SET_L4_DST_PORT:
 2385|  5.75k|{
 2386|  5.75k|    ds_put_format(fp->s, "%smod_tp_dst:%s%d",
 2387|  5.75k|                  colors.param, colors.end, a->port);
 2388|  5.75k|}
ofp-actions.c:format_REG_MOVE:
 2715|    334|{
 2716|    334|    nxm_format_reg_move(a, fp->s);
 2717|    334|}
ofp-actions.c:format_STACK_PUSH:
 3558|      6|{
 3559|      6|    nxm_format_stack_push(a, fp->s);
 3560|      6|}
ofp-actions.c:format_STACK_POP:
 3565|    261|{
 3566|    261|    nxm_format_stack_pop(a, fp->s);
 3567|    261|}
ofp-actions.c:format_DEC_TTL:
 3736|  3.12k|{
 3737|  3.12k|    size_t i;
 3738|       |
 3739|  3.12k|    ds_put_format(fp->s, "%sdec_ttl%s", colors.paren, colors.end);
 3740|  3.12k|    if (a->ofpact.raw == NXAST_RAW_DEC_TTL_CNT_IDS) {
  ------------------
  |  Branch (3740:9): [True: 986, False: 2.13k]
  ------------------
 3741|    986|        ds_put_format(fp->s, "%s(%s", colors.paren, colors.end);
 3742|  3.75k|        for (i = 0; i < a->n_controllers; i++) {
  ------------------
  |  Branch (3742:21): [True: 2.77k, False: 986]
  ------------------
 3743|  2.77k|            if (i) {
  ------------------
  |  Branch (3743:17): [True: 1.85k, False: 915]
  ------------------
 3744|  1.85k|                ds_put_cstr(fp->s, ",");
 3745|  1.85k|            }
 3746|       |            ds_put_format(fp->s, "%"PRIu16, a->cnt_ids[i]);
 3747|  2.77k|        }
 3748|    986|        ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 3749|    986|    }
 3750|  3.12k|}
ofp-actions.c:format_SET_MPLS_LABEL:
 3809|    418|{
 3810|    418|    ds_put_format(fp->s, "%sset_mpls_label(%s%"PRIu32"%s)%s",
 3811|       |                  colors.paren, colors.end, ntohl(a->label),
 3812|    418|                  colors.paren, colors.end);
 3813|    418|}
ofp-actions.c:format_SET_MPLS_TC:
 3880|    544|{
 3881|    544|    ds_put_format(fp->s, "%sset_mpls_tc(%s%"PRIu8"%s)%s",
 3882|    544|                  colors.paren, colors.end, a->tc,
 3883|    544|                  colors.paren, colors.end);
 3884|    544|}
ofp-actions.c:format_SET_MPLS_TTL:
 3938|  1.67k|{
 3939|  1.67k|    ds_put_format(fp->s, "%sset_mpls_ttl(%s%"PRIu8"%s)%s",
 3940|  1.67k|                  colors.paren, colors.end, a->ttl,
 3941|  1.67k|                  colors.paren, colors.end);
 3942|  1.67k|}
ofp-actions.c:format_DEC_MPLS_TTL:
 3977|  3.99k|{
 3978|  3.99k|    ds_put_format(fp->s, "%sdec_mpls_ttl%s", colors.value, colors.end);
 3979|  3.99k|}
ofp-actions.c:format_PUSH_MPLS:
 4029|  6.51k|{
 4030|  6.51k|    ds_put_format(fp->s, "%spush_mpls:%s0x%04"PRIx16,
 4031|       |                  colors.param, colors.end, ntohs(a->ethertype));
 4032|  6.51k|}
ofp-actions.c:format_POP_MPLS:
 4087|  3.90k|{
 4088|  3.90k|    ds_put_format(fp->s, "%spop_mpls:%s0x%04"PRIx16,
 4089|       |                  colors.param, colors.end, ntohs(a->ethertype));
 4090|  3.90k|}
ofp-actions.c:format_DEC_NSH_TTL:
 4822|    678|{
 4823|    678|    ds_put_format(fp->s, "%sdec_nsh_ttl%s", colors.special, colors.end);
 4824|    678|}
ofp-actions.c:format_DELETE_FIELD:
 4247|      8|{
 4248|      8|    ds_put_format(fp->s, "%sdelete_field:%s", colors.param,
 4249|      8|                  colors.end);
 4250|      8|    ds_put_format(fp->s, "%s", odf->field->name);
 4251|      8|}
ofp-actions.c:format_ENCAP:
 4651|  1.54k|{
 4652|  1.54k|    ds_put_format(fp->s, "%sencap(%s", colors.paren, colors.end);
 4653|  1.54k|    ds_put_format(fp->s, "%s", format_encap_pkt_type(a->new_pkt_type));
 4654|  1.54k|    if (a->n_props > 0) {
  ------------------
  |  Branch (4654:9): [True: 302, False: 1.23k]
  ------------------
 4655|    302|        ds_put_format(fp->s, "%s(%s", colors.paren, colors.end);
 4656|    302|        format_ed_props(fp->s, a->n_props, a->props);
 4657|    302|        ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 4658|    302|    }
 4659|  1.54k|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 4660|  1.54k|}
ofp-actions.c:format_encap_pkt_type:
 4612|  1.54k|{
 4613|  1.54k|    switch (ntohl(pkt_type)) {
 4614|    479|    case PT_ETH:
  ------------------
  |  Branch (4614:5): [True: 479, False: 1.06k]
  ------------------
 4615|    479|        return "ethernet";
 4616|    570|    case PT_NSH:
  ------------------
  |  Branch (4616:5): [True: 570, False: 970]
  ------------------
 4617|    570|        return "nsh";
 4618|    212|    case PT_MPLS:
  ------------------
  |  Branch (4618:5): [True: 212, False: 1.32k]
  ------------------
 4619|    212|        return "mpls";
 4620|    279|    case PT_MPLS_MC:
  ------------------
  |  Branch (4620:5): [True: 279, False: 1.26k]
  ------------------
 4621|    279|        return "mpls_mc";
 4622|      0|    default:
  ------------------
  |  Branch (4622:5): [True: 0, False: 1.54k]
  ------------------
 4623|      0|        return "UNKNOWN";
 4624|  1.54k|    }
 4625|  1.54k|}
ofp-actions.c:format_ed_props:
 4630|    302|{
 4631|    302|    const uint8_t *p = (uint8_t *) prop;
 4632|    302|    int i;
 4633|       |
 4634|    302|    if (n_props == 0) {
  ------------------
  |  Branch (4634:9): [True: 0, False: 302]
  ------------------
 4635|      0|        return;
 4636|      0|    }
 4637|    713|    for (i = 0; i < n_props; i++) {
  ------------------
  |  Branch (4637:17): [True: 411, False: 302]
  ------------------
 4638|    411|        format_ed_prop(s, prop);
 4639|    411|        ds_put_char(s, ',');
 4640|    411|        p += ROUND_UP(prop->len, 8);
  ------------------
  |  |  303|    411|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|    411|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
 4641|    411|        prop = ALIGNED_CAST(const struct ofpact_ed_prop *, p);
  ------------------
  |  |  434|    411|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4642|    411|    }
 4643|    302|    if (n_props > 0) {
  ------------------
  |  Branch (4643:9): [True: 302, False: 0]
  ------------------
 4644|    302|        ds_chomp(s, ',');
 4645|    302|    }
 4646|    302|}
ofp-actions.c:format_DECAP:
 4768|  4.79k|{
 4769|  4.79k|    ds_put_format(fp->s, "%sdecap(%s", colors.paren, colors.end);
 4770|  4.79k|    if (a->new_pkt_type != htonl(PT_USE_NEXT_PROTO)) {
  ------------------
  |  Branch (4770:9): [True: 4.51k, False: 283]
  ------------------
 4771|  4.51k|        ds_put_format(fp->s, "packet_type(ns=%"PRIu16",type=%#"PRIx16")",
 4772|  4.51k|                      pt_ns(a->new_pkt_type),
 4773|  4.51k|                      pt_ns_type(a->new_pkt_type));
 4774|  4.51k|    }
 4775|  4.79k|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 4776|  4.79k|}
ofp-actions.c:format_SET_TUNNEL:
 4167|    168|{
 4168|    168|    ds_put_format(fp->s, "%sset_tunnel%s:%s%#"PRIx64, colors.param,
 4169|    168|                  (a->tun_id > UINT32_MAX
  ------------------
  |  Branch (4169:20): [True: 61, False: 107]
  ------------------
 4170|    107|                   || a->ofpact.raw == NXAST_RAW_SET_TUNNEL64 ? "64" : ""),
  ------------------
  |  Branch (4170:23): [True: 2, False: 105]
  ------------------
 4171|    168|                  colors.end, a->tun_id);
 4172|    168|}
ofp-actions.c:format_SET_QUEUE:
 4291|    682|{
 4292|       |    ds_put_format(fp->s, "%sset_queue:%s%"PRIu32,
 4293|    682|                  colors.param, colors.end, a->queue_id);
 4294|    682|}
ofp-actions.c:format_POP_QUEUE:
 4330|    248|{
 4331|    248|    ds_put_format(fp->s, "%spop_queue%s", colors.value, colors.end);
 4332|    248|}
ofp-actions.c:format_FIN_TIMEOUT:
 4426|    715|{
 4427|    715|    ds_put_format(fp->s, "%sfin_timeout(%s", colors.paren, colors.end);
 4428|    715|    if (a->fin_idle_timeout) {
  ------------------
  |  Branch (4428:9): [True: 549, False: 166]
  ------------------
 4429|    549|        ds_put_format(fp->s, "%sidle_timeout=%s%"PRIu16",",
 4430|    549|                      colors.param, colors.end, a->fin_idle_timeout);
 4431|    549|    }
 4432|    715|    if (a->fin_hard_timeout) {
  ------------------
  |  Branch (4432:9): [True: 699, False: 16]
  ------------------
 4433|    699|        ds_put_format(fp->s, "%shard_timeout=%s%"PRIu16",",
 4434|    699|                      colors.param, colors.end, a->fin_hard_timeout);
 4435|    699|    }
 4436|    715|    ds_chomp(fp->s, ',');
 4437|    715|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 4438|    715|}
ofp-actions.c:format_RESUBMIT:
 5028|  2.05k|{
 5029|  2.05k|    if (a->in_port != OFPP_IN_PORT && a->table_id == 255) {
  ------------------
  |  |   39|  2.05k|#define OFPP_IN_PORT    OFP_PORT_C(0xfff8) /* Where the packet came in. */
  |  |  ------------------
  |  |  |  |  157|  4.10k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (5029:9): [True: 1.96k, False: 82]
  |  Branch (5029:39): [True: 132, False: 1.83k]
  ------------------
 5030|    132|        ds_put_format(fp->s, "%sresubmit:%s", colors.special, colors.end);
 5031|    132|        ofputil_format_port(a->in_port, fp->port_map, fp->s);
 5032|  1.91k|    } else {
 5033|  1.91k|        ds_put_format(fp->s, "%sresubmit(%s", colors.paren, colors.end);
 5034|  1.91k|        if (a->in_port != OFPP_IN_PORT) {
  ------------------
  |  |   39|  1.91k|#define OFPP_IN_PORT    OFP_PORT_C(0xfff8) /* Where the packet came in. */
  |  |  ------------------
  |  |  |  |  157|  1.91k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (5034:13): [True: 1.83k, False: 82]
  ------------------
 5035|  1.83k|            ofputil_format_port(a->in_port, fp->port_map, fp->s);
 5036|  1.83k|        }
 5037|  1.91k|        ds_put_char(fp->s, ',');
 5038|  1.91k|        if (a->table_id != 255) {
  ------------------
  |  Branch (5038:13): [True: 1.89k, False: 19]
  ------------------
 5039|  1.89k|            ofputil_format_table(a->table_id, fp->table_map, fp->s);
 5040|  1.89k|        }
 5041|  1.91k|        if (a->with_ct_orig) {
  ------------------
  |  Branch (5041:13): [True: 1.82k, False: 95]
  ------------------
 5042|  1.82k|            ds_put_cstr(fp->s, ",ct");
 5043|  1.82k|        }
 5044|  1.91k|        ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 5045|  1.91k|    }
 5046|  2.05k|}
ofp-actions.c:format_LEARN:
 5639|  17.4k|{
 5640|  17.4k|    learn_format(a, fp->port_map, fp->table_map, fp->s);
 5641|  17.4k|}
ofp-actions.c:format_CONJUNCTION:
 5701|  1.22k|{
 5702|  1.22k|    ds_put_format(fp->s, "%sconjunction(%s%"PRIu32",%d/%"PRIu8"%s)%s",
 5703|  1.22k|                  colors.paren, colors.end,
 5704|  1.22k|                  oc->id, oc->clause + 1, oc->n_clauses,
 5705|  1.22k|                  colors.paren, colors.end);
 5706|  1.22k|}
ofp-actions.c:format_MULTIPATH:
 5866|  2.58k|{
 5867|  2.58k|    multipath_format(a, fp->s);
 5868|  2.58k|}
ofp-actions.c:format_NOTE:
 5951|  2.64k|{
 5952|  2.64k|    ds_put_format(fp->s, "%snote:%s", colors.param, colors.end);
 5953|  2.64k|    ds_put_hex_with_delimiter(fp->s, a->data, a->length, ".");
 5954|  2.64k|}
ofp-actions.c:format_EXIT:
 5989|  1.97k|{
 5990|  1.97k|    ds_put_format(fp->s, "%sexit%s", colors.special, colors.end);
 5991|  1.97k|}
ofp-actions.c:format_SAMPLE:
 6527|  1.60k|{
 6528|  1.60k|    ds_put_format(fp->s, "%ssample(%s%sprobability=%s%"PRIu16
 6529|  1.60k|                  ",%scollector_set_id=%s%"PRIu32,
 6530|  1.60k|                  colors.paren, colors.end,
 6531|  1.60k|                  colors.param, colors.end, a->probability,
 6532|  1.60k|                  colors.param, colors.end, a->collector_set_id);
 6533|       |
 6534|  1.60k|    ds_put_format(fp->s, ",%sobs_domain_id=%s", colors.param, colors.end);
 6535|  1.60k|    if (a->obs_domain_src.field) {
  ------------------
  |  Branch (6535:9): [True: 193, False: 1.41k]
  ------------------
 6536|    193|        mf_format_subfield(&a->obs_domain_src, fp->s);
 6537|  1.41k|    } else {
 6538|  1.41k|        ds_put_format(fp->s, "%"PRIu32, a->obs_domain_imm);
 6539|  1.41k|    }
 6540|  1.60k|    ds_put_format(fp->s, ",%sobs_point_id=%s", colors.param, colors.end);
 6541|  1.60k|    if (a->obs_point_src.field) {
  ------------------
  |  Branch (6541:9): [True: 232, False: 1.37k]
  ------------------
 6542|    232|        mf_format_subfield(&a->obs_point_src, fp->s);
 6543|  1.37k|    } else {
 6544|  1.37k|        ds_put_format(fp->s, "%"PRIu32, a->obs_point_imm);
 6545|  1.37k|    }
 6546|  1.60k|    if (a->sampling_port != OFPP_NONE) {
  ------------------
  |  |   47|  1.60k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|  1.60k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (6546:9): [True: 1.53k, False: 79]
  ------------------
 6547|  1.53k|        ds_put_format(fp->s, ",%ssampling_port=%s", colors.param, colors.end);
 6548|  1.53k|        ofputil_format_port(a->sampling_port, fp->port_map, fp->s);
 6549|  1.53k|    }
 6550|  1.60k|    if (a->direction == NX_ACTION_SAMPLE_INGRESS) {
  ------------------
  |  Branch (6550:9): [True: 49, False: 1.56k]
  ------------------
 6551|     49|        ds_put_format(fp->s, ",%singress%s", colors.param, colors.end);
 6552|  1.56k|    } else if (a->direction == NX_ACTION_SAMPLE_EGRESS) {
  ------------------
  |  Branch (6552:16): [True: 586, False: 974]
  ------------------
 6553|    586|        ds_put_format(fp->s, ",%segress%s", colors.param, colors.end);
 6554|    586|    }
 6555|  1.60k|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 6556|  1.60k|}
ofp-actions.c:format_UNROLL_XLATE:
 6021|  3.08k|{
 6022|  3.08k|    ds_put_format(fp->s, "%sunroll_xlate(%s%stable=%s",
 6023|  3.08k|                  colors.paren,   colors.end,
 6024|  3.08k|                  colors.special, colors.end);
 6025|  3.08k|    ofputil_format_table(a->rule_table_id, fp->table_map, fp->s);
 6026|  3.08k|    ds_put_format(fp->s, ", %scookie=%s%"PRIu64"%s)%s",
 6027|  3.08k|                  colors.param,   colors.end, ntohll(a->rule_cookie),
 6028|  3.08k|                  colors.paren,   colors.end);
 6029|  3.08k|}
ofp-actions.c:format_CT:
 7025|  4.88k|{
 7026|  4.88k|    ds_put_format(fp->s, "%sct(%s", colors.paren, colors.end);
 7027|  4.88k|    if (a->flags & NX_CT_F_COMMIT) {
  ------------------
  |  Branch (7027:9): [True: 3.56k, False: 1.32k]
  ------------------
 7028|  3.56k|        ds_put_format(fp->s, "%scommit%s,", colors.value, colors.end);
 7029|  3.56k|    }
 7030|  4.88k|    if (a->flags & NX_CT_F_FORCE) {
  ------------------
  |  Branch (7030:9): [True: 1.15k, False: 3.73k]
  ------------------
 7031|  1.15k|        ds_put_format(fp->s, "%sforce%s,", colors.value, colors.end);
 7032|  1.15k|    }
 7033|  4.88k|    if (a->recirc_table != NX_CT_RECIRC_NONE) {
  ------------------
  |  |  692|  4.88k|#define NX_CT_RECIRC_NONE OFPTT_ALL
  ------------------
  |  Branch (7033:9): [True: 4.62k, False: 258]
  ------------------
 7034|  4.62k|        ds_put_format(fp->s, "%stable=%s", colors.special, colors.end);
 7035|  4.62k|        ofputil_format_table(a->recirc_table, fp->table_map, fp->s);
 7036|  4.62k|        ds_put_char(fp->s, ',');
 7037|  4.62k|    }
 7038|  4.88k|    if (a->zone_src.field) {
  ------------------
  |  Branch (7038:9): [True: 1.02k, False: 3.86k]
  ------------------
 7039|  1.02k|        ds_put_format(fp->s, "%szone=%s", colors.param, colors.end);
 7040|  1.02k|        mf_format_subfield(&a->zone_src, fp->s);
 7041|  1.02k|        ds_put_char(fp->s, ',');
 7042|  3.86k|    } else if (a->zone_imm) {
  ------------------
  |  Branch (7042:16): [True: 2.57k, False: 1.29k]
  ------------------
 7043|  2.57k|        ds_put_format(fp->s, "%szone=%s%"PRIu16",",
 7044|  2.57k|                      colors.param, colors.end, a->zone_imm);
 7045|  2.57k|    }
 7046|       |    /* If the first action is a NAT action, format it outside of the 'exec'
 7047|       |     * envelope. */
 7048|  4.88k|    const struct ofpact *action = a->actions;
 7049|  4.88k|    size_t actions_len = ofpact_ct_get_action_len(a);
 7050|  4.88k|    if (actions_len && action->type == OFPACT_NAT) {
  ------------------
  |  Branch (7050:9): [True: 3.39k, False: 1.49k]
  |  Branch (7050:24): [True: 2.98k, False: 416]
  ------------------
 7051|  2.98k|        format_NAT(ofpact_get_NAT(action), fp);
 7052|  2.98k|        ds_put_char(fp->s, ',');
 7053|  2.98k|        actions_len -= OFPACT_ALIGN(action->len);
  ------------------
  |  |  205|  2.98k|#define OFPACT_ALIGN(SIZE) ROUND_UP(SIZE, OFPACT_ALIGNTO)
  |  |  ------------------
  |  |  |  |  303|  2.98k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|  2.98k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7054|  2.98k|        action = ofpact_next(action);
 7055|  2.98k|    }
 7056|  4.88k|    if (actions_len) {
  ------------------
  |  Branch (7056:9): [True: 416, False: 4.47k]
  ------------------
 7057|    416|        ds_put_format(fp->s, "%sexec(%s", colors.paren, colors.end);
 7058|    416|        ofpacts_format(action, actions_len, fp);
 7059|    416|        ds_put_format(fp->s, "%s),%s", colors.paren, colors.end);
 7060|    416|    }
 7061|  4.88k|    format_alg(a->alg, fp->s);
 7062|  4.88k|    ds_chomp(fp->s, ',');
 7063|  4.88k|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 7064|  4.88k|}
ofp-actions.c:format_alg:
 7002|  4.88k|{
 7003|  4.88k|    switch(port) {
 7004|    971|    case IPPORT_FTP:
  ------------------
  |  |  695|    971|#define IPPORT_FTP  21
  ------------------
  |  Branch (7004:5): [True: 971, False: 3.91k]
  ------------------
 7005|    971|        ds_put_format(s, "%salg=%sftp,", colors.param, colors.end);
 7006|    971|        break;
 7007|    575|    case IPPORT_TFTP:
  ------------------
  |  |  699|    575|#define IPPORT_TFTP  69
  ------------------
  |  Branch (7007:5): [True: 575, False: 4.31k]
  ------------------
 7008|    575|        ds_put_format(s, "%salg=%stftp,", colors.param, colors.end);
 7009|    575|        break;
 7010|    580|    case 0:
  ------------------
  |  Branch (7010:5): [True: 580, False: 4.30k]
  ------------------
 7011|       |        /* Don't print. */
 7012|    580|        break;
 7013|  2.76k|    default:
  ------------------
  |  Branch (7013:5): [True: 2.76k, False: 2.12k]
  ------------------
 7014|  2.76k|        ds_put_format(s, "%salg=%s%d,", colors.param, colors.end, port);
 7015|  2.76k|        break;
 7016|  4.88k|    }
 7017|  4.88k|}
ofp-actions.c:format_CT_CLEAR:
 7115|    104|{
 7116|    104|    ds_put_format(fp->s, "%sct_clear%s", colors.value, colors.end);
 7117|    104|}
ofp-actions.c:format_NAT:
 7306|  2.98k|{
 7307|  2.98k|    ds_put_format(fp->s, "%snat%s", colors.paren, colors.end);
 7308|       |
 7309|  2.98k|    if (a->flags & (NX_NAT_F_SRC | NX_NAT_F_DST)) {
  ------------------
  |  Branch (7309:9): [True: 2.64k, False: 340]
  ------------------
 7310|  2.64k|        ds_put_format(fp->s, "%s(%s", colors.paren, colors.end);
 7311|  2.64k|        ds_put_format(fp->s, a->flags & NX_NAT_F_SRC ? "%ssrc%s" : "%sdst%s",
  ------------------
  |  Branch (7311:30): [True: 1.80k, False: 832]
  ------------------
 7312|  2.64k|                      colors.param, colors.end);
 7313|       |
 7314|  2.64k|        if (a->range_af != AF_UNSPEC) {
  ------------------
  |  Branch (7314:13): [True: 2.01k, False: 625]
  ------------------
 7315|  2.01k|            ds_put_format(fp->s, "%s=%s", colors.param, colors.end);
 7316|       |
 7317|  2.01k|            if (a->range_af == AF_INET) {
  ------------------
  |  Branch (7317:17): [True: 2.01k, False: 0]
  ------------------
 7318|  2.01k|                ds_put_format(fp->s, IP_FMT, IP_ARGS(a->range.addr.ipv4.min));
  ------------------
  |  |  628|  2.01k|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
                              ds_put_format(fp->s, IP_FMT, IP_ARGS(a->range.addr.ipv4.min));
  ------------------
  |  |  630|  2.01k|    ntohl(ip) >> 24,                            \
  |  |  631|  2.01k|    (ntohl(ip) >> 16) & 0xff,                   \
  |  |  632|  2.01k|    (ntohl(ip) >> 8) & 0xff,                    \
  |  |  633|  2.01k|    ntohl(ip) & 0xff
  ------------------
 7319|       |
 7320|  2.01k|                if (a->range.addr.ipv4.max
  ------------------
  |  Branch (7320:21): [True: 189, False: 1.82k]
  ------------------
 7321|    189|                    && a->range.addr.ipv4.max != a->range.addr.ipv4.min) {
  ------------------
  |  Branch (7321:24): [True: 65, False: 124]
  ------------------
 7322|     65|                    ds_put_format(fp->s, "-"IP_FMT,
  ------------------
  |  |  628|     65|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
 7323|     65|                                  IP_ARGS(a->range.addr.ipv4.max));
  ------------------
  |  |  630|     65|    ntohl(ip) >> 24,                            \
  |  |  631|     65|    (ntohl(ip) >> 16) & 0xff,                   \
  |  |  632|     65|    (ntohl(ip) >> 8) & 0xff,                    \
  |  |  633|     65|    ntohl(ip) & 0xff
  ------------------
 7324|     65|                }
 7325|  2.01k|            } 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|  2.01k|            if (a->range.proto.min) {
  ------------------
  |  Branch (7337:17): [True: 1.38k, False: 627]
  ------------------
 7338|  1.38k|                ds_put_char(fp->s, ':');
 7339|  1.38k|                ds_put_format(fp->s, "%"PRIu16, a->range.proto.min);
 7340|       |
 7341|  1.38k|                if (a->range.proto.max
  ------------------
  |  Branch (7341:21): [True: 215, False: 1.17k]
  ------------------
 7342|    215|                    && a->range.proto.max != a->range.proto.min) {
  ------------------
  |  Branch (7342:24): [True: 131, False: 84]
  ------------------
 7343|    131|                    ds_put_format(fp->s, "-%"PRIu16, a->range.proto.max);
 7344|    131|                }
 7345|  1.38k|            }
 7346|  2.01k|            ds_put_char(fp->s, ',');
 7347|       |
 7348|  2.01k|            if (a->flags & NX_NAT_F_PERSISTENT) {
  ------------------
  |  Branch (7348:17): [True: 1.62k, False: 388]
  ------------------
 7349|  1.62k|                ds_put_format(fp->s, "%spersistent%s,",
 7350|  1.62k|                              colors.value, colors.end);
 7351|  1.62k|            }
 7352|  2.01k|            if (a->flags & NX_NAT_F_PROTO_HASH) {
  ------------------
  |  Branch (7352:17): [True: 99, False: 1.91k]
  ------------------
 7353|     99|                ds_put_format(fp->s, "%shash%s,", colors.value, colors.end);
 7354|     99|            }
 7355|  2.01k|            if (a->flags & NX_NAT_F_PROTO_RANDOM) {
  ------------------
  |  Branch (7355:17): [True: 1.17k, False: 842]
  ------------------
 7356|  1.17k|                ds_put_format(fp->s, "%srandom%s,", colors.value, colors.end);
 7357|  1.17k|            }
 7358|  2.01k|        }
 7359|  2.64k|        ds_chomp(fp->s, ',');
 7360|  2.64k|        ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 7361|  2.64k|    }
 7362|  2.98k|}
ofp-actions.c:format_OUTPUT_TRUNC:
 7541|  1.50k|{
 7542|  1.50k|    ds_put_format(fp->s, "%soutput%s(port=", colors.special, colors.end);
 7543|  1.50k|    ofputil_format_port(a->port, fp->port_map, fp->s);
 7544|  1.50k|    ds_put_format(fp->s, ",max_len=%"PRIu32")", a->max_len);
 7545|  1.50k|}
ofp-actions.c:format_CLONE:
 6114|    497|{
 6115|    497|    ds_put_format(fp->s, "%sclone(%s", colors.paren, colors.end);
 6116|    497|    ofpacts_format(a->actions, ofpact_nest_get_action_len(a), fp);
 6117|    497|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 6118|    497|}
ofp-actions.c:format_CHECK_PKT_LARGER:
 7902|    495|{
 7903|    495|    ds_put_format(fp->s, "%scheck_pkt_larger(%s%"PRIu32")->",
 7904|    495|                  colors.param, colors.end, a->pkt_len);
 7905|    495|    mf_format_subfield(&a->dst, fp->s);
 7906|    495|}
ofp-actions.c:format_METER:
 7593|    357|{
 7594|       |    ds_put_format(fp->s, "%smeter:%s%"PRIu32,
 7595|    357|                  colors.param, colors.end, a->meter_id);
 7596|    357|}
ofp-actions.c:format_CLEAR_ACTIONS:
 7628|    294|{
 7629|    294|    ds_put_format(fp->s, "%sclear_actions%s", colors.value, colors.end);
 7630|    294|}
ofp-actions.c:format_WRITE_ACTIONS:
 7689|  8.68k|{
 7690|  8.68k|    ds_put_format(fp->s, "%swrite_actions(%s", colors.paren, colors.end);
 7691|  8.68k|    ofpacts_format(a->actions, ofpact_nest_get_action_len(a), fp);
 7692|  8.68k|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 7693|  8.68k|}
ofp-actions.c:format_WRITE_METADATA:
 7783|    280|{
 7784|    280|    ds_put_format(fp->s, "%swrite_metadata:%s%#"PRIx64,
 7785|    280|                  colors.param, colors.end, ntohll(a->metadata));
 7786|    280|    if (a->mask != OVS_BE64_MAX) {
  ------------------
  |  |   44|    280|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  |  Branch (7786:9): [True: 72, False: 208]
  ------------------
 7787|       |        ds_put_format(fp->s, "/%#"PRIx64, ntohll(a->mask));
 7788|     72|    }
 7789|    280|}
ofp-actions.c:format_GOTO_TABLE:
 7950|     29|{
 7951|     29|    ds_put_format(fp->s, "%sgoto_table:%s", colors.param, colors.end);
 7952|     29|    ofputil_format_table(a->table_id, fp->table_map, fp->s);
 7953|     29|}

ofp-actions.c:ofpact_decode:
 4645|   239k|{
 4646|   239k|    switch (raw) {
 4647|  9.50k|    case OFPAT_RAW10_OUTPUT:
  ------------------
  |  Branch (4647:5): [True: 9.50k, False: 230k]
  ------------------
 4648|  9.50k|        return decode_OFPAT_RAW10_OUTPUT(ALIGNED_CAST(const struct ofp10_action_output *, a), version, out);
  ------------------
  |  |  434|  9.50k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4649|       |
 4650|  1.32k|    case OFPAT_RAW11_OUTPUT:
  ------------------
  |  Branch (4650:5): [True: 1.32k, False: 238k]
  ------------------
 4651|  1.32k|        return decode_OFPAT_RAW11_OUTPUT(ALIGNED_CAST(const struct ofp11_action_output *, a), version, out);
  ------------------
  |  |  434|  1.32k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4652|       |
 4653|  7.59k|    case OFPAT_RAW10_SET_VLAN_VID:
  ------------------
  |  Branch (4653:5): [True: 7.59k, False: 231k]
  ------------------
 4654|  7.59k|        return decode_OFPAT_RAW10_SET_VLAN_VID(arg, version, out);
 4655|       |
 4656|  3.45k|    case OFPAT_RAW10_SET_VLAN_PCP:
  ------------------
  |  Branch (4656:5): [True: 3.45k, False: 236k]
  ------------------
 4657|  3.45k|        return decode_OFPAT_RAW10_SET_VLAN_PCP(arg, version, out);
 4658|       |
 4659|    956|    case OFPAT_RAW11_SET_VLAN_VID:
  ------------------
  |  Branch (4659:5): [True: 956, False: 238k]
  ------------------
 4660|    956|        return decode_OFPAT_RAW11_SET_VLAN_VID(arg, version, out);
 4661|       |
 4662|  1.61k|    case OFPAT_RAW11_SET_VLAN_PCP:
  ------------------
  |  Branch (4662:5): [True: 1.61k, False: 237k]
  ------------------
 4663|  1.61k|        return decode_OFPAT_RAW11_SET_VLAN_PCP(arg, version, out);
 4664|       |
 4665|  2.62k|    case OFPAT_RAW11_PUSH_VLAN:
  ------------------
  |  Branch (4665:5): [True: 2.62k, False: 236k]
  ------------------
 4666|  2.62k|        return decode_OFPAT_RAW11_PUSH_VLAN(htons(arg), version, out);
 4667|       |
 4668|  5.07k|    case OFPAT_RAW10_STRIP_VLAN:
  ------------------
  |  Branch (4668:5): [True: 5.07k, False: 234k]
  ------------------
 4669|  5.07k|        return decode_OFPAT_RAW10_STRIP_VLAN(out);
 4670|       |
 4671|  3.94k|    case OFPAT_RAW11_POP_VLAN:
  ------------------
  |  Branch (4671:5): [True: 3.94k, False: 235k]
  ------------------
 4672|  3.94k|        return decode_OFPAT_RAW11_POP_VLAN(out);
 4673|       |
 4674|     92|    case OFPAT_RAW_SET_DL_SRC:
  ------------------
  |  Branch (4674:5): [True: 92, False: 239k]
  ------------------
 4675|     92|        return decode_OFPAT_RAW_SET_DL_SRC(ALIGNED_CAST(const struct ofp_action_dl_addr *, a), version, out);
  ------------------
  |  |  434|     92|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4676|       |
 4677|    113|    case OFPAT_RAW_SET_DL_DST:
  ------------------
  |  Branch (4677:5): [True: 113, False: 239k]
  ------------------
 4678|    113|        return decode_OFPAT_RAW_SET_DL_DST(ALIGNED_CAST(const struct ofp_action_dl_addr *, a), version, out);
  ------------------
  |  |  434|    113|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4679|       |
 4680|  2.77k|    case OFPAT_RAW_SET_NW_SRC:
  ------------------
  |  Branch (4680:5): [True: 2.77k, False: 236k]
  ------------------
 4681|  2.77k|        return decode_OFPAT_RAW_SET_NW_SRC(htonl(arg), version, out);
 4682|       |
 4683|  6.49k|    case OFPAT_RAW_SET_NW_DST:
  ------------------
  |  Branch (4683:5): [True: 6.49k, False: 233k]
  ------------------
 4684|  6.49k|        return decode_OFPAT_RAW_SET_NW_DST(htonl(arg), version, out);
 4685|       |
 4686|  7.37k|    case OFPAT_RAW_SET_NW_TOS:
  ------------------
  |  Branch (4686:5): [True: 7.37k, False: 232k]
  ------------------
 4687|  7.37k|        return decode_OFPAT_RAW_SET_NW_TOS(arg, version, out);
 4688|       |
 4689|  2.29k|    case OFPAT_RAW11_SET_NW_ECN:
  ------------------
  |  Branch (4689:5): [True: 2.29k, False: 237k]
  ------------------
 4690|  2.29k|        return decode_OFPAT_RAW11_SET_NW_ECN(arg, version, out);
 4691|       |
 4692|  6.36k|    case OFPAT_RAW_SET_TP_SRC:
  ------------------
  |  Branch (4692:5): [True: 6.36k, False: 233k]
  ------------------
 4693|  6.36k|        return decode_OFPAT_RAW_SET_TP_SRC(htons(arg), version, out);
 4694|       |
 4695|  8.11k|    case OFPAT_RAW_SET_TP_DST:
  ------------------
  |  Branch (4695:5): [True: 8.11k, False: 231k]
  ------------------
 4696|  8.11k|        return decode_OFPAT_RAW_SET_TP_DST(htons(arg), version, out);
 4697|       |
 4698|    380|    case OFPAT_RAW10_ENQUEUE:
  ------------------
  |  Branch (4698:5): [True: 380, False: 239k]
  ------------------
 4699|    380|        return decode_OFPAT_RAW10_ENQUEUE(ALIGNED_CAST(const struct ofp10_action_enqueue *, a), version, out);
  ------------------
  |  |  434|    380|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4700|       |
 4701|  2.17k|    case OFPAT_RAW_SET_MPLS_LABEL:
  ------------------
  |  Branch (4701:5): [True: 2.17k, False: 237k]
  ------------------
 4702|  2.17k|        return decode_OFPAT_RAW_SET_MPLS_LABEL(htonl(arg), version, out);
 4703|       |
 4704|    572|    case OFPAT_RAW_SET_MPLS_TC:
  ------------------
  |  Branch (4704:5): [True: 572, False: 238k]
  ------------------
 4705|    572|        return decode_OFPAT_RAW_SET_MPLS_TC(arg, version, out);
 4706|       |
 4707|  1.94k|    case OFPAT_RAW_SET_MPLS_TTL:
  ------------------
  |  Branch (4707:5): [True: 1.94k, False: 237k]
  ------------------
 4708|  1.94k|        return decode_OFPAT_RAW_SET_MPLS_TTL(arg, version, out);
 4709|       |
 4710|  4.46k|    case OFPAT_RAW_DEC_MPLS_TTL:
  ------------------
  |  Branch (4710:5): [True: 4.46k, False: 235k]
  ------------------
 4711|  4.46k|        return decode_OFPAT_RAW_DEC_MPLS_TTL(out);
 4712|       |
 4713|  6.98k|    case OFPAT_RAW_PUSH_MPLS:
  ------------------
  |  Branch (4713:5): [True: 6.98k, False: 232k]
  ------------------
 4714|  6.98k|        return decode_OFPAT_RAW_PUSH_MPLS(htons(arg), version, out);
 4715|       |
 4716|  4.70k|    case OFPAT_RAW_POP_MPLS:
  ------------------
  |  Branch (4716:5): [True: 4.70k, False: 234k]
  ------------------
 4717|  4.70k|        return decode_OFPAT_RAW_POP_MPLS(htons(arg), version, out);
 4718|       |
 4719|    692|    case OFPAT_RAW_SET_QUEUE:
  ------------------
  |  Branch (4719:5): [True: 692, False: 238k]
  ------------------
 4720|    692|        return decode_OFPAT_RAW_SET_QUEUE(arg, version, out);
 4721|       |
 4722|    748|    case OFPAT_RAW_GROUP:
  ------------------
  |  Branch (4722:5): [True: 748, False: 238k]
  ------------------
 4723|    748|        return decode_OFPAT_RAW_GROUP(arg, version, out);
 4724|       |
 4725|  1.22k|    case OFPAT_RAW11_SET_NW_TTL:
  ------------------
  |  Branch (4725:5): [True: 1.22k, False: 238k]
  ------------------
 4726|  1.22k|        return decode_OFPAT_RAW11_SET_NW_TTL(arg, version, out);
 4727|       |
 4728|  2.80k|    case OFPAT_RAW_DEC_NW_TTL:
  ------------------
  |  Branch (4728:5): [True: 2.80k, False: 236k]
  ------------------
 4729|  2.80k|        return decode_OFPAT_RAW_DEC_NW_TTL(out);
 4730|       |
 4731|  2.96k|    case NXAST_RAW_DEC_TTL_CNT_IDS:
  ------------------
  |  Branch (4731:5): [True: 2.96k, False: 236k]
  ------------------
 4732|  2.96k|        return decode_NXAST_RAW_DEC_TTL_CNT_IDS(ALIGNED_CAST(const struct nx_action_cnt_ids *, a), version, out);
  ------------------
  |  |  434|  2.96k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4733|       |
 4734|  3.65k|    case OFPAT_RAW12_SET_FIELD:
  ------------------
  |  Branch (4734:5): [True: 3.65k, False: 235k]
  ------------------
 4735|  3.65k|        return decode_OFPAT_RAW12_SET_FIELD(ALIGNED_CAST(const struct ofp12_action_set_field *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  3.65k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4736|       |
 4737|  5.87k|    case OFPAT_RAW15_SET_FIELD:
  ------------------
  |  Branch (4737:5): [True: 5.87k, False: 233k]
  ------------------
 4738|  5.87k|        return decode_OFPAT_RAW15_SET_FIELD(ALIGNED_CAST(const struct ofp12_action_set_field *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  5.87k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4739|       |
 4740|  3.40k|    case NXAST_RAW_REG_LOAD:
  ------------------
  |  Branch (4740:5): [True: 3.40k, False: 236k]
  ------------------
 4741|  3.40k|        return decode_NXAST_RAW_REG_LOAD(ALIGNED_CAST(const struct nx_action_reg_load *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  3.40k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4742|       |
 4743|  2.68k|    case NXAST_RAW_REG_LOAD2:
  ------------------
  |  Branch (4743:5): [True: 2.68k, False: 236k]
  ------------------
 4744|  2.68k|        return decode_NXAST_RAW_REG_LOAD2(ALIGNED_CAST(const struct ext_action_header *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  2.68k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4745|       |
 4746|  3.75k|    case OFPAT_RAW15_COPY_FIELD:
  ------------------
  |  Branch (4746:5): [True: 3.75k, False: 235k]
  ------------------
 4747|  3.75k|        return decode_OFPAT_RAW15_COPY_FIELD(ALIGNED_CAST(const struct ofp15_action_copy_field *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  3.75k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4748|       |
 4749|     34|    case ONFACT_RAW13_COPY_FIELD:
  ------------------
  |  Branch (4749:5): [True: 34, False: 239k]
  ------------------
 4750|     34|        return decode_ONFACT_RAW13_COPY_FIELD(ALIGNED_CAST(const struct onf_action_copy_field *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|     34|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4751|       |
 4752|  3.69k|    case NXAST_RAW_REG_MOVE:
  ------------------
  |  Branch (4752:5): [True: 3.69k, False: 235k]
  ------------------
 4753|  3.69k|        return decode_NXAST_RAW_REG_MOVE(ALIGNED_CAST(const struct nx_action_reg_move *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  3.69k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4754|       |
 4755|  1.11k|    case OFPAT_RAW15_METER:
  ------------------
  |  Branch (4755:5): [True: 1.11k, False: 238k]
  ------------------
 4756|  1.11k|        return decode_OFPAT_RAW15_METER(arg, version, out);
 4757|       |
 4758|    437|    case NXAST_RAW_RESUBMIT:
  ------------------
  |  Branch (4758:5): [True: 437, False: 239k]
  ------------------
 4759|    437|        return decode_NXAST_RAW_RESUBMIT(arg, version, out);
 4760|       |
 4761|    411|    case NXAST_RAW_RESUBMIT_TABLE:
  ------------------
  |  Branch (4761:5): [True: 411, False: 239k]
  ------------------
 4762|    411|        return decode_NXAST_RAW_RESUBMIT_TABLE(ALIGNED_CAST(const struct nx_action_resubmit *, a), version, out);
  ------------------
  |  |  434|    411|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4763|       |
 4764|  3.09k|    case NXAST_RAW_RESUBMIT_TABLE_CT:
  ------------------
  |  Branch (4764:5): [True: 3.09k, False: 236k]
  ------------------
 4765|  3.09k|        return decode_NXAST_RAW_RESUBMIT_TABLE_CT(ALIGNED_CAST(const struct nx_action_resubmit *, a), version, out);
  ------------------
  |  |  434|  3.09k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4766|       |
 4767|    921|    case NXAST_RAW_SET_TUNNEL:
  ------------------
  |  Branch (4767:5): [True: 921, False: 238k]
  ------------------
 4768|    921|        return decode_NXAST_RAW_SET_TUNNEL(arg, version, out);
 4769|       |
 4770|     77|    case NXAST_RAW_SET_TUNNEL64:
  ------------------
  |  Branch (4770:5): [True: 77, False: 239k]
  ------------------
 4771|     77|        return decode_NXAST_RAW_SET_TUNNEL64(arg, version, out);
 4772|       |
 4773|  1.18k|    case NXAST_RAW_POP_QUEUE:
  ------------------
  |  Branch (4773:5): [True: 1.18k, False: 238k]
  ------------------
 4774|  1.18k|        return decode_NXAST_RAW_POP_QUEUE(out);
 4775|       |
 4776|  8.56k|    case NXAST_RAW_NOTE:
  ------------------
  |  Branch (4776:5): [True: 8.56k, False: 230k]
  ------------------
 4777|  8.56k|        return decode_NXAST_RAW_NOTE(ALIGNED_CAST(const struct nx_action_note *, a), version, out);
  ------------------
  |  |  434|  8.56k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4778|       |
 4779|  5.43k|    case NXAST_RAW_MULTIPATH:
  ------------------
  |  Branch (4779:5): [True: 5.43k, False: 234k]
  ------------------
 4780|  5.43k|        return decode_NXAST_RAW_MULTIPATH(ALIGNED_CAST(const struct nx_action_multipath *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  5.43k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4781|       |
 4782|  2.91k|    case NXAST_RAW_BUNDLE:
  ------------------
  |  Branch (4782:5): [True: 2.91k, False: 236k]
  ------------------
 4783|  2.91k|        return decode_NXAST_RAW_BUNDLE(ALIGNED_CAST(const struct nx_action_bundle *, a), version, out);
  ------------------
  |  |  434|  2.91k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4784|       |
 4785|  1.86k|    case NXAST_RAW_BUNDLE_LOAD:
  ------------------
  |  Branch (4785:5): [True: 1.86k, False: 237k]
  ------------------
 4786|  1.86k|        return decode_NXAST_RAW_BUNDLE_LOAD(ALIGNED_CAST(const struct nx_action_bundle *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  1.86k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4787|       |
 4788|    749|    case NXAST_RAW_OUTPUT_REG:
  ------------------
  |  Branch (4788:5): [True: 749, False: 238k]
  ------------------
 4789|    749|        return decode_NXAST_RAW_OUTPUT_REG(ALIGNED_CAST(const struct nx_action_output_reg *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|    749|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4790|       |
 4791|    240|    case NXAST_RAW_OUTPUT_REG2:
  ------------------
  |  Branch (4791:5): [True: 240, False: 239k]
  ------------------
 4792|    240|        return decode_NXAST_RAW_OUTPUT_REG2(ALIGNED_CAST(const struct nx_action_output_reg2 *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|    240|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4793|       |
 4794|  22.7k|    case NXAST_RAW_LEARN:
  ------------------
  |  Branch (4794:5): [True: 22.7k, False: 216k]
  ------------------
 4795|  22.7k|        return decode_NXAST_RAW_LEARN(ALIGNED_CAST(const struct nx_action_learn *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  22.7k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4796|       |
 4797|  2.65k|    case NXAST_RAW_LEARN2:
  ------------------
  |  Branch (4797:5): [True: 2.65k, False: 236k]
  ------------------
 4798|  2.65k|        return decode_NXAST_RAW_LEARN2(ALIGNED_CAST(const struct nx_action_learn2 *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  2.65k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4799|       |
 4800|  2.14k|    case NXAST_RAW_EXIT:
  ------------------
  |  Branch (4800:5): [True: 2.14k, False: 237k]
  ------------------
 4801|  2.14k|        return decode_NXAST_RAW_EXIT(out);
 4802|       |
 4803|    794|    case NXAST_RAW_FIN_TIMEOUT:
  ------------------
  |  Branch (4803:5): [True: 794, False: 238k]
  ------------------
 4804|    794|        return decode_NXAST_RAW_FIN_TIMEOUT(ALIGNED_CAST(const struct nx_action_fin_timeout *, a), version, out);
  ------------------
  |  |  434|    794|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4805|       |
 4806|  3.07k|    case NXAST_RAW_CONTROLLER:
  ------------------
  |  Branch (4806:5): [True: 3.07k, False: 236k]
  ------------------
 4807|  3.07k|        return decode_NXAST_RAW_CONTROLLER(ALIGNED_CAST(const struct nx_action_controller *, a), version, out);
  ------------------
  |  |  434|  3.07k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4808|       |
 4809|  1.87k|    case NXAST_RAW_CONTROLLER2:
  ------------------
  |  Branch (4809:5): [True: 1.87k, False: 237k]
  ------------------
 4810|  1.87k|        return decode_NXAST_RAW_CONTROLLER2(ALIGNED_CAST(const struct ext_action_header *, a), version, out);
  ------------------
  |  |  434|  1.87k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4811|       |
 4812|  1.48k|    case NXAST_RAW_WRITE_METADATA:
  ------------------
  |  Branch (4812:5): [True: 1.48k, False: 238k]
  ------------------
 4813|  1.48k|        return decode_NXAST_RAW_WRITE_METADATA(ALIGNED_CAST(const struct nx_action_write_metadata *, a), version, out);
  ------------------
  |  |  434|  1.48k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4814|       |
 4815|    462|    case NXAST_RAW_STACK_PUSH:
  ------------------
  |  Branch (4815:5): [True: 462, False: 239k]
  ------------------
 4816|    462|        return decode_NXAST_RAW_STACK_PUSH(ALIGNED_CAST(const struct nx_action_stack *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|    462|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4817|       |
 4818|    711|    case NXAST_RAW_STACK_POP:
  ------------------
  |  Branch (4818:5): [True: 711, False: 238k]
  ------------------
 4819|    711|        return decode_NXAST_RAW_STACK_POP(ALIGNED_CAST(const struct nx_action_stack *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|    711|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4820|       |
 4821|    117|    case NXAST_RAW_SAMPLE:
  ------------------
  |  Branch (4821:5): [True: 117, False: 239k]
  ------------------
 4822|    117|        return decode_NXAST_RAW_SAMPLE(ALIGNED_CAST(const struct nx_action_sample *, a), version, out);
  ------------------
  |  |  434|    117|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4823|       |
 4824|     74|    case NXAST_RAW_SAMPLE2:
  ------------------
  |  Branch (4824:5): [True: 74, False: 239k]
  ------------------
 4825|     74|        return decode_NXAST_RAW_SAMPLE2(ALIGNED_CAST(const struct nx_action_sample2 *, a), version, out);
  ------------------
  |  |  434|     74|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4826|       |
 4827|  2.22k|    case NXAST_RAW_SAMPLE3:
  ------------------
  |  Branch (4827:5): [True: 2.22k, False: 237k]
  ------------------
 4828|  2.22k|        return decode_NXAST_RAW_SAMPLE3(ALIGNED_CAST(const struct nx_action_sample2 *, a), version, out);
  ------------------
  |  |  434|  2.22k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4829|       |
 4830|  1.14k|    case NXAST_RAW_SAMPLE4:
  ------------------
  |  Branch (4830:5): [True: 1.14k, False: 238k]
  ------------------
 4831|  1.14k|        return decode_NXAST_RAW_SAMPLE4(ALIGNED_CAST(const struct nx_action_sample4 *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  1.14k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4832|       |
 4833|  3.96k|    case NXAST_RAW_CONJUNCTION:
  ------------------
  |  Branch (4833:5): [True: 3.96k, False: 235k]
  ------------------
 4834|  3.96k|        return decode_NXAST_RAW_CONJUNCTION(ALIGNED_CAST(const struct nx_action_conjunction *, a), version, out);
  ------------------
  |  |  434|  3.96k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4835|       |
 4836|  8.63k|    case NXAST_RAW_CT:
  ------------------
  |  Branch (4836:5): [True: 8.63k, False: 230k]
  ------------------
 4837|  8.63k|        return decode_NXAST_RAW_CT(ALIGNED_CAST(const struct nx_action_conntrack *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  8.63k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4838|       |
 4839|  13.9k|    case NXAST_RAW_NAT:
  ------------------
  |  Branch (4839:5): [True: 13.9k, False: 225k]
  ------------------
 4840|  13.9k|        return decode_NXAST_RAW_NAT(ALIGNED_CAST(const struct nx_action_nat *, a), version, out);
  ------------------
  |  |  434|  13.9k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4841|       |
 4842|  1.76k|    case NXAST_RAW_OUTPUT_TRUNC:
  ------------------
  |  Branch (4842:5): [True: 1.76k, False: 237k]
  ------------------
 4843|  1.76k|        return decode_NXAST_RAW_OUTPUT_TRUNC(ALIGNED_CAST(const struct nx_action_output_trunc *, a), version, out);
  ------------------
  |  |  434|  1.76k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4844|       |
 4845|    606|    case NXAST_RAW_CLONE:
  ------------------
  |  Branch (4845:5): [True: 606, False: 238k]
  ------------------
 4846|    606|        return decode_NXAST_RAW_CLONE(ALIGNED_CAST(const struct ext_action_header *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|    606|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4847|       |
 4848|    526|    case NXAST_RAW_CT_CLEAR:
  ------------------
  |  Branch (4848:5): [True: 526, False: 239k]
  ------------------
 4849|    526|        return decode_NXAST_RAW_CT_CLEAR(out);
 4850|       |
 4851|  6.89k|    case NXAST_RAW_ENCAP:
  ------------------
  |  Branch (4851:5): [True: 6.89k, False: 232k]
  ------------------
 4852|  6.89k|        return decode_NXAST_RAW_ENCAP(ALIGNED_CAST(const struct nx_action_encap *, a), version, out);
  ------------------
  |  |  434|  6.89k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4853|       |
 4854|  10.6k|    case NXAST_RAW_DECAP:
  ------------------
  |  Branch (4854:5): [True: 10.6k, False: 228k]
  ------------------
 4855|  10.6k|        return decode_NXAST_RAW_DECAP(ALIGNED_CAST(const struct nx_action_decap *, a), version, out);
  ------------------
  |  |  434|  10.6k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4856|       |
 4857|    684|    case NXAST_RAW_DEC_NSH_TTL:
  ------------------
  |  Branch (4857:5): [True: 684, False: 238k]
  ------------------
 4858|    684|        return decode_NXAST_RAW_DEC_NSH_TTL(out);
 4859|       |
 4860|  2.03k|    case NXAST_RAW_CHECK_PKT_LARGER:
  ------------------
  |  Branch (4860:5): [True: 2.03k, False: 237k]
  ------------------
 4861|  2.03k|        return decode_NXAST_RAW_CHECK_PKT_LARGER(ALIGNED_CAST(const struct nx_action_check_pkt_larger *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  2.03k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4862|       |
 4863|    522|    case NXAST_RAW_DELETE_FIELD:
  ------------------
  |  Branch (4863:5): [True: 522, False: 239k]
  ------------------
 4864|    522|        return decode_NXAST_RAW_DELETE_FIELD(ALIGNED_CAST(const struct nx_action_delete_field *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|    522|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4865|       |
 4866|    352|    case NXAST_RAW_DEBUG_SLOW:
  ------------------
  |  Branch (4866:5): [True: 352, False: 239k]
  ------------------
 4867|    352|        return decode_NXAST_RAW_DEBUG_SLOW(out);
 4868|       |
 4869|     15|    case NXAST_RAW_DEBUG_RECIRC:
  ------------------
  |  Branch (4869:5): [True: 15, False: 239k]
  ------------------
 4870|     15|        return decode_NXAST_RAW_DEBUG_RECIRC(out);
 4871|       |
 4872|      0|    default:
  ------------------
  |  Branch (4872:5): [True: 0, False: 239k]
  ------------------
 4873|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 4874|   239k|    }
 4875|   239k|}

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

ofputil_decode_role_message:
   42|  8.03k|{
   43|  8.03k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
   44|  8.03k|    enum ofpraw raw = ofpraw_pull_assert(&b);
   45|  8.03k|    if (raw == OFPRAW_OFPT12_ROLE_REQUEST ||
  ------------------
  |  Branch (45:9): [True: 1.25k, False: 6.77k]
  ------------------
   46|  7.69k|        raw == OFPRAW_OFPT12_ROLE_REPLY) {
  ------------------
  |  Branch (46:9): [True: 6.44k, False: 337]
  ------------------
   47|  7.69k|        const struct ofp12_role_request *orr = b.msg;
   48|       |
   49|  7.69k|        if (orr->role != htonl(OFPCR12_ROLE_NOCHANGE) &&
  ------------------
  |  Branch (49:13): [True: 7.31k, False: 379]
  ------------------
   50|  7.31k|            orr->role != htonl(OFPCR12_ROLE_EQUAL) &&
  ------------------
  |  Branch (50:13): [True: 2.54k, False: 4.77k]
  ------------------
   51|  2.54k|            orr->role != htonl(OFPCR12_ROLE_PRIMARY) &&
  ------------------
  |  Branch (51:13): [True: 2.51k, False: 33]
  ------------------
   52|  2.51k|            orr->role != htonl(OFPCR12_ROLE_SECONDARY)) {
  ------------------
  |  Branch (52:13): [True: 1.99k, False: 519]
  ------------------
   53|  1.99k|            return OFPERR_OFPRRFC_BAD_ROLE;
   54|  1.99k|        }
   55|       |
   56|  5.70k|        rr->role = ntohl(orr->role);
   57|  5.70k|        if (raw == OFPRAW_OFPT12_ROLE_REQUEST
  ------------------
  |  Branch (57:13): [True: 1.15k, False: 4.54k]
  |  Branch (57:13): [True: 304, False: 5.39k]
  ------------------
   58|  5.70k|            ? orr->role == htonl(OFPCR12_ROLE_NOCHANGE)
   59|  5.70k|            : orr->generation_id == OVS_BE64_MAX) {
  ------------------
  |  |   44|  4.54k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
   60|    304|            rr->have_generation_id = false;
   61|    304|            rr->generation_id = 0;
   62|  5.39k|        } else {
   63|  5.39k|            rr->have_generation_id = true;
   64|  5.39k|            rr->generation_id = ntohll(orr->generation_id);
   65|  5.39k|        }
   66|  5.70k|    } else if (raw == OFPRAW_NXT_ROLE_REQUEST ||
  ------------------
  |  Branch (66:16): [True: 241, False: 96]
  ------------------
   67|    337|               raw == OFPRAW_NXT_ROLE_REPLY) {
  ------------------
  |  Branch (67:16): [True: 96, False: 0]
  ------------------
   68|    337|        const struct nx_role_request *nrr = b.msg;
   69|       |
   70|    337|        BUILD_ASSERT(NX_ROLE_OTHER + 1 == OFPCR12_ROLE_EQUAL);
  ------------------
  |  |  271|    337|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  ------------------
   71|    337|        BUILD_ASSERT(NX_ROLE_PRIMARY + 1 == OFPCR12_ROLE_PRIMARY);
  ------------------
  |  |  271|    337|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  ------------------
   72|    337|        BUILD_ASSERT(NX_ROLE_SECONDARY + 1 == OFPCR12_ROLE_SECONDARY);
  ------------------
  |  |  271|    337|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  ------------------
   73|       |
   74|    337|        if (nrr->role != htonl(NX_ROLE_OTHER) &&
  ------------------
  |  Branch (74:13): [True: 297, False: 40]
  ------------------
   75|    297|            nrr->role != htonl(NX_ROLE_PRIMARY) &&
  ------------------
  |  Branch (75:13): [True: 266, False: 31]
  ------------------
   76|    266|            nrr->role != htonl(NX_ROLE_SECONDARY)) {
  ------------------
  |  Branch (76:13): [True: 192, False: 74]
  ------------------
   77|    192|            return OFPERR_OFPRRFC_BAD_ROLE;
   78|    192|        }
   79|       |
   80|    145|        rr->role = ntohl(nrr->role) + 1;
   81|    145|        rr->have_generation_id = false;
   82|    145|        rr->generation_id = 0;
   83|    145|    } else {
   84|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
   85|      0|    }
   86|       |
   87|  5.84k|    return 0;
   88|  8.03k|}
ofputil_format_role_message:
  121|  5.84k|{
  122|  5.84k|    format_role_generic(string, rr->role, (rr->have_generation_id
  ------------------
  |  Branch (122:44): [True: 5.39k, False: 449]
  ------------------
  123|  5.84k|                                           ? rr->generation_id
  124|       |                                           : UINT64_MAX));
  125|  5.84k|}
ofputil_decode_role_status:
  191|    726|{
  192|    726|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  193|    726|    enum ofpraw raw = ofpraw_pull_assert(&b);
  194|    726|    ovs_assert(raw == OFPRAW_OFPT14_ROLE_STATUS ||
  ------------------
  |  |   62|    726|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (194:16): [True: 726, False: 0]
  ------------------
  195|      0|               raw == OFPRAW_ONFT13_ROLE_STATUS);
  ------------------
  |  Branch (195:16): [True: 0, False: 0]
  ------------------
  196|       |
  197|    726|    const struct ofp14_role_status *r = b.msg;
  198|    726|    if (r->role != htonl(OFPCR12_ROLE_NOCHANGE) &&
  ------------------
  |  Branch (198:9): [True: 534, False: 192]
  ------------------
  199|    534|        r->role != htonl(OFPCR12_ROLE_EQUAL) &&
  ------------------
  |  Branch (199:9): [True: 458, False: 76]
  ------------------
  200|    458|        r->role != htonl(OFPCR12_ROLE_PRIMARY) &&
  ------------------
  |  Branch (200:9): [True: 387, False: 71]
  ------------------
  201|    387|        r->role != htonl(OFPCR12_ROLE_SECONDARY)) {
  ------------------
  |  Branch (201:9): [True: 303, False: 84]
  ------------------
  202|    303|        return OFPERR_OFPRRFC_BAD_ROLE;
  203|    303|    }
  204|       |
  205|    423|    rs->role = ntohl(r->role);
  206|    423|    rs->generation_id = ntohll(r->generation_id);
  207|    423|    rs->reason = r->reason;
  208|       |
  209|    423|    return 0;
  210|    726|}
ofputil_format_role_status:
  215|    423|{
  216|    423|    format_role_generic(string, rs->role, rs->generation_id);
  217|       |
  218|    423|    ds_put_cstr(string, " reason=");
  219|       |
  220|    423|    switch (rs->reason) {
  221|    143|    case OFPCRR_PRIMARY_REQUEST:
  ------------------
  |  Branch (221:5): [True: 143, False: 280]
  ------------------
  222|    143|        ds_put_cstr(string, "primary_request");
  223|    143|        break;
  224|     19|    case OFPCRR_CONFIG:
  ------------------
  |  Branch (224:5): [True: 19, False: 404]
  ------------------
  225|     19|        ds_put_cstr(string, "configuration_changed");
  226|     19|        break;
  227|      7|    case OFPCRR_EXPERIMENTER:
  ------------------
  |  Branch (227:5): [True: 7, False: 416]
  ------------------
  228|      7|        ds_put_cstr(string, "experimenter_data_changed");
  229|      7|        break;
  230|     93|    case OFPCRR_N_REASONS:
  ------------------
  |  Branch (230:5): [True: 93, False: 330]
  ------------------
  231|    254|    default:
  ------------------
  |  Branch (231:5): [True: 161, False: 262]
  ------------------
  232|    254|        ds_put_cstr(string, "(unknown)");
  233|    254|        break;
  234|    423|    }
  235|    423|}
ofputil_async_msg_type_to_string:
  239|   148k|{
  240|   148k|    switch (type) {
  241|  24.7k|    case OAM_PACKET_IN:      return "PACKET_IN";
  ------------------
  |  Branch (241:5): [True: 24.7k, False: 123k]
  ------------------
  242|  24.7k|    case OAM_PORT_STATUS:    return "PORT_STATUS";
  ------------------
  |  Branch (242:5): [True: 24.7k, False: 123k]
  ------------------
  243|  24.7k|    case OAM_FLOW_REMOVED:   return "FLOW_REMOVED";
  ------------------
  |  Branch (243:5): [True: 24.7k, False: 123k]
  ------------------
  244|  24.7k|    case OAM_ROLE_STATUS:    return "ROLE_STATUS";
  ------------------
  |  Branch (244:5): [True: 24.7k, False: 123k]
  ------------------
  245|  24.7k|    case OAM_TABLE_STATUS:   return "TABLE_STATUS";
  ------------------
  |  Branch (245:5): [True: 24.7k, False: 123k]
  ------------------
  246|  24.7k|    case OAM_REQUESTFORWARD: return "REQUESTFORWARD";
  ------------------
  |  Branch (246:5): [True: 24.7k, False: 123k]
  ------------------
  247|       |
  248|      0|    case OAM_N_TYPES:
  ------------------
  |  Branch (248:5): [True: 0, False: 148k]
  ------------------
  249|      0|    default:
  ------------------
  |  Branch (249:5): [True: 0, False: 148k]
  ------------------
  250|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  251|   148k|    }
  252|   148k|}
ofputil_decode_set_async_config:
  427|  20.0k|{
  428|  20.0k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  429|  20.0k|    enum ofpraw raw = ofpraw_pull_assert(&b);
  430|       |
  431|  20.0k|    if (raw == OFPRAW_OFPT13_SET_ASYNC ||
  ------------------
  |  Branch (431:9): [True: 482, False: 19.5k]
  ------------------
  432|  19.5k|        raw == OFPRAW_NXT_SET_ASYNC_CONFIG ||
  ------------------
  |  Branch (432:9): [True: 254, False: 19.3k]
  ------------------
  433|  19.3k|        raw == OFPRAW_OFPT13_GET_ASYNC_REPLY) {
  ------------------
  |  Branch (433:9): [True: 772, False: 18.5k]
  ------------------
  434|  1.50k|        const struct nx_async_config *msg = ofpmsg_body(oh);
  435|       |
  436|  1.50k|        *ac = OFPUTIL_ASYNC_CFG_INIT;
  ------------------
  |  |   75|  1.50k|#define OFPUTIL_ASYNC_CFG_INIT (struct ofputil_async_cfg) { .primary[0] = 0 }
  ------------------
  437|  1.50k|        decode_legacy_async_masks(msg->packet_in_mask, OAM_PACKET_IN,
  438|  1.50k|                                  oh->version, ac);
  439|  1.50k|        decode_legacy_async_masks(msg->port_status_mask, OAM_PORT_STATUS,
  440|  1.50k|                                  oh->version, ac);
  441|  1.50k|        decode_legacy_async_masks(msg->flow_removed_mask, OAM_FLOW_REMOVED,
  442|  1.50k|                                  oh->version, ac);
  443|  18.5k|    } else if (raw == OFPRAW_OFPT14_SET_ASYNC ||
  ------------------
  |  Branch (443:16): [True: 4.55k, False: 14.0k]
  ------------------
  444|  14.0k|               raw == OFPRAW_OFPT14_GET_ASYNC_REPLY ||
  ------------------
  |  Branch (444:16): [True: 13.9k, False: 62]
  ------------------
  445|  18.5k|               raw == OFPRAW_NXT_SET_ASYNC_CONFIG2) {
  ------------------
  |  Branch (445:16): [True: 62, False: 0]
  ------------------
  446|  18.5k|        *ac = *basis;
  447|  28.9k|        while (b.size > 0) {
  ------------------
  |  Branch (447:16): [True: 18.0k, False: 10.8k]
  ------------------
  448|  18.0k|            struct ofpbuf property;
  449|  18.0k|            enum ofperr error;
  450|  18.0k|            uint64_t type;
  451|       |
  452|  18.0k|            error = ofpprop_pull__(&b, &property, 8, 0xfffe, &type);
  453|  18.0k|            if (error) {
  ------------------
  |  Branch (453:17): [True: 6.45k, False: 11.6k]
  ------------------
  454|  6.45k|                return error;
  455|  6.45k|            }
  456|       |
  457|  11.6k|            const struct ofp14_async_prop *ap
  458|  11.6k|                = get_ofp14_async_config_prop_by_prop_type(type);
  459|  11.6k|            error = (ap
  ------------------
  |  Branch (459:22): [True: 8.57k, False: 3.02k]
  ------------------
  460|  11.6k|                     ? parse_async_tlv(&property, ap, ac, oh->version, loose)
  461|  11.6k|                     : OFPPROP_UNKNOWN(loose, "async config", type));
  ------------------
  |  |  144|  3.02k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  462|  11.6k|            if (error) {
  ------------------
  |  Branch (462:17): [True: 1.23k, False: 10.3k]
  ------------------
  463|       |                /* Most messages use OFPBPC_BAD_TYPE but async has its own (who
  464|       |                 * knows why, it's OpenFlow. */
  465|  1.23k|                if (error == OFPERR_OFPBPC_BAD_TYPE) {
  ------------------
  |  Branch (465:21): [True: 485, False: 747]
  ------------------
  466|    485|                    error = OFPERR_OFPACFC_UNSUPPORTED;
  467|    485|                }
  468|  1.23k|                return error;
  469|  1.23k|            }
  470|  11.6k|        }
  471|  18.5k|    } else {
  472|      0|        return OFPERR_OFPBRC_BAD_VERSION;
  473|      0|    }
  474|  12.3k|    return 0;
  475|  20.0k|}
ofputil_format_set_async_config:
  667|  12.3k|{
  668|  37.1k|    for (int i = 0; i < 2; i++) {
  ------------------
  |  Branch (668:21): [True: 24.7k, False: 12.3k]
  ------------------
  669|  24.7k|        ds_put_format(string, "\n %s:\n", i == 0 ? "primary" : "secondary");
  ------------------
  |  Branch (669:43): [True: 12.3k, False: 12.3k]
  ------------------
  670|   173k|        for (uint32_t type = 0; type < OAM_N_TYPES; type++) {
  ------------------
  |  Branch (670:33): [True: 148k, False: 24.7k]
  ------------------
  671|   148k|            ds_put_format(string, "%16s:",
  672|   148k|                          ofputil_async_msg_type_to_string(type));
  673|       |
  674|   148k|            uint32_t role = i == 0 ? ac->primary[type] : ac->secondary[type];
  ------------------
  |  Branch (674:29): [True: 74.3k, False: 74.3k]
  ------------------
  675|  4.90M|            for (int j = 0; j < 32; j++) {
  ------------------
  |  Branch (675:29): [True: 4.75M, False: 148k]
  ------------------
  676|  4.75M|                if (role & (1u << j)) {
  ------------------
  |  Branch (676:21): [True: 43.8k, False: 4.71M]
  ------------------
  677|  43.8k|                    char reasonbuf[INT_STRLEN(int) + 1];
  678|  43.8k|                    const char *reason;
  679|       |
  680|  43.8k|                    reason = ofp_async_config_reason_to_string(
  681|  43.8k|                        j, type, reasonbuf, sizeof reasonbuf);
  682|  43.8k|                    if (reason[0]) {
  ------------------
  |  Branch (682:25): [True: 40.8k, False: 3.06k]
  ------------------
  683|  40.8k|                        ds_put_format(string, " %s", reason);
  684|  40.8k|                    }
  685|  43.8k|                }
  686|  4.75M|            }
  687|   148k|            if (!role) {
  ------------------
  |  Branch (687:17): [True: 135k, False: 12.8k]
  ------------------
  688|   135k|                ds_put_cstr(string, " (off)");
  689|   135k|            }
  690|   148k|            ds_put_char(string, '\n');
  691|   148k|        }
  692|  24.7k|    }
  693|  12.3k|}
ofp-connection.c:format_role_generic:
   93|  6.27k|{
   94|  6.27k|    ds_put_cstr(string, " role=");
   95|       |
   96|  6.27k|    switch (role) {
   97|    571|    case OFPCR12_ROLE_NOCHANGE:
  ------------------
  |  Branch (97:5): [True: 571, False: 5.70k]
  ------------------
   98|    571|        ds_put_cstr(string, "nochange");
   99|    571|        break;
  100|  4.88k|    case OFPCR12_ROLE_EQUAL:
  ------------------
  |  Branch (100:5): [True: 4.88k, False: 1.38k]
  ------------------
  101|  4.88k|        ds_put_cstr(string, "equal"); /* OF 1.2 wording */
  102|  4.88k|        break;
  103|    135|    case OFPCR12_ROLE_PRIMARY:
  ------------------
  |  Branch (103:5): [True: 135, False: 6.13k]
  ------------------
  104|    135|        ds_put_cstr(string, "primary");
  105|    135|        break;
  106|    677|    case OFPCR12_ROLE_SECONDARY:
  ------------------
  |  Branch (106:5): [True: 677, False: 5.59k]
  ------------------
  107|    677|        ds_put_cstr(string, "secondary");
  108|    677|        break;
  109|      0|    default:
  ------------------
  |  Branch (109:5): [True: 0, False: 6.27k]
  ------------------
  110|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  111|  6.27k|    }
  112|       |
  113|  6.27k|    if (generation_id != UINT64_MAX) {
  ------------------
  |  Branch (113:9): [True: 5.82k, False: 450]
  ------------------
  114|       |        ds_put_format(string, " generation_id=%"PRIu64, generation_id);
  115|  5.82k|    }
  116|  6.27k|}
ofp-connection.c:decode_legacy_async_masks:
  393|  4.52k|{
  394|  13.5k|    for (int i = 0; i < 2; i++) {
  ------------------
  |  Branch (394:21): [True: 9.04k, False: 4.52k]
  ------------------
  395|  9.04k|        bool primary = i == 0;
  396|  9.04k|        const struct ofp14_async_prop *ap
  397|  9.04k|            = get_ofp14_async_config_prop_by_oam(oam, primary);
  398|       |        decode_async_mask(masks[i], ap, version, true, dst);
  399|  9.04k|    }
  400|  4.52k|}
ofp-connection.c:get_ofp14_async_config_prop_by_oam:
  292|  9.04k|{
  293|  31.6k|    FOR_EACH_ASYNC_PROP (ap) {
  ------------------
  |  |  275|  9.04k|    for (const struct ofp14_async_prop *VAR = async_props;      \
  |  |  276|  31.6k|         VAR < &async_props[ARRAY_SIZE(async_props)]; VAR++)
  |  |  ------------------
  |  |  |  |  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 (276:10): [True: 31.6k, False: 0]
  |  |  ------------------
  ------------------
  294|  31.6k|        if (ap->oam == oam && ap->primary == primary) {
  ------------------
  |  Branch (294:13): [True: 13.5k, False: 18.0k]
  |  Branch (294:31): [True: 9.04k, False: 4.52k]
  ------------------
  295|  9.04k|            return ap;
  296|  9.04k|        }
  297|  31.6k|    }
  298|      0|    return NULL;
  299|  9.04k|}
ofp-connection.c:decode_async_mask:
  323|  17.5k|{
  324|  17.5k|    uint32_t mask = ntohl(src);
  325|  17.5k|    uint32_t allowed = ofp14_async_prop_allowed(ap, version);
  326|  17.5k|    if (mask & ~allowed) {
  ------------------
  |  Branch (326:9): [True: 13.8k, False: 3.72k]
  ------------------
  327|  13.8k|        static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
  ------------------
  |  |  110|  13.8k|        {                                                                 \
  |  |  111|  13.8k|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|  55.3k|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [True: 0, Folded]
  |  |  |  |  |  Branch (37:48): [Folded, False: 13.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  13.8k|            0,                              /* first_dropped */           \
  |  |  113|  13.8k|            0,                              /* last_dropped */            \
  |  |  114|  13.8k|            0,                              /* n_dropped */               \
  |  |  115|  13.8k|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  13.8k|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  13.8k|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  13.8k|        }
  ------------------
  328|  13.8k|        OFPPROP_LOG(&rl, loose,
  ------------------
  |  |  139|  13.8k|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  13.8k|    do {                                                                \
  |  |  |  |  288|  27.6k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [True: 13.1k, False: 661]
  |  |  |  |  ------------------
  |  |  |  |  289|  13.8k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 13.8k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  13.8k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 13.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  329|  13.8k|                    "bad value %#x for %s (allowed mask %#x)",
  330|  13.8k|                    mask, ofputil_async_msg_type_to_string(ap->oam),
  331|  13.8k|                    allowed);
  332|  13.8k|        mask &= allowed;
  333|  13.8k|        if (!loose) {
  ------------------
  |  Branch (333:13): [True: 661, False: 13.1k]
  ------------------
  334|    661|            return OFPERR_OFPACFC_INVALID;
  335|    661|        }
  336|  13.8k|    }
  337|       |
  338|  16.8k|    if (ap->oam == OAM_PACKET_IN) {
  ------------------
  |  Branch (338:9): [True: 4.53k, False: 12.3k]
  ------------------
  339|  4.53k|        if (mask & (1u << OFPR_NO_MATCH)) {
  ------------------
  |  Branch (339:13): [True: 2.79k, False: 1.73k]
  ------------------
  340|  2.79k|            mask |= 1u << OFPR_EXPLICIT_MISS;
  341|  2.79k|            if (version < OFP13_VERSION) {
  ------------------
  |  Branch (341:17): [True: 268, False: 2.53k]
  ------------------
  342|    268|                mask |= 1u << OFPR_IMPLICIT_MISS;
  343|    268|            }
  344|  2.79k|        }
  345|  4.53k|    }
  346|       |
  347|  16.8k|    uint32_t *array = ap->primary ? dst->primary : dst->secondary;
  ------------------
  |  Branch (347:23): [True: 5.90k, False: 10.9k]
  ------------------
  348|  16.8k|    array[ap->oam] = mask;
  349|  16.8k|    return 0;
  350|  17.5k|}
ofp-connection.c:ofp14_async_prop_allowed:
  304|  17.5k|{
  305|  17.5k|    return version >= OFP14_VERSION ? prop->allowed14 : prop->allowed10;
  ------------------
  |  Branch (305:12): [True: 8.64k, False: 8.91k]
  ------------------
  306|  17.5k|}
ofp-connection.c:get_ofp14_async_config_prop_by_prop_type:
  280|  11.6k|{
  281|  92.3k|    FOR_EACH_ASYNC_PROP (ap) {
  ------------------
  |  |  275|  11.6k|    for (const struct ofp14_async_prop *VAR = async_props;      \
  |  |  276|  95.3k|         VAR < &async_props[ARRAY_SIZE(async_props)]; VAR++)
  |  |  ------------------
  |  |  |  |  297|  95.3k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  |  |  ------------------
  |  |  |  |  |  |   46|  95.3k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   41|  95.3k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   47|  95.3k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  95.3k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   44|  95.3k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (276:10): [True: 92.3k, False: 3.02k]
  |  |  ------------------
  ------------------
  282|  92.3k|        if (prop_type == ap->prop_type) {
  ------------------
  |  Branch (282:13): [True: 8.57k, False: 83.7k]
  ------------------
  283|  8.57k|            return ap;
  284|  8.57k|        }
  285|  92.3k|    }
  286|  3.02k|    return NULL;
  287|  11.6k|}
ofp-connection.c:parse_async_tlv:
  357|  8.57k|{
  358|  8.57k|    enum ofperr error;
  359|  8.57k|    ovs_be32 mask;
  360|       |
  361|  8.57k|    error  = ofpprop_parse_be32(property, &mask);
  362|  8.57k|    if (error) {
  ------------------
  |  Branch (362:9): [True: 67, False: 8.51k]
  ------------------
  363|     67|        return error;
  364|     67|    }
  365|       |
  366|  8.51k|    if (ofpprop_is_experimenter(ap->prop_type)) {
  ------------------
  |  Branch (366:9): [True: 0, False: 8.51k]
  ------------------
  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|  8.51k|    return decode_async_mask(mask, ap, version, loose, ac);
  386|  8.51k|}
ofp-connection.c:ofp_async_config_reason_to_string:
  638|  43.8k|{
  639|  43.8k|    switch (type) {
  640|  15.5k|    case OAM_PACKET_IN:
  ------------------
  |  Branch (640:5): [True: 15.5k, False: 28.3k]
  ------------------
  641|  15.5k|        return ofputil_packet_in_reason_to_string(reason, reasonbuf, bufsize);
  642|       |
  643|  5.33k|    case OAM_PORT_STATUS:
  ------------------
  |  Branch (643:5): [True: 5.33k, False: 38.5k]
  ------------------
  644|  5.33k|        return ofp_port_reason_to_string(reason, reasonbuf, bufsize);
  645|       |
  646|  9.12k|    case OAM_FLOW_REMOVED:
  ------------------
  |  Branch (646:5): [True: 9.12k, False: 34.7k]
  ------------------
  647|  9.12k|        return ofp_flow_removed_reason_to_string(reason, reasonbuf, bufsize);
  648|       |
  649|  10.5k|    case OAM_ROLE_STATUS:
  ------------------
  |  Branch (649:5): [True: 10.5k, False: 33.3k]
  ------------------
  650|  10.5k|        return ofp_role_reason_to_string(reason, reasonbuf, bufsize);
  651|       |
  652|    589|    case OAM_TABLE_STATUS:
  ------------------
  |  Branch (652:5): [True: 589, False: 43.3k]
  ------------------
  653|    589|        return ofp_table_reason_to_string(reason, reasonbuf, bufsize);
  654|       |
  655|  2.70k|    case OAM_REQUESTFORWARD:
  ------------------
  |  Branch (655:5): [True: 2.70k, False: 41.1k]
  ------------------
  656|  2.70k|        return ofp_requestforward_reason_to_string(reason, reasonbuf, bufsize);
  657|       |
  658|      0|    case OAM_N_TYPES:
  ------------------
  |  Branch (658:5): [True: 0, False: 43.8k]
  ------------------
  659|      0|    default:
  ------------------
  |  Branch (659:5): [True: 0, False: 43.8k]
  ------------------
  660|      0|        return "Unknown asynchronous configuration message type";
  661|  43.8k|    }
  662|  43.8k|}
ofp-connection.c:ofp_port_reason_to_string:
  571|  5.33k|{
  572|  5.33k|    switch (reason) {
  573|  1.84k|    case OFPPR_ADD:
  ------------------
  |  Branch (573:5): [True: 1.84k, False: 3.49k]
  ------------------
  574|  1.84k|        return "add";
  575|       |
  576|  1.55k|    case OFPPR_DELETE:
  ------------------
  |  Branch (576:5): [True: 1.55k, False: 3.77k]
  ------------------
  577|  1.55k|        return "delete";
  578|       |
  579|  1.93k|    case OFPPR_MODIFY:
  ------------------
  |  Branch (579:5): [True: 1.93k, False: 3.39k]
  ------------------
  580|  1.93k|        return "modify";
  581|       |
  582|      0|    case OFPPR_N_REASONS:
  ------------------
  |  Branch (582:5): [True: 0, False: 5.33k]
  ------------------
  583|      0|    default:
  ------------------
  |  Branch (583:5): [True: 0, False: 5.33k]
  ------------------
  584|      0|        snprintf(reasonbuf, bufsize, "%d", (int) reason);
  585|      0|        return reasonbuf;
  586|  5.33k|    }
  587|  5.33k|}
ofp-connection.c:ofp_role_reason_to_string:
  595|  10.5k|{
  596|  10.5k|    switch (reason) {
  597|  3.53k|    case OFPCRR_PRIMARY_REQUEST:
  ------------------
  |  Branch (597:5): [True: 3.53k, False: 7.03k]
  ------------------
  598|  3.53k|        return "primary_request";
  599|       |
  600|  3.50k|    case OFPCRR_CONFIG:
  ------------------
  |  Branch (600:5): [True: 3.50k, False: 7.06k]
  ------------------
  601|  3.50k|        return "configuration_changed";
  602|       |
  603|  3.52k|    case OFPCRR_EXPERIMENTER:
  ------------------
  |  Branch (603:5): [True: 3.52k, False: 7.03k]
  ------------------
  604|  3.52k|        return "experimenter_data_changed";
  605|       |
  606|      0|    case OFPCRR_N_REASONS:
  ------------------
  |  Branch (606:5): [True: 0, False: 10.5k]
  ------------------
  607|      0|    default:
  ------------------
  |  Branch (607:5): [True: 0, False: 10.5k]
  ------------------
  608|      0|        snprintf(reasonbuf, bufsize, "%d", (int) reason);
  609|      0|        return reasonbuf;
  610|  10.5k|    }
  611|  10.5k|}
ofp-connection.c:ofp_requestforward_reason_to_string:
  619|  2.70k|{
  620|  2.70k|    switch (reason) {
  621|  1.36k|    case OFPRFR_GROUP_MOD:
  ------------------
  |  Branch (621:5): [True: 1.36k, False: 1.34k]
  ------------------
  622|  1.36k|        return "group_mod_request";
  623|       |
  624|  1.34k|    case OFPRFR_METER_MOD:
  ------------------
  |  Branch (624:5): [True: 1.34k, False: 1.36k]
  ------------------
  625|  1.34k|        return "meter_mod_request";
  626|       |
  627|      0|    case OFPRFR_N_REASONS:
  ------------------
  |  Branch (627:5): [True: 0, False: 2.70k]
  ------------------
  628|      0|    default:
  ------------------
  |  Branch (628:5): [True: 0, False: 2.70k]
  ------------------
  629|      0|        snprintf(reasonbuf, bufsize, "%d", (int) reason);
  630|      0|        return reasonbuf;
  631|  2.70k|    }
  632|  2.70k|}

ofp_ct_match_format:
  100|  4.64k|{
  101|  4.64k|    if (match->mark_mask) {
  ------------------
  |  Branch (101:9): [True: 569, False: 4.07k]
  ------------------
  102|    569|        ds_put_format(ds, "mark=%#"PRIx32, match->mark);
  103|    569|        if (match->mark_mask != UINT32_MAX) {
  ------------------
  |  Branch (103:13): [True: 420, False: 149]
  ------------------
  104|    420|            ds_put_format(ds, "/%#"PRIx32, match->mark_mask);
  105|    420|        }
  106|    569|        ds_put_char(ds, ' ');
  107|    569|    }
  108|       |
  109|  4.64k|    if (!ovs_u128_is_zero(match->labels_mask)) {
  ------------------
  |  Branch (109:9): [True: 1.47k, False: 3.17k]
  ------------------
  110|  1.47k|        ovs_be128 be_value = hton128(match->labels);
  111|  1.47k|        ovs_be128 be_mask = hton128(match->labels_mask);
  112|       |
  113|  1.47k|        ds_put_cstr(ds, "labels=");
  114|  1.47k|        ds_put_hex(ds, &be_value, sizeof be_value);
  115|       |
  116|  1.47k|        if (!ovs_u128_is_ones(match->labels_mask)) {
  ------------------
  |  Branch (116:13): [True: 1.14k, False: 331]
  ------------------
  117|  1.14k|            ds_put_char(ds, '/');
  118|  1.14k|            ds_put_hex(ds, &be_mask, sizeof be_mask);
  119|  1.14k|        }
  120|  1.47k|        ds_put_char(ds, ' ');
  121|  1.47k|    }
  122|       |
  123|  4.64k|    ds_put_cstr(ds, "'");
  124|  4.64k|    ofp_ct_tuple_format(ds, &match->tuple_orig, match->ip_proto,
  125|  4.64k|                        match->l3_type);
  126|  4.64k|    ds_put_format(ds, ",ct_nw_proto=%u' '", match->ip_proto);
  127|  4.64k|    ofp_ct_tuple_format(ds, &match->tuple_reply, match->ip_proto,
  128|  4.64k|                        match->l3_type);
  129|  4.64k|    ds_put_cstr(ds, "'");
  130|  4.64k|}
ofp_ct_match_decode:
  473|  13.5k|{
  474|  13.5k|    uint32_t tlv_flags = 0;
  475|  13.5k|    struct ofpbuf msg = ofpbuf_const_initializer(oh, ntohs(oh->length));
  476|  13.5k|    ofpraw_pull_assert(&msg);
  477|       |
  478|  13.5k|    const struct nx_ct_flush *nx_flush = ofpbuf_pull(&msg, sizeof *nx_flush);
  479|       |
  480|  13.5k|    if (!is_all_zeros(nx_flush->pad, sizeof nx_flush->pad)) {
  ------------------
  |  Branch (480:9): [True: 1.87k, False: 11.6k]
  ------------------
  481|  1.87k|        return OFPERR_NXBRC_MUST_BE_ZERO;
  482|  1.87k|    }
  483|       |
  484|  11.6k|    match->ip_proto = nx_flush->ip_proto;
  485|       |
  486|  11.6k|    struct ofp_ct_tuple *orig = &match->tuple_orig;
  487|  11.6k|    struct ofp_ct_tuple *reply = &match->tuple_reply;
  488|       |
  489|  18.3k|    while (msg.size) {
  ------------------
  |  Branch (489:12): [True: 13.6k, False: 4.64k]
  ------------------
  490|  13.6k|        struct ofpbuf property;
  491|  13.6k|        uint64_t type;
  492|       |
  493|  13.6k|        enum ofperr error = ofpprop_pull(&msg, &property, &type);
  494|  13.6k|        if (error) {
  ------------------
  |  Branch (494:13): [True: 879, False: 12.7k]
  ------------------
  495|    879|            return error;
  496|    879|        }
  497|       |
  498|  12.7k|        switch (type) {
  499|  7.64k|        case NXT_CT_ORIG_TUPLE:
  ------------------
  |  Branch (499:9): [True: 7.64k, False: 5.14k]
  ------------------
  500|  7.64k|            error = ofp_ct_tuple_decode_nested(&property, orig,
  501|  7.64k|                                               &match->l3_type);
  502|  7.64k|            break;
  503|       |
  504|  1.63k|        case NXT_CT_REPLY_TUPLE:
  ------------------
  |  Branch (504:9): [True: 1.63k, False: 11.1k]
  ------------------
  505|  1.63k|            error = ofp_ct_tuple_decode_nested(&property, reply,
  506|  1.63k|                                               &match->l3_type);
  507|  1.63k|            break;
  508|       |
  509|    485|        case NXT_CT_ZONE_ID:
  ------------------
  |  Branch (509:9): [True: 485, False: 12.3k]
  ------------------
  510|    485|            if (with_zone) {
  ------------------
  |  Branch (510:17): [True: 0, False: 485]
  ------------------
  511|      0|                *with_zone = true;
  512|      0|            }
  513|    485|            error = ofpprop_parse_u16(&property, zone_id);
  514|    485|            break;
  515|       |
  516|    803|        case NXT_CT_MARK:
  ------------------
  |  Branch (516:9): [True: 803, False: 11.9k]
  ------------------
  517|    803|            error = ofpprop_parse_u32(&property, &match->mark);
  518|    803|            break;
  519|       |
  520|    432|        case NXT_CT_MARK_MASK:
  ------------------
  |  Branch (520:9): [True: 432, False: 12.3k]
  ------------------
  521|    432|            error = ofpprop_parse_u32(&property, &match->mark_mask);
  522|    432|            break;
  523|       |
  524|     93|        case NXT_CT_LABELS:
  ------------------
  |  Branch (524:9): [True: 93, False: 12.6k]
  ------------------
  525|     93|            error = ofpprop_parse_u128(&property, &match->labels);
  526|     93|            break;
  527|       |
  528|  1.40k|        case NXT_CT_LABELS_MASK:
  ------------------
  |  Branch (528:9): [True: 1.40k, False: 11.3k]
  ------------------
  529|  1.40k|            error = ofpprop_parse_u128(&property, &match->labels_mask);
  530|  1.40k|            break;
  531|       |
  532|    287|        default:
  ------------------
  |  Branch (532:9): [True: 287, False: 12.5k]
  ------------------
  533|    287|            error = OFPPROP_UNKNOWN(false, "NXT_CT_FLUSH", type);
  ------------------
  |  |  144|    287|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  534|    287|            break;
  535|  12.7k|        }
  536|       |
  537|  12.7k|        if (error) {
  ------------------
  |  Branch (537:13): [True: 6.14k, False: 6.65k]
  ------------------
  538|  6.14k|            return error;
  539|  6.14k|        }
  540|       |
  541|  6.65k|        if (type < (sizeof tlv_flags * CHAR_BIT)) {
  ------------------
  |  Branch (541:13): [True: 6.65k, False: 0]
  ------------------
  542|  6.65k|            tlv_flags |= (UINT32_C(1) << type);
  543|  6.65k|        }
  544|  6.65k|    }
  545|       |
  546|       |    /* Consider the mask being all ones if it's not present but the value
  547|       |     * is specified. */
  548|  4.64k|    if (tlv_flags & (UINT32_C(1) << NXT_CT_MARK) &&
  ------------------
  |  Branch (548:9): [True: 505, False: 4.13k]
  ------------------
  549|    505|        !(tlv_flags & (UINT32_C(1) << NXT_CT_MARK_MASK))) {
  ------------------
  |  Branch (549:9): [True: 149, False: 356]
  ------------------
  550|    149|        match->mark_mask = UINT32_MAX;
  551|    149|    }
  552|       |
  553|  4.64k|    if (tlv_flags & (UINT32_C(1) << NXT_CT_LABELS) &&
  ------------------
  |  Branch (553:9): [True: 79, False: 4.56k]
  ------------------
  554|     79|        !(tlv_flags & (UINT32_C(1) << NXT_CT_LABELS_MASK))) {
  ------------------
  |  Branch (554:9): [True: 69, False: 10]
  ------------------
  555|     69|        match->labels_mask = OVS_U128_MAX;
  556|     69|    }
  557|       |
  558|  4.64k|    return 0;
  559|  11.6k|}
ofp-ct.c:ofp_ct_tuple_format:
   41|  9.28k|{
   42|  9.28k|    ds_put_cstr(ds, l3_type == AF_INET ? "ct_nw_src=": "ct_ipv6_src=");
  ------------------
  |  Branch (42:21): [True: 1.06k, False: 8.21k]
  ------------------
   43|  9.28k|    ipv6_format_mapped(&tuple->src, ds);
   44|  9.28k|    ds_put_cstr(ds, l3_type == AF_INET ? ",ct_nw_dst=": ",ct_ipv6_dst=");
  ------------------
  |  Branch (44:21): [True: 1.06k, False: 8.21k]
  ------------------
   45|  9.28k|    ipv6_format_mapped(&tuple->dst, ds);
   46|  9.28k|    if (ip_proto == IPPROTO_ICMP || ip_proto == IPPROTO_ICMPV6) {
  ------------------
  |  Branch (46:9): [True: 3.82k, False: 5.46k]
  |  Branch (46:37): [True: 122, False: 5.34k]
  ------------------
   47|  3.94k|        ds_put_format(ds, ",icmp_id=%u,icmp_type=%u,icmp_code=%u",
   48|  3.94k|                      ntohs(tuple->icmp_id), tuple->icmp_type,
   49|  3.94k|                      tuple->icmp_code);
   50|  5.34k|    } else {
   51|  5.34k|        ds_put_format(ds, ",ct_tp_src=%u,ct_tp_dst=%u", ntohs(tuple->src_port),
   52|       |                      ntohs(tuple->dst_port));
   53|  5.34k|    }
   54|  9.28k|}
ofp-ct.c:ofp_ct_tuple_decode_nested:
  376|  9.28k|{
  377|  9.28k|    struct ofpbuf nested;
  378|  9.28k|    enum ofperr error = ofpprop_parse_nested(property, &nested);
  379|  9.28k|    if (error) {
  ------------------
  |  Branch (379:9): [True: 21, False: 9.26k]
  ------------------
  380|     21|        return error;
  381|     21|    }
  382|       |
  383|  20.4k|    while (nested.size) {
  ------------------
  |  Branch (383:12): [True: 16.9k, False: 3.45k]
  ------------------
  384|  16.9k|        struct ofpbuf inner;
  385|  16.9k|        uint64_t type;
  386|       |
  387|  16.9k|        error = ofpprop_pull(&nested, &inner, &type);
  388|  16.9k|        if (error) {
  ------------------
  |  Branch (388:13): [True: 1.81k, False: 15.1k]
  ------------------
  389|  1.81k|            return error;
  390|  1.81k|        }
  391|  15.1k|        switch (type) {
  392|  4.15k|        case NXT_CT_TUPLE_SRC:
  ------------------
  |  Branch (392:9): [True: 4.15k, False: 10.9k]
  ------------------
  393|  4.15k|            error = ofpprop_pull_ipv6(&inner, &tuple->src, l3_type);
  394|  4.15k|            break;
  395|       |
  396|  7.52k|        case NXT_CT_TUPLE_DST:
  ------------------
  |  Branch (396:9): [True: 7.52k, False: 7.61k]
  ------------------
  397|  7.52k|            error = ofpprop_pull_ipv6(&inner, &tuple->dst, l3_type);
  398|  7.52k|            break;
  399|       |
  400|    419|        case NXT_CT_TUPLE_SRC_PORT:
  ------------------
  |  Branch (400:9): [True: 419, False: 14.7k]
  ------------------
  401|    419|            error = ofpprop_parse_be16(&inner, &tuple->src_port);
  402|    419|            break;
  403|       |
  404|    983|        case NXT_CT_TUPLE_DST_PORT:
  ------------------
  |  Branch (404:9): [True: 983, False: 14.1k]
  ------------------
  405|    983|            error = ofpprop_parse_be16(&inner, &tuple->dst_port);
  406|    983|            break;
  407|       |
  408|    229|        case NXT_CT_TUPLE_ICMP_ID:
  ------------------
  |  Branch (408:9): [True: 229, False: 14.9k]
  ------------------
  409|    229|            error = ofpprop_parse_be16(&inner, &tuple->icmp_id);
  410|    229|            break;
  411|       |
  412|     43|        case NXT_CT_TUPLE_ICMP_TYPE:
  ------------------
  |  Branch (412:9): [True: 43, False: 15.0k]
  ------------------
  413|     43|            error = ofpprop_parse_u8(&inner, &tuple->icmp_type);
  414|     43|            break;
  415|       |
  416|     69|        case NXT_CT_TUPLE_ICMP_CODE:
  ------------------
  |  Branch (416:9): [True: 69, False: 15.0k]
  ------------------
  417|     69|            error = ofpprop_parse_u8(&inner, &tuple->icmp_code);
  418|     69|            break;
  419|       |
  420|  1.71k|        default:
  ------------------
  |  Branch (420:9): [True: 1.71k, False: 13.4k]
  ------------------
  421|  1.71k|            error = OFPPROP_UNKNOWN(false, "NXT_CT_TUPLE", type);
  ------------------
  |  |  144|  1.71k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  422|  1.71k|            break;
  423|  15.1k|        }
  424|       |
  425|  15.1k|        if (error) {
  ------------------
  |  Branch (425:13): [True: 3.99k, False: 11.1k]
  ------------------
  426|  3.99k|            return error;
  427|  3.99k|        }
  428|  15.1k|    }
  429|       |
  430|  3.45k|    return 0;
  431|  9.26k|}
ofp-ct.c:ofpprop_pull_ipv6:
  352|  11.6k|{
  353|  11.6k|    if (ofpbuf_msgsize(property) < sizeof *addr) {
  ------------------
  |  Branch (353:9): [True: 2.05k, False: 9.61k]
  ------------------
  354|  2.05k|        return OFPERR_OFPBPC_BAD_LEN;
  355|  2.05k|    }
  356|       |
  357|  9.61k|    memcpy(addr, property->msg, sizeof *addr);
  358|       |
  359|  9.61k|    uint16_t l3 = 0;
  360|  9.61k|    if (!ipv6_is_zero(addr)) {
  ------------------
  |  Branch (360:9): [True: 9.24k, False: 371]
  ------------------
  361|  9.24k|        l3 = IN6_IS_ADDR_V4MAPPED(addr) ? AF_INET : AF_INET6;
  ------------------
  |  Branch (361:14): [True: 744, False: 8.49k]
  ------------------
  362|  9.24k|    }
  363|       |
  364|  9.61k|    if (*l3_type && l3 && *l3_type != l3) {
  ------------------
  |  Branch (364:9): [True: 1.54k, False: 8.06k]
  |  Branch (364:21): [True: 1.29k, False: 251]
  |  Branch (364:27): [True: 208, False: 1.08k]
  ------------------
  365|    208|        return OFPERR_OFPBPC_BAD_VALUE;
  366|    208|    }
  367|       |
  368|  9.40k|    *l3_type = l3;
  369|       |
  370|  9.40k|    return 0;
  371|  9.61k|}

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

ofperr_is_valid:
   76|  1.79M|{
   77|  1.79M|    return error >= OFPERR_OFS && error < OFPERR_OFS + OFPERR_N_ERRORS;
  ------------------
  |  |   52|  3.59M|#define OFPERR_OFS (1 << 30)
  ------------------
                  return error >= OFPERR_OFS && error < OFPERR_OFS + OFPERR_N_ERRORS;
  ------------------
  |  |   52|  1.78M|#define OFPERR_OFS (1 << 30)
  ------------------
                  return error >= OFPERR_OFS && error < OFPERR_OFS + OFPERR_N_ERRORS;
  ------------------
  |  |    3|  3.58M|#define OFPERR_N_ERRORS 198
  ------------------
  |  Branch (77:12): [True: 1.78M, False: 7.77k]
  |  Branch (77:35): [True: 1.78M, False: 90]
  ------------------
   78|  1.79M|}
ofperr_get_name:
   98|  1.79M|{
   99|  1.79M|    return (ofperr_is_valid(error)
  ------------------
  |  Branch (99:13): [True: 1.78M, False: 7.86k]
  ------------------
  100|  1.79M|            ? error_names[error - OFPERR_OFS]
  ------------------
  |  |   52|  1.78M|#define OFPERR_OFS (1 << 30)
  ------------------
  101|  1.79M|            : "<invalid>");
  102|  1.79M|}
ofperr_msg_format:
  248|   499k|{
  249|   499k|    ds_put_format(string, " %s\n", ofperr_get_name(error));
  250|       |
  251|   499k|    if (error == OFPERR_OFPHFC_INCOMPATIBLE || error == OFPERR_OFPHFC_EPERM) {
  ------------------
  |  Branch (251:9): [True: 15.4k, False: 484k]
  |  Branch (251:48): [True: 1.06k, False: 483k]
  ------------------
  252|  16.5k|        ds_put_printable(string, payload->data, payload->size);
  253|   483k|    } else {
  254|   483k|        char *s = ofp_to_string(payload->data, payload->size,
  255|   483k|                                port_map, table_map, 1);
  256|   483k|        ds_put_cstr(string, s);
  257|   483k|        free(s);
  258|   483k|    }
  259|   499k|}
ofperr_decode_msg:
  303|   771k|{
  304|   771k|    const struct ofp_error_msg *oem;
  305|   771k|    enum ofpraw raw;
  306|   771k|    uint16_t type, code;
  307|   771k|    uint32_t vendor;
  308|       |
  309|   771k|    if (payload) {
  ------------------
  |  Branch (309:9): [True: 771k, False: 0]
  ------------------
  310|   771k|        memset(payload, 0, sizeof *payload);
  311|   771k|    }
  312|       |
  313|       |    /* Pull off the error message. */
  314|   771k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  315|   771k|    enum ofperr error = ofpraw_pull(&raw, &b);
  316|   771k|    if (error) {
  ------------------
  |  Branch (316:9): [True: 0, False: 771k]
  ------------------
  317|      0|        return 0;
  318|      0|    }
  319|   771k|    oem = ofpbuf_pull(&b, sizeof *oem);
  320|       |
  321|       |    /* Get the error type and code. */
  322|   771k|    vendor = 0;
  323|   771k|    type = ntohs(oem->type);
  324|   771k|    code = ntohs(oem->code);
  325|   771k|    if (type == NXET_VENDOR && code == NXVC_VENDOR_ERROR) {
  ------------------
  |  |   54|  1.54M|#define NXET_VENDOR 0xb0c2
  ------------------
  |  Branch (325:9): [True: 72.3k, False: 699k]
  |  Branch (325:32): [True: 63.4k, False: 8.89k]
  ------------------
  326|  63.4k|        const struct nx_vendor_error *nve = ofpbuf_try_pull(&b, sizeof *nve);
  327|  63.4k|        if (!nve) {
  ------------------
  |  Branch (327:13): [True: 34, False: 63.4k]
  ------------------
  328|     34|            return 0;
  329|     34|        }
  330|       |
  331|  63.4k|        vendor = ntohl(nve->vendor);
  332|  63.4k|        type = ntohs(nve->type);
  333|  63.4k|        code = ntohs(nve->code);
  334|   708k|    } else if (type == OFPET12_EXPERIMENTER) {
  ------------------
  |  |   59|   708k|#define OFPET12_EXPERIMENTER 0xffff
  ------------------
  |  Branch (334:16): [True: 107k, False: 600k]
  ------------------
  335|   107k|        const ovs_be32 *vendorp = ofpbuf_try_pull(&b, sizeof *vendorp);
  336|   107k|        if (!vendorp) {
  ------------------
  |  Branch (336:13): [True: 8.43k, False: 99.0k]
  ------------------
  337|  8.43k|            return 0;
  338|  8.43k|        }
  339|       |
  340|  99.0k|        vendor = ntohl(*vendorp);
  341|  99.0k|        type = code;
  342|  99.0k|        code = 0;
  343|  99.0k|    }
  344|       |
  345|       |    /* Translate the error type and code into an ofperr. */
  346|   763k|    error = ofperr_decode(oh->version, vendor, type, code);
  347|   763k|    if (error && payload) {
  ------------------
  |  Branch (347:9): [True: 499k, False: 263k]
  |  Branch (347:18): [True: 499k, False: 0]
  ------------------
  348|   499k|        ofpbuf_init(payload, b.size);
  349|   499k|        ofpbuf_push(payload, b.data, b.size);
  350|   499k|        ofpbuf_trim(payload);
  351|   499k|    }
  352|   763k|    return error;
  353|   771k|}
ofp-errors.c:ofperr_domain_from_version:
   46|   763k|{
   47|   763k|    switch (version) {
   48|  87.9k|    case OFP10_VERSION:
  ------------------
  |  Branch (48:5): [True: 87.9k, False: 675k]
  ------------------
   49|  87.9k|        return &ofperr_of10;
   50|  84.1k|    case OFP11_VERSION:
  ------------------
  |  Branch (50:5): [True: 84.1k, False: 679k]
  ------------------
   51|  84.1k|        return &ofperr_of11;
   52|   158k|    case OFP12_VERSION:
  ------------------
  |  Branch (52:5): [True: 158k, False: 605k]
  ------------------
   53|   158k|        return &ofperr_of12;
   54|   115k|    case OFP13_VERSION:
  ------------------
  |  Branch (54:5): [True: 115k, False: 648k]
  ------------------
   55|   115k|        return &ofperr_of13;
   56|   144k|    case OFP14_VERSION:
  ------------------
  |  Branch (56:5): [True: 144k, False: 619k]
  ------------------
   57|   144k|        return &ofperr_of14;
   58|   133k|    case OFP15_VERSION:
  ------------------
  |  Branch (58:5): [True: 133k, False: 629k]
  ------------------
   59|   133k|        return &ofperr_of15;
   60|  40.3k|    default:
  ------------------
  |  Branch (60:5): [True: 40.3k, False: 722k]
  ------------------
   61|       |        return NULL;
   62|   763k|    }
   63|   763k|}
ofp-errors.c:ofperr_decode:
   86|   763k|{
   87|   763k|    const struct ofperr_domain *domain = ofperr_domain_from_version(version);
   88|   763k|    return domain ? domain->decode(vendor, type, code) : 0;
  ------------------
  |  Branch (88:12): [True: 722k, False: 40.3k]
  ------------------
   89|   763k|}

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

ofputil_flow_mod_flags_format:
  111|  40.8k|{
  112|  40.8k|    if (flags & OFPUTIL_FF_SEND_FLOW_REM) {
  ------------------
  |  Branch (112:9): [True: 4.94k, False: 35.8k]
  ------------------
  113|  4.94k|        ds_put_cstr(s, "send_flow_rem ");
  114|  4.94k|    }
  115|  40.8k|    if (flags & OFPUTIL_FF_CHECK_OVERLAP) {
  ------------------
  |  Branch (115:9): [True: 5.95k, False: 34.8k]
  ------------------
  116|  5.95k|        ds_put_cstr(s, "check_overlap ");
  117|  5.95k|    }
  118|  40.8k|    if (flags & OFPUTIL_FF_RESET_COUNTS) {
  ------------------
  |  Branch (118:9): [True: 2.10k, False: 38.7k]
  ------------------
  119|  2.10k|        ds_put_cstr(s, "reset_counts ");
  120|  2.10k|    }
  121|  40.8k|    if (flags & OFPUTIL_FF_NO_PKT_COUNTS) {
  ------------------
  |  Branch (121:9): [True: 3.21k, False: 37.6k]
  ------------------
  122|  3.21k|        ds_put_cstr(s, "no_packet_counts ");
  123|  3.21k|    }
  124|  40.8k|    if (flags & OFPUTIL_FF_NO_BYT_COUNTS) {
  ------------------
  |  Branch (124:9): [True: 1.38k, False: 39.4k]
  ------------------
  125|  1.38k|        ds_put_cstr(s, "no_byte_counts ");
  126|  1.38k|    }
  127|  40.8k|    if (flags & OFPUTIL_FF_HIDDEN_FIELDS) {
  ------------------
  |  Branch (127:9): [True: 0, False: 40.8k]
  ------------------
  128|      0|        ds_put_cstr(s, "allow_hidden_fields ");
  129|      0|    }
  130|  40.8k|    if (flags & OFPUTIL_FF_NO_READONLY) {
  ------------------
  |  Branch (130:9): [True: 0, False: 40.8k]
  ------------------
  131|      0|        ds_put_cstr(s, "no_readonly_table ");
  132|      0|    }
  133|  40.8k|}
ofputil_decode_flow_mod:
  155|  85.6k|{
  156|  85.6k|    ovs_be16 raw_flags;
  157|  85.6k|    enum ofperr error;
  158|  85.6k|    struct match match;
  159|  85.6k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  160|  85.6k|    enum ofpraw raw = ofpraw_pull_assert(&b);
  161|  85.6k|    if (raw == OFPRAW_OFPT11_FLOW_MOD) {
  ------------------
  |  Branch (161:9): [True: 33.0k, False: 52.5k]
  ------------------
  162|       |        /* Standard OpenFlow 1.1+ flow_mod. */
  163|  33.0k|        const struct ofp11_flow_mod *ofm;
  164|       |
  165|  33.0k|        ofm = ofpbuf_pull(&b, sizeof *ofm);
  166|       |
  167|  33.0k|        error = ofputil_pull_ofp11_match(&b, tun_table, vl_mff_map, &match,
  168|  33.0k|                                         NULL);
  169|  33.0k|        if (error) {
  ------------------
  |  Branch (169:13): [True: 8.14k, False: 24.9k]
  ------------------
  170|  8.14k|            return error;
  171|  8.14k|        }
  172|       |
  173|       |        /* Translate the message. */
  174|  24.9k|        fm->priority = ntohs(ofm->priority);
  175|  24.9k|        if (ofm->command == OFPFC_ADD
  ------------------
  |  Branch (175:13): [True: 14.4k, False: 10.4k]
  ------------------
  176|  10.4k|            || (oh->version == OFP11_VERSION
  ------------------
  |  Branch (176:17): [True: 3.43k, False: 7.05k]
  ------------------
  177|  3.43k|                && (ofm->command == OFPFC_MODIFY ||
  ------------------
  |  Branch (177:21): [True: 1.74k, False: 1.68k]
  ------------------
  178|  1.68k|                    ofm->command == OFPFC_MODIFY_STRICT)
  ------------------
  |  Branch (178:21): [True: 555, False: 1.13k]
  ------------------
  179|  14.5k|                && ofm->cookie_mask == htonll(0))) {
  ------------------
  |  Branch (179:20): [True: 74, False: 2.22k]
  ------------------
  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|  14.5k|            fm->cookie = htonll(0);
  184|  14.5k|            fm->cookie_mask = htonll(0);
  185|  14.5k|            fm->new_cookie = ofm->cookie;
  186|  14.5k|        } else {
  187|  10.4k|            fm->cookie = ofm->cookie;
  188|  10.4k|            fm->cookie_mask = ofm->cookie_mask;
  189|  10.4k|            fm->new_cookie = OVS_BE64_MAX;
  ------------------
  |  |   44|  10.4k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  190|  10.4k|        }
  191|  24.9k|        fm->modify_cookie = false;
  192|  24.9k|        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|  24.9k|        fm->table_id = ofm->table_id;
  199|  24.9k|        if (fm->table_id == OFPTT_ALL
  ------------------
  |  Branch (199:13): [True: 1.53k, False: 23.4k]
  ------------------
  200|  1.53k|            && (oh->version == OFP11_VERSION
  ------------------
  |  Branch (200:17): [True: 683, False: 847]
  ------------------
  201|    847|                || (ofm->command != OFPFC_DELETE &&
  ------------------
  |  Branch (201:21): [True: 257, False: 590]
  ------------------
  202|    731|                    ofm->command != OFPFC_DELETE_STRICT))) {
  ------------------
  |  Branch (202:21): [True: 48, False: 209]
  ------------------
  203|    731|            return OFPERR_OFPFMFC_BAD_TABLE_ID;
  204|    731|        }
  205|       |
  206|  24.2k|        fm->idle_timeout = ntohs(ofm->idle_timeout);
  207|  24.2k|        fm->hard_timeout = ntohs(ofm->hard_timeout);
  208|  24.2k|        if (oh->version >= OFP14_VERSION && ofm->command == OFPFC_ADD) {
  ------------------
  |  Branch (208:13): [True: 20.6k, False: 3.57k]
  |  Branch (208:45): [True: 13.6k, False: 6.99k]
  ------------------
  209|  13.6k|            fm->importance = ntohs(ofm->importance);
  210|  13.6k|        } else {
  211|  10.5k|            fm->importance = 0;
  212|  10.5k|        }
  213|  24.2k|        fm->buffer_id = ntohl(ofm->buffer_id);
  214|  24.2k|        error = ofputil_port_from_ofp11(ofm->out_port, &fm->out_port);
  215|  24.2k|        if (error) {
  ------------------
  |  Branch (215:13): [True: 1.11k, False: 23.0k]
  ------------------
  216|  1.11k|            return error;
  217|  1.11k|        }
  218|       |
  219|  23.0k|        fm->out_group = (ofm->command == OFPFC_DELETE ||
  ------------------
  |  Branch (219:26): [True: 2.52k, False: 20.5k]
  ------------------
  220|  20.5k|                         ofm->command == OFPFC_DELETE_STRICT
  ------------------
  |  Branch (220:26): [True: 2.20k, False: 18.3k]
  ------------------
  221|  23.0k|                         ? ntohl(ofm->out_group)
  222|  23.0k|                         : OFPG_ANY);
  223|  23.0k|        raw_flags = ofm->flags;
  224|  52.5k|    } else {
  225|  52.5k|        uint16_t command;
  226|       |
  227|  52.5k|        if (raw == OFPRAW_OFPT10_FLOW_MOD) {
  ------------------
  |  Branch (227:13): [True: 50.4k, False: 2.06k]
  ------------------
  228|       |            /* Standard OpenFlow 1.0 flow_mod. */
  229|  50.4k|            const struct ofp10_flow_mod *ofm;
  230|       |
  231|       |            /* Get the ofp10_flow_mod. */
  232|  50.4k|            ofm = ofpbuf_pull(&b, sizeof *ofm);
  233|       |
  234|       |            /* Translate the rule. */
  235|  50.4k|            ofputil_match_from_ofp10_match(&ofm->match, &match);
  236|  50.4k|            ofputil_normalize_match(&match);
  237|       |
  238|       |            /* OpenFlow 1.0 says that exact-match rules have to have the
  239|       |             * highest possible priority. */
  240|  50.4k|            fm->priority = (ofm->match.wildcards & htonl(OFPFW10_ALL)
  ------------------
  |  Branch (240:29): [True: 44.3k, False: 6.14k]
  ------------------
  241|  50.4k|                            ? ntohs(ofm->priority)
  242|  50.4k|                            : UINT16_MAX);
  243|       |
  244|       |            /* Translate the message. */
  245|  50.4k|            command = ntohs(ofm->command);
  246|  50.4k|            fm->cookie = htonll(0);
  247|  50.4k|            fm->cookie_mask = htonll(0);
  248|  50.4k|            fm->new_cookie = ofm->cookie;
  249|  50.4k|            fm->idle_timeout = ntohs(ofm->idle_timeout);
  250|  50.4k|            fm->hard_timeout = ntohs(ofm->hard_timeout);
  251|  50.4k|            fm->importance = 0;
  252|  50.4k|            fm->buffer_id = ntohl(ofm->buffer_id);
  253|  50.4k|            fm->out_port = u16_to_ofp(ntohs(ofm->out_port));
  254|  50.4k|            fm->out_group = OFPG_ANY;
  255|  50.4k|            raw_flags = ofm->flags;
  256|  50.4k|        } else if (raw == OFPRAW_NXT_FLOW_MOD) {
  ------------------
  |  Branch (256:20): [True: 2.06k, False: 0]
  ------------------
  257|       |            /* Nicira extended flow_mod. */
  258|  2.06k|            const struct nx_flow_mod *nfm;
  259|       |
  260|       |            /* Dissect the message. */
  261|  2.06k|            nfm = ofpbuf_pull(&b, sizeof *nfm);
  262|  2.06k|            error = nx_pull_match(&b, ntohs(nfm->match_len),
  263|  2.06k|                                  &match, &fm->cookie, &fm->cookie_mask,
  264|  2.06k|                                  false, tun_table, vl_mff_map);
  265|  2.06k|            if (error) {
  ------------------
  |  Branch (265:17): [True: 263, False: 1.80k]
  ------------------
  266|    263|                return error;
  267|    263|            }
  268|       |
  269|       |            /* Translate the message. */
  270|  1.80k|            command = ntohs(nfm->command);
  271|  1.80k|            if ((command & 0xff) == OFPFC_ADD && fm->cookie_mask) {
  ------------------
  |  Branch (271:17): [True: 640, False: 1.16k]
  |  Branch (271:50): [True: 119, False: 521]
  ------------------
  272|       |                /* Flow additions may only set a new cookie, not match an
  273|       |                 * existing cookie. */
  274|    119|                return OFPERR_NXBRC_NXM_INVALID;
  275|    119|            }
  276|  1.68k|            fm->priority = ntohs(nfm->priority);
  277|  1.68k|            fm->new_cookie = nfm->cookie;
  278|  1.68k|            fm->idle_timeout = ntohs(nfm->idle_timeout);
  279|  1.68k|            fm->hard_timeout = ntohs(nfm->hard_timeout);
  280|  1.68k|            fm->importance = 0;
  281|  1.68k|            fm->buffer_id = ntohl(nfm->buffer_id);
  282|  1.68k|            fm->out_port = u16_to_ofp(ntohs(nfm->out_port));
  283|  1.68k|            fm->out_group = OFPG_ANY;
  284|  1.68k|            raw_flags = nfm->flags;
  285|  1.68k|        } else {
  286|      0|            OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  287|      0|        }
  288|       |
  289|  52.1k|        fm->modify_cookie = fm->new_cookie != OVS_BE64_MAX;
  ------------------
  |  |   44|  52.1k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  290|  52.1k|        if (protocol & OFPUTIL_P_TID) {
  ------------------
  |  |  103|  52.1k|#define OFPUTIL_P_TID (OFPUTIL_P_OF10_STD_TID | \
  |  |  104|  52.1k|                       OFPUTIL_P_OF10_NXM_TID | \
  |  |  105|  52.1k|                       OFPUTIL_P_OF11_STD |     \
  |  |  106|  52.1k|                       OFPUTIL_P_ANY_OXM)
  |  |  ------------------
  |  |  |  |   82|  52.1k|#define OFPUTIL_P_ANY_OXM (OFPUTIL_P_OF12_OXM | \
  |  |  |  |   83|  52.1k|                           OFPUTIL_P_OF13_OXM | \
  |  |  |  |   84|  52.1k|                           OFPUTIL_P_OF14_OXM | \
  |  |  |  |   85|  52.1k|                           OFPUTIL_P_OF15_OXM)
  |  |  ------------------
  ------------------
  |  Branch (290:13): [True: 52.1k, False: 0]
  ------------------
  291|  52.1k|            fm->command = command & 0xff;
  292|  52.1k|            fm->table_id = command >> 8;
  293|  52.1k|        } 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|  52.1k|    }
  302|       |
  303|       |    /* Check for mismatched conntrack original direction tuple address fields
  304|       |     * w.r.t. the IP version of the match. */
  305|  75.2k|    if (((match.wc.masks.ct_nw_src || match.wc.masks.ct_nw_dst)
  ------------------
  |  Branch (305:11): [True: 0, False: 75.2k]
  |  Branch (305:39): [True: 0, False: 75.2k]
  ------------------
  306|      0|         && match.flow.dl_type != htons(ETH_TYPE_IP))
  ------------------
  |  Branch (306:13): [True: 0, False: 0]
  ------------------
  307|  75.2k|        || ((ipv6_addr_is_set(&match.wc.masks.ct_ipv6_src)
  ------------------
  |  Branch (307:14): [True: 0, False: 75.2k]
  ------------------
  308|  75.2k|             || ipv6_addr_is_set(&match.wc.masks.ct_ipv6_dst))
  ------------------
  |  Branch (308:17): [True: 0, False: 75.2k]
  ------------------
  309|      0|            && match.flow.dl_type != htons(ETH_TYPE_IPV6))) {
  ------------------
  |  Branch (309:16): [True: 0, False: 0]
  ------------------
  310|      0|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
  311|      0|    }
  312|       |
  313|  75.2k|    if (fm->command > OFPFC_DELETE_STRICT) {
  ------------------
  |  Branch (313:9): [True: 5.72k, False: 69.5k]
  ------------------
  314|  5.72k|        return OFPERR_OFPFMFC_BAD_COMMAND;
  315|  5.72k|    }
  316|       |
  317|  69.5k|    fm->ofpacts_tlv_bitmap = 0;
  318|  69.5k|    error = ofpacts_pull_openflow_instructions(&b, b.size, oh->version,
  319|  69.5k|                                               vl_mff_map,
  320|  69.5k|                                               &fm->ofpacts_tlv_bitmap,
  321|  69.5k|                                               ofpacts);
  322|  69.5k|    if (error) {
  ------------------
  |  Branch (322:9): [True: 25.5k, False: 43.9k]
  ------------------
  323|  25.5k|        return error;
  324|  25.5k|    }
  325|  43.9k|    fm->ofpacts = ofpacts->data;
  326|  43.9k|    fm->ofpacts_len = ofpacts->size;
  327|       |
  328|  43.9k|    error = ofputil_decode_flow_mod_flags(raw_flags, fm->command,
  329|  43.9k|                                          oh->version, &fm->flags);
  330|  43.9k|    if (error) {
  ------------------
  |  Branch (330:9): [True: 1.37k, False: 42.5k]
  ------------------
  331|  1.37k|        return error;
  332|  1.37k|    }
  333|       |
  334|  42.5k|    if (fm->flags & OFPUTIL_FF_EMERG) {
  ------------------
  |  Branch (334:9): [True: 99, False: 42.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|     99|        return (fm->hard_timeout || fm->idle_timeout
  ------------------
  |  Branch (341:17): [True: 28, False: 71]
  |  Branch (341:37): [True: 5, False: 66]
  ------------------
  342|     99|                ? OFPERR_OFPFMFC_BAD_EMERG_TIMEOUT
  343|     99|                : OFPERR_OFPFMFC_TABLE_FULL);
  344|     99|    }
  345|       |
  346|  42.4k|    struct ofpact_check_params cp = {
  347|  42.4k|        .match = &match,
  348|  42.4k|        .max_ports = max_port,
  349|  42.4k|        .table_id = fm->table_id,
  350|  42.4k|        .n_tables = max_table
  351|  42.4k|    };
  352|  42.4k|    error = ofpacts_check_consistency(fm->ofpacts, fm->ofpacts_len,
  353|  42.4k|                                      protocol, &cp);
  354|  42.4k|    if (!error) {
  ------------------
  |  Branch (354:9): [True: 38.2k, False: 4.24k]
  ------------------
  355|  38.2k|        minimatch_init(&fm->match, &match);
  356|  38.2k|    }
  357|  42.4k|    return error;
  358|  42.5k|}
ofputil_flow_mod_format:
  489|  85.6k|{
  490|  85.6k|    struct ofputil_flow_mod fm;
  491|  85.6k|    struct ofpbuf ofpacts;
  492|  85.6k|    bool need_priority;
  493|  85.6k|    enum ofperr error;
  494|  85.6k|    enum ofpraw raw;
  495|  85.6k|    enum ofputil_protocol protocol;
  496|       |
  497|  85.6k|    protocol = ofputil_protocol_from_ofp_version(oh->version);
  498|  85.6k|    protocol = ofputil_protocol_set_tid(protocol, true);
  499|       |
  500|  85.6k|    ofpbuf_init(&ofpacts, 64);
  501|  85.6k|    error = ofputil_decode_flow_mod(&fm, oh, protocol, NULL, NULL, &ofpacts,
  502|  85.6k|                                    OFPP_MAX, 255);
  ------------------
  |  |   33|  85.6k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|  85.6k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  503|  85.6k|    if (error) {
  ------------------
  |  Branch (503:9): [True: 47.3k, False: 38.2k]
  ------------------
  504|  47.3k|        ofpbuf_uninit(&ofpacts);
  505|  47.3k|        return error;
  506|  47.3k|    }
  507|       |
  508|  38.2k|    ds_put_char(s, ' ');
  509|  38.2k|    switch (fm.command) {
  510|  27.4k|    case OFPFC_ADD:
  ------------------
  |  Branch (510:5): [True: 27.4k, False: 10.7k]
  ------------------
  511|  27.4k|        ds_put_cstr(s, "ADD");
  512|  27.4k|        break;
  513|  4.76k|    case OFPFC_MODIFY:
  ------------------
  |  Branch (513:5): [True: 4.76k, False: 33.4k]
  ------------------
  514|  4.76k|        ds_put_cstr(s, "MOD");
  515|  4.76k|        break;
  516|  2.77k|    case OFPFC_MODIFY_STRICT:
  ------------------
  |  Branch (516:5): [True: 2.77k, False: 35.4k]
  ------------------
  517|  2.77k|        ds_put_cstr(s, "MOD_STRICT");
  518|  2.77k|        break;
  519|  1.77k|    case OFPFC_DELETE:
  ------------------
  |  Branch (519:5): [True: 1.77k, False: 36.4k]
  ------------------
  520|  1.77k|        ds_put_cstr(s, "DEL");
  521|  1.77k|        break;
  522|  1.47k|    case OFPFC_DELETE_STRICT:
  ------------------
  |  Branch (522:5): [True: 1.47k, False: 36.7k]
  ------------------
  523|  1.47k|        ds_put_cstr(s, "DEL_STRICT");
  524|  1.47k|        break;
  525|      0|    default:
  ------------------
  |  Branch (525:5): [True: 0, False: 38.2k]
  ------------------
  526|      0|        ds_put_format(s, "cmd:%d", fm.command);
  527|  38.2k|    }
  528|  38.2k|    if (fm.table_id != 0
  ------------------
  |  Branch (528:9): [True: 14.6k, False: 23.5k]
  ------------------
  529|  23.5k|        || ofputil_table_map_get_name(table_map, fm.table_id)) {
  ------------------
  |  Branch (529:12): [True: 0, False: 23.5k]
  ------------------
  530|  14.6k|        ds_put_format(s, " table:");
  531|  14.6k|        ofputil_format_table(fm.table_id, table_map, s);
  532|  14.6k|    }
  533|       |
  534|  38.2k|    ds_put_char(s, ' ');
  535|  38.2k|    ofpraw_decode(&raw, oh);
  536|  38.2k|    if (verbosity >= 3 && raw == OFPRAW_OFPT10_FLOW_MOD) {
  ------------------
  |  Branch (536:9): [True: 0, False: 38.2k]
  |  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|  38.2k|    } else if (verbosity >= 3 && raw == OFPRAW_NXT_FLOW_MOD) {
  ------------------
  |  Branch (542:16): [True: 0, False: 38.2k]
  |  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|  38.2k|    } else {
  554|  38.2k|        struct match match;
  555|  38.2k|        minimatch_expand(&fm.match, &match);
  556|  38.2k|        match_format(&match, port_map, s, fm.priority);
  557|       |
  558|       |        /* match_format() does print priority. */
  559|  38.2k|        need_priority = false;
  560|  38.2k|    }
  561|       |
  562|  38.2k|    if (ds_last(s) != ' ') {
  ------------------
  |  Branch (562:9): [True: 38.1k, False: 41]
  ------------------
  563|  38.1k|        ds_put_char(s, ' ');
  564|  38.1k|    }
  565|  38.2k|    if (fm.new_cookie != htonll(0) && fm.new_cookie != OVS_BE64_MAX) {
  ------------------
  |  |   44|  37.0k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  |  Branch (565:9): [True: 37.0k, False: 1.12k]
  |  Branch (565:39): [True: 32.0k, False: 5.05k]
  ------------------
  566|  32.0k|        ds_put_format(s, "cookie:0x%"PRIx64" ", ntohll(fm.new_cookie));
  567|  32.0k|    }
  568|  38.2k|    if (fm.cookie_mask != htonll(0)) {
  ------------------
  |  Branch (568:9): [True: 5.05k, False: 33.1k]
  ------------------
  569|  5.05k|        ds_put_format(s, "cookie:0x%"PRIx64"/0x%"PRIx64" ",
  570|  5.05k|                ntohll(fm.cookie), ntohll(fm.cookie_mask));
  571|  5.05k|    }
  572|  38.2k|    if (fm.idle_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  38.2k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (572:9): [True: 27.3k, False: 10.8k]
  ------------------
  573|  27.3k|        ds_put_format(s, "idle:%"PRIu16" ", fm.idle_timeout);
  574|  27.3k|    }
  575|  38.2k|    if (fm.hard_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  38.2k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (575:9): [True: 32.6k, False: 5.59k]
  ------------------
  576|  32.6k|        ds_put_format(s, "hard:%"PRIu16" ", fm.hard_timeout);
  577|  32.6k|    }
  578|  38.2k|    if (fm.importance != 0) {
  ------------------
  |  Branch (578:9): [True: 5.77k, False: 32.4k]
  ------------------
  579|  5.77k|        ds_put_format(s, "importance:%"PRIu16" ", fm.importance);
  580|  5.77k|    }
  581|  38.2k|    if (fm.priority != OFP_DEFAULT_PRIORITY && need_priority) {
  ------------------
  |  |  138|  76.4k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
  |  Branch (581:9): [True: 38.1k, False: 46]
  |  Branch (581:48): [True: 0, False: 38.1k]
  ------------------
  582|      0|        ds_put_format(s, "pri:%d ", fm.priority);
  583|      0|    }
  584|  38.2k|    if (fm.buffer_id != UINT32_MAX) {
  ------------------
  |  Branch (584:9): [True: 37.2k, False: 937]
  ------------------
  585|  37.2k|        ds_put_format(s, "buf:0x%"PRIx32" ", fm.buffer_id);
  586|  37.2k|    }
  587|  38.2k|    if (fm.out_port != OFPP_ANY) {
  ------------------
  |  |   80|  38.2k|#define OFPP_ANY OFPP_NONE
  |  |  ------------------
  |  |  |  |   47|  38.2k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|  38.2k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (587:9): [True: 36.5k, False: 1.70k]
  ------------------
  588|  36.5k|        ds_put_format(s, "out_port:");
  589|  36.5k|        ofputil_format_port(fm.out_port, port_map, s);
  590|  36.5k|        ds_put_char(s, ' ');
  591|  36.5k|    }
  592|       |
  593|  38.2k|    if (oh->version == OFP10_VERSION || oh->version == OFP11_VERSION) {
  ------------------
  |  Branch (593:9): [True: 25.7k, False: 12.4k]
  |  Branch (593:41): [True: 2.20k, False: 10.2k]
  ------------------
  594|       |        /* Don't print the reset_counts flag for OF1.0 and OF1.1 because those
  595|       |         * versions don't really have such a flag and printing one is likely to
  596|       |         * confuse people. */
  597|  27.9k|        fm.flags &= ~OFPUTIL_FF_RESET_COUNTS;
  598|  27.9k|    }
  599|  38.2k|    ofputil_flow_mod_flags_format(s, fm.flags);
  600|       |
  601|  38.2k|    ds_put_cstr(s, "actions=");
  602|  38.2k|    struct ofpact_format_params fp = {
  603|  38.2k|        .port_map = port_map,
  604|  38.2k|        .table_map = table_map,
  605|  38.2k|        .s = s,
  606|  38.2k|    };
  607|  38.2k|    ofpacts_format(fm.ofpacts, fm.ofpacts_len, &fp);
  608|  38.2k|    ofpbuf_uninit(&ofpacts);
  609|  38.2k|    minimatch_destroy(&fm.match);
  610|       |
  611|  38.2k|    return 0;
  612|  38.2k|}
ofputil_decode_flow_stats_request:
  697|  4.55k|{
  698|  4.55k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  699|  4.55k|    enum ofpraw raw = ofpraw_pull_assert(&b);
  700|  4.55k|    switch ((int) raw) {
  701|    369|    case OFPRAW_OFPST10_FLOW_REQUEST:
  ------------------
  |  Branch (701:5): [True: 369, False: 4.18k]
  ------------------
  702|    369|        return ofputil_decode_ofpst10_flow_request(fsr, b.data, false);
  703|       |
  704|    876|    case OFPRAW_OFPST10_AGGREGATE_REQUEST:
  ------------------
  |  Branch (704:5): [True: 876, False: 3.68k]
  ------------------
  705|    876|        return ofputil_decode_ofpst10_flow_request(fsr, b.data, true);
  706|       |
  707|    164|    case OFPRAW_OFPST11_FLOW_REQUEST:
  ------------------
  |  Branch (707:5): [True: 164, False: 4.39k]
  ------------------
  708|    164|        return ofputil_decode_ofpst11_flow_request(fsr, &b, false, tun_table,
  709|    164|                                                   vl_mff_map);
  710|       |
  711|  1.95k|    case OFPRAW_OFPST11_AGGREGATE_REQUEST:
  ------------------
  |  Branch (711:5): [True: 1.95k, False: 2.60k]
  ------------------
  712|  1.95k|        return ofputil_decode_ofpst11_flow_request(fsr, &b, true, tun_table,
  713|  1.95k|                                                   vl_mff_map);
  714|       |
  715|    212|    case OFPRAW_OFPST15_AGGREGATE_REQUEST:
  ------------------
  |  Branch (715:5): [True: 212, False: 4.34k]
  ------------------
  716|    212|       return ofputil_decode_ofpst11_flow_request(fsr, &b, true,
  717|    212|                                                  tun_table, vl_mff_map);
  718|       |
  719|    722|    case OFPRAW_NXST_FLOW_REQUEST:
  ------------------
  |  Branch (719:5): [True: 722, False: 3.83k]
  ------------------
  720|    722|        return ofputil_decode_nxst_flow_request(fsr, &b, false, tun_table,
  721|    722|                                                vl_mff_map);
  722|       |
  723|    261|    case OFPRAW_NXST_AGGREGATE_REQUEST:
  ------------------
  |  Branch (723:5): [True: 261, False: 4.29k]
  ------------------
  724|    261|        return ofputil_decode_nxst_flow_request(fsr, &b, true, tun_table,
  725|    261|                                                vl_mff_map);
  726|       |
  727|      0|    default:
  ------------------
  |  Branch (727:5): [True: 0, False: 4.55k]
  ------------------
  728|       |        /* Hey, the caller lied. */
  729|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  730|  4.55k|    }
  731|  4.55k|}
ofputil_flow_stats_request_format:
  819|  1.57k|{
  820|  1.57k|    if (fsr->table_id != 0xff) {
  ------------------
  |  Branch (820:9): [True: 888, False: 686]
  ------------------
  821|    888|        ds_put_format(s, " table=");
  822|    888|        ofputil_format_table(fsr->table_id, table_map, s);
  823|    888|    }
  824|       |
  825|  1.57k|    if (fsr->out_port != OFPP_ANY) {
  ------------------
  |  |   80|  1.57k|#define OFPP_ANY OFPP_NONE
  |  |  ------------------
  |  |  |  |   47|  1.57k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|  1.57k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (825:9): [True: 1.42k, False: 149]
  ------------------
  826|  1.42k|        ds_put_cstr(s, " out_port=");
  827|  1.42k|        ofputil_format_port(fsr->out_port, port_map, s);
  828|  1.42k|    }
  829|       |
  830|  1.57k|    ds_put_char(s, ' ');
  831|  1.57k|    match_format(&fsr->match, port_map, s, OFP_DEFAULT_PRIORITY);
  ------------------
  |  |  138|  1.57k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
  832|  1.57k|}
ofputil_decode_flow_stats_reply:
  896|  25.2k|{
  897|  25.2k|    const struct ofp_header *oh;
  898|  25.2k|    size_t instructions_len;
  899|  25.2k|    enum ofperr error;
  900|  25.2k|    enum ofpraw raw;
  901|       |
  902|  25.2k|    error = (msg->header ? ofpraw_decode(&raw, msg->header)
  ------------------
  |  Branch (902:14): [True: 7.18k, False: 18.0k]
  ------------------
  903|  25.2k|             : ofpraw_pull(&raw, msg));
  904|  25.2k|    if (error) {
  ------------------
  |  Branch (904:9): [True: 0, False: 25.2k]
  ------------------
  905|      0|        return error;
  906|      0|    }
  907|  25.2k|    oh = msg->header;
  908|       |
  909|  25.2k|    if (!msg->size) {
  ------------------
  |  Branch (909:9): [True: 2.59k, False: 22.6k]
  ------------------
  910|  2.59k|        return EOF;
  911|  22.6k|    } else if (raw == OFPRAW_OFPST15_FLOW_REPLY) {
  ------------------
  |  Branch (911:16): [True: 14.5k, False: 8.07k]
  ------------------
  912|  14.5k|        const struct ofp15_flow_desc *ofd;
  913|  14.5k|        size_t length;
  914|  14.5k|        uint16_t padded_match_len;
  915|  14.5k|        uint16_t stat_len;
  916|  14.5k|        uint8_t oxs_field_set;
  917|       |
  918|  14.5k|        ofd = ofpbuf_try_pull(msg, sizeof *ofd);
  919|  14.5k|        if (!ofd) {
  ------------------
  |  Branch (919:13): [True: 3.59k, False: 10.9k]
  ------------------
  920|  3.59k|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply has %" PRIu32
  ------------------
  |  |  224|  3.59k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  3.59k|    do {                                                                \
  |  |  |  |  288|  3.59k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  3.59k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 3.59k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  3.59k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 3.59k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  921|  3.59k|                         " leftover " "bytes at end", msg->size);
  922|  3.59k|            return EINVAL;
  923|  3.59k|        }
  924|       |
  925|  10.9k|        length = ntohs(ofd->length);
  926|  10.9k|        if (length < sizeof *ofd) {
  ------------------
  |  Branch (926:13): [True: 866, False: 10.0k]
  ------------------
  927|    866|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply claims invalid "
  ------------------
  |  |  224|    866|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    866|    do {                                                                \
  |  |  |  |  288|    866|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    866|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 866]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    866|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 866]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  928|    866|                         "length %" PRIuSIZE, length);
  929|    866|            return EINVAL;
  930|    866|        }
  931|       |
  932|  10.0k|        if (ofputil_pull_ofp11_match(msg, NULL, NULL, &fs->match,
  ------------------
  |  Branch (932:13): [True: 2.40k, False: 7.68k]
  ------------------
  933|  10.0k|                                     &padded_match_len)) {
  934|  2.40k|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply bad match");
  ------------------
  |  |  224|  2.40k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  2.40k|    do {                                                                \
  |  |  |  |  288|  2.40k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  2.40k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 2.40k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  2.40k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 2.40k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  935|  2.40k|            return EINVAL;
  936|  2.40k|        }
  937|       |
  938|  7.68k|        fs->priority = ntohs(ofd->priority);
  939|  7.68k|        fs->table_id = ofd->table_id;
  940|  7.68k|        fs->cookie = ofd->cookie;
  941|  7.68k|        fs->idle_timeout = ntohs(ofd->idle_timeout);
  942|  7.68k|        fs->hard_timeout = ntohs(ofd->hard_timeout);
  943|  7.68k|        fs->importance = ntohs(ofd->importance);
  944|       |
  945|  7.68k|        error = ofputil_decode_flow_mod_flags(ofd->flags, -1, oh->version,
  946|  7.68k|                                                &fs->flags);
  947|  7.68k|        if (error) {
  ------------------
  |  Branch (947:13): [True: 733, False: 6.94k]
  ------------------
  948|    733|            return error;
  949|    733|        }
  950|       |
  951|  6.94k|        struct oxs_stats oxs;
  952|  6.94k|        if (oxs_pull_stat(msg, &oxs, &stat_len, &oxs_field_set)) {
  ------------------
  |  Branch (952:13): [True: 908, False: 6.04k]
  ------------------
  953|    908|            VLOG_WARN_RL(&rl, "OXS OFPST_FLOW reply bad stats");
  ------------------
  |  |  224|    908|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    908|    do {                                                                \
  |  |  |  |  288|    908|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    908|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 908]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    908|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 908]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  954|    908|            return EINVAL;
  955|    908|        }
  956|  6.04k|        fs->duration_sec = oxs.duration_sec;
  957|  6.04k|        fs->duration_nsec = oxs.duration_nsec;
  958|  6.04k|        fs->packet_count = oxs.packet_count;
  959|  6.04k|        fs->byte_count = oxs.byte_count;
  960|  6.04k|        fs->idle_age = oxs.idle_age == UINT32_MAX ? -1 : oxs.idle_age;
  ------------------
  |  Branch (960:24): [True: 6.04k, False: 0]
  ------------------
  961|  6.04k|        fs->hard_age = -1;
  962|       |
  963|  6.04k|        instructions_len = length - sizeof *ofd - padded_match_len - stat_len;
  964|  8.07k|    } else if (raw == OFPRAW_OFPST11_FLOW_REPLY
  ------------------
  |  Branch (964:16): [True: 1.49k, False: 6.57k]
  ------------------
  965|  6.57k|               || raw == OFPRAW_OFPST13_FLOW_REPLY) {
  ------------------
  |  Branch (965:19): [True: 2.67k, False: 3.90k]
  ------------------
  966|  4.16k|        const struct ofp11_flow_stats *ofs;
  967|  4.16k|        size_t length;
  968|  4.16k|        uint16_t padded_match_len;
  969|       |
  970|  4.16k|        ofs = ofpbuf_try_pull(msg, sizeof *ofs);
  971|  4.16k|        if (!ofs) {
  ------------------
  |  Branch (971:13): [True: 812, False: 3.35k]
  ------------------
  972|    812|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply has %"PRIu32" leftover "
  ------------------
  |  |  224|    812|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    812|    do {                                                                \
  |  |  |  |  288|    812|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    812|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 812]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    812|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 812]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  973|    812|                         "bytes at end", msg->size);
  974|    812|            return OFPERR_OFPBRC_BAD_LEN;
  975|    812|        }
  976|       |
  977|  3.35k|        length = ntohs(ofs->length);
  978|  3.35k|        if (length < sizeof *ofs) {
  ------------------
  |  Branch (978:13): [True: 73, False: 3.27k]
  ------------------
  979|     73|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply claims invalid "
  ------------------
  |  |  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]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  980|     73|                         "length %"PRIuSIZE, length);
  981|     73|            return OFPERR_OFPBRC_BAD_LEN;
  982|     73|        }
  983|       |
  984|  3.27k|        error = ofputil_pull_ofp11_match(msg, NULL, NULL, &fs->match,
  985|  3.27k|                                         &padded_match_len);
  986|  3.27k|        if (error) {
  ------------------
  |  Branch (986:13): [True: 709, False: 2.56k]
  ------------------
  987|    709|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply bad match");
  ------------------
  |  |  224|    709|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    709|    do {                                                                \
  |  |  |  |  288|    709|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    709|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 709]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    709|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 709]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  988|    709|            return error;
  989|    709|        }
  990|  2.56k|        instructions_len = length - sizeof *ofs - padded_match_len;
  991|       |
  992|  2.56k|        fs->priority = ntohs(ofs->priority);
  993|  2.56k|        fs->table_id = ofs->table_id;
  994|  2.56k|        fs->duration_sec = ntohl(ofs->duration_sec);
  995|  2.56k|        fs->duration_nsec = ntohl(ofs->duration_nsec);
  996|  2.56k|        fs->idle_timeout = ntohs(ofs->idle_timeout);
  997|  2.56k|        fs->hard_timeout = ntohs(ofs->hard_timeout);
  998|  2.56k|        if (oh->version >= OFP14_VERSION) {
  ------------------
  |  Branch (998:13): [True: 45, False: 2.52k]
  ------------------
  999|     45|            fs->importance = ntohs(ofs->importance);
 1000|  2.52k|        } else {
 1001|  2.52k|            fs->importance = 0;
 1002|  2.52k|        }
 1003|  2.56k|        if (raw == OFPRAW_OFPST13_FLOW_REPLY) {
  ------------------
  |  Branch (1003:13): [True: 1.62k, False: 941]
  ------------------
 1004|  1.62k|            error = ofputil_decode_flow_mod_flags(ofs->flags, -1, oh->version,
 1005|  1.62k|                                                  &fs->flags);
 1006|  1.62k|            if (error) {
  ------------------
  |  Branch (1006:17): [True: 1.32k, False: 299]
  ------------------
 1007|  1.32k|                return error;
 1008|  1.32k|            }
 1009|  1.62k|        } else {
 1010|    941|            fs->flags = 0;
 1011|    941|        }
 1012|  1.24k|        fs->idle_age = -1;
 1013|  1.24k|        fs->hard_age = -1;
 1014|  1.24k|        fs->cookie = ofs->cookie;
 1015|  1.24k|        fs->packet_count = ntohll(ofs->packet_count);
 1016|  1.24k|        fs->byte_count = ntohll(ofs->byte_count);
 1017|  3.90k|    } else if (raw == OFPRAW_OFPST10_FLOW_REPLY) {
  ------------------
  |  Branch (1017:16): [True: 2.40k, False: 1.50k]
  ------------------
 1018|  2.40k|        const struct ofp10_flow_stats *ofs;
 1019|  2.40k|        size_t length;
 1020|       |
 1021|  2.40k|        ofs = ofpbuf_try_pull(msg, sizeof *ofs);
 1022|  2.40k|        if (!ofs) {
  ------------------
  |  Branch (1022:13): [True: 145, False: 2.26k]
  ------------------
 1023|    145|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply has %"PRIu32" leftover "
  ------------------
  |  |  224|    145|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    145|    do {                                                                \
  |  |  |  |  288|    145|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    145|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 145]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    145|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 145]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1024|    145|                         "bytes at end", msg->size);
 1025|    145|            return OFPERR_OFPBRC_BAD_LEN;
 1026|    145|        }
 1027|       |
 1028|  2.26k|        length = ntohs(ofs->length);
 1029|  2.26k|        if (length < sizeof *ofs) {
  ------------------
  |  Branch (1029:13): [True: 1.53k, False: 732]
  ------------------
 1030|  1.53k|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply claims invalid "
  ------------------
  |  |  224|  1.53k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.53k|    do {                                                                \
  |  |  |  |  288|  1.53k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.53k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.53k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.53k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.53k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1031|  1.53k|                         "length %"PRIuSIZE, length);
 1032|  1.53k|            return OFPERR_OFPBRC_BAD_LEN;
 1033|  1.53k|        }
 1034|    732|        instructions_len = length - sizeof *ofs;
 1035|       |
 1036|    732|        fs->cookie = get_32aligned_be64(&ofs->cookie);
 1037|    732|        ofputil_match_from_ofp10_match(&ofs->match, &fs->match);
 1038|    732|        fs->priority = ntohs(ofs->priority);
 1039|    732|        fs->table_id = ofs->table_id;
 1040|    732|        fs->duration_sec = ntohl(ofs->duration_sec);
 1041|    732|        fs->duration_nsec = ntohl(ofs->duration_nsec);
 1042|    732|        fs->idle_timeout = ntohs(ofs->idle_timeout);
 1043|    732|        fs->hard_timeout = ntohs(ofs->hard_timeout);
 1044|    732|        fs->importance = 0;
 1045|    732|        fs->idle_age = -1;
 1046|    732|        fs->hard_age = -1;
 1047|    732|        fs->packet_count = ntohll(get_32aligned_be64(&ofs->packet_count));
 1048|    732|        fs->byte_count = ntohll(get_32aligned_be64(&ofs->byte_count));
 1049|    732|        fs->flags = 0;
 1050|  1.50k|    } else if (raw == OFPRAW_NXST_FLOW_REPLY) {
  ------------------
  |  Branch (1050:16): [True: 1.50k, False: 0]
  ------------------
 1051|  1.50k|        const struct nx_flow_stats *nfs;
 1052|  1.50k|        size_t match_len, length;
 1053|       |
 1054|  1.50k|        nfs = ofpbuf_try_pull(msg, sizeof *nfs);
 1055|  1.50k|        if (!nfs) {
  ------------------
  |  Branch (1055:13): [True: 485, False: 1.01k]
  ------------------
 1056|    485|            VLOG_WARN_RL(&rl, "NXST_FLOW reply has %"PRIu32" leftover "
  ------------------
  |  |  224|    485|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    485|    do {                                                                \
  |  |  |  |  288|    485|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    485|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 485]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    485|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 485]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1057|    485|                         "bytes at end", msg->size);
 1058|    485|            return OFPERR_OFPBRC_BAD_LEN;
 1059|    485|        }
 1060|       |
 1061|  1.01k|        length = ntohs(nfs->length);
 1062|  1.01k|        match_len = ntohs(nfs->match_len);
 1063|  1.01k|        if (length < sizeof *nfs + ROUND_UP(match_len, 8)) {
  ------------------
  |  |  303|  1.01k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|  1.01k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (1063:13): [True: 106, False: 911]
  ------------------
 1064|    106|            VLOG_WARN_RL(&rl, "NXST_FLOW reply with match_len=%"PRIuSIZE" "
  ------------------
  |  |  224|    106|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    106|    do {                                                                \
  |  |  |  |  288|    106|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    106|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 106]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    106|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 106]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1065|    106|                         "claims invalid length %"PRIuSIZE, match_len, length);
 1066|    106|            return OFPERR_OFPBRC_BAD_LEN;
 1067|    106|        }
 1068|    911|        error = nx_pull_match(msg, match_len, &fs->match, NULL, NULL, false,
 1069|    911|                              NULL, NULL);
 1070|    911|        if (error) {
  ------------------
  |  Branch (1070:13): [True: 279, False: 632]
  ------------------
 1071|    279|            return error;
 1072|    279|        }
 1073|    632|        instructions_len = length - sizeof *nfs - ROUND_UP(match_len, 8);
  ------------------
  |  |  303|    632|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|    632|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
 1074|       |
 1075|    632|        fs->cookie = nfs->cookie;
 1076|    632|        fs->table_id = nfs->table_id;
 1077|    632|        fs->duration_sec = ntohl(nfs->duration_sec);
 1078|    632|        fs->duration_nsec = ntohl(nfs->duration_nsec);
 1079|    632|        fs->priority = ntohs(nfs->priority);
 1080|    632|        fs->idle_timeout = ntohs(nfs->idle_timeout);
 1081|    632|        fs->hard_timeout = ntohs(nfs->hard_timeout);
 1082|    632|        fs->importance = 0;
 1083|    632|        fs->idle_age = -1;
 1084|    632|        fs->hard_age = -1;
 1085|    632|        if (flow_age_extension) {
  ------------------
  |  Branch (1085:13): [True: 632, False: 0]
  ------------------
 1086|    632|            if (nfs->idle_age) {
  ------------------
  |  Branch (1086:17): [True: 224, False: 408]
  ------------------
 1087|    224|                fs->idle_age = ntohs(nfs->idle_age) - 1;
 1088|    224|            }
 1089|    632|            if (nfs->hard_age) {
  ------------------
  |  Branch (1089:17): [True: 492, False: 140]
  ------------------
 1090|    492|                fs->hard_age = ntohs(nfs->hard_age) - 1;
 1091|    492|            }
 1092|    632|        }
 1093|    632|        fs->packet_count = ntohll(nfs->packet_count);
 1094|    632|        fs->byte_count = ntohll(nfs->byte_count);
 1095|    632|        fs->flags = 0;
 1096|    632|    } else {
 1097|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1098|      0|    }
 1099|       |
 1100|  8.64k|    error = ofpacts_pull_openflow_instructions(msg, instructions_len,
 1101|  8.64k|                                               oh->version, NULL, NULL,
 1102|  8.64k|                                               ofpacts);
 1103|  8.64k|    if (error) {
  ------------------
  |  Branch (1103:9): [True: 1.45k, False: 7.18k]
  ------------------
 1104|  1.45k|        VLOG_WARN_RL(&rl, "OFPST_FLOW reply bad instructions");
  ------------------
  |  |  224|  1.45k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.45k|    do {                                                                \
  |  |  |  |  288|  1.45k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.45k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.45k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.45k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.45k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1105|  1.45k|        return error;
 1106|  1.45k|    }
 1107|  7.18k|    fs->ofpacts = ofpacts->data;
 1108|  7.18k|    fs->ofpacts_len = ofpacts->size;
 1109|       |
 1110|  7.18k|    return 0;
 1111|  8.64k|}
ofputil_flow_stats_format:
 1292|  7.18k|{
 1293|  7.18k|    if (show_stats || fs->cookie) {
  ------------------
  |  Branch (1293:9): [True: 7.18k, False: 0]
  |  Branch (1293:23): [True: 0, False: 0]
  ------------------
 1294|  7.18k|        ds_put_format(string, "%scookie=%s0x%"PRIx64", ",
 1295|  7.18k|                      colors.param, colors.end, ntohll(fs->cookie));
 1296|  7.18k|    }
 1297|  7.18k|    if (show_stats) {
  ------------------
  |  Branch (1297:9): [True: 7.18k, False: 0]
  ------------------
 1298|  7.18k|        ds_put_format(string, "%sduration=%s", colors.param, colors.end);
 1299|  7.18k|        ofp_print_duration(string, fs->duration_sec, fs->duration_nsec);
 1300|  7.18k|        ds_put_cstr(string, ", ");
 1301|  7.18k|    }
 1302|       |
 1303|  7.18k|    if (show_stats || fs->table_id
  ------------------
  |  Branch (1303:9): [True: 7.18k, False: 0]
  |  Branch (1303:23): [True: 0, False: 0]
  ------------------
 1304|  7.18k|        || ofputil_table_map_get_name(table_map, fs->table_id) != NULL) {
  ------------------
  |  Branch (1304:12): [True: 0, False: 0]
  ------------------
 1305|  7.18k|        ds_put_format(string, "%stable=%s", colors.special, colors.end);
 1306|  7.18k|        ofputil_format_table(fs->table_id, table_map, string);
 1307|  7.18k|        ds_put_cstr(string, ", ");
 1308|  7.18k|    }
 1309|  7.18k|    if (show_stats) {
  ------------------
  |  Branch (1309:9): [True: 7.18k, False: 0]
  ------------------
 1310|  7.18k|        print_flow_stat(string, "n_packets", fs->packet_count);
 1311|  7.18k|        print_flow_stat(string, "n_bytes", fs->byte_count);
 1312|  7.18k|    }
 1313|  7.18k|    if (fs->idle_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  7.18k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (1313:9): [True: 5.72k, False: 1.45k]
  ------------------
 1314|  5.72k|        ds_put_format(string, "%sidle_timeout=%s%"PRIu16", ",
 1315|  5.72k|                      colors.param, colors.end, fs->idle_timeout);
 1316|  5.72k|    }
 1317|  7.18k|    if (fs->hard_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  7.18k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (1317:9): [True: 5.34k, False: 1.84k]
  ------------------
 1318|  5.34k|        ds_put_format(string, "%shard_timeout=%s%"PRIu16", ",
 1319|  5.34k|                      colors.param, colors.end, fs->hard_timeout);
 1320|  5.34k|    }
 1321|  7.18k|    if (fs->flags) {
  ------------------
  |  Branch (1321:9): [True: 2.63k, False: 4.55k]
  ------------------
 1322|  2.63k|        ofputil_flow_mod_flags_format(string, fs->flags);
 1323|  2.63k|    }
 1324|  7.18k|    if (fs->importance != 0) {
  ------------------
  |  Branch (1324:9): [True: 5.93k, False: 1.25k]
  ------------------
 1325|  5.93k|        ds_put_format(string, "%simportance=%s%"PRIu16", ",
 1326|  5.93k|                      colors.param, colors.end, fs->importance);
 1327|  5.93k|    }
 1328|  7.18k|    if (show_stats && fs->idle_age >= 0) {
  ------------------
  |  Branch (1328:9): [True: 7.18k, False: 0]
  |  Branch (1328:23): [True: 175, False: 7.01k]
  ------------------
 1329|    175|        ds_put_format(string, "%sidle_age=%s%d, ",
 1330|    175|                      colors.param, colors.end, fs->idle_age);
 1331|    175|    }
 1332|  7.18k|    if (show_stats && fs->hard_age >= 0 && fs->hard_age != fs->duration_sec) {
  ------------------
  |  Branch (1332:9): [True: 7.18k, False: 0]
  |  Branch (1332:23): [True: 434, False: 6.75k]
  |  Branch (1332:44): [True: 353, False: 81]
  ------------------
 1333|    353|        ds_put_format(string, "%shard_age=%s%d, ",
 1334|    353|                      colors.param, colors.end, fs->hard_age);
 1335|    353|    }
 1336|       |
 1337|       |    /* Print the match, followed by a space (but omit the space if the match
 1338|       |     * was an empty string). */
 1339|  7.18k|    size_t length = string->length;
 1340|  7.18k|    match_format(&fs->match, port_map, string, fs->priority);
 1341|  7.18k|    if (string->length != length) {
  ------------------
  |  Branch (1341:9): [True: 7.13k, False: 53]
  ------------------
 1342|  7.13k|        ds_put_char(string, ' ');
 1343|  7.13k|    }
 1344|       |
 1345|  7.18k|    ds_put_format(string, "%sactions=%s", colors.actions, colors.end);
 1346|  7.18k|    struct ofpact_format_params fp = {
 1347|  7.18k|        .port_map = port_map,
 1348|  7.18k|        .table_map = table_map,
 1349|  7.18k|        .s = string,
 1350|  7.18k|    };
 1351|  7.18k|    ofpacts_format(fs->ofpacts, fs->ofpacts_len, &fp);
 1352|  7.18k|}
ofputil_decode_aggregate_stats_reply:
 1401|  2.75k|{
 1402|  2.75k|    struct ofpbuf msg = ofpbuf_const_initializer(reply, ntohs(reply->length));
 1403|  2.75k|    enum ofpraw raw;
 1404|       |
 1405|  2.75k|    raw = ofpraw_pull_assert(&msg);
 1406|  2.75k|    if (raw == OFPRAW_OFPST15_AGGREGATE_REPLY) {
  ------------------
  |  Branch (1406:9): [True: 2.68k, False: 70]
  ------------------
 1407|  2.68k|        struct oxs_stats oxs;
 1408|  2.68k|        uint16_t statlen;
 1409|  2.68k|        uint8_t oxs_field_set;
 1410|  2.68k|        enum ofperr error = oxs_pull_stat(&msg, &oxs, &statlen,
 1411|  2.68k|                                          &oxs_field_set);
 1412|  2.68k|        if (error) {
  ------------------
  |  Branch (1412:13): [True: 2.37k, False: 317]
  ------------------
 1413|  2.37k|            return error;
 1414|  2.37k|        }
 1415|    317|        stats->packet_count = oxs.packet_count;
 1416|    317|        stats->byte_count = oxs.byte_count;
 1417|    317|        stats->flow_count = oxs.flow_count;
 1418|    317|    } else {
 1419|     70|        struct ofp_aggregate_stats_reply *asr = msg.msg;
 1420|     70|        stats->packet_count = ntohll(get_32aligned_be64(&asr->packet_count));
 1421|     70|        stats->byte_count = ntohll(get_32aligned_be64(&asr->byte_count));
 1422|     70|        stats->flow_count = ntohl(asr->flow_count);
 1423|     70|    }
 1424|       |
 1425|    387|    return 0;
 1426|  2.75k|}
ofputil_aggregate_stats_format:
 1431|    387|{
 1432|    387|    ds_put_format(s, " packet_count=%"PRIu64, as->packet_count);
 1433|    387|    ds_put_format(s, " byte_count=%"PRIu64, as->byte_count);
 1434|       |    ds_put_format(s, " flow_count=%"PRIu32, as->flow_count);
 1435|    387|}
ofp-flow.c:ofputil_decode_flow_mod_flags:
   63|  53.2k|{
   64|  53.2k|    uint16_t raw_flags = ntohs(raw_flags_);
   65|  53.2k|    const struct ofputil_flow_mod_flag *f;
   66|       |
   67|  53.2k|    *flagsp = 0;
   68|   372k|    for (f = ofputil_flow_mod_flags; f->raw_flag; f++) {
  ------------------
  |  Branch (68:38): [True: 319k, False: 53.2k]
  ------------------
   69|   319k|        if (raw_flags & f->raw_flag
  ------------------
  |  Branch (69:13): [True: 32.8k, False: 286k]
  ------------------
   70|  32.8k|            && version >= f->min_version
  ------------------
  |  Branch (70:16): [True: 32.3k, False: 516]
  ------------------
   71|  32.3k|            && (!f->max_version || version <= f->max_version)) {
  ------------------
  |  Branch (71:17): [True: 27.0k, False: 5.30k]
  |  Branch (71:36): [True: 576, False: 4.72k]
  ------------------
   72|  27.5k|            raw_flags &= ~f->raw_flag;
   73|  27.5k|            *flagsp |= f->flag;
   74|  27.5k|        }
   75|   319k|    }
   76|       |
   77|       |    /* In OF1.0 and OF1.1, "add" always resets counters, and other commands
   78|       |     * never do.
   79|       |     *
   80|       |     * In OF1.2 and later, OFPFF12_RESET_COUNTS controls whether each command
   81|       |     * resets counters. */
   82|  53.2k|    if ((version == OFP10_VERSION || version == OFP11_VERSION)
  ------------------
  |  Branch (82:10): [True: 28.2k, False: 24.9k]
  |  Branch (82:38): [True: 2.31k, False: 22.6k]
  ------------------
   83|  30.6k|        && command == OFPFC_ADD) {
  ------------------
  |  Branch (83:12): [True: 22.2k, False: 8.31k]
  ------------------
   84|  22.2k|        *flagsp |= OFPUTIL_FF_RESET_COUNTS;
   85|  22.2k|    }
   86|       |
   87|  53.2k|    return raw_flags ? OFPERR_OFPFMFC_BAD_FLAGS : 0;
  ------------------
  |  Branch (87:12): [True: 3.43k, False: 49.7k]
  ------------------
   88|  53.2k|}
ofp-flow.c:ofputil_decode_ofpst10_flow_request:
  618|  1.24k|{
  619|  1.24k|    fsr->aggregate = aggregate;
  620|  1.24k|    ofputil_match_from_ofp10_match(&ofsr->match, &fsr->match);
  621|  1.24k|    fsr->out_port = u16_to_ofp(ntohs(ofsr->out_port));
  622|  1.24k|    fsr->out_group = OFPG_ANY;
  623|  1.24k|    fsr->table_id = ofsr->table_id;
  624|  1.24k|    fsr->cookie = fsr->cookie_mask = htonll(0);
  625|       |
  626|  1.24k|    return 0;
  627|  1.24k|}
ofp-flow.c:ofputil_decode_ofpst11_flow_request:
  634|  2.33k|{
  635|  2.33k|    const struct ofp11_flow_stats_request *ofsr;
  636|  2.33k|    enum ofperr error;
  637|       |
  638|  2.33k|    ofsr = ofpbuf_pull(b, sizeof *ofsr);
  639|  2.33k|    fsr->aggregate = aggregate;
  640|  2.33k|    fsr->table_id = ofsr->table_id;
  641|  2.33k|    error = ofputil_port_from_ofp11(ofsr->out_port, &fsr->out_port);
  642|  2.33k|    if (error) {
  ------------------
  |  Branch (642:9): [True: 363, False: 1.96k]
  ------------------
  643|    363|        return error;
  644|    363|    }
  645|  1.96k|    fsr->out_group = ntohl(ofsr->out_group);
  646|  1.96k|    fsr->cookie = ofsr->cookie;
  647|  1.96k|    fsr->cookie_mask = ofsr->cookie_mask;
  648|  1.96k|    error = ofputil_pull_ofp11_match(b, tun_table, vl_mff_map, &fsr->match,
  649|  1.96k|                                     NULL);
  650|  1.96k|    if (error) {
  ------------------
  |  Branch (650:9): [True: 1.81k, False: 149]
  ------------------
  651|  1.81k|        return error;
  652|  1.81k|    }
  653|       |
  654|    149|    return 0;
  655|  1.96k|}
ofp-flow.c:ofputil_decode_nxst_flow_request:
  662|    983|{
  663|    983|    const struct nx_flow_stats_request *nfsr;
  664|    983|    enum ofperr error;
  665|       |
  666|    983|    nfsr = ofpbuf_pull(b, sizeof *nfsr);
  667|    983|    error = nx_pull_match(b, ntohs(nfsr->match_len), &fsr->match,
  668|    983|                          &fsr->cookie, &fsr->cookie_mask, false, tun_table,
  669|    983|                          vl_mff_map);
  670|    983|    if (error) {
  ------------------
  |  Branch (670:9): [True: 752, False: 231]
  ------------------
  671|    752|        return error;
  672|    752|    }
  673|    231|    if (b->size) {
  ------------------
  |  Branch (673:9): [True: 51, False: 180]
  ------------------
  674|     51|        return OFPERR_OFPBRC_BAD_LEN;
  675|     51|    }
  676|       |
  677|    180|    fsr->aggregate = aggregate;
  678|    180|    fsr->out_port = u16_to_ofp(ntohs(nfsr->out_port));
  679|    180|    fsr->out_group = OFPG_ANY;
  680|    180|    fsr->table_id = nfsr->table_id;
  681|       |
  682|    180|    return 0;
  683|    231|}
ofp-flow.c:print_flow_stat:
 1272|  14.3k|{
 1273|  14.3k|    ds_put_format(string, "%s%s=%s", colors.param, leader, colors.end);
 1274|  14.3k|    if (stat != UINT64_MAX) {
  ------------------
  |  Branch (1274:9): [True: 2.47k, False: 11.8k]
  ------------------
 1275|  2.47k|        ds_put_format(string, "%"PRIu64, stat);
 1276|  11.8k|    } else {
 1277|  11.8k|        ds_put_char(string, '?');
 1278|  11.8k|    }
 1279|  14.3k|    ds_put_cstr(string, ", ");
 1280|  14.3k|}

ofputil_format_group:
   66|    897|{
   67|    897|    char name[MAX_GROUP_NAME_LEN + 1];
   68|       |
   69|    897|    ofputil_group_to_string(group_id, name, sizeof name);
   70|    897|    ds_put_cstr(s, name);
   71|    897|}
ofputil_group_to_string:
   81|    897|{
   82|    897|    switch (group_id) {
   83|    357|    case OFPG_ALL:
  ------------------
  |  Branch (83:5): [True: 357, False: 540]
  ------------------
   84|    357|        ovs_strlcpy(namebuf, "ALL", bufsize);
   85|    357|        break;
   86|       |
   87|    249|    case OFPG_ANY:
  ------------------
  |  Branch (87:5): [True: 249, False: 648]
  ------------------
   88|    249|        ovs_strlcpy(namebuf, "ANY", bufsize);
   89|    249|        break;
   90|       |
   91|    291|    default:
  ------------------
  |  Branch (91:5): [True: 291, False: 606]
  ------------------
   92|       |        snprintf(namebuf, bufsize, "%"PRIu32, group_id);
   93|    291|        break;
   94|    897|    }
   95|    897|}
ofputil_bucket_list_destroy:
  100|  54.7k|{
  101|  54.7k|    struct ofputil_bucket *bucket;
  102|       |
  103|  54.7k|    LIST_FOR_EACH_POP (bucket, list_node, buckets) {
  ------------------
  |  |  140|  64.3k|    while (!ovs_list_is_empty(LIST) ?                                         \
  |  |  ------------------
  |  |  |  Branch (140:12): [True: 9.54k, False: 54.7k]
  |  |  |  Branch (140:12): [True: 9.54k, False: 54.7k]
  |  |  ------------------
  |  |  141|  64.3k|           (INIT_CONTAINER(ITER, ovs_list_pop_front(LIST), MEMBER), 1) :      \
  |  |  ------------------
  |  |  |  |  150|  9.54k|    ((OBJECT) = NULL, ASSIGN_CONTAINER(OBJECT, POINTER, MEMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  |  143|  9.54k|    ((OBJECT) = OBJECT_CONTAINING(POINTER, OBJECT, MEMBER), (void) 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  134|  9.54k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  |  |  135|  9.54k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  108|  9.54k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  142|  64.3k|           (ITER = NULL, 0))
  ------------------
  104|  9.54k|        free(bucket->ofpacts);
  105|  9.54k|        free(bucket);
  106|  9.54k|    }
  107|  54.7k|}
ofputil_bucket_check_duplicate_id:
  169|  20.6k|{
  170|  20.6k|    struct ofputil_bucket *i, *j;
  171|       |
  172|  20.6k|    LIST_FOR_EACH (i, list_node, buckets) {
  ------------------
  |  |   76|  20.6k|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->next, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  171|  20.6k|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|  20.6k|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|  24.7k|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  185|  24.7k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 4.25k, False: 20.4k]
  |  |  |  |  |  Branch (185:6): [True: 4.25k, False: 20.4k]
  |  |  |  |  ------------------
  |  |  |  |  186|  24.7k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  4.25k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|  4.25k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|  4.25k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  24.7k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   78|  20.6k|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->next))
  |  |  ------------------
  |  |  |  |  193|  4.04k|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  4.04k|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  173|  6.73k|        LIST_FOR_EACH_REVERSE (j, list_node, buckets) {
  ------------------
  |  |   86|  4.25k|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->prev, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  171|  4.25k|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|  4.25k|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   87|  6.73k|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  185|  6.73k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 6.73k, False: 0]
  |  |  |  |  |  Branch (185:6): [True: 6.73k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  186|  6.73k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  6.73k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|  6.73k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|  6.73k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  6.73k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   88|  4.25k|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->prev))
  |  |  ------------------
  |  |  |  |  193|  2.47k|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  2.47k|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  174|  6.73k|            if (i == j) {
  ------------------
  |  Branch (174:17): [True: 4.04k, False: 2.68k]
  ------------------
  175|  4.04k|                break;
  176|  4.04k|            }
  177|  2.68k|            if (i->bucket_id == j->bucket_id) {
  ------------------
  |  Branch (177:17): [True: 214, False: 2.47k]
  ------------------
  178|    214|                return true;
  179|    214|            }
  180|  2.68k|        }
  181|  4.25k|    }
  182|       |
  183|  20.4k|    return false;
  184|  20.6k|}
ofputil_uninit_group_desc:
  231|  1.45k|{
  232|  1.45k|    ofputil_bucket_list_destroy(&gd->buckets);
  233|  1.45k|    ofputil_group_properties_destroy(&gd->props);
  234|  1.45k|}
ofputil_decode_group_desc_request:
  241|    425|{
  242|    425|    struct ofpbuf request = ofpbuf_const_initializer(oh, ntohs(oh->length));
  243|    425|    enum ofpraw raw = ofpraw_pull_assert(&request);
  244|    425|    if (raw == OFPRAW_OFPST11_GROUP_DESC_REQUEST) {
  ------------------
  |  Branch (244:9): [True: 76, False: 349]
  ------------------
  245|     76|        return OFPG_ALL;
  246|    349|    } else if (raw == OFPRAW_NXST_GROUP_DESC_REQUEST ||
  ------------------
  |  Branch (246:16): [True: 82, False: 267]
  ------------------
  247|    349|               raw == OFPRAW_OFPST15_GROUP_DESC_REQUEST) {
  ------------------
  |  Branch (247:16): [True: 267, False: 0]
  ------------------
  248|    349|        ovs_be32 *group_id = ofpbuf_pull(&request, sizeof *group_id);
  249|    349|        return ntohl(*group_id);
  250|    349|    } else {
  251|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  252|      0|    }
  253|    425|}
ofputil_group_desc_request_format:
  298|    425|{
  299|    425|    uint32_t group_id = ofputil_decode_group_desc_request(oh);
  300|    425|    ds_put_cstr(string, " group_id=");
  301|    425|    ofputil_format_group(group_id, string);
  302|       |
  303|    425|    return 0;
  304|    425|}
ofputil_decode_group_features_reply:
  422|  1.30k|{
  423|  1.30k|    const struct ofp12_group_features_stats *ogf = ofpmsg_body(oh);
  424|  1.30k|    int i;
  425|       |
  426|  1.30k|    features->types = ntohl(ogf->types);
  427|  1.30k|    features->capabilities = ntohl(ogf->capabilities);
  428|  6.52k|    for (i = 0; i < OFPGT12_N_TYPES; i++) {
  ------------------
  |  |  151|  6.52k|#define OFPGT12_N_TYPES 4
  ------------------
  |  Branch (428:17): [True: 5.22k, False: 1.30k]
  ------------------
  429|       |        features->max_groups[i] = ntohl(ogf->max_groups[i]);
  430|  5.22k|        features->ofpacts[i] = ofpact_bitmap_from_openflow(
  431|  5.22k|            ogf->actions[i], oh->version);
  432|  5.22k|    }
  433|  1.30k|}
ofputil_group_features_format:
  449|  1.30k|{
  450|  1.30k|    struct ofputil_group_features features;
  451|  1.30k|    int i;
  452|       |
  453|  1.30k|    ofputil_decode_group_features_reply(oh, &features);
  454|       |
  455|  1.30k|    ds_put_format(string, "\n Group table:\n");
  456|  1.30k|    ds_put_format(string, "    Types:  0x%"PRIx32"\n", features.types);
  457|  1.30k|    ds_put_format(string, "    Capabilities:  0x%"PRIx32"\n",
  458|  1.30k|                  features.capabilities);
  459|       |
  460|  6.52k|    for (i = 0; i < OFPGT12_N_TYPES; i++) {
  ------------------
  |  |  151|  6.52k|#define OFPGT12_N_TYPES 4
  ------------------
  |  Branch (460:17): [True: 5.22k, False: 1.30k]
  ------------------
  461|  5.22k|        if (features.types & (1u << i)) {
  ------------------
  |  Branch (461:13): [True: 3.93k, False: 1.28k]
  ------------------
  462|  3.93k|            ds_put_format(string, "    %s group:\n", group_type_to_string(i));
  463|  3.93k|            ds_put_format(string, "       max_groups=%#"PRIx32"\n",
  464|  3.93k|                          features.max_groups[i]);
  465|  3.93k|            ds_put_format(string, "       actions: ");
  466|  3.93k|            ofpact_bitmap_format(features.ofpacts[i], string);
  467|  3.93k|            ds_put_char(string, '\n');
  468|  3.93k|        }
  469|  5.22k|    }
  470|       |
  471|  1.30k|    return 0;
  472|  1.30k|}
ofputil_decode_group_stats_request:
  480|    472|{
  481|    472|    const struct ofp11_group_stats_request *gsr11 = ofpmsg_body(request);
  482|       |    *group_id = ntohl(gsr11->group_id);
  483|    472|    return 0;
  484|    472|}
ofputil_decode_group_stats_reply:
  500|  3.79k|{
  501|  3.79k|    struct ofp11_bucket_counter *obc;
  502|  3.79k|    struct ofp11_group_stats *ogs11;
  503|  3.79k|    enum ofpraw raw;
  504|  3.79k|    enum ofperr error;
  505|  3.79k|    size_t base_len;
  506|  3.79k|    size_t length;
  507|  3.79k|    size_t i;
  508|       |
  509|  3.79k|    gs->bucket_stats = NULL;
  510|  3.79k|    error = (msg->header ? ofpraw_decode(&raw, msg->header)
  ------------------
  |  Branch (510:14): [True: 2.33k, False: 1.45k]
  ------------------
  511|  3.79k|             : ofpraw_pull(&raw, msg));
  512|  3.79k|    if (error) {
  ------------------
  |  Branch (512:9): [True: 0, False: 3.79k]
  ------------------
  513|      0|        return error;
  514|      0|    }
  515|       |
  516|  3.79k|    if (!msg->size) {
  ------------------
  |  Branch (516:9): [True: 138, False: 3.65k]
  ------------------
  517|    138|        return EOF;
  518|    138|    }
  519|       |
  520|  3.65k|    if (raw == OFPRAW_OFPST11_GROUP_REPLY) {
  ------------------
  |  Branch (520:9): [True: 1.62k, False: 2.03k]
  ------------------
  521|  1.62k|        base_len = sizeof *ogs11;
  522|  1.62k|        ogs11 = ofpbuf_try_pull(msg, sizeof *ogs11);
  523|  1.62k|        gs->duration_sec = gs->duration_nsec = UINT32_MAX;
  524|  2.03k|    } else if (raw == OFPRAW_NXST_GROUP_REPLY ||
  ------------------
  |  Branch (524:16): [True: 1.31k, False: 720]
  ------------------
  525|  2.03k|               raw == OFPRAW_OFPST13_GROUP_REPLY) {
  ------------------
  |  Branch (525:16): [True: 720, False: 0]
  ------------------
  526|  2.03k|        struct ofp13_group_stats *ogs13;
  527|       |
  528|  2.03k|        base_len = sizeof *ogs13;
  529|  2.03k|        ogs13 = ofpbuf_try_pull(msg, sizeof *ogs13);
  530|  2.03k|        if (ogs13) {
  ------------------
  |  Branch (530:13): [True: 1.62k, False: 403]
  ------------------
  531|  1.62k|            ogs11 = &ogs13->gs;
  532|  1.62k|            gs->duration_sec = ntohl(ogs13->duration_sec);
  533|  1.62k|            gs->duration_nsec = ntohl(ogs13->duration_nsec);
  534|  1.62k|        } else {
  535|    403|            ogs11 = NULL;
  536|    403|        }
  537|  2.03k|    } else {
  538|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  539|      0|    }
  540|       |
  541|  3.65k|    if (!ogs11) {
  ------------------
  |  Branch (541:9): [True: 440, False: 3.21k]
  ------------------
  542|    440|        VLOG_WARN_RL(&rl, "%s reply has %"PRIu32" leftover bytes at end",
  ------------------
  |  |  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]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|    440|                     ofpraw_get_name(raw), msg->size);
  544|    440|        return OFPERR_OFPBRC_BAD_LEN;
  545|    440|    }
  546|  3.21k|    length = ntohs(ogs11->length);
  547|  3.21k|    if (length < sizeof base_len) {
  ------------------
  |  Branch (547:9): [True: 202, False: 3.01k]
  ------------------
  548|    202|        VLOG_WARN_RL(&rl, "%s reply claims invalid length %"PRIuSIZE,
  ------------------
  |  |  224|    202|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    202|    do {                                                                \
  |  |  |  |  288|    202|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    202|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 202]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    202|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 202]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  549|    202|                     ofpraw_get_name(raw), length);
  550|    202|        return OFPERR_OFPBRC_BAD_LEN;
  551|    202|    }
  552|       |
  553|  3.01k|    gs->group_id = ntohl(ogs11->group_id);
  554|  3.01k|    gs->ref_count = ntohl(ogs11->ref_count);
  555|  3.01k|    gs->packet_count = ntohll(ogs11->packet_count);
  556|  3.01k|    gs->byte_count = ntohll(ogs11->byte_count);
  557|       |
  558|  3.01k|    gs->n_buckets = (length - base_len) / sizeof *obc;
  559|  3.01k|    obc = ofpbuf_try_pull(msg, gs->n_buckets * sizeof *obc);
  560|  3.01k|    if (!obc) {
  ------------------
  |  Branch (560:9): [True: 674, False: 2.33k]
  ------------------
  561|    674|        VLOG_WARN_RL(&rl, "%s reply has %"PRIu32" leftover bytes at end",
  ------------------
  |  |  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]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  562|    674|                     ofpraw_get_name(raw), msg->size);
  563|    674|        return OFPERR_OFPBRC_BAD_LEN;
  564|    674|    }
  565|       |
  566|  2.33k|    gs->bucket_stats = xmalloc(gs->n_buckets * sizeof *gs->bucket_stats);
  567|  19.6k|    for (i = 0; i < gs->n_buckets; i++) {
  ------------------
  |  Branch (567:17): [True: 17.3k, False: 2.33k]
  ------------------
  568|  17.3k|        gs->bucket_stats[i].packet_count = ntohll(obc[i].packet_count);
  569|  17.3k|        gs->bucket_stats[i].byte_count = ntohll(obc[i].byte_count);
  570|  17.3k|    }
  571|       |
  572|  2.33k|    return 0;
  573|  3.01k|}
ofputil_group_stats_request_format:
  579|    472|{
  580|    472|    enum ofperr error;
  581|    472|    uint32_t group_id;
  582|       |
  583|    472|    error = ofputil_decode_group_stats_request(oh, &group_id);
  584|    472|    if (error) {
  ------------------
  |  Branch (584:9): [True: 0, False: 472]
  ------------------
  585|      0|        return error;
  586|      0|    }
  587|       |
  588|    472|    ds_put_cstr(string, " group_id=");
  589|    472|    ofputil_format_group(group_id, string);
  590|    472|    return 0;
  591|    472|}
ofputil_group_stats_format:
  595|  1.45k|{
  596|  1.45k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  597|  3.79k|    for (;;) {
  598|  3.79k|        struct ofputil_group_stats gs;
  599|  3.79k|        int retval;
  600|       |
  601|  3.79k|        retval = ofputil_decode_group_stats_reply(&b, &gs);
  602|  3.79k|        if (retval) {
  ------------------
  |  Branch (602:13): [True: 1.45k, False: 2.33k]
  ------------------
  603|  1.45k|            if (retval != EOF) {
  ------------------
  |  Branch (603:17): [True: 1.31k, False: 138]
  ------------------
  604|  1.31k|                ds_put_cstr(s, " ***parse error***");
  605|  1.31k|                return retval;
  606|  1.31k|            }
  607|    138|            break;
  608|  1.45k|        }
  609|       |
  610|  2.33k|        ds_put_char(s, '\n');
  611|       |
  612|  2.33k|        ds_put_char(s, ' ');
  613|  2.33k|        ds_put_format(s, "group_id=%"PRIu32",", gs.group_id);
  614|       |
  615|  2.33k|        if (gs.duration_sec != UINT32_MAX) {
  ------------------
  |  Branch (615:13): [True: 1.36k, False: 974]
  ------------------
  616|  1.36k|            ds_put_cstr(s, "duration=");
  617|  1.36k|            ofp_print_duration(s, gs.duration_sec, gs.duration_nsec);
  618|  1.36k|            ds_put_char(s, ',');
  619|  1.36k|        }
  620|  2.33k|        ds_put_format(s, "ref_count=%"PRIu32",", gs.ref_count);
  621|  2.33k|        ds_put_format(s, "packet_count=%"PRIu64",", gs.packet_count);
  622|  2.33k|        ds_put_format(s, "byte_count=%"PRIu64"", gs.byte_count);
  623|       |
  624|  19.6k|        for (uint32_t bucket_i = 0; bucket_i < gs.n_buckets; bucket_i++) {
  ------------------
  |  Branch (624:37): [True: 17.3k, False: 2.33k]
  ------------------
  625|  17.3k|            if (gs.bucket_stats[bucket_i].packet_count != UINT64_MAX) {
  ------------------
  |  Branch (625:17): [True: 17.0k, False: 263]
  ------------------
  626|  17.0k|                ds_put_format(s, ",bucket%"PRIu32":", bucket_i);
  627|  17.0k|                ds_put_format(s, "packet_count=%"PRIu64",", gs.bucket_stats[bucket_i].packet_count);
  628|  17.0k|                ds_put_format(s, "byte_count=%"PRIu64"", gs.bucket_stats[bucket_i].byte_count);
  629|  17.0k|            }
  630|  17.3k|        }
  631|       |
  632|  2.33k|        free(gs.bucket_stats);
  633|  2.33k|    }
  634|    138|    return 0;
  635|  1.45k|}
ofputil_group_properties_destroy:
 1525|  30.8k|{
 1526|  30.8k|    free(gp->fields.values);
 1527|  30.8k|}
ofputil_group_properties_format:
 1532|  9.83k|{
 1533|  9.83k|    if (!gp->selection_method[0]) {
  ------------------
  |  Branch (1533:9): [True: 7.49k, False: 2.33k]
  ------------------
 1534|  7.49k|        return;
 1535|  7.49k|    }
 1536|       |
 1537|  2.33k|    ds_put_format(ds, ",selection_method=%s", gp->selection_method);
 1538|  2.33k|    if (gp->selection_method_param) {
  ------------------
  |  Branch (1538:9): [True: 2.07k, False: 253]
  ------------------
 1539|  2.07k|        ds_put_format(ds, ",selection_method_param=%"PRIu64,
 1540|  2.07k|                      gp->selection_method_param);
 1541|  2.07k|    }
 1542|       |
 1543|  2.33k|    size_t n = bitmap_count1(gp->fields.used.bm, MFF_N_IDS);
 1544|  2.33k|    if (n == 1) {
  ------------------
  |  Branch (1544:9): [True: 309, False: 2.02k]
  ------------------
 1545|    309|        ds_put_cstr(ds, ",fields=");
 1546|    309|        oxm_format_field_array(ds, &gp->fields);
 1547|  2.02k|    } else if (n > 1) {
  ------------------
  |  Branch (1547:16): [True: 1.97k, False: 51]
  ------------------
 1548|  1.97k|        ds_put_cstr(ds, ",fields(");
 1549|  1.97k|        oxm_format_field_array(ds, &gp->fields);
 1550|  1.97k|        ds_put_char(ds, ')');
 1551|  1.97k|    }
 1552|  2.33k|}
ofputil_decode_group_desc_reply:
 1793|  5.87k|{
 1794|  5.87k|    ofputil_init_group_properties(&gd->props);
 1795|       |
 1796|  5.87k|    switch (version)
 1797|  5.87k|    {
 1798|    763|    case OFP11_VERSION:
  ------------------
  |  Branch (1798:5): [True: 763, False: 5.10k]
  ------------------
 1799|  1.47k|    case OFP12_VERSION:
  ------------------
  |  Branch (1799:5): [True: 711, False: 5.16k]
  ------------------
 1800|  1.56k|    case OFP13_VERSION:
  ------------------
  |  Branch (1800:5): [True: 92, False: 5.78k]
  ------------------
 1801|  1.78k|    case OFP14_VERSION:
  ------------------
  |  Branch (1801:5): [True: 220, False: 5.65k]
  ------------------
 1802|  1.78k|        return ofputil_decode_ofp11_group_desc_reply(gd, msg, version);
 1803|       |
 1804|  3.56k|    case OFP10_VERSION:
  ------------------
  |  Branch (1804:5): [True: 3.56k, False: 2.30k]
  ------------------
 1805|  4.08k|    case OFP15_VERSION:
  ------------------
  |  Branch (1805:5): [True: 520, False: 5.35k]
  ------------------
 1806|  4.08k|        return ofputil_decode_ofp15_group_desc_reply(gd, msg, version);
 1807|       |
 1808|      0|    default:
  ------------------
  |  Branch (1808:5): [True: 0, False: 5.87k]
  ------------------
 1809|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1810|  5.87k|    }
 1811|  5.87k|}
ofputil_bucket_format:
 1846|  4.24k|{
 1847|  4.24k|    ds_put_cstr(s, "bucket=");
 1848|       |
 1849|  4.24k|    ofp_print_bucket_id(s, "bucket_id:", bucket->bucket_id, ofp_version);
 1850|  4.24k|    if (bucket->weight != (type == OFPGT11_SELECT ? 1 : 0)) {
  ------------------
  |  Branch (1850:9): [True: 1.58k, False: 2.66k]
  |  Branch (1850:28): [True: 883, False: 3.36k]
  ------------------
 1851|  1.58k|        ds_put_format(s, "weight:%"PRIu16",", bucket->weight);
 1852|  1.58k|    }
 1853|  4.24k|    if (bucket->watch_port != OFPP_NONE) {
  ------------------
  |  |   47|  4.24k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|  4.24k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1853:9): [True: 1.24k, False: 3.00k]
  ------------------
 1854|  1.24k|        ds_put_cstr(s, "watch_port:");
 1855|  1.24k|        ofputil_format_port(bucket->watch_port, port_map, s);
 1856|  1.24k|        ds_put_char(s, ',');
 1857|  1.24k|    }
 1858|  4.24k|    if (bucket->watch_group != OFPG_ANY) {
  ------------------
  |  Branch (1858:9): [True: 1.73k, False: 2.51k]
  ------------------
 1859|  1.73k|        ds_put_format(s, "watch_group:%"PRIu32",", bucket->watch_group);
 1860|  1.73k|    }
 1861|       |
 1862|  4.24k|    ds_put_cstr(s, "actions=");
 1863|  4.24k|    struct ofpact_format_params fp = {
 1864|  4.24k|        .port_map = port_map,
 1865|  4.24k|        .table_map = table_map,
 1866|  4.24k|        .s = s,
 1867|  4.24k|    };
 1868|  4.24k|    ofpacts_format(bucket->ofpacts, bucket->ofpacts_len, &fp);
 1869|  4.24k|}
ofputil_group_format:
 1879|  9.83k|{
 1880|  9.83k|    ds_put_format(s, "group_id=%"PRIu32, group_id);
 1881|       |
 1882|  9.83k|    if (!suppress_type) {
  ------------------
  |  Branch (1882:9): [True: 7.60k, False: 2.22k]
  ------------------
 1883|  7.60k|        static const char *type_str[] = { "all", "select", "indirect",
 1884|  7.60k|                                          "ff", "unknown" };
 1885|  7.60k|        ds_put_format(s, ",type=%s", type_str[type > 4 ? 4 : type]);
  ------------------
  |  Branch (1885:47): [True: 781, False: 6.82k]
  ------------------
 1886|  7.60k|    }
 1887|       |
 1888|  9.83k|    ofputil_group_properties_format(props, s);
 1889|       |
 1890|  9.83k|    if (!bucket && !p_buckets) {
  ------------------
  |  Branch (1890:9): [True: 9.83k, False: 0]
  |  Branch (1890:20): [True: 0, False: 9.83k]
  ------------------
 1891|      0|        return;
 1892|      0|    }
 1893|       |
 1894|  9.83k|    ds_put_char(s, ',');
 1895|       |
 1896|  9.83k|    if (bucket) {
  ------------------
  |  Branch (1896:9): [True: 0, False: 9.83k]
  ------------------
 1897|      0|        ofputil_bucket_format(s, bucket, type, ofp_version, NULL, NULL);
 1898|  9.83k|    } else {
 1899|  9.83k|        LIST_FOR_EACH (bucket, list_node, p_buckets) {
  ------------------
  |  |   76|  9.83k|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->next, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  171|  9.83k|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|  9.83k|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|  14.0k|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  185|  14.0k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 4.24k, False: 9.83k]
  |  |  |  |  |  Branch (185:6): [True: 4.24k, False: 9.83k]
  |  |  |  |  ------------------
  |  |  |  |  186|  14.0k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  4.24k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|  4.24k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|  4.24k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  14.0k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   78|  9.83k|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->next))
  |  |  ------------------
  |  |  |  |  193|  4.24k|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  4.24k|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1900|  4.24k|            ofputil_bucket_format(s, bucket, type, ofp_version,
 1901|  4.24k|                                port_map, table_map);
 1902|  4.24k|            ds_put_char(s, ',');
 1903|  4.24k|        }
 1904|  9.83k|        ds_chomp(s, ',');
 1905|  9.83k|    }
 1906|  9.83k|}
ofputil_group_desc_format:
 1912|  4.81k|{
 1913|  4.81k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
 1914|  5.87k|    for (;;) {
 1915|  5.87k|        struct ofputil_group_desc gd;
 1916|  5.87k|        int retval;
 1917|       |
 1918|  5.87k|        retval = ofputil_decode_group_desc_reply(&gd, &b, oh->version);
 1919|  5.87k|        if (retval) {
  ------------------
  |  Branch (1919:13): [True: 4.81k, False: 1.05k]
  ------------------
 1920|  4.81k|            return retval != EOF ? retval : 0;
  ------------------
  |  Branch (1920:20): [True: 4.01k, False: 796]
  ------------------
 1921|  4.81k|        }
 1922|       |
 1923|  1.05k|        ds_put_char(s, '\n');
 1924|  1.05k|        ds_put_char(s, ' ');
 1925|  1.05k|        ofputil_group_format(s, gd.group_id, gd.type, NULL, &gd.buckets,
 1926|       |                             &gd.props, oh->version, false,
 1927|  1.05k|                             port_map, table_map);
 1928|  1.05k|        ofputil_uninit_group_desc(&gd);
 1929|  1.05k|     }
 1930|  4.81k|}
ofputil_uninit_group_mod:
 1934|  29.4k|{
 1935|  29.4k|    ofputil_bucket_list_destroy(&gm->buckets);
 1936|  29.4k|    ofputil_group_properties_destroy(&gm->props);
 1937|  29.4k|}
ofputil_decode_group_mod:
 2310|  57.9k|{
 2311|  57.9k|    ofputil_init_group_properties(&gm->props);
 2312|       |
 2313|  57.9k|    enum ofp_version ofp_version = oh->version;
 2314|  57.9k|    struct ofpbuf msg = ofpbuf_const_initializer(oh, ntohs(oh->length));
 2315|  57.9k|    ofpraw_pull_assert(&msg);
 2316|       |
 2317|  57.9k|    enum ofperr err;
 2318|  57.9k|    switch (ofp_version) {
 2319|  4.55k|    case OFP11_VERSION:
  ------------------
  |  Branch (2319:5): [True: 4.55k, False: 53.3k]
  ------------------
 2320|  8.08k|    case OFP12_VERSION:
  ------------------
  |  Branch (2320:5): [True: 3.53k, False: 54.4k]
  ------------------
 2321|  8.83k|    case OFP13_VERSION:
  ------------------
  |  Branch (2321:5): [True: 753, False: 57.1k]
  ------------------
 2322|  14.2k|    case OFP14_VERSION:
  ------------------
  |  Branch (2322:5): [True: 5.40k, False: 52.5k]
  ------------------
 2323|  14.2k|        err = ofputil_pull_ofp11_group_mod(&msg, ofp_version, gm);
 2324|  14.2k|        break;
 2325|       |
 2326|    149|    case OFP10_VERSION:
  ------------------
  |  Branch (2326:5): [True: 149, False: 57.7k]
  ------------------
 2327|  43.6k|    case OFP15_VERSION:
  ------------------
  |  Branch (2327:5): [True: 43.5k, False: 14.3k]
  ------------------
 2328|  43.6k|        err = ofputil_pull_ofp15_group_mod(&msg, ofp_version, gm);
 2329|  43.6k|        break;
 2330|       |
 2331|      0|    default:
  ------------------
  |  Branch (2331:5): [True: 0, False: 57.9k]
  ------------------
 2332|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 2333|  57.9k|    }
 2334|  57.9k|    if (err) {
  ------------------
  |  Branch (2334:9): [True: 43.6k, False: 14.3k]
  ------------------
 2335|  43.6k|        return err;
 2336|  43.6k|    }
 2337|       |
 2338|  14.3k|    err = ofputil_check_group_mod(gm);
 2339|  14.3k|    if (err) {
  ------------------
  |  Branch (2339:9): [True: 5.53k, False: 8.77k]
  ------------------
 2340|  5.53k|        ofputil_uninit_group_mod(gm);
 2341|  5.53k|    }
 2342|  14.3k|    return err;
 2343|  57.9k|}
ofputil_group_mod_format__:
 2350|  8.77k|{
 2351|  8.77k|    bool bucket_command = false;
 2352|       |
 2353|  8.77k|    ds_put_char(s, '\n');
 2354|       |
 2355|  8.77k|    ds_put_char(s, ' ');
 2356|  8.77k|    switch (gm->command) {
 2357|  3.69k|    case OFPGC11_ADD:
  ------------------
  |  Branch (2357:5): [True: 3.69k, False: 5.07k]
  ------------------
 2358|  3.69k|        ds_put_cstr(s, "ADD");
 2359|  3.69k|        break;
 2360|       |
 2361|  1.71k|    case OFPGC11_MODIFY:
  ------------------
  |  Branch (2361:5): [True: 1.71k, False: 7.06k]
  ------------------
 2362|  1.71k|        ds_put_cstr(s, "MOD");
 2363|  1.71k|        break;
 2364|       |
 2365|    380|    case OFPGC11_ADD_OR_MOD:
  ------------------
  |  Branch (2365:5): [True: 380, False: 8.39k]
  ------------------
 2366|    380|        ds_put_cstr(s, "ADD_OR_MOD");
 2367|    380|        break;
 2368|       |
 2369|    764|    case OFPGC11_DELETE:
  ------------------
  |  Branch (2369:5): [True: 764, False: 8.00k]
  ------------------
 2370|    764|        ds_put_cstr(s, "DEL");
 2371|    764|        break;
 2372|       |
 2373|  1.88k|    case OFPGC15_INSERT_BUCKET:
  ------------------
  |  Branch (2373:5): [True: 1.88k, False: 6.89k]
  ------------------
 2374|  1.88k|        ds_put_cstr(s, "INSERT_BUCKET");
 2375|  1.88k|        bucket_command = true;
 2376|  1.88k|        break;
 2377|       |
 2378|    342|    case OFPGC15_REMOVE_BUCKET:
  ------------------
  |  Branch (2378:5): [True: 342, False: 8.43k]
  ------------------
 2379|    342|        ds_put_cstr(s, "REMOVE_BUCKET");
 2380|    342|        bucket_command = true;
 2381|    342|        break;
 2382|       |
 2383|      0|    default:
  ------------------
  |  Branch (2383:5): [True: 0, False: 8.77k]
  ------------------
 2384|      0|        ds_put_format(s, "cmd:%"PRIu16"", gm->command);
 2385|  8.77k|    }
 2386|  8.77k|    ds_put_char(s, ' ');
 2387|       |
 2388|  8.77k|    if (bucket_command) {
  ------------------
  |  Branch (2388:9): [True: 2.22k, False: 6.55k]
  ------------------
 2389|  2.22k|        ofp_print_bucket_id(s, "command_bucket_id:",
 2390|  2.22k|                            gm->command_bucket_id, ofp_version);
 2391|  2.22k|    }
 2392|       |
 2393|       |    ofputil_group_format(s, gm->group_id, gm->type, NULL, &gm->buckets,
 2394|  8.77k|                         &gm->props, ofp_version, bucket_command,
 2395|  8.77k|                         port_map, table_map);
 2396|  8.77k|}
ofputil_group_mod_format:
 2402|  57.6k|{
 2403|  57.6k|    struct ofputil_group_mod gm;
 2404|  57.6k|    int error;
 2405|       |
 2406|  57.6k|    error = ofputil_decode_group_mod(oh, &gm);
 2407|  57.6k|    if (error) {
  ------------------
  |  Branch (2407:9): [True: 49.0k, False: 8.58k]
  ------------------
 2408|  49.0k|        return error;
 2409|  49.0k|    }
 2410|  8.58k|    ofputil_group_mod_format__(s, oh->version, &gm, port_map, table_map);
 2411|  8.58k|    ofputil_uninit_group_mod(&gm);
 2412|  8.58k|    return 0;
 2413|  57.6k|}
ofp-group.c:group_type_to_string:
  437|  3.93k|{
  438|  3.93k|    switch (type) {
  439|  1.28k|    case OFPGT11_ALL: return "all";
  ------------------
  |  Branch (439:5): [True: 1.28k, False: 2.65k]
  ------------------
  440|  1.19k|    case OFPGT11_SELECT: return "select";
  ------------------
  |  Branch (440:5): [True: 1.19k, False: 2.74k]
  ------------------
  441|  1.18k|    case OFPGT11_INDIRECT: return "indirect";
  ------------------
  |  Branch (441:5): [True: 1.18k, False: 2.75k]
  ------------------
  442|    273|    case OFPGT11_FF: return "fast failover";
  ------------------
  |  Branch (442:5): [True: 273, False: 3.66k]
  ------------------
  443|      0|    default: OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  |  Branch (443:5): [True: 0, False: 3.93k]
  ------------------
  444|  3.93k|    }
  445|  3.93k|}
ofp-group.c:ofputil_init_group_properties:
 1511|  63.8k|{
 1512|  63.8k|    memset(gp, 0, sizeof *gp);
 1513|  63.8k|}
ofp-group.c:ofputil_decode_ofp11_group_desc_reply:
 1686|  1.78k|{
 1687|  1.78k|    struct ofp11_group_desc_stats *ogds;
 1688|  1.78k|    size_t length;
 1689|       |
 1690|  1.78k|    if (!msg->header) {
  ------------------
  |  Branch (1690:9): [True: 894, False: 892]
  ------------------
 1691|    894|        ofpraw_pull_assert(msg);
 1692|    894|    }
 1693|       |
 1694|  1.78k|    if (!msg->size) {
  ------------------
  |  Branch (1694:9): [True: 446, False: 1.34k]
  ------------------
 1695|    446|        return EOF;
 1696|    446|    }
 1697|       |
 1698|  1.34k|    ogds = ofpbuf_try_pull(msg, sizeof *ogds);
 1699|  1.34k|    if (!ogds) {
  ------------------
  |  Branch (1699:9): [True: 0, False: 1.34k]
  ------------------
 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.34k|    gd->type = ogds->type;
 1705|  1.34k|    gd->group_id = ntohl(ogds->group_id);
 1706|       |
 1707|  1.34k|    length = ntohs(ogds->length);
 1708|  1.34k|    if (length < sizeof *ogds || length - sizeof *ogds > msg->size) {
  ------------------
  |  Branch (1708:9): [True: 169, False: 1.17k]
  |  Branch (1708:34): [True: 194, False: 977]
  ------------------
 1709|    363|        VLOG_WARN_RL(&rl, "OFPST11_GROUP_DESC reply claims invalid "
  ------------------
  |  |  224|    363|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    363|    do {                                                                \
  |  |  |  |  288|    363|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    363|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 363]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    363|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 363]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1710|    363|                     "length %"PRIuSIZE, length);
 1711|    363|        return OFPERR_OFPBRC_BAD_LEN;
 1712|    363|    }
 1713|       |
 1714|    977|    return ofputil_pull_ofp11_buckets(msg, length - sizeof *ogds, version,
 1715|    977|                                      &gd->buckets);
 1716|  1.34k|}
ofp-group.c:ofputil_pull_ofp11_buckets:
 1319|  15.2k|{
 1320|  15.2k|    struct ofp11_bucket *ob;
 1321|  15.2k|    uint32_t bucket_id = 0;
 1322|       |
 1323|  15.2k|    ovs_list_init(buckets);
 1324|  18.8k|    while (buckets_length > 0) {
  ------------------
  |  Branch (1324:12): [True: 8.46k, False: 10.4k]
  ------------------
 1325|  8.46k|        struct ofputil_bucket *bucket;
 1326|  8.46k|        struct ofpbuf ofpacts;
 1327|  8.46k|        enum ofperr error;
 1328|  8.46k|        size_t ob_len;
 1329|       |
 1330|  8.46k|        ob = (buckets_length >= sizeof *ob
  ------------------
  |  Branch (1330:15): [True: 8.38k, False: 86]
  ------------------
 1331|  8.46k|              ? ofpbuf_try_pull(msg, sizeof *ob)
 1332|  8.46k|              : NULL);
 1333|  8.46k|        if (!ob) {
  ------------------
  |  Branch (1333:13): [True: 86, False: 8.38k]
  ------------------
 1334|     86|            VLOG_WARN_RL(&rl, "buckets end with %"PRIuSIZE" leftover bytes",
  ------------------
  |  |  224|     86|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     86|    do {                                                                \
  |  |  |  |  288|     86|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     86|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 86]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     86|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 86]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1335|     86|                         buckets_length);
 1336|     86|            ofputil_bucket_list_destroy(buckets);
 1337|     86|            return OFPERR_OFPGMFC_BAD_BUCKET;
 1338|     86|        }
 1339|       |
 1340|  8.38k|        ob_len = ntohs(ob->len);
 1341|  8.38k|        if (ob_len < sizeof *ob) {
  ------------------
  |  Branch (1341:13): [True: 1.74k, False: 6.64k]
  ------------------
 1342|  1.74k|            VLOG_WARN_RL(&rl, "OpenFlow message bucket length "
  ------------------
  |  |  224|  1.74k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.74k|    do {                                                                \
  |  |  |  |  288|  1.74k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.74k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.74k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.74k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.74k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1343|  1.74k|                         "%"PRIuSIZE" is not valid", ob_len);
 1344|  1.74k|            ofputil_bucket_list_destroy(buckets);
 1345|  1.74k|            return OFPERR_OFPGMFC_BAD_BUCKET;
 1346|  6.64k|        } else if (ob_len > buckets_length) {
  ------------------
  |  Branch (1346:20): [True: 989, False: 5.65k]
  ------------------
 1347|    989|            VLOG_WARN_RL(&rl, "OpenFlow message bucket length %"PRIuSIZE" "
  ------------------
  |  |  224|    989|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    989|    do {                                                                \
  |  |  |  |  288|    989|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    989|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 989]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    989|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 989]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1348|    989|                         "exceeds remaining buckets data size %"PRIuSIZE,
 1349|    989|                         ob_len, buckets_length);
 1350|    989|            ofputil_bucket_list_destroy(buckets);
 1351|    989|            return OFPERR_OFPGMFC_BAD_BUCKET;
 1352|    989|        }
 1353|  5.65k|        buckets_length -= ob_len;
 1354|       |
 1355|  5.65k|        ofpbuf_init(&ofpacts, 0);
 1356|  5.65k|        error = ofpacts_pull_openflow_actions(msg, ob_len - sizeof *ob,
 1357|  5.65k|                                              version, NULL, NULL, &ofpacts);
 1358|  5.65k|        if (error) {
  ------------------
  |  Branch (1358:13): [True: 1.73k, False: 3.92k]
  ------------------
 1359|  1.73k|            ofpbuf_uninit(&ofpacts);
 1360|  1.73k|            ofputil_bucket_list_destroy(buckets);
 1361|  1.73k|            return error;
 1362|  1.73k|        }
 1363|       |
 1364|  3.92k|        bucket = xzalloc(sizeof *bucket);
 1365|  3.92k|        bucket->weight = ntohs(ob->weight);
 1366|  3.92k|        error = ofputil_port_from_ofp11(ob->watch_port, &bucket->watch_port);
 1367|  3.92k|        if (error) {
  ------------------
  |  Branch (1367:13): [True: 254, False: 3.66k]
  ------------------
 1368|    254|            ofpbuf_uninit(&ofpacts);
 1369|    254|            ofputil_bucket_list_destroy(buckets);
 1370|    254|            free(bucket);
 1371|    254|            return OFPERR_OFPGMFC_BAD_WATCH;
 1372|    254|        }
 1373|  3.66k|        bucket->watch_group = ntohl(ob->watch_group);
 1374|  3.66k|        bucket->bucket_id = bucket_id++;
 1375|       |
 1376|  3.66k|        bucket->ofpacts = ofpbuf_steal_data(&ofpacts);
 1377|  3.66k|        bucket->ofpacts_len = ofpacts.size;
 1378|  3.66k|        ovs_list_push_back(buckets, &bucket->list_node);
 1379|  3.66k|    }
 1380|       |
 1381|  10.4k|    return 0;
 1382|  15.2k|}
ofp-group.c:ofputil_decode_ofp15_group_desc_reply:
 1722|  4.08k|{
 1723|  4.08k|    struct ofp15_group_desc_stats *ogds;
 1724|  4.08k|    uint16_t length, bucket_list_len;
 1725|  4.08k|    int error;
 1726|       |
 1727|  4.08k|    if (!msg->header) {
  ------------------
  |  Branch (1727:9): [True: 3.92k, False: 165]
  ------------------
 1728|  3.92k|        ofpraw_pull_assert(msg);
 1729|  3.92k|    }
 1730|       |
 1731|  4.08k|    if (!msg->size) {
  ------------------
  |  Branch (1731:9): [True: 350, False: 3.73k]
  ------------------
 1732|    350|        return EOF;
 1733|    350|    }
 1734|       |
 1735|  3.73k|    ogds = ofpbuf_try_pull(msg, sizeof *ogds);
 1736|  3.73k|    if (!ogds) {
  ------------------
  |  Branch (1736:9): [True: 126, False: 3.61k]
  ------------------
 1737|    126|        VLOG_WARN_RL(&rl, "OFPST11_GROUP_DESC reply has %"PRIu32" "
  ------------------
  |  |  224|    126|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    126|    do {                                                                \
  |  |  |  |  288|    126|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    126|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 126]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    126|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 126]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1738|    126|                     "leftover bytes at end", msg->size);
 1739|    126|        return OFPERR_OFPBRC_BAD_LEN;
 1740|    126|    }
 1741|  3.61k|    gd->type = ogds->type;
 1742|  3.61k|    gd->group_id = ntohl(ogds->group_id);
 1743|       |
 1744|  3.61k|    length = ntohs(ogds->length);
 1745|  3.61k|    if (length < sizeof *ogds || length - sizeof *ogds > msg->size) {
  ------------------
  |  Branch (1745:9): [True: 697, False: 2.91k]
  |  Branch (1745:34): [True: 762, False: 2.15k]
  ------------------
 1746|  1.45k|        VLOG_WARN_RL(&rl, "OFPST11_GROUP_DESC reply claims invalid "
  ------------------
  |  |  224|  1.45k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.45k|    do {                                                                \
  |  |  |  |  288|  1.45k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.45k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.45k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.45k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.45k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1747|  1.45k|                     "length %u", length);
 1748|  1.45k|        return OFPERR_OFPBRC_BAD_LEN;
 1749|  1.45k|    }
 1750|       |
 1751|  2.15k|    bucket_list_len = ntohs(ogds->bucket_list_len);
 1752|  2.15k|    if (length < bucket_list_len + sizeof *ogds) {
  ------------------
  |  Branch (1752:9): [True: 63, False: 2.08k]
  ------------------
 1753|     63|        VLOG_WARN_RL(&rl, "OFPST11_GROUP_DESC reply claims invalid "
  ------------------
  |  |  224|     63|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     63|    do {                                                                \
  |  |  |  |  288|     63|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     63|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 63]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     63|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 63]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1754|     63|                     "bucket list length %u", bucket_list_len);
 1755|     63|        return OFPERR_OFPBRC_BAD_LEN;
 1756|     63|    }
 1757|  2.08k|    error = ofputil_pull_ofp15_buckets(msg, bucket_list_len, version, gd->type,
 1758|  2.08k|                                       &gd->buckets);
 1759|  2.08k|    if (error) {
  ------------------
  |  Branch (1759:9): [True: 1.53k, False: 558]
  ------------------
 1760|  1.53k|        return error;
 1761|  1.53k|    }
 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|    558|    error = parse_ofp15_group_properties(
 1772|    558|        msg, gd->type, OFPGC15_ADD, &gd->props,
 1773|    558|        length - sizeof *ogds - bucket_list_len);
 1774|    558|    if (error) {
  ------------------
  |  Branch (1774:9): [True: 393, False: 165]
  ------------------
 1775|    393|        ofputil_uninit_group_desc(gd);
 1776|    393|    }
 1777|    558|    return error;
 1778|  2.08k|}
ofp-group.c:ofputil_pull_ofp15_buckets:
 1388|  39.5k|{
 1389|  39.5k|    ovs_list_init(buckets);
 1390|  45.4k|    while (buckets_length > 0) {
  ------------------
  |  Branch (1390:12): [True: 24.7k, False: 20.6k]
  ------------------
 1391|  24.7k|        struct ofputil_bucket *bucket = NULL;
 1392|  24.7k|        struct ofpbuf ofpacts;
 1393|  24.7k|        enum ofperr err = OFPERR_OFPGMFC_BAD_BUCKET;
 1394|  24.7k|        size_t ob_len, actions_len, properties_len;
 1395|  24.7k|        ovs_be32 watch_port = ofputil_port_to_ofp11(OFPP_ANY);
  ------------------
  |  |   80|  24.7k|#define OFPP_ANY OFPP_NONE
  |  |  ------------------
  |  |  |  |   47|  24.7k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|  24.7k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1396|  24.7k|        ovs_be32 watch_group = htonl(OFPG_ANY);
 1397|  24.7k|        ovs_be16 weight = htons(group_type == OFPGT11_SELECT ? 1 : 0);
  ------------------
  |  Branch (1397:27): [True: 586, False: 24.1k]
  ------------------
 1398|       |
 1399|  24.7k|        ofpbuf_init(&ofpacts, 0);
 1400|       |
 1401|  24.7k|        struct ofp15_bucket *ob = ofpbuf_try_pull(msg, sizeof *ob);
 1402|  24.7k|        if (!ob) {
  ------------------
  |  Branch (1402:13): [True: 0, False: 24.7k]
  ------------------
 1403|      0|            VLOG_WARN_RL(&rl, "buckets end with %"PRIuSIZE
  ------------------
  |  |  224|      0|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|      0|    do {                                                                \
  |  |  |  |  288|      0|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|      0|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1404|      0|                         " leftover bytes", buckets_length);
 1405|      0|            goto err;
 1406|      0|        }
 1407|       |
 1408|  24.7k|        ob_len = ntohs(ob->len);
 1409|  24.7k|        actions_len = ntohs(ob->action_array_len);
 1410|       |
 1411|  24.7k|        if (ob_len < sizeof *ob) {
  ------------------
  |  Branch (1411:13): [True: 531, False: 24.2k]
  ------------------
 1412|    531|            VLOG_WARN_RL(&rl, "OpenFlow message bucket length "
  ------------------
  |  |  224|    531|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    531|    do {                                                                \
  |  |  |  |  288|    531|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    531|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 531]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    531|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 531]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1413|    531|                         "%"PRIuSIZE" is not valid", ob_len);
 1414|    531|            goto err;
 1415|  24.2k|        } else if (ob_len > buckets_length) {
  ------------------
  |  Branch (1415:20): [True: 3.81k, False: 20.3k]
  ------------------
 1416|  3.81k|            VLOG_WARN_RL(&rl, "OpenFlow message bucket length "
  ------------------
  |  |  224|  3.81k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  3.81k|    do {                                                                \
  |  |  |  |  288|  3.81k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  3.81k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 3.81k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  3.81k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 3.81k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1417|  3.81k|                         "%"PRIuSIZE" exceeds remaining buckets data size %"
 1418|  3.81k|                         PRIuSIZE, ob_len, buckets_length);
 1419|  3.81k|            goto err;
 1420|  20.3k|        } else if (actions_len > ob_len - sizeof *ob) {
  ------------------
  |  Branch (1420:20): [True: 2.36k, False: 18.0k]
  ------------------
 1421|  2.36k|            VLOG_WARN_RL(&rl, "OpenFlow message bucket actions "
  ------------------
  |  |  224|  2.36k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  2.36k|    do {                                                                \
  |  |  |  |  288|  2.36k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  2.36k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 2.36k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  2.36k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 2.36k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1422|  2.36k|                         "length %"PRIuSIZE" exceeds remaining bucket "
 1423|  2.36k|                         "data size %"PRIuSIZE, actions_len,
 1424|  2.36k|                         ob_len - sizeof *ob);
 1425|  2.36k|            goto err;
 1426|  2.36k|        }
 1427|  18.0k|        buckets_length -= ob_len;
 1428|       |
 1429|  18.0k|        err = ofpacts_pull_openflow_actions(msg, actions_len, version,
 1430|  18.0k|                                            NULL, NULL, &ofpacts);
 1431|  18.0k|        if (err) {
  ------------------
  |  Branch (1431:13): [True: 4.36k, False: 13.6k]
  ------------------
 1432|  4.36k|            goto err;
 1433|  4.36k|        }
 1434|       |
 1435|  13.6k|        properties_len = ob_len - sizeof *ob - actions_len;
 1436|  13.6k|        struct ofpbuf properties = ofpbuf_const_initializer(
 1437|  13.6k|            ofpbuf_pull(msg, properties_len), properties_len);
 1438|  26.5k|        while (properties.size > 0) {
  ------------------
  |  Branch (1438:16): [True: 17.5k, False: 9.00k]
  ------------------
 1439|  17.5k|            struct ofpbuf payload;
 1440|  17.5k|            uint64_t type;
 1441|       |
 1442|  17.5k|            err = ofpprop_pull(&properties, &payload, &type);
 1443|  17.5k|            if (err) {
  ------------------
  |  Branch (1443:17): [True: 3.94k, False: 13.6k]
  ------------------
 1444|  3.94k|                goto err;
 1445|  3.94k|            }
 1446|       |
 1447|  13.6k|            switch (type) {
 1448|  7.27k|            case OFPGBPT15_WEIGHT:
  ------------------
  |  Branch (1448:13): [True: 7.27k, False: 6.35k]
  ------------------
 1449|  7.27k|                err = ofpprop_parse_be16(&payload, &weight);
 1450|  7.27k|                break;
 1451|       |
 1452|  5.85k|            case OFPGBPT15_WATCH_PORT:
  ------------------
  |  Branch (1452:13): [True: 5.85k, False: 7.77k]
  ------------------
 1453|  5.85k|                err = ofpprop_parse_be32(&payload, &watch_port);
 1454|  5.85k|                break;
 1455|       |
 1456|    203|            case OFPGBPT15_WATCH_GROUP:
  ------------------
  |  Branch (1456:13): [True: 203, False: 13.4k]
  ------------------
 1457|    203|                err = ofpprop_parse_be32(&payload, &watch_group);
 1458|    203|                break;
 1459|       |
 1460|    294|            default:
  ------------------
  |  Branch (1460:13): [True: 294, False: 13.3k]
  ------------------
 1461|    294|                err = OFPPROP_UNKNOWN(false, "group bucket", type);
  ------------------
  |  |  144|    294|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
 1462|    294|                break;
 1463|  13.6k|            }
 1464|       |
 1465|  13.6k|            if (err) {
  ------------------
  |  Branch (1465:17): [True: 719, False: 12.9k]
  ------------------
 1466|    719|                goto err;
 1467|    719|            }
 1468|  13.6k|        }
 1469|       |
 1470|  9.00k|        bucket = xzalloc(sizeof *bucket);
 1471|       |
 1472|  9.00k|        bucket->weight = ntohs(weight);
 1473|  9.00k|        err = ofputil_port_from_ofp11(watch_port, &bucket->watch_port);
 1474|  9.00k|        if (err) {
  ------------------
  |  Branch (1474:13): [True: 2.15k, False: 6.85k]
  ------------------
 1475|  2.15k|            err = OFPERR_OFPGMFC_BAD_WATCH;
 1476|  2.15k|            goto err;
 1477|  2.15k|        }
 1478|  6.85k|        bucket->watch_group = ntohl(watch_group);
 1479|  6.85k|        bucket->bucket_id = ntohl(ob->bucket_id);
 1480|  6.85k|        if (bucket->bucket_id > OFPG15_BUCKET_MAX) {
  ------------------
  |  Branch (1480:13): [True: 979, False: 5.87k]
  ------------------
 1481|    979|            VLOG_WARN_RL(&rl, "bucket id (%u) is out of range",
  ------------------
  |  |  224|    979|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    979|    do {                                                                \
  |  |  |  |  288|    979|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    979|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 979]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    979|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 979]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1482|    979|                         bucket->bucket_id);
 1483|    979|            err = OFPERR_OFPGMFC_BAD_BUCKET;
 1484|    979|            goto err;
 1485|    979|        }
 1486|       |
 1487|  5.87k|        bucket->ofpacts = ofpbuf_steal_data(&ofpacts);
 1488|  5.87k|        bucket->ofpacts_len = ofpacts.size;
 1489|  5.87k|        ovs_list_push_back(buckets, &bucket->list_node);
 1490|       |
 1491|  5.87k|        continue;
 1492|       |
 1493|  18.8k|    err:
 1494|  18.8k|        free(bucket);
 1495|  18.8k|        ofpbuf_uninit(&ofpacts);
 1496|  18.8k|        ofputil_bucket_list_destroy(buckets);
 1497|  18.8k|        return err;
 1498|  6.85k|    }
 1499|       |
 1500|  20.6k|    if (ofputil_bucket_check_duplicate_id(buckets)) {
  ------------------
  |  Branch (1500:9): [True: 214, False: 20.4k]
  ------------------
 1501|    214|        VLOG_WARN_RL(&rl, "Duplicate bucket id");
  ------------------
  |  |  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]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1502|    214|        ofputil_bucket_list_destroy(buckets);
 1503|    214|        return OFPERR_OFPGMFC_BAD_BUCKET;
 1504|    214|    }
 1505|       |
 1506|  20.4k|    return 0;
 1507|  20.6k|}
ofp-group.c:parse_ofp15_group_properties:
 1649|  20.4k|{
 1650|  20.4k|    struct ofpbuf properties = ofpbuf_const_initializer(
 1651|  20.4k|        ofpbuf_pull(msg, properties_len), properties_len);
 1652|  23.3k|    while (properties.size > 0) {
  ------------------
  |  Branch (1652:12): [True: 18.4k, False: 4.98k]
  ------------------
 1653|  18.4k|        struct ofpbuf payload;
 1654|  18.4k|        enum ofperr error;
 1655|  18.4k|        uint64_t type;
 1656|       |
 1657|  18.4k|        error = ofpprop_pull(&properties, &payload, &type);
 1658|  18.4k|        if (error) {
  ------------------
  |  Branch (1658:13): [True: 1.13k, False: 17.2k]
  ------------------
 1659|  1.13k|            return error;
 1660|  1.13k|        }
 1661|       |
 1662|  17.2k|        switch (type) {
 1663|    329|        case OFPPROP_EXP(NTR_VENDOR_ID, NTRT_SELECTION_METHOD):
  ------------------
  |  |   67|    329|    (((uint64_t) (EXP_ID) << 32) | (EXP_TYPE))
  ------------------
  |  Branch (1663:9): [True: 329, False: 16.9k]
  ------------------
 1664|  12.0k|        case OFPPROP_EXP(NTR_COMPAT_VENDOR_ID, NTRT_SELECTION_METHOD):
  ------------------
  |  |   67|  12.0k|    (((uint64_t) (EXP_ID) << 32) | (EXP_TYPE))
  ------------------
  |  Branch (1664:9): [True: 11.7k, False: 5.58k]
  ------------------
 1665|  12.0k|            error = parse_group_prop_ntr_selection_method(&payload, group_type,
 1666|  12.0k|                                                          group_cmd, gp);
 1667|  12.0k|            break;
 1668|       |
 1669|  5.25k|        default:
  ------------------
  |  Branch (1669:9): [True: 5.25k, False: 12.0k]
  ------------------
 1670|  5.25k|            error = OFPPROP_UNKNOWN(false, "group", type);
  ------------------
  |  |  144|  5.25k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
 1671|  5.25k|            break;
 1672|  17.2k|        }
 1673|       |
 1674|  17.2k|        if (error) {
  ------------------
  |  Branch (1674:13): [True: 14.3k, False: 2.91k]
  ------------------
 1675|  14.3k|            return error;
 1676|  14.3k|        }
 1677|  17.2k|    }
 1678|       |
 1679|  4.98k|    return 0;
 1680|  20.4k|}
ofp-group.c:parse_group_prop_ntr_selection_method:
 1559|  12.0k|{
 1560|  12.0k|    struct ntr_group_prop_selection_method *prop = payload->data;
 1561|  12.0k|    size_t fields_len, method_len;
 1562|  12.0k|    enum ofperr error;
 1563|       |
 1564|  12.0k|    switch (group_type) {
 1565|  11.0k|    case OFPGT11_SELECT:
  ------------------
  |  Branch (1565:5): [True: 11.0k, False: 942]
  ------------------
 1566|  11.0k|        break;
 1567|     76|    case OFPGT11_ALL:
  ------------------
  |  Branch (1567:5): [True: 76, False: 11.9k]
  ------------------
 1568|    120|    case OFPGT11_INDIRECT:
  ------------------
  |  Branch (1568:5): [True: 44, False: 11.9k]
  ------------------
 1569|    141|    case OFPGT11_FF:
  ------------------
  |  Branch (1569:5): [True: 21, False: 12.0k]
  ------------------
 1570|    141|        OFPPROP_LOG(&rl, false, "ntr selection method property is "
  ------------------
  |  |  139|    141|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    141|    do {                                                                \
  |  |  |  |  288|    282|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 141]
  |  |  |  |  ------------------
  |  |  |  |  289|    141|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 141]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    141|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 141]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1571|    141|                    "only allowed for select groups");
 1572|    141|        return OFPERR_OFPBPC_BAD_VALUE;
 1573|    801|    default:
  ------------------
  |  Branch (1573:5): [True: 801, False: 11.2k]
  ------------------
 1574|    801|        return OFPERR_OFPGMFC_BAD_TYPE;
 1575|  12.0k|    }
 1576|       |
 1577|  11.0k|    switch (group_cmd) {
 1578|  6.80k|    case OFPGC15_ADD:
  ------------------
  |  Branch (1578:5): [True: 6.80k, False: 4.28k]
  ------------------
 1579|  9.70k|    case OFPGC15_MODIFY:
  ------------------
  |  Branch (1579:5): [True: 2.89k, False: 8.19k]
  ------------------
 1580|  9.84k|    case OFPGC15_ADD_OR_MOD:
  ------------------
  |  Branch (1580:5): [True: 140, False: 10.9k]
  ------------------
 1581|  9.84k|        break;
 1582|     34|    case OFPGC15_DELETE:
  ------------------
  |  Branch (1582:5): [True: 34, False: 11.0k]
  ------------------
 1583|     96|    case OFPGC15_INSERT_BUCKET:
  ------------------
  |  Branch (1583:5): [True: 62, False: 11.0k]
  ------------------
 1584|  1.04k|    case OFPGC15_REMOVE_BUCKET:
  ------------------
  |  Branch (1584:5): [True: 947, False: 10.1k]
  ------------------
 1585|  1.04k|        OFPPROP_LOG(&rl, false, "ntr selection method property is "
  ------------------
  |  |  139|  1.04k|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.04k|    do {                                                                \
  |  |  |  |  288|  2.08k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 1.04k]
  |  |  |  |  ------------------
  |  |  |  |  289|  1.04k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.04k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.04k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.04k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1586|  1.04k|                    "only allowed for add and delete group modifications");
 1587|  1.04k|        return OFPERR_OFPBPC_BAD_VALUE;
 1588|    202|    default:
  ------------------
  |  Branch (1588:5): [True: 202, False: 10.8k]
  ------------------
 1589|    202|        return OFPERR_OFPGMFC_BAD_COMMAND;
 1590|  11.0k|    }
 1591|       |
 1592|  9.84k|    if (payload->size < sizeof *prop) {
  ------------------
  |  Branch (1592:9): [True: 24, False: 9.81k]
  ------------------
 1593|     24|        OFPPROP_LOG(&rl, false, "ntr selection method property "
  ------------------
  |  |  139|     24|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     24|    do {                                                                \
  |  |  |  |  288|     48|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 24]
  |  |  |  |  ------------------
  |  |  |  |  289|     24|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 24]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     24|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 24]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1594|     24|                    "length %u is not valid", payload->size);
 1595|     24|        return OFPERR_OFPBPC_BAD_LEN;
 1596|     24|    }
 1597|       |
 1598|  9.81k|    method_len = strnlen(prop->selection_method, NTR_MAX_SELECTION_METHOD_LEN);
  ------------------
  |  |   34|  9.81k|#define NTR_MAX_SELECTION_METHOD_LEN 16
  ------------------
 1599|       |
 1600|  9.81k|    if (method_len == NTR_MAX_SELECTION_METHOD_LEN) {
  ------------------
  |  |   34|  9.81k|#define NTR_MAX_SELECTION_METHOD_LEN 16
  ------------------
  |  Branch (1600:9): [True: 12, False: 9.80k]
  ------------------
 1601|     12|        OFPPROP_LOG(&rl, false,
  ------------------
  |  |  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]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1602|     12|                    "ntr selection method is not null terminated");
 1603|     12|        return OFPERR_OFPBPC_BAD_VALUE;
 1604|     12|    }
 1605|       |
 1606|  9.80k|    if (strcmp("hash", prop->selection_method)
  ------------------
  |  Branch (1606:9): [True: 4.26k, False: 5.54k]
  ------------------
 1607|  4.26k|        && strcmp("dp_hash", prop->selection_method)) {
  ------------------
  |  Branch (1607:12): [True: 4.24k, False: 14]
  ------------------
 1608|  4.24k|        OFPPROP_LOG(&rl, false,
  ------------------
  |  |  139|  4.24k|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  4.24k|    do {                                                                \
  |  |  |  |  288|  8.49k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 4.24k]
  |  |  |  |  ------------------
  |  |  |  |  289|  4.24k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 4.24k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  4.24k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 4.24k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1609|  4.24k|                    "ntr selection method '%s' is not supported",
 1610|  4.24k|                    prop->selection_method);
 1611|  4.24k|        return OFPERR_OFPBPC_BAD_VALUE;
 1612|  4.24k|    }
 1613|       |    /* 'method_len' is now non-zero. */
 1614|       |
 1615|  5.56k|    strcpy(gp->selection_method, prop->selection_method);
 1616|  5.56k|    gp->selection_method_param = ntohll(prop->selection_method_param);
 1617|       |
 1618|  5.56k|    ofpbuf_pull(payload, sizeof *prop);
 1619|       |
 1620|  5.56k|    fields_len = ntohs(prop->length) - sizeof *prop;
 1621|  5.56k|    if (fields_len && strcmp("hash", gp->selection_method)) {
  ------------------
  |  Branch (1621:9): [True: 5.49k, False: 68]
  |  Branch (1621:23): [True: 12, False: 5.48k]
  ------------------
 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|  5.54k|    if (fields_len > 0) {
  ------------------
  |  Branch (1627:9): [True: 5.48k, False: 68]
  ------------------
 1628|  5.48k|        error = oxm_pull_field_array(payload->data, fields_len,
 1629|  5.48k|                &gp->fields);
 1630|  5.48k|        if (error) {
  ------------------
  |  Branch (1630:13): [True: 2.62k, False: 2.85k]
  ------------------
 1631|  2.62k|            OFPPROP_LOG(&rl, false,
  ------------------
  |  |  139|  2.62k|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  2.62k|    do {                                                                \
  |  |  |  |  288|  5.25k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 2.62k]
  |  |  |  |  ------------------
  |  |  |  |  289|  2.62k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 2.62k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  2.62k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 2.62k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1632|  2.62k|                    "ntr selection method fields are invalid");
 1633|  2.62k|            return error;
 1634|  2.62k|        }
 1635|  5.48k|    } else {
 1636|       |        /* Selection_method "hash: w/o fields means default hash method. */
 1637|     68|        gp->fields.values_size = 0;
 1638|     68|    }
 1639|       |
 1640|  2.91k|    return 0;
 1641|  5.54k|}
ofp-group.c:ofp_print_bucket_id:
 1816|  6.47k|{
 1817|  6.47k|    if (ofp_version > OFP10_VERSION && ofp_version < OFP15_VERSION) {
  ------------------
  |  Branch (1817:9): [True: 6.11k, False: 352]
  |  Branch (1817:40): [True: 2.14k, False: 3.97k]
  ------------------
 1818|  2.14k|        return;
 1819|  2.14k|    }
 1820|       |
 1821|  4.32k|    ds_put_cstr(s, label);
 1822|       |
 1823|  4.32k|    switch (bucket_id) {
 1824|     67|    case OFPG15_BUCKET_FIRST:
  ------------------
  |  Branch (1824:5): [True: 67, False: 4.25k]
  ------------------
 1825|     67|        ds_put_cstr(s, "first");
 1826|     67|        break;
 1827|    619|    case OFPG15_BUCKET_LAST:
  ------------------
  |  Branch (1827:5): [True: 619, False: 3.70k]
  ------------------
 1828|    619|        ds_put_cstr(s, "last");
 1829|    619|        break;
 1830|     97|    case OFPG15_BUCKET_ALL:
  ------------------
  |  Branch (1830:5): [True: 97, False: 4.22k]
  ------------------
 1831|     97|        ds_put_cstr(s, "all");
 1832|     97|        break;
 1833|  3.54k|    default:
  ------------------
  |  Branch (1833:5): [True: 3.54k, False: 783]
  ------------------
 1834|  3.54k|        ds_put_format(s, "%"PRIu32, bucket_id);
 1835|  3.54k|        break;
 1836|  4.32k|    }
 1837|       |
 1838|  4.32k|    ds_put_char(s, ',');
 1839|  4.32k|}
ofp-group.c:ofputil_pull_ofp11_group_mod:
 2152|  14.2k|{
 2153|  14.2k|    const struct ofp11_group_mod *ogm;
 2154|  14.2k|    enum ofperr error;
 2155|       |
 2156|  14.2k|    ogm = ofpbuf_pull(msg, sizeof *ogm);
 2157|  14.2k|    gm->command = ntohs(ogm->command);
 2158|  14.2k|    gm->type = ogm->type;
 2159|  14.2k|    gm->group_id = ntohl(ogm->group_id);
 2160|  14.2k|    gm->command_bucket_id = OFPG15_BUCKET_ALL;
 2161|       |
 2162|  14.2k|    error = ofputil_pull_ofp11_buckets(msg, msg->size, ofp_version,
 2163|  14.2k|                                       &gm->buckets);
 2164|       |
 2165|       |    /* OF1.3.5+ prescribes an error when an OFPGC_DELETE includes buckets. */
 2166|  14.2k|    if (!error
  ------------------
  |  Branch (2166:9): [True: 9.52k, False: 4.71k]
  ------------------
 2167|  9.52k|        && ofp_version >= OFP13_VERSION
  ------------------
  |  Branch (2167:12): [True: 5.29k, False: 4.23k]
  ------------------
 2168|  5.29k|        && gm->command == OFPGC11_DELETE
  ------------------
  |  Branch (2168:12): [True: 168, False: 5.12k]
  ------------------
 2169|    168|        && !ovs_list_is_empty(&gm->buckets)) {
  ------------------
  |  Branch (2169:12): [True: 39, False: 129]
  ------------------
 2170|     39|        error = OFPERR_OFPGMFC_INVALID_GROUP;
 2171|     39|        ofputil_bucket_list_destroy(&gm->buckets);
 2172|     39|    }
 2173|       |
 2174|  14.2k|    return error;
 2175|  14.2k|}
ofp-group.c:ofputil_pull_ofp15_group_mod:
 2180|  43.6k|{
 2181|  43.6k|    const struct ofp15_group_mod *ogm;
 2182|  43.6k|    uint16_t bucket_list_len;
 2183|  43.6k|    enum ofperr error = OFPERR_OFPGMFC_BAD_BUCKET;
 2184|       |
 2185|  43.6k|    ogm = ofpbuf_pull(msg, sizeof *ogm);
 2186|  43.6k|    gm->command = ntohs(ogm->command);
 2187|  43.6k|    gm->type = ogm->type;
 2188|  43.6k|    gm->group_id = ntohl(ogm->group_id);
 2189|       |
 2190|  43.6k|    gm->command_bucket_id = ntohl(ogm->command_bucket_id);
 2191|  43.6k|    switch (gm->command) {
 2192|  19.1k|    case OFPGC15_REMOVE_BUCKET:
  ------------------
  |  Branch (2192:5): [True: 19.1k, False: 24.5k]
  ------------------
 2193|  19.1k|        if (gm->command_bucket_id == OFPG15_BUCKET_ALL) {
  ------------------
  |  Branch (2193:13): [True: 1.07k, False: 18.0k]
  ------------------
 2194|  1.07k|            error = 0;
 2195|  1.07k|        }
 2196|       |        /* Fall through */
 2197|  23.0k|    case OFPGC15_INSERT_BUCKET:
  ------------------
  |  Branch (2197:5): [True: 3.86k, False: 39.8k]
  ------------------
 2198|  23.0k|        if (gm->command_bucket_id <= OFPG15_BUCKET_MAX ||
  ------------------
  |  Branch (2198:13): [True: 21.1k, False: 1.87k]
  ------------------
 2199|  1.87k|            gm->command_bucket_id == OFPG15_BUCKET_FIRST
  ------------------
  |  Branch (2199:13): [True: 70, False: 1.80k]
  ------------------
 2200|  21.9k|            || gm->command_bucket_id == OFPG15_BUCKET_LAST) {
  ------------------
  |  Branch (2200:16): [True: 697, False: 1.10k]
  ------------------
 2201|  21.9k|            error = 0;
 2202|  21.9k|        }
 2203|  23.0k|        break;
 2204|       |
 2205|  13.5k|    case OFPGC11_ADD:
  ------------------
  |  Branch (2205:5): [True: 13.5k, False: 30.1k]
  ------------------
 2206|  16.5k|    case OFPGC11_MODIFY:
  ------------------
  |  Branch (2206:5): [True: 2.98k, False: 40.7k]
  ------------------
 2207|  16.7k|    case OFPGC11_ADD_OR_MOD:
  ------------------
  |  Branch (2207:5): [True: 271, False: 43.4k]
  ------------------
 2208|  16.8k|    case OFPGC11_DELETE:
  ------------------
  |  Branch (2208:5): [True: 37, False: 43.6k]
  ------------------
 2209|  20.6k|    default:
  ------------------
  |  Branch (2209:5): [True: 3.83k, False: 39.8k]
  ------------------
 2210|  20.6k|        if (gm->command_bucket_id == OFPG15_BUCKET_ALL) {
  ------------------
  |  Branch (2210:13): [True: 16.3k, False: 4.36k]
  ------------------
 2211|  16.3k|            error = 0;
 2212|  16.3k|        }
 2213|  20.6k|        break;
 2214|  43.6k|    }
 2215|  43.6k|    if (error) {
  ------------------
  |  Branch (2215:9): [True: 4.39k, False: 39.2k]
  ------------------
 2216|  4.39k|        VLOG_WARN_RL(&rl,
  ------------------
  |  |  224|  4.39k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  4.39k|    do {                                                                \
  |  |  |  |  288|  4.39k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  4.39k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 4.39k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  4.39k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 4.39k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2217|  4.39k|                     "group command bucket id (%u) is out of range",
 2218|  4.39k|                     gm->command_bucket_id);
 2219|  4.39k|        return OFPERR_OFPGMFC_BAD_BUCKET;
 2220|  4.39k|    }
 2221|       |
 2222|  39.2k|    bucket_list_len = ntohs(ogm->bucket_array_len);
 2223|  39.2k|    if (bucket_list_len > msg->size) {
  ------------------
  |  Branch (2223:9): [True: 1.83k, False: 37.4k]
  ------------------
 2224|  1.83k|        return OFPERR_OFPBRC_BAD_LEN;
 2225|  1.83k|    }
 2226|  37.4k|    error = ofputil_pull_ofp15_buckets(msg, bucket_list_len, ofp_version,
 2227|  37.4k|                                       gm->type, &gm->buckets);
 2228|  37.4k|    if (error) {
  ------------------
  |  Branch (2228:9): [True: 17.5k, False: 19.9k]
  ------------------
 2229|  17.5k|        return error;
 2230|  17.5k|    }
 2231|       |
 2232|  19.9k|    error = parse_ofp15_group_properties(msg, gm->type, gm->command,
 2233|  19.9k|                                         &gm->props, msg->size);
 2234|  19.9k|    if (error) {
  ------------------
  |  Branch (2234:9): [True: 15.1k, False: 4.81k]
  ------------------
 2235|  15.1k|        ofputil_uninit_group_mod(gm);
 2236|  15.1k|    }
 2237|  19.9k|    return error;
 2238|  37.4k|}
ofp-group.c:ofputil_check_group_mod:
 2242|  14.3k|{
 2243|  14.3k|    switch (gm->type) {
 2244|  2.42k|    case OFPGT11_INDIRECT:
  ------------------
  |  Branch (2244:5): [True: 2.42k, False: 11.8k]
  ------------------
 2245|  2.42k|        if (gm->command != OFPGC11_DELETE
  ------------------
  |  Branch (2245:13): [True: 1.76k, False: 659]
  ------------------
 2246|  1.76k|            && !ovs_list_is_singleton(&gm->buckets) ) {
  ------------------
  |  Branch (2246:16): [True: 403, False: 1.35k]
  ------------------
 2247|    403|            return OFPERR_OFPGMFC_INVALID_GROUP;
 2248|    403|        }
 2249|  2.01k|        break;
 2250|  3.47k|    case OFPGT11_ALL:
  ------------------
  |  Branch (2250:5): [True: 3.47k, False: 10.8k]
  ------------------
 2251|  6.52k|    case OFPGT11_SELECT:
  ------------------
  |  Branch (2251:5): [True: 3.05k, False: 11.2k]
  ------------------
 2252|  9.19k|    case OFPGT11_FF:
  ------------------
  |  Branch (2252:5): [True: 2.67k, False: 11.6k]
  ------------------
 2253|  9.19k|        break;
 2254|  2.68k|    default:
  ------------------
  |  Branch (2254:5): [True: 2.68k, False: 11.6k]
  ------------------
 2255|  2.68k|        return OFPERR_OFPGMFC_BAD_TYPE;
 2256|  14.3k|    }
 2257|       |
 2258|  11.2k|    switch (gm->command) {
 2259|  4.48k|    case OFPGC11_ADD:
  ------------------
  |  Branch (2259:5): [True: 4.48k, False: 6.72k]
  ------------------
 2260|  6.20k|    case OFPGC11_MODIFY:
  ------------------
  |  Branch (2260:5): [True: 1.71k, False: 9.50k]
  ------------------
 2261|  6.58k|    case OFPGC11_ADD_OR_MOD:
  ------------------
  |  Branch (2261:5): [True: 380, False: 10.8k]
  ------------------
 2262|  7.34k|    case OFPGC11_DELETE:
  ------------------
  |  Branch (2262:5): [True: 764, False: 10.4k]
  ------------------
 2263|  9.77k|    case OFPGC15_INSERT_BUCKET:
  ------------------
  |  Branch (2263:5): [True: 2.42k, False: 8.79k]
  ------------------
 2264|  9.77k|        break;
 2265|    409|    case OFPGC15_REMOVE_BUCKET:
  ------------------
  |  Branch (2265:5): [True: 409, False: 10.8k]
  ------------------
 2266|    409|        if (!ovs_list_is_empty(&gm->buckets)) {
  ------------------
  |  Branch (2266:13): [True: 67, False: 342]
  ------------------
 2267|     67|            return OFPERR_OFPGMFC_BAD_BUCKET;
 2268|     67|        }
 2269|    342|        break;
 2270|  1.03k|    default:
  ------------------
  |  Branch (2270:5): [True: 1.03k, False: 10.1k]
  ------------------
 2271|  1.03k|        return OFPERR_OFPGMFC_BAD_COMMAND;
 2272|  11.2k|    }
 2273|       |
 2274|  10.1k|    struct ofputil_bucket *bucket;
 2275|  10.1k|    LIST_FOR_EACH (bucket, list_node, &gm->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|  13.8k|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  185|  13.8k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 5.08k, False: 8.77k]
  |  |  |  |  |  Branch (185:6): [True: 5.08k, False: 8.77k]
  |  |  |  |  ------------------
  |  |  |  |  186|  13.8k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  5.08k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|  5.08k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|  5.08k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  13.8k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   78|  10.1k|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->next))
  |  |  ------------------
  |  |  |  |  193|  3.74k|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  3.74k|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2276|  5.08k|        if (bucket->weight && gm->type != OFPGT11_SELECT
  ------------------
  |  Branch (2276:13): [True: 681, False: 4.40k]
  |  Branch (2276:31): [True: 509, False: 172]
  ------------------
 2277|    509|            && gm->command != OFPGC15_INSERT_BUCKET) {
  ------------------
  |  Branch (2277:16): [True: 269, False: 240]
  ------------------
 2278|    269|            return OFPERR_OFPGMFC_INVALID_GROUP;
 2279|    269|        }
 2280|       |
 2281|  4.81k|        switch (gm->type) {
 2282|  2.04k|        case OFPGT11_ALL:
  ------------------
  |  Branch (2282:9): [True: 2.04k, False: 2.77k]
  ------------------
 2283|  2.96k|        case OFPGT11_INDIRECT:
  ------------------
  |  Branch (2283:9): [True: 918, False: 3.89k]
  ------------------
 2284|  2.96k|            if (ofputil_bucket_has_liveness(bucket)) {
  ------------------
  |  Branch (2284:17): [True: 488, False: 2.47k]
  ------------------
 2285|    488|                return OFPERR_OFPGMFC_WATCH_UNSUPPORTED;
 2286|    488|            }
 2287|  2.47k|            break;
 2288|  2.47k|        case OFPGT11_SELECT:
  ------------------
  |  Branch (2288:9): [True: 883, False: 3.93k]
  ------------------
 2289|    883|            break;
 2290|    969|        case OFPGT11_FF:
  ------------------
  |  Branch (2290:9): [True: 969, False: 3.84k]
  ------------------
 2291|    969|            if (!ofputil_bucket_has_liveness(bucket)) {
  ------------------
  |  Branch (2291:17): [True: 583, False: 386]
  ------------------
 2292|    583|                return OFPERR_OFPGMFC_INVALID_GROUP;
 2293|    583|            }
 2294|    386|            break;
 2295|    386|        default:
  ------------------
  |  Branch (2295:9): [True: 0, False: 4.81k]
  ------------------
 2296|       |            /* Returning BAD TYPE to be consistent
 2297|       |             * though gm->type has been checked already. */
 2298|      0|            return OFPERR_OFPGMFC_BAD_TYPE;
 2299|  4.81k|        }
 2300|  4.81k|    }
 2301|       |
 2302|  8.77k|    return 0;
 2303|  10.1k|}

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

ofputil_wildcard_from_ofpfw10:
   67|  52.7k|{
   68|  52.7k|    BUILD_ASSERT_DECL(FLOW_WC_SEQ == 43);
  ------------------
  |  |  270|  52.7k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  ------------------
   69|       |
   70|       |    /* Initialize most of wc. */
   71|  52.7k|    flow_wildcards_init_catchall(wc);
   72|       |
   73|  52.7k|    if (!(ofpfw & OFPFW10_IN_PORT)) {
  ------------------
  |  Branch (73:9): [True: 39.8k, False: 12.8k]
  ------------------
   74|  39.8k|        wc->masks.in_port.ofp_port = u16_to_ofp(UINT16_MAX);
   75|  39.8k|    }
   76|       |
   77|  52.7k|    if (!(ofpfw & OFPFW10_NW_TOS)) {
  ------------------
  |  Branch (77:9): [True: 39.5k, False: 13.1k]
  ------------------
   78|  39.5k|        wc->masks.nw_tos |= IP_DSCP_MASK;
  ------------------
  |  |  724|  39.5k|#define IP_DSCP_MASK 0xfc
  ------------------
   79|  39.5k|    }
   80|       |
   81|  52.7k|    if (!(ofpfw & OFPFW10_NW_PROTO)) {
  ------------------
  |  Branch (81:9): [True: 37.8k, False: 14.8k]
  ------------------
   82|  37.8k|        wc->masks.nw_proto = UINT8_MAX;
   83|  37.8k|    }
   84|  52.7k|    wc->masks.nw_src = ofputil_wcbits_to_netmask(ofpfw
   85|  52.7k|                                                 >> OFPFW10_NW_SRC_SHIFT);
   86|  52.7k|    wc->masks.nw_dst = ofputil_wcbits_to_netmask(ofpfw
   87|  52.7k|                                                 >> OFPFW10_NW_DST_SHIFT);
   88|       |
   89|  52.7k|    if (!(ofpfw & OFPFW10_TP_SRC)) {
  ------------------
  |  Branch (89:9): [True: 35.3k, False: 17.3k]
  ------------------
   90|  35.3k|        wc->masks.tp_src = OVS_BE16_MAX;
  ------------------
  |  |   42|  35.3k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
   91|  35.3k|    }
   92|  52.7k|    if (!(ofpfw & OFPFW10_TP_DST)) {
  ------------------
  |  Branch (92:9): [True: 37.5k, False: 15.1k]
  ------------------
   93|  37.5k|        wc->masks.tp_dst = OVS_BE16_MAX;
  ------------------
  |  |   42|  37.5k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
   94|  37.5k|    }
   95|       |
   96|  52.7k|    if (!(ofpfw & OFPFW10_DL_SRC)) {
  ------------------
  |  Branch (96:9): [True: 41.0k, False: 11.7k]
  ------------------
   97|  41.0k|        WC_MASK_FIELD(wc, dl_src);
  ------------------
  |  |  201|  41.0k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
   98|  41.0k|    }
   99|  52.7k|    if (!(ofpfw & OFPFW10_DL_DST)) {
  ------------------
  |  Branch (99:9): [True: 34.7k, False: 17.9k]
  ------------------
  100|  34.7k|        WC_MASK_FIELD(wc, dl_dst);
  ------------------
  |  |  201|  34.7k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
  101|  34.7k|    }
  102|  52.7k|    if (!(ofpfw & OFPFW10_DL_TYPE)) {
  ------------------
  |  Branch (102:9): [True: 42.8k, False: 9.88k]
  ------------------
  103|  42.8k|        wc->masks.dl_type = OVS_BE16_MAX;
  ------------------
  |  |   42|  42.8k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  104|  42.8k|    }
  105|       |
  106|       |    /* VLAN TCI mask. */
  107|  52.7k|    if (!(ofpfw & OFPFW10_DL_VLAN_PCP)) {
  ------------------
  |  Branch (107:9): [True: 40.9k, False: 11.7k]
  ------------------
  108|  40.9k|        wc->masks.vlans[0].tci |= htons(VLAN_PCP_MASK | VLAN_CFI);
  109|  40.9k|    }
  110|  52.7k|    if (!(ofpfw & OFPFW10_DL_VLAN)) {
  ------------------
  |  Branch (110:9): [True: 32.4k, False: 20.2k]
  ------------------
  111|       |        wc->masks.vlans[0].tci |= htons(VLAN_VID_MASK | VLAN_CFI);
  112|  32.4k|    }
  113|  52.7k|}
ofputil_match_from_ofp10_match:
  119|  52.7k|{
  120|  52.7k|    uint32_t ofpfw = ntohl(ofmatch->wildcards) & OFPFW10_ALL;
  121|       |
  122|       |    /* Initialize match->wc. */
  123|  52.7k|    memset(&match->flow, 0, sizeof match->flow);
  124|  52.7k|    ofputil_wildcard_from_ofpfw10(ofpfw, &match->wc);
  125|  52.7k|    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|  52.7k|    const uint32_t ofpfw_data_bits = (OFPFW10_NW_TOS | OFPFW10_NW_PROTO
  130|  52.7k|                                      | OFPFW10_TP_SRC | OFPFW10_TP_DST
  131|  52.7k|                                      | OFPFW10_DL_SRC | OFPFW10_DL_DST
  132|  52.7k|                                      | OFPFW10_DL_TYPE
  133|  52.7k|                                      | OFPFW10_DL_VLAN | OFPFW10_DL_VLAN_PCP);
  134|  52.7k|    if ((ofpfw & ofpfw_data_bits) != ofpfw_data_bits
  ------------------
  |  Branch (134:9): [True: 50.4k, False: 2.23k]
  ------------------
  135|  2.23k|        || ofputil_wcbits_to_netmask(ofpfw >> OFPFW10_NW_SRC_SHIFT)
  ------------------
  |  Branch (135:12): [True: 203, False: 2.03k]
  ------------------
  136|  50.6k|        || ofputil_wcbits_to_netmask(ofpfw >> OFPFW10_NW_DST_SHIFT)) {
  ------------------
  |  Branch (136:12): [True: 20, False: 2.01k]
  ------------------
  137|  50.6k|        match_set_default_packet_type(match);
  138|  50.6k|    }
  139|       |
  140|       |    /* Initialize most of match->flow. */
  141|  52.7k|    match->flow.nw_src = ofmatch->nw_src;
  142|  52.7k|    match->flow.nw_dst = ofmatch->nw_dst;
  143|  52.7k|    match->flow.in_port.ofp_port = u16_to_ofp(ntohs(ofmatch->in_port));
  144|  52.7k|    match->flow.dl_type = ofputil_dl_type_from_openflow(ofmatch->dl_type);
  145|  52.7k|    match->flow.tp_src = ofmatch->tp_src;
  146|  52.7k|    match->flow.tp_dst = ofmatch->tp_dst;
  147|  52.7k|    match->flow.dl_src = ofmatch->dl_src;
  148|  52.7k|    match->flow.dl_dst = ofmatch->dl_dst;
  149|  52.7k|    match->flow.nw_tos = ofmatch->nw_tos & IP_DSCP_MASK;
  ------------------
  |  |  724|  52.7k|#define IP_DSCP_MASK 0xfc
  ------------------
  150|  52.7k|    match->flow.nw_proto = ofmatch->nw_proto;
  151|       |
  152|       |    /* Translate VLANs. */
  153|  52.7k|    if (!(ofpfw & OFPFW10_DL_VLAN) &&
  ------------------
  |  Branch (153:9): [True: 32.4k, False: 20.2k]
  ------------------
  154|  32.4k|        ofmatch->dl_vlan == htons(OFP10_VLAN_NONE)) {
  ------------------
  |  Branch (154:9): [True: 2.84k, False: 29.5k]
  ------------------
  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.84k|        match->flow.vlans[0].tci = htons(0);
  164|  2.84k|        match->wc.masks.vlans[0].tci = htons(0xffff);
  165|  49.8k|    } else {
  166|  49.8k|        ovs_be16 vid, pcp, tci;
  167|  49.8k|        uint16_t hpcp;
  168|       |
  169|  49.8k|        vid = ofmatch->dl_vlan & htons(VLAN_VID_MASK);
  170|  49.8k|        hpcp = (ofmatch->dl_vlan_pcp << VLAN_PCP_SHIFT) & VLAN_PCP_MASK;
  ------------------
  |  |  498|  49.8k|#define VLAN_PCP_SHIFT 13
  ------------------
                      hpcp = (ofmatch->dl_vlan_pcp << VLAN_PCP_SHIFT) & VLAN_PCP_MASK;
  ------------------
  |  |  497|  49.8k|#define VLAN_PCP_MASK 0xe000
  ------------------
  171|  49.8k|        pcp = htons(hpcp);
  172|  49.8k|        tci = vid | pcp | htons(VLAN_CFI);
  173|  49.8k|        match->flow.vlans[0].tci = tci & match->wc.masks.vlans[0].tci;
  174|  49.8k|    }
  175|       |
  176|       |    /* Clean up. */
  177|  52.7k|    match_zero_wildcarded_fields(match);
  178|  52.7k|}
ofputil_pull_ofp11_match:
  262|  60.9k|{
  263|  60.9k|    struct ofp11_match_header *omh = buf->data;
  264|  60.9k|    uint16_t match_len;
  265|       |
  266|  60.9k|    if (buf->size < sizeof *omh) {
  ------------------
  |  Branch (266:9): [True: 351, False: 60.5k]
  ------------------
  267|    351|        return OFPERR_OFPBMC_BAD_LEN;
  268|    351|    }
  269|       |
  270|  60.5k|    match_len = ntohs(omh->length);
  271|       |
  272|  60.5k|    switch (ntohs(omh->type)) {
  273|  9.46k|    case OFPMT_STANDARD: {
  ------------------
  |  Branch (273:5): [True: 9.46k, False: 51.1k]
  ------------------
  274|  9.46k|        struct ofp11_match *om;
  275|       |
  276|  9.46k|        if (match_len != sizeof *om || buf->size < sizeof *om) {
  ------------------
  |  Branch (276:13): [True: 1.89k, False: 7.57k]
  |  Branch (276:40): [True: 21, False: 7.54k]
  ------------------
  277|  1.91k|            return OFPERR_OFPBMC_BAD_LEN;
  278|  1.91k|        }
  279|  7.54k|        om = ofpbuf_pull(buf, sizeof *om);
  280|  7.54k|        if (padded_match_len) {
  ------------------
  |  Branch (280:13): [True: 131, False: 7.41k]
  ------------------
  281|    131|            *padded_match_len = match_len;
  282|    131|        }
  283|  7.54k|        return ofputil_match_from_ofp11_match(om, match);
  284|  9.46k|    }
  285|       |
  286|  44.6k|    case OFPMT_OXM:
  ------------------
  |  Branch (286:5): [True: 44.6k, False: 15.9k]
  ------------------
  287|  44.6k|        if (padded_match_len) {
  ------------------
  |  Branch (287:13): [True: 13.1k, False: 31.5k]
  ------------------
  288|  13.1k|            *padded_match_len = ROUND_UP(match_len, 8);
  ------------------
  |  |  303|  13.1k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|  13.1k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  289|  13.1k|        }
  290|  44.6k|        return oxm_pull_match(buf, false, tun_table, vl_mff_map, match);
  291|       |
  292|  6.44k|    default:
  ------------------
  |  Branch (292:5): [True: 6.44k, False: 54.1k]
  ------------------
  293|  6.44k|        return OFPERR_OFPBMC_BAD_TYPE;
  294|  60.5k|    }
  295|  60.5k|}
ofputil_match_from_ofp11_match:
  302|  7.54k|{
  303|  7.54k|    uint16_t wc = ntohl(ofmatch->wildcards);
  304|  7.54k|    bool ipv4, arp, rarp;
  305|       |
  306|  7.54k|    match_init_catchall(match);
  307|  7.54k|    match->flow.tunnel.metadata.tab = NULL;
  308|       |
  309|  7.54k|    if (!(wc & OFPFW11_IN_PORT)) {
  ------------------
  |  Branch (309:9): [True: 3.68k, False: 3.86k]
  ------------------
  310|  3.68k|        ofp_port_t ofp_port;
  311|  3.68k|        enum ofperr error;
  312|       |
  313|  3.68k|        error = ofputil_port_from_ofp11(ofmatch->in_port, &ofp_port);
  314|  3.68k|        if (error) {
  ------------------
  |  Branch (314:13): [True: 1.22k, False: 2.45k]
  ------------------
  315|  1.22k|            return OFPERR_OFPBMC_BAD_VALUE;
  316|  1.22k|        }
  317|  2.45k|        match_set_in_port(match, ofp_port);
  318|  2.45k|    }
  319|       |
  320|  6.32k|    struct eth_addr dl_src_mask = eth_addr_invert(ofmatch->dl_src_mask);
  321|  6.32k|    struct eth_addr dl_dst_mask = eth_addr_invert(ofmatch->dl_dst_mask);
  322|  6.32k|    if (!eth_addr_is_zero(dl_src_mask) || !eth_addr_is_zero(dl_dst_mask)) {
  ------------------
  |  Branch (322:9): [True: 6.03k, False: 288]
  |  Branch (322:43): [True: 242, False: 46]
  ------------------
  323|  6.27k|        match_set_dl_src_masked(match, ofmatch->dl_src, dl_src_mask);
  324|  6.27k|        match_set_dl_dst_masked(match, ofmatch->dl_dst, dl_dst_mask);
  325|  6.27k|        match_set_default_packet_type(match);
  326|  6.27k|    }
  327|       |
  328|  6.32k|    if (!(wc & OFPFW11_DL_VLAN)) {
  ------------------
  |  Branch (328:9): [True: 4.65k, False: 1.67k]
  ------------------
  329|  4.65k|        if (ofmatch->dl_vlan == htons(OFPVID11_NONE)) {
  ------------------
  |  Branch (329:13): [True: 2.02k, False: 2.62k]
  ------------------
  330|       |            /* Match only packets without a VLAN tag. */
  331|  2.02k|            match->flow.vlans[0].tci = htons(0);
  332|  2.02k|            match->wc.masks.vlans[0].tci = OVS_BE16_MAX;
  ------------------
  |  |   42|  2.02k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  333|  2.62k|        } else {
  334|  2.62k|            if (ofmatch->dl_vlan == htons(OFPVID11_ANY)) {
  ------------------
  |  Branch (334:17): [True: 504, False: 2.12k]
  ------------------
  335|       |                /* Match any packet with a VLAN tag regardless of VID. */
  336|    504|                match->flow.vlans[0].tci = htons(VLAN_CFI);
  337|    504|                match->wc.masks.vlans[0].tci = htons(VLAN_CFI);
  338|  2.12k|            } else if (ntohs(ofmatch->dl_vlan) < 4096) {
  ------------------
  |  Branch (338:24): [True: 1.92k, False: 195]
  ------------------
  339|       |                /* Match only packets with the specified VLAN VID. */
  340|  1.92k|                match->flow.vlans[0].tci = htons(VLAN_CFI) | ofmatch->dl_vlan;
  341|  1.92k|                match->wc.masks.vlans[0].tci = htons(VLAN_CFI | VLAN_VID_MASK);
  342|  1.92k|            } else {
  343|       |                /* Invalid VID. */
  344|    195|                return OFPERR_OFPBMC_BAD_VALUE;
  345|    195|            }
  346|       |
  347|  2.43k|            if (!(wc & OFPFW11_DL_VLAN_PCP)) {
  ------------------
  |  Branch (347:17): [True: 1.26k, False: 1.16k]
  ------------------
  348|  1.26k|                if (ofmatch->dl_vlan_pcp <= 7) {
  ------------------
  |  Branch (348:21): [True: 1.18k, False: 84]
  ------------------
  349|  1.18k|                    match->flow.vlans[0].tci |= htons(ofmatch->dl_vlan_pcp
  350|  1.18k|                                                  << VLAN_PCP_SHIFT);
  351|  1.18k|                    match->wc.masks.vlans[0].tci |= htons(VLAN_PCP_MASK);
  352|  1.18k|                } else {
  353|       |                    /* Invalid PCP. */
  354|     84|                    return OFPERR_OFPBMC_BAD_VALUE;
  355|     84|                }
  356|  1.26k|            }
  357|  2.43k|        }
  358|  4.37k|        match_set_default_packet_type(match);
  359|  4.37k|    }
  360|       |
  361|  6.04k|    if (!(wc & OFPFW11_DL_TYPE)) {
  ------------------
  |  Branch (361:9): [True: 5.14k, False: 897]
  ------------------
  362|  5.14k|        match_set_dl_type(match,
  363|  5.14k|                          ofputil_dl_type_from_openflow(ofmatch->dl_type));
  364|  5.14k|        match_set_default_packet_type(match);
  365|  5.14k|    }
  366|       |
  367|  6.04k|    ipv4 = match->flow.dl_type == htons(ETH_TYPE_IP);
  368|  6.04k|    arp = match->flow.dl_type == htons(ETH_TYPE_ARP);
  369|  6.04k|    rarp = match->flow.dl_type == htons(ETH_TYPE_RARP);
  370|       |
  371|  6.04k|    if (ipv4 && !(wc & OFPFW11_NW_TOS)) {
  ------------------
  |  Branch (371:9): [True: 1.79k, False: 4.24k]
  |  Branch (371:17): [True: 1.09k, False: 697]
  ------------------
  372|  1.09k|        if (ofmatch->nw_tos & ~IP_DSCP_MASK) {
  ------------------
  |  |  724|  1.09k|#define IP_DSCP_MASK 0xfc
  ------------------
  |  Branch (372:13): [True: 10, False: 1.08k]
  ------------------
  373|       |            /* Invalid TOS. */
  374|     10|            return OFPERR_OFPBMC_BAD_VALUE;
  375|     10|        }
  376|       |
  377|  1.08k|        match_set_nw_dscp(match, ofmatch->nw_tos);
  378|  1.08k|    }
  379|       |
  380|  6.03k|    if (ipv4 || arp || rarp) {
  ------------------
  |  Branch (380:9): [True: 1.78k, False: 4.24k]
  |  Branch (380:17): [True: 143, False: 4.10k]
  |  Branch (380:24): [True: 9, False: 4.09k]
  ------------------
  381|  1.93k|        if (!(wc & OFPFW11_NW_PROTO)) {
  ------------------
  |  Branch (381:13): [True: 1.46k, False: 472]
  ------------------
  382|  1.46k|            match_set_nw_proto(match, ofmatch->nw_proto);
  383|  1.46k|        }
  384|  1.93k|        match_set_nw_src_masked(match, ofmatch->nw_src, ~ofmatch->nw_src_mask);
  385|  1.93k|        match_set_nw_dst_masked(match, ofmatch->nw_dst, ~ofmatch->nw_dst_mask);
  386|  1.93k|    }
  387|       |
  388|  6.03k|#define OFPFW11_TP_ALL (OFPFW11_TP_SRC | OFPFW11_TP_DST)
  389|  6.03k|    if (ipv4 && (wc & OFPFW11_TP_ALL) != OFPFW11_TP_ALL) {
  ------------------
  |  |  388|  1.78k|#define OFPFW11_TP_ALL (OFPFW11_TP_SRC | OFPFW11_TP_DST)
  ------------------
                  if (ipv4 && (wc & OFPFW11_TP_ALL) != OFPFW11_TP_ALL) {
  ------------------
  |  |  388|  1.78k|#define OFPFW11_TP_ALL (OFPFW11_TP_SRC | OFPFW11_TP_DST)
  ------------------
  |  Branch (389:9): [True: 1.78k, False: 4.24k]
  |  Branch (389:17): [True: 1.12k, False: 666]
  ------------------
  390|  1.12k|        switch (match->flow.nw_proto) {
  391|    279|        case IPPROTO_ICMP:
  ------------------
  |  Branch (391:9): [True: 279, False: 841]
  ------------------
  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|    279|            if (!(wc & OFPFW11_TP_SRC)) {
  ------------------
  |  Branch (399:17): [True: 261, False: 18]
  ------------------
  400|    261|                uint16_t icmp_type = ntohs(ofmatch->tp_src);
  401|    261|                if (icmp_type < 0x100) {
  ------------------
  |  Branch (401:21): [True: 241, False: 20]
  ------------------
  402|    241|                    match_set_icmp_type(match, icmp_type);
  403|    241|                } else {
  404|     20|                    return OFPERR_OFPBMC_BAD_FIELD;
  405|     20|                }
  406|    261|            }
  407|    259|            if (!(wc & OFPFW11_TP_DST)) {
  ------------------
  |  Branch (407:17): [True: 73, False: 186]
  ------------------
  408|     73|                uint16_t icmp_code = ntohs(ofmatch->tp_dst);
  409|     73|                if (icmp_code < 0x100) {
  ------------------
  |  Branch (409:21): [True: 21, False: 52]
  ------------------
  410|     21|                    match_set_icmp_code(match, icmp_code);
  411|     52|                } else {
  412|     52|                    return OFPERR_OFPBMC_BAD_FIELD;
  413|     52|                }
  414|     73|            }
  415|    207|            break;
  416|       |
  417|    207|        case IPPROTO_TCP:
  ------------------
  |  Branch (417:9): [True: 32, False: 1.08k]
  ------------------
  418|     43|        case IPPROTO_UDP:
  ------------------
  |  Branch (418:9): [True: 11, False: 1.10k]
  ------------------
  419|    483|        case IPPROTO_SCTP:
  ------------------
  |  Branch (419:9): [True: 440, False: 680]
  ------------------
  420|    483|            if (!(wc & (OFPFW11_TP_SRC))) {
  ------------------
  |  Branch (420:17): [True: 44, False: 439]
  ------------------
  421|     44|                match_set_tp_src(match, ofmatch->tp_src);
  422|     44|            }
  423|    483|            if (!(wc & (OFPFW11_TP_DST))) {
  ------------------
  |  Branch (423:17): [True: 445, False: 38]
  ------------------
  424|    445|                match_set_tp_dst(match, ofmatch->tp_dst);
  425|    445|            }
  426|    483|            break;
  427|       |
  428|    358|        default:
  ------------------
  |  Branch (428:9): [True: 358, False: 762]
  ------------------
  429|       |            /* OF1.1 says explicitly to ignore this. */
  430|    358|            break;
  431|  1.12k|        }
  432|  1.12k|    }
  433|       |
  434|  5.96k|    if (eth_type_mpls(match->flow.dl_type)) {
  ------------------
  |  Branch (434:9): [True: 1.10k, False: 4.85k]
  ------------------
  435|  1.10k|        if (!(wc & OFPFW11_MPLS_LABEL)) {
  ------------------
  |  Branch (435:13): [True: 759, False: 348]
  ------------------
  436|    759|            match_set_mpls_label(match, 0, ofmatch->mpls_label);
  437|    759|        }
  438|  1.10k|        if (!(wc & OFPFW11_MPLS_TC)) {
  ------------------
  |  Branch (438:13): [True: 1.04k, False: 63]
  ------------------
  439|  1.04k|            match_set_mpls_tc(match, 0, ofmatch->mpls_tc);
  440|  1.04k|        }
  441|  1.10k|    }
  442|       |
  443|  5.96k|    match_set_metadata_masked(match, ofmatch->metadata,
  444|  5.96k|                              ~ofmatch->metadata_mask);
  445|       |
  446|  5.96k|    return 0;
  447|  6.03k|}
ofputil_dl_type_from_openflow:
  632|  57.8k|{
  633|  57.8k|    return (ofp_dl_type == htons(OFP_DL_TYPE_NOT_ETH_TYPE)
  ------------------
  |  Branch (633:13): [True: 54, False: 57.7k]
  ------------------
  634|  57.8k|            ? htons(FLOW_DL_TYPE_NONE)
  635|  57.8k|            : ofp_dl_type);
  636|  57.8k|}
ofputil_decode_tlv_table_mod:
  709|  2.00k|{
  710|  2.00k|    struct ofpbuf msg = ofpbuf_const_initializer(oh, ntohs(oh->length));
  711|  2.00k|    ofpraw_pull_assert(&msg);
  712|       |
  713|  2.00k|    struct nx_tlv_table_mod *nx_ttm = ofpbuf_pull(&msg, sizeof *nx_ttm);
  714|  2.00k|    ttm->command = ntohs(nx_ttm->command);
  715|  2.00k|    if (ttm->command > NXTTMC_CLEAR) {
  ------------------
  |  Branch (715:9): [True: 668, False: 1.34k]
  ------------------
  716|    668|        VLOG_WARN_RL(&rl, "tlv table mod command (%u) is out of range",
  ------------------
  |  |  224|    668|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    668|    do {                                                                \
  |  |  |  |  288|    668|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    668|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 668]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    668|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 668]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  717|    668|                     ttm->command);
  718|    668|        return OFPERR_NXTTMFC_BAD_COMMAND;
  719|    668|    }
  720|       |
  721|  1.34k|    return decode_tlv_table_mappings(&msg, TUN_METADATA_NUM_OPTS,
  ------------------
  |  |   26|  1.34k|#define TUN_METADATA_NUM_OPTS 64
  ------------------
  722|  1.34k|                                        &ttm->mappings);
  723|  2.00k|}
ofputil_format_tlv_table_mod:
  745|    820|{
  746|    820|    ds_put_cstr(s, "\n ");
  747|       |
  748|    820|    switch (ttm->command) {
  ------------------
  |  Branch (748:13): [True: 820, False: 0]
  ------------------
  749|    756|    case NXTTMC_ADD:
  ------------------
  |  Branch (749:5): [True: 756, False: 64]
  ------------------
  750|    756|        ds_put_cstr(s, "ADD");
  751|    756|        break;
  752|     44|    case NXTTMC_DELETE:
  ------------------
  |  Branch (752:5): [True: 44, False: 776]
  ------------------
  753|     44|        ds_put_cstr(s, "DEL");
  754|     44|        break;
  755|     20|    case NXTTMC_CLEAR:
  ------------------
  |  Branch (755:5): [True: 20, False: 800]
  ------------------
  756|     20|        ds_put_cstr(s, "CLEAR");
  757|     20|        break;
  758|    820|    }
  759|       |
  760|    820|    if (ttm->command != NXTTMC_CLEAR) {
  ------------------
  |  Branch (760:9): [True: 800, False: 20]
  ------------------
  761|    800|        print_tlv_table(s, &ttm->mappings);
  762|    800|    }
  763|    820|}
ofputil_decode_tlv_table_reply:
  791|  2.31k|{
  792|  2.31k|    struct ofpbuf msg = ofpbuf_const_initializer(oh, ntohs(oh->length));
  793|  2.31k|    ofpraw_pull_assert(&msg);
  794|       |
  795|  2.31k|    struct nx_tlv_table_reply *nx_ttr = ofpbuf_pull(&msg, sizeof *nx_ttr);
  796|  2.31k|    ttr->max_option_space = ntohl(nx_ttr->max_option_space);
  797|  2.31k|    ttr->max_fields = ntohs(nx_ttr->max_fields);
  798|       |
  799|  2.31k|    return decode_tlv_table_mappings(&msg, ttr->max_fields, &ttr->mappings);
  800|  2.31k|}
ofputil_format_tlv_table_reply:
  839|  1.11k|{
  840|  1.11k|    ds_put_char(s, '\n');
  841|       |
  842|  1.11k|    const struct ofputil_tlv_map *map;
  843|  1.11k|    int allocated_space = 0;
  844|  2.23k|    LIST_FOR_EACH (map, list_node, &ttr->mappings) {
  ------------------
  |  |   76|  1.11k|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->next, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  171|  1.11k|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|  1.11k|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|  3.35k|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  185|  3.35k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 2.23k, False: 1.11k]
  |  |  |  |  |  Branch (185:6): [True: 2.23k, False: 1.11k]
  |  |  |  |  ------------------
  |  |  |  |  186|  3.35k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  2.23k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|  2.23k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|  2.23k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  3.35k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   78|  2.23k|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->next))
  |  |  ------------------
  |  |  |  |  193|  2.23k|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  2.23k|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  845|  2.23k|        allocated_space += map->option_len;
  846|  2.23k|    }
  847|       |
  848|  1.11k|    ds_put_format(s, " max option space=%"PRIu32" max fields=%"PRIu16"\n",
  849|  1.11k|                  ttr->max_option_space, ttr->max_fields);
  850|  1.11k|    ds_put_format(s, " allocated option space=%d\n", allocated_space);
  851|  1.11k|    ds_put_char(s, '\n');
  852|  1.11k|    print_tlv_table(s, &ttr->mappings);
  853|  1.11k|}
ofputil_uninit_tlv_table:
  857|  3.65k|{
  858|  3.65k|    struct ofputil_tlv_map *map;
  859|       |
  860|  7.89k|    LIST_FOR_EACH_POP (map, list_node, mappings) {
  ------------------
  |  |  140|  11.5k|    while (!ovs_list_is_empty(LIST) ?                                         \
  |  |  ------------------
  |  |  |  Branch (140:12): [True: 7.89k, False: 3.65k]
  |  |  |  Branch (140:12): [True: 7.89k, False: 3.65k]
  |  |  ------------------
  |  |  141|  11.5k|           (INIT_CONTAINER(ITER, ovs_list_pop_front(LIST), MEMBER), 1) :      \
  |  |  ------------------
  |  |  |  |  150|  7.89k|    ((OBJECT) = NULL, ASSIGN_CONTAINER(OBJECT, POINTER, MEMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  |  143|  7.89k|    ((OBJECT) = OBJECT_CONTAINING(POINTER, OBJECT, MEMBER), (void) 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  134|  7.89k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  |  |  135|  7.89k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  108|  7.89k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  142|  11.5k|           (ITER = NULL, 0))
  ------------------
  861|  7.89k|        free(map);
  862|  7.89k|    }
  863|  3.65k|}
ofputil_normalize_match:
 1000|  50.4k|{
 1001|       |    ofputil_normalize_match__(match, true);
 1002|  50.4k|}
ofp-match.c:ofputil_wcbits_to_netmask:
   44|   109k|{
   45|   109k|    wcbits &= 0x3f;
   46|   109k|    return wcbits < 32 ? htonl(~((1u << wcbits) - 1)) : 0;
  ------------------
  |  Branch (46:12): [True: 77.6k, False: 32.0k]
  ------------------
   47|   109k|}
ofp-match.c:decode_tlv_table_mappings:
  672|  3.65k|{
  673|  3.65k|    ovs_list_init(mappings);
  674|       |
  675|  9.83k|    while (msg->size) {
  ------------------
  |  Branch (675:12): [True: 7.89k, False: 1.93k]
  ------------------
  676|  7.89k|        struct nx_tlv_map *nx_map;
  677|  7.89k|        struct ofputil_tlv_map *map;
  678|       |
  679|  7.89k|        nx_map = ofpbuf_pull(msg, sizeof *nx_map);
  680|  7.89k|        map = xmalloc(sizeof *map);
  681|  7.89k|        ovs_list_push_back(mappings, &map->list_node);
  682|       |
  683|  7.89k|        map->option_class = ntohs(nx_map->option_class);
  684|  7.89k|        map->option_type = nx_map->option_type;
  685|       |
  686|  7.89k|        map->option_len = nx_map->option_len;
  687|  7.89k|        if (map->option_len % 4 || map->option_len > TLV_MAX_OPT_SIZE) {
  ------------------
  |  |   26|  7.04k|#define TLV_MAX_OPT_SIZE 124
  ------------------
  |  Branch (687:13): [True: 856, False: 7.04k]
  |  Branch (687:36): [True: 425, False: 6.61k]
  ------------------
  688|  1.28k|            VLOG_WARN_RL(&rl, "tlv table option length (%u) is not a "
  ------------------
  |  |  224|  1.28k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.28k|    do {                                                                \
  |  |  |  |  288|  1.28k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.28k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.28k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.28k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.28k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  689|  1.28k|                         "valid option size", map->option_len);
  690|  1.28k|            ofputil_uninit_tlv_table(mappings);
  691|  1.28k|            return OFPERR_NXTTMFC_BAD_OPT_LEN;
  692|  1.28k|        }
  693|       |
  694|  6.61k|        map->index = ntohs(nx_map->index);
  695|  6.61k|        if (map->index >= max_fields) {
  ------------------
  |  Branch (695:13): [True: 441, False: 6.17k]
  ------------------
  696|    441|            VLOG_WARN_RL(&rl, "tlv table field index (%u) is too large "
  ------------------
  |  |  224|    441|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    441|    do {                                                                \
  |  |  |  |  288|    441|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    441|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 441]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    441|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 441]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  697|    441|                         "(max %u)", map->index, max_fields - 1);
  698|    441|            ofputil_uninit_tlv_table(mappings);
  699|    441|            return OFPERR_NXTTMFC_BAD_FIELD_IDX;
  700|    441|        }
  701|  6.61k|    }
  702|       |
  703|  1.93k|    return 0;
  704|  3.65k|}
ofp-match.c:print_tlv_table:
  727|  1.91k|{
  728|  1.91k|    struct ofputil_tlv_map *map;
  729|       |
  730|  1.91k|    ds_put_cstr(s, " mapping table:\n");
  731|  1.91k|    ds_put_cstr(s, "  class  type  length  match field\n");
  732|  1.91k|    ds_put_cstr(s, " ------  ----  ------  --------------");
  733|       |
  734|  3.79k|    LIST_FOR_EACH (map, list_node, mappings) {
  ------------------
  |  |   76|  1.91k|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->next, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  171|  1.91k|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|  1.91k|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|  5.71k|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  185|  5.71k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 3.79k, False: 1.91k]
  |  |  |  |  |  Branch (185:6): [True: 3.79k, False: 1.91k]
  |  |  |  |  ------------------
  |  |  |  |  186|  5.71k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  3.79k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|  3.79k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|  3.79k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  5.71k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   78|  3.79k|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->next))
  |  |  ------------------
  |  |  |  |  193|  3.79k|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  3.79k|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  735|  3.79k|        ds_put_format(s, "\n %#6"PRIx16"  %#4"PRIx8"  %6"PRIu8"  "
  736|       |                      "tun_metadata%"PRIu16,
  737|  3.79k|                      map->option_class, map->option_type, map->option_len,
  738|  3.79k|                      map->index);
  739|  3.79k|    }
  740|  1.91k|}
ofp-match.c:ofputil_normalize_match__:
  867|  50.4k|{
  868|  50.4k|    enum {
  869|  50.4k|        MAY_NW_ADDR     = 1 << 0, /* nw_src, nw_dst */
  870|  50.4k|        MAY_TP_ADDR     = 1 << 1, /* tp_src, tp_dst */
  871|  50.4k|        MAY_NW_PROTO    = 1 << 2, /* nw_proto */
  872|  50.4k|        MAY_IPVx        = 1 << 3, /* tos, frag, ttl */
  873|  50.4k|        MAY_ARP_SHA     = 1 << 4, /* arp_sha */
  874|  50.4k|        MAY_ARP_THA     = 1 << 5, /* arp_tha */
  875|  50.4k|        MAY_IPV6        = 1 << 6, /* ipv6_src, ipv6_dst, ipv6_label */
  876|  50.4k|        MAY_ND_TARGET   = 1 << 7, /* nd_target */
  877|  50.4k|        MAY_MPLS        = 1 << 8, /* mpls label and tc */
  878|  50.4k|        MAY_ETHER       = 1 << 9, /* dl_src, dl_dst */
  879|  50.4k|    } may_match;
  880|       |
  881|  50.4k|    struct flow_wildcards wc = match->wc;
  882|  50.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|  50.4k|    if (wc.masks.packet_type == 0 || match_has_default_packet_type(match)) {
  ------------------
  |  Branch (886:9): [True: 1.99k, False: 48.4k]
  |  Branch (886:38): [True: 48.4k, False: 0]
  ------------------
  887|  50.4k|        may_match = MAY_ETHER;
  888|  50.4k|        dl_type = match->flow.dl_type;
  889|  50.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|  50.4k|    if (dl_type == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (897:9): [True: 10.4k, False: 39.9k]
  ------------------
  898|  10.4k|        may_match |= MAY_NW_PROTO | MAY_IPVx | MAY_NW_ADDR;
  899|  10.4k|        if (match->flow.nw_proto == IPPROTO_TCP ||
  ------------------
  |  Branch (899:13): [True: 851, False: 9.63k]
  ------------------
  900|  9.63k|            match->flow.nw_proto == IPPROTO_UDP ||
  ------------------
  |  Branch (900:13): [True: 464, False: 9.17k]
  ------------------
  901|  9.17k|            match->flow.nw_proto == IPPROTO_SCTP ||
  ------------------
  |  Branch (901:13): [True: 652, False: 8.52k]
  ------------------
  902|  8.52k|            match->flow.nw_proto == IPPROTO_ICMP) {
  ------------------
  |  Branch (902:13): [True: 519, False: 8.00k]
  ------------------
  903|  2.48k|            may_match |= MAY_TP_ADDR;
  904|  2.48k|        }
  905|  39.9k|    } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (905:16): [True: 2.78k, False: 37.1k]
  ------------------
  906|  2.78k|        may_match |= MAY_NW_PROTO | MAY_IPVx | MAY_IPV6;
  907|  2.78k|        if (match->flow.nw_proto == IPPROTO_TCP ||
  ------------------
  |  Branch (907:13): [True: 415, False: 2.37k]
  ------------------
  908|  2.37k|            match->flow.nw_proto == IPPROTO_UDP ||
  ------------------
  |  Branch (908:13): [True: 604, False: 1.77k]
  ------------------
  909|  1.99k|            match->flow.nw_proto == IPPROTO_SCTP) {
  ------------------
  |  Branch (909:13): [True: 975, False: 795]
  ------------------
  910|  1.99k|            may_match |= MAY_TP_ADDR;
  911|  1.99k|        } else if (match->flow.nw_proto == IPPROTO_ICMPV6) {
  ------------------
  |  Branch (911:20): [True: 338, False: 457]
  ------------------
  912|    338|            may_match |= MAY_TP_ADDR;
  913|    338|            if (match->flow.tp_src == htons(ND_NEIGHBOR_SOLICIT)) {
  ------------------
  |  Branch (913:17): [True: 69, False: 269]
  ------------------
  914|     69|                may_match |= MAY_ND_TARGET | MAY_ARP_SHA;
  915|    269|            } else if (match->flow.tp_src == htons(ND_NEIGHBOR_ADVERT)) {
  ------------------
  |  Branch (915:24): [True: 127, False: 142]
  ------------------
  916|    127|                may_match |= MAY_ND_TARGET | MAY_ARP_THA;
  917|    127|            }
  918|    338|        }
  919|  37.1k|    } else if (dl_type == htons(ETH_TYPE_ARP) ||
  ------------------
  |  Branch (919:16): [True: 478, False: 36.7k]
  ------------------
  920|  36.7k|               dl_type == htons(ETH_TYPE_RARP)) {
  ------------------
  |  Branch (920:16): [True: 645, False: 36.0k]
  ------------------
  921|  1.12k|        may_match |= MAY_NW_PROTO | MAY_NW_ADDR | MAY_ARP_SHA | MAY_ARP_THA;
  922|  36.0k|    } else if (eth_type_mpls(dl_type)) {
  ------------------
  |  Branch (922:16): [True: 204, False: 35.8k]
  ------------------
  923|    204|        may_match |= MAY_MPLS;
  924|    204|    }
  925|       |
  926|       |    /* Clear the fields that may not be matched. */
  927|  50.4k|    if (!(may_match & MAY_ETHER)) {
  ------------------
  |  Branch (927:9): [True: 0, False: 50.4k]
  ------------------
  928|      0|        wc.masks.dl_src = wc.masks.dl_dst = eth_addr_zero;
  929|      0|    }
  930|  50.4k|    if (!(may_match & MAY_NW_ADDR)) {
  ------------------
  |  Branch (930:9): [True: 38.8k, False: 11.6k]
  ------------------
  931|  38.8k|        wc.masks.nw_src = wc.masks.nw_dst = htonl(0);
  932|  38.8k|    }
  933|  50.4k|    if (!(may_match & MAY_TP_ADDR)) {
  ------------------
  |  Branch (933:9): [True: 45.6k, False: 4.81k]
  ------------------
  934|  45.6k|        wc.masks.tp_src = wc.masks.tp_dst = htons(0);
  935|  45.6k|    }
  936|  50.4k|    if (!(may_match & MAY_NW_PROTO)) {
  ------------------
  |  Branch (936:9): [True: 36.0k, False: 14.4k]
  ------------------
  937|  36.0k|        wc.masks.nw_proto = 0;
  938|  36.0k|    }
  939|  50.4k|    if (!(may_match & MAY_IPVx)) {
  ------------------
  |  Branch (939:9): [True: 37.1k, False: 13.2k]
  ------------------
  940|  37.1k|        wc.masks.nw_tos = 0;
  941|  37.1k|        wc.masks.nw_ttl = 0;
  942|  37.1k|    }
  943|  50.4k|    if (!(may_match & MAY_ARP_SHA)) {
  ------------------
  |  Branch (943:9): [True: 49.2k, False: 1.19k]
  ------------------
  944|  49.2k|        WC_UNMASK_FIELD(&wc, arp_sha);
  ------------------
  |  |  205|  49.2k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
  945|  49.2k|    }
  946|  50.4k|    if (!(may_match & MAY_ARP_THA)) {
  ------------------
  |  Branch (946:9): [True: 49.2k, False: 1.25k]
  ------------------
  947|  49.2k|        WC_UNMASK_FIELD(&wc, arp_tha);
  ------------------
  |  |  205|  49.2k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
  948|  49.2k|    }
  949|  50.4k|    if (!(may_match & MAY_IPV6)) {
  ------------------
  |  Branch (949:9): [True: 47.6k, False: 2.78k]
  ------------------
  950|  47.6k|        wc.masks.ipv6_src = wc.masks.ipv6_dst = in6addr_any;
  951|  47.6k|        wc.masks.ipv6_label = htonl(0);
  952|  47.6k|    }
  953|  50.4k|    if (!(may_match & MAY_ND_TARGET)) {
  ------------------
  |  Branch (953:9): [True: 50.2k, False: 196]
  ------------------
  954|  50.2k|        wc.masks.nd_target = in6addr_any;
  955|  50.2k|    }
  956|  50.4k|    if (!(may_match & MAY_MPLS)) {
  ------------------
  |  Branch (956:9): [True: 50.2k, False: 204]
  ------------------
  957|  50.2k|        memset(wc.masks.mpls_lse, 0, sizeof wc.masks.mpls_lse);
  958|  50.2k|    }
  959|       |
  960|       |    /* Log any changes. */
  961|  50.4k|    if (!flow_wildcards_equal(&wc, &match->wc)) {
  ------------------
  |  Branch (961:9): [True: 45.6k, False: 4.85k]
  ------------------
  962|  45.6k|        bool log = may_log && !VLOG_DROP_INFO(&rl);
  ------------------
  |  |  235|  91.2k|#define VLOG_DROP_INFO(RL) vlog_should_drop(&this_module, VLL_INFO, RL)
  ------------------
  |  Branch (962:20): [True: 45.6k, False: 0]
  |  Branch (962:31): [True: 0, False: 45.6k]
  ------------------
  963|  45.6k|        char *pre = (log
  ------------------
  |  Branch (963:22): [True: 0, False: 45.6k]
  ------------------
  964|  45.6k|                     ? match_to_string(match, NULL, OFP_DEFAULT_PRIORITY)
  ------------------
  |  |  138|      0|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
  965|  45.6k|                     : NULL);
  966|       |
  967|  45.6k|        match->wc = wc;
  968|  45.6k|        match_zero_wildcarded_fields(match);
  969|       |
  970|  45.6k|        if (log) {
  ------------------
  |  Branch (970:13): [True: 0, False: 45.6k]
  ------------------
  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|  45.6k|    }
  979|  50.4k|}

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

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

ofphdrs_len:
  368|  10.6k|{
  369|  10.6k|    if (hdrs->type == OFPT_VENDOR) {
  ------------------
  |  |   32|  10.6k|#define OFPT_VENDOR 4
  ------------------
  |  Branch (369:9): [True: 735, False: 9.90k]
  ------------------
  370|    735|        return sizeof(struct ofp_vendor_header);
  371|    735|    }
  372|       |
  373|  9.90k|    switch ((enum ofp_version) hdrs->version) {
  ------------------
  |  Branch (373:13): [True: 8.90k, False: 996]
  ------------------
  374|  1.01k|    case OFP10_VERSION:
  ------------------
  |  Branch (374:5): [True: 1.01k, False: 8.89k]
  ------------------
  375|  1.01k|        if (hdrs->type == OFPT10_STATS_REQUEST ||
  ------------------
  |  |   33|  2.02k|#define OFPT10_STATS_REQUEST 16
  ------------------
  |  Branch (375:13): [True: 966, False: 45]
  ------------------
  376|    992|            hdrs->type == OFPT10_STATS_REPLY) {
  ------------------
  |  |   34|     45|#define OFPT10_STATS_REPLY 17
  ------------------
  |  Branch (376:13): [True: 26, False: 19]
  ------------------
  377|    992|            return (hdrs->stat == OFPST_VENDOR
  ------------------
  |  |   37|    992|#define OFPST_VENDOR 0xffff
  ------------------
  |  Branch (377:21): [True: 26, False: 966]
  ------------------
  378|    992|                    ? sizeof(struct nicira10_stats_msg)
  379|    992|                    : sizeof(struct ofp10_stats_msg));
  380|    992|        }
  381|     19|        break;
  382|       |
  383|  1.45k|    case OFP11_VERSION:
  ------------------
  |  Branch (383:5): [True: 1.45k, False: 8.45k]
  ------------------
  384|  2.43k|    case OFP12_VERSION:
  ------------------
  |  Branch (384:5): [True: 988, False: 8.91k]
  ------------------
  385|  4.14k|    case OFP13_VERSION:
  ------------------
  |  Branch (385:5): [True: 1.70k, False: 8.19k]
  ------------------
  386|  7.03k|    case OFP14_VERSION:
  ------------------
  |  Branch (386:5): [True: 2.88k, False: 7.01k]
  ------------------
  387|  7.89k|    case OFP15_VERSION:
  ------------------
  |  Branch (387:5): [True: 862, False: 9.04k]
  ------------------
  388|  7.89k|        if (hdrs->type == OFPT11_STATS_REQUEST ||
  ------------------
  |  |   35|  15.7k|#define OFPT11_STATS_REQUEST 18
  ------------------
  |  Branch (388:13): [True: 4.65k, False: 3.24k]
  ------------------
  389|  6.51k|            hdrs->type == OFPT11_STATS_REPLY) {
  ------------------
  |  |   36|  3.24k|#define OFPT11_STATS_REPLY 19
  ------------------
  |  Branch (389:13): [True: 1.85k, False: 1.38k]
  ------------------
  390|  6.51k|            return (hdrs->stat == OFPST_VENDOR
  ------------------
  |  |   37|  6.51k|#define OFPST_VENDOR 0xffff
  ------------------
  |  Branch (390:21): [True: 28, False: 6.48k]
  ------------------
  391|  6.51k|                    ? sizeof(struct ofp11_vendor_stats_msg)
  392|  6.51k|                    : sizeof(struct ofp11_stats_msg));
  393|  6.51k|        }
  394|  1.38k|        break;
  395|  9.90k|    }
  396|       |
  397|  2.40k|    return sizeof(struct ofp_header);
  398|  9.90k|}
ofpraw_decode:
  409|  2.21M|{
  410|       |    struct ofpbuf msg = ofpbuf_const_initializer(oh, ntohs(oh->length));
  411|  2.21M|    return ofpraw_pull(raw, &msg);
  412|  2.21M|}
ofpraw_decode_assert:
  422|  10.0k|{
  423|  10.0k|    enum ofpraw raw;
  424|  10.0k|    ovs_assert(!ofpraw_decode(&raw, oh));
  ------------------
  |  |   62|  10.0k|#define ovs_assert ovs_ignore
  ------------------
  425|  10.0k|    return raw;
  426|  10.0k|}
ofpraw_pull:
  485|  3.63M|{
  486|       |    /* Set default outputs. */
  487|  3.63M|    msg->header = msg->data;
  488|  3.63M|    msg->msg = msg->header;
  489|  3.63M|    *rawp = 0;
  490|       |
  491|  3.63M|    struct ofphdrs hdrs;
  492|  3.63M|    enum ofperr error = ofphdrs_decode(&hdrs, msg->data, msg->size);
  493|  3.63M|    if (error) {
  ------------------
  |  Branch (493:9): [True: 53.7k, False: 3.58M]
  ------------------
  494|  53.7k|        return error;
  495|  53.7k|    }
  496|       |
  497|  3.58M|    enum ofpraw raw;
  498|  3.58M|    error = ofpraw_from_ofphdrs(&raw, &hdrs);
  499|  3.58M|    if (error) {
  ------------------
  |  Branch (499:9): [True: 474k, False: 3.10M]
  ------------------
  500|   474k|        return error;
  501|   474k|    }
  502|       |
  503|  3.10M|    const struct raw_info *info = raw_info_get(raw);
  504|  3.10M|    const struct raw_instance *instance = raw_instance_get(info, hdrs.version);
  505|  3.10M|    error = ofpraw_check_length(info, instance, msg->size);
  506|  3.10M|    if (error) {
  ------------------
  |  Branch (506:9): [True: 91.2k, False: 3.01M]
  ------------------
  507|  91.2k|        return error;
  508|  91.2k|    }
  509|       |
  510|  3.01M|    msg->header = ofpbuf_pull(msg, instance->hdrs_len);
  511|  3.01M|    msg->msg = msg->data;
  512|  3.01M|    *rawp = raw;
  513|  3.01M|    return 0;
  514|  3.10M|}
ofpraw_pull_assert:
  524|   608k|{
  525|   608k|    enum ofpraw raw;
  526|   608k|    ovs_assert(!ofpraw_pull(&raw, msg));
  ------------------
  |  |   62|   608k|#define ovs_assert ovs_ignore
  ------------------
  527|   608k|    return raw;
  528|   608k|}
ofpraw_decode_partial:
  543|  13.1k|{
  544|  13.1k|    struct ofphdrs hdrs;
  545|  13.1k|    enum ofperr error;
  546|       |
  547|  13.1k|    error = ofphdrs_decode(&hdrs, oh, length);
  548|  13.1k|    if (!error) {
  ------------------
  |  Branch (548:9): [True: 13.0k, False: 65]
  ------------------
  549|  13.0k|        error = ofpraw_from_ofphdrs(raw, &hdrs);
  550|  13.0k|    }
  551|       |
  552|  13.1k|    if (error) {
  ------------------
  |  Branch (552:9): [True: 6.38k, False: 6.76k]
  ------------------
  553|  6.38k|        *raw = 0;
  554|  6.38k|    }
  555|  13.1k|    return error;
  556|  13.1k|}
ofpraw_get_name:
  782|  1.46M|{
  783|  1.46M|    return raw_info_get(raw)->name;
  784|  1.46M|}
ofptype_decode:
  828|  3.28k|{
  829|  3.28k|    enum ofperr error;
  830|  3.28k|    enum ofpraw raw;
  831|       |
  832|  3.28k|    error = ofpraw_decode(&raw, oh);
  833|  3.28k|    *typep = error ? 0 : ofptype_from_ofpraw(raw);
  ------------------
  |  Branch (833:14): [True: 275, False: 3.00k]
  ------------------
  834|  3.28k|    return error;
  835|  3.28k|}
ofptype_from_ofpraw:
  867|  1.46M|{
  868|  1.46M|    return raw_info_get(raw)->type;
  869|  1.46M|}
ofpmsg_body:
  891|  9.17k|{
  892|  9.17k|    struct ofphdrs hdrs;
  893|       |
  894|       |    ofphdrs_decode_assert(&hdrs, oh, ntohs(oh->length));
  895|  9.17k|    return (const uint8_t *) oh + ofphdrs_len(&hdrs);
  896|  9.17k|}
ofpmsg_is_stat_request:
  901|  95.7k|{
  902|  95.7k|    return ofp_is_stat_request(oh->version, oh->type);
  903|  95.7k|}
ofpmsg_is_stat:
  915|  1.45M|{
  916|  1.45M|    return ofp_is_stat(oh->version, oh->type);
  917|  1.45M|}
ofpmp_flags:
 1049|   106k|{
 1050|       |    return ntohs(*ofpmp_flags__(oh));
 1051|   106k|}
ofp-msgs.c:ofphdrs_decode:
  215|  3.65M|{
  216|  3.65M|    memset(hdrs, 0, sizeof *hdrs);
  217|  3.65M|    if (length < sizeof *oh) {
  ------------------
  |  Branch (217:9): [True: 0, False: 3.65M]
  ------------------
  218|      0|        return OFPERR_OFPBRC_BAD_LEN;
  219|      0|    }
  220|       |
  221|       |    /* Get base message version and type (OFPT_*). */
  222|  3.65M|    hdrs->version = oh->version;
  223|  3.65M|    hdrs->type = oh->type;
  224|       |
  225|  3.65M|    if (hdrs->type == OFPT_VENDOR) {
  ------------------
  |  |   32|  3.65M|#define OFPT_VENDOR 4
  ------------------
  |  Branch (225:9): [True: 145k, False: 3.51M]
  ------------------
  226|       |        /* Get vendor. */
  227|   145k|        const struct ofp_vendor_header *ovh;
  228|       |
  229|   145k|        if (length < sizeof *ovh) {
  ------------------
  |  Branch (229:13): [True: 28.8k, False: 116k]
  ------------------
  230|  28.8k|            return OFPERR_OFPBRC_BAD_LEN;
  231|  28.8k|        }
  232|       |
  233|   116k|        ovh = (const struct ofp_vendor_header *) oh;
  234|   116k|        hdrs->vendor = ntohl(ovh->vendor);
  235|   116k|        if (hdrs->vendor == NX_VENDOR_ID || hdrs->vendor == ONF_VENDOR_ID) {
  ------------------
  |  |  110|   233k|#define NX_VENDOR_ID    0x00002320 /* Nicira. */
  ------------------
                      if (hdrs->vendor == NX_VENDOR_ID || hdrs->vendor == ONF_VENDOR_ID) {
  ------------------
  |  |  111|  8.97k|#define ONF_VENDOR_ID   0x4f4e4600 /* Open Networking Foundation. */
  ------------------
  |  Branch (235:13): [True: 107k, False: 8.97k]
  |  Branch (235:45): [True: 43, False: 8.93k]
  ------------------
  236|   107k|            hdrs->subtype = ntohl(ovh->subtype);
  237|   107k|        } else {
  238|  8.93k|            log_bad_vendor(hdrs->vendor);
  239|  8.93k|            return OFPERR_OFPBRC_BAD_VENDOR;
  240|  8.93k|        }
  241|  3.51M|    } else if (hdrs->version == OFP10_VERSION
  ------------------
  |  Branch (241:16): [True: 547k, False: 2.96M]
  ------------------
  242|   547k|               && (hdrs->type == OFPT10_STATS_REQUEST ||
  ------------------
  |  |   33|  1.09M|#define OFPT10_STATS_REQUEST 16
  ------------------
  |  Branch (242:20): [True: 16.6k, False: 531k]
  ------------------
  243|   531k|                   hdrs->type == OFPT10_STATS_REPLY)) {
  ------------------
  |  |   34|   531k|#define OFPT10_STATS_REPLY 17
  ------------------
  |  Branch (243:20): [True: 68.5k, False: 462k]
  ------------------
  244|  85.1k|        const struct ofp10_stats_msg *osm;
  245|       |
  246|       |        /* Get statistic type (OFPST_*). */
  247|  85.1k|        if (length < sizeof *osm) {
  ------------------
  |  Branch (247:13): [True: 1.19k, False: 83.9k]
  ------------------
  248|  1.19k|            return OFPERR_OFPBRC_BAD_LEN;
  249|  1.19k|        }
  250|  83.9k|        osm = (const struct ofp10_stats_msg *) oh;
  251|  83.9k|        hdrs->stat = ntohs(osm->type);
  252|       |
  253|  83.9k|        if (hdrs->stat == OFPST_VENDOR) {
  ------------------
  |  |   37|  83.9k|#define OFPST_VENDOR 0xffff
  ------------------
  |  Branch (253:13): [True: 46.6k, False: 37.3k]
  ------------------
  254|       |            /* Get vendor. */
  255|  46.6k|            const struct ofp10_vendor_stats_msg *ovsm;
  256|       |
  257|  46.6k|            if (length < sizeof *ovsm) {
  ------------------
  |  Branch (257:17): [True: 68, False: 46.5k]
  ------------------
  258|     68|                return OFPERR_OFPBRC_BAD_LEN;
  259|     68|            }
  260|       |
  261|  46.5k|            ovsm = (const struct ofp10_vendor_stats_msg *) oh;
  262|  46.5k|            hdrs->vendor = ntohl(ovsm->vendor);
  263|  46.5k|            if (hdrs->vendor == NX_VENDOR_ID) {
  ------------------
  |  |  110|  46.5k|#define NX_VENDOR_ID    0x00002320 /* Nicira. */
  ------------------
  |  Branch (263:17): [True: 45.6k, False: 891]
  ------------------
  264|       |                /* Get Nicira statistic type (NXST_*). */
  265|  45.6k|                const struct nicira10_stats_msg *nsm;
  266|       |
  267|  45.6k|                if (length < sizeof *nsm) {
  ------------------
  |  Branch (267:21): [True: 22, False: 45.6k]
  ------------------
  268|     22|                    return OFPERR_OFPBRC_BAD_LEN;
  269|     22|                }
  270|  45.6k|                nsm = (const struct nicira10_stats_msg *) oh;
  271|  45.6k|                hdrs->subtype = ntohl(nsm->subtype);
  272|  45.6k|            } else {
  273|    891|                log_bad_vendor(hdrs->vendor);
  274|    891|                return OFPERR_OFPBRC_BAD_VENDOR;
  275|    891|            }
  276|  46.5k|        }
  277|  3.42M|    } else if (hdrs->version != OFP10_VERSION
  ------------------
  |  Branch (277:16): [True: 2.96M, False: 462k]
  ------------------
  278|  2.96M|               && (hdrs->type == OFPT11_STATS_REQUEST ||
  ------------------
  |  |   35|  5.93M|#define OFPT11_STATS_REQUEST 18
  ------------------
  |  Branch (278:20): [True: 40.5k, False: 2.92M]
  ------------------
  279|  2.92M|                   hdrs->type == OFPT11_STATS_REPLY)) {
  ------------------
  |  |   36|  2.92M|#define OFPT11_STATS_REPLY 19
  ------------------
  |  Branch (279:20): [True: 223k, False: 2.70M]
  ------------------
  280|   264k|        const struct ofp11_stats_msg *osm;
  281|       |
  282|       |        /* Get statistic type (OFPST_*). */
  283|   264k|        if (length < sizeof *osm) {
  ------------------
  |  Branch (283:13): [True: 11.9k, False: 252k]
  ------------------
  284|  11.9k|            return OFPERR_OFPBRC_BAD_LEN;
  285|  11.9k|        }
  286|   252k|        osm = (const struct ofp11_stats_msg *) oh;
  287|   252k|        hdrs->stat = ntohs(osm->type);
  288|       |
  289|   252k|        if (hdrs->stat == OFPST_VENDOR) {
  ------------------
  |  |   37|   252k|#define OFPST_VENDOR 0xffff
  ------------------
  |  Branch (289:13): [True: 2.37k, False: 250k]
  ------------------
  290|       |            /* Get vendor. */
  291|  2.37k|            const struct ofp11_vendor_stats_msg *ovsm;
  292|       |
  293|  2.37k|            if (length < sizeof *ovsm) {
  ------------------
  |  Branch (293:17): [True: 1.82k, False: 551]
  ------------------
  294|  1.82k|                return OFPERR_OFPBRC_BAD_LEN;
  295|  1.82k|            }
  296|       |
  297|    551|            ovsm = (const struct ofp11_vendor_stats_msg *) oh;
  298|    551|            hdrs->vendor = ntohl(ovsm->vendor);
  299|    551|            if (hdrs->vendor == NX_VENDOR_ID ||
  ------------------
  |  |  110|  1.10k|#define NX_VENDOR_ID    0x00002320 /* Nicira. */
  ------------------
  |  Branch (299:17): [True: 401, False: 150]
  ------------------
  300|    419|                hdrs->vendor == ONF_VENDOR_ID) {
  ------------------
  |  |  111|    150|#define ONF_VENDOR_ID   0x4f4e4600 /* Open Networking Foundation. */
  ------------------
  |  Branch (300:17): [True: 18, False: 132]
  ------------------
  301|    419|                hdrs->subtype = ntohl(ovsm->subtype);
  302|    419|            } else {
  303|    132|                log_bad_vendor(hdrs->vendor);
  304|    132|                return OFPERR_OFPBRC_BAD_VENDOR;
  305|    132|            }
  306|    551|        }
  307|   252k|    }
  308|       |
  309|  3.60M|    return 0;
  310|  3.65M|}
ofp-msgs.c:log_bad_vendor:
  206|  9.95k|{
  207|  9.95k|    static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 1);
  ------------------
  |  |  110|  9.95k|        {                                                                 \
  |  |  111|  9.95k|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|  39.8k|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [True: 0, Folded]
  |  |  |  |  |  Branch (37:48): [Folded, False: 9.95k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  9.95k|            0,                              /* first_dropped */           \
  |  |  113|  9.95k|            0,                              /* last_dropped */            \
  |  |  114|  9.95k|            0,                              /* n_dropped */               \
  |  |  115|  9.95k|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  9.95k|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  9.95k|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  9.95k|        }
  ------------------
  208|       |
  209|  9.95k|    VLOG_WARN_RL(&rl, "OpenFlow message has unknown vendor %#"PRIx32, vendor);
  ------------------
  |  |  224|  9.95k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  9.95k|    do {                                                                \
  |  |  |  |  288|  9.95k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  9.95k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 9.95k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  9.95k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 9.95k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  210|  9.95k|}
ofp-msgs.c:ofpraw_check_length:
  434|  3.10M|{
  435|  3.10M|    static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
  ------------------
  |  |  110|  3.10M|        {                                                                 \
  |  |  111|  3.10M|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|  12.4M|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [True: 0, Folded]
  |  |  |  |  |  Branch (37:48): [Folded, False: 3.10M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  3.10M|            0,                              /* first_dropped */           \
  |  |  113|  3.10M|            0,                              /* last_dropped */            \
  |  |  114|  3.10M|            0,                              /* n_dropped */               \
  |  |  115|  3.10M|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  3.10M|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  3.10M|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  3.10M|        }
  ------------------
  436|       |
  437|  3.10M|    unsigned int min_len = instance->hdrs_len + info->min_body;
  438|  3.10M|    switch (info->extra_multiple) {
  439|   104k|    case 0:
  ------------------
  |  Branch (439:5): [True: 104k, False: 3.00M]
  ------------------
  440|   104k|        if (len != min_len) {
  ------------------
  |  Branch (440:13): [True: 31.3k, False: 72.9k]
  ------------------
  441|  31.3k|            VLOG_WARN_RL(&rl, "received %s with incorrect length %u (expected "
  ------------------
  |  |  224|  31.3k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  31.3k|    do {                                                                \
  |  |  |  |  288|  31.3k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  31.3k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 31.3k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  31.3k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 31.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  442|  31.3k|                         "length %u)", info->name, len, min_len);
  443|  31.3k|            return OFPERR_OFPBRC_BAD_LEN;
  444|  31.3k|        }
  445|  72.9k|        break;
  446|       |
  447|  2.20M|    case 1:
  ------------------
  |  Branch (447:5): [True: 2.20M, False: 907k]
  ------------------
  448|  2.20M|        if (len < min_len) {
  ------------------
  |  Branch (448:13): [True: 40.9k, False: 2.16M]
  ------------------
  449|  40.9k|            VLOG_WARN_RL(&rl, "received %s with incorrect length %u (expected "
  ------------------
  |  |  224|  40.9k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  40.9k|    do {                                                                \
  |  |  |  |  288|  40.9k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  40.9k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 40.9k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  40.9k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 40.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  450|  40.9k|                         "length at least %u bytes)",
  451|  40.9k|                         info->name, len, min_len);
  452|  40.9k|            return OFPERR_OFPBRC_BAD_LEN;
  453|  40.9k|        }
  454|  2.16M|        break;
  455|       |
  456|  2.16M|    default:
  ------------------
  |  Branch (456:5): [True: 802k, False: 2.30M]
  ------------------
  457|   802k|        if (len < min_len || (len - min_len) % info->extra_multiple) {
  ------------------
  |  Branch (457:13): [True: 14.8k, False: 787k]
  |  Branch (457:30): [True: 4.18k, False: 783k]
  ------------------
  458|  18.9k|            VLOG_WARN_RL(&rl, "received %s with incorrect length %u (must be "
  ------------------
  |  |  224|  18.9k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  18.9k|    do {                                                                \
  |  |  |  |  288|  18.9k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  18.9k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 18.9k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  18.9k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 18.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  459|  18.9k|                         "exactly %u bytes or longer by an integer multiple "
  460|  18.9k|                         "of %u bytes)",
  461|  18.9k|                         info->name, len, min_len, info->extra_multiple);
  462|  18.9k|            return OFPERR_OFPBRC_BAD_LEN;
  463|  18.9k|        }
  464|   783k|        break;
  465|  3.10M|    }
  466|       |
  467|  3.01M|    return 0;
  468|  3.10M|}
ofp-msgs.c:ofphdrs_decode_assert:
  315|  9.17k|{
  316|  9.17k|    ovs_assert(!ofphdrs_decode(hdrs, oh, length));
  ------------------
  |  |   62|  9.17k|#define ovs_assert ovs_ignore
  ------------------
  317|  9.17k|}
ofp-msgs.c:ofp_is_stat_request:
  321|  2.03M|{
  322|  2.03M|    switch (version) {
  ------------------
  |  Branch (322:13): [True: 1.53M, False: 500k]
  ------------------
  323|   290k|    case OFP10_VERSION:
  ------------------
  |  Branch (323:5): [True: 290k, False: 1.74M]
  ------------------
  324|   290k|        return type == OFPT10_STATS_REQUEST;
  ------------------
  |  |   33|   290k|#define OFPT10_STATS_REQUEST 16
  ------------------
  325|   124k|    case OFP11_VERSION:
  ------------------
  |  Branch (325:5): [True: 124k, False: 1.90M]
  ------------------
  326|   390k|    case OFP12_VERSION:
  ------------------
  |  Branch (326:5): [True: 265k, False: 1.76M]
  ------------------
  327|   534k|    case OFP13_VERSION:
  ------------------
  |  Branch (327:5): [True: 144k, False: 1.88M]
  ------------------
  328|   835k|    case OFP14_VERSION:
  ------------------
  |  Branch (328:5): [True: 300k, False: 1.73M]
  ------------------
  329|  1.24M|    case OFP15_VERSION:
  ------------------
  |  Branch (329:5): [True: 405k, False: 1.62M]
  ------------------
  330|  1.24M|        return type == OFPT11_STATS_REQUEST;
  ------------------
  |  |   35|  1.24M|#define OFPT11_STATS_REQUEST 18
  ------------------
  331|  2.03M|    }
  332|       |
  333|   500k|    return false;
  334|  2.03M|}
ofp-msgs.c:ofp_is_stat_reply:
  338|  1.91M|{
  339|  1.91M|    switch (version) {
  ------------------
  |  Branch (339:13): [True: 1.41M, False: 500k]
  ------------------
  340|   263k|    case OFP10_VERSION:
  ------------------
  |  Branch (340:5): [True: 263k, False: 1.64M]
  ------------------
  341|   263k|        return type == OFPT10_STATS_REPLY;
  ------------------
  |  |   34|   263k|#define OFPT10_STATS_REPLY 17
  ------------------
  342|   116k|    case OFP11_VERSION:
  ------------------
  |  Branch (342:5): [True: 116k, False: 1.79M]
  ------------------
  343|   376k|    case OFP12_VERSION:
  ------------------
  |  Branch (343:5): [True: 260k, False: 1.65M]
  ------------------
  344|   518k|    case OFP13_VERSION:
  ------------------
  |  Branch (344:5): [True: 142k, False: 1.76M]
  ------------------
  345|   793k|    case OFP14_VERSION:
  ------------------
  |  Branch (345:5): [True: 274k, False: 1.63M]
  ------------------
  346|  1.14M|    case OFP15_VERSION:
  ------------------
  |  Branch (346:5): [True: 353k, False: 1.55M]
  ------------------
  347|  1.14M|        return type == OFPT11_STATS_REPLY;
  ------------------
  |  |   36|  1.14M|#define OFPT11_STATS_REPLY 19
  ------------------
  348|  1.91M|    }
  349|       |
  350|   500k|    return false;
  351|  1.91M|}
ofp-msgs.c:ofp_is_stat:
  355|  1.93M|{
  356|  1.93M|    return (ofp_is_stat_request(version, type) ||
  ------------------
  |  Branch (356:13): [True: 25.1k, False: 1.91M]
  ------------------
  357|  1.91M|            ofp_is_stat_reply(version, type));
  ------------------
  |  Branch (357:13): [True: 91.2k, False: 1.81M]
  ------------------
  358|  1.93M|}
ofp-msgs.c:ofpmp_flags__:
 1028|   106k|{
 1029|   106k|    switch ((enum ofp_version)oh->version) {
 1030|  22.0k|    case OFP10_VERSION:
  ------------------
  |  Branch (1030:5): [True: 22.0k, False: 84.3k]
  ------------------
 1031|  22.0k|        return &((struct ofp10_stats_msg *) oh)->flags;
 1032|  5.32k|    case OFP11_VERSION:
  ------------------
  |  Branch (1032:5): [True: 5.32k, False: 101k]
  ------------------
 1033|  8.86k|    case OFP12_VERSION:
  ------------------
  |  Branch (1033:5): [True: 3.54k, False: 102k]
  ------------------
 1034|  12.9k|    case OFP13_VERSION:
  ------------------
  |  Branch (1034:5): [True: 4.09k, False: 102k]
  ------------------
 1035|  32.3k|    case OFP14_VERSION:
  ------------------
  |  Branch (1035:5): [True: 19.3k, False: 86.9k]
  ------------------
 1036|  84.3k|    case OFP15_VERSION:
  ------------------
  |  Branch (1036:5): [True: 52.0k, False: 54.3k]
  ------------------
 1037|  84.3k|        return &((struct ofp11_stats_msg *) oh)->flags;
 1038|      0|    default:
  ------------------
  |  Branch (1038:5): [True: 0, False: 106k]
  ------------------
 1039|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1040|   106k|    }
 1041|   106k|}
ofp-msgs.c:raw_info_get:
 1307|  6.03M|{
 1308|  6.03M|    ofpmsgs_init();
 1309|       |
 1310|  6.03M|    ovs_assert(raw < ARRAY_SIZE(raw_infos));
  ------------------
  |  |   62|  6.03M|#define ovs_assert ovs_ignore
  ------------------
                  ovs_assert(raw < ARRAY_SIZE(raw_infos));
  ------------------
  |  |  297|  6.03M|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   46|  6.03M|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|  6.03M|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   47|  6.03M|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.03M|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|  6.03M|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1311|  6.03M|    return &raw_infos[raw];
 1312|  6.03M|}
ofp-msgs.c:ofpmsgs_init:
 1363|  9.63M|{
 1364|  9.63M|    static struct ovsthread_once once = OVSTHREAD_ONCE_INITIALIZER;
  ------------------
  |  |  134|  9.63M|    {                                           \
  |  |  135|  9.63M|        false,                                  \
  |  |  136|  9.63M|        OVS_MUTEX_INITIALIZER,                  \
  |  |  ------------------
  |  |  |  |   45|  9.63M|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  9.63M|                                "<unlocked>" }
  |  |  ------------------
  |  |  137|  9.63M|    }
  ------------------
 1365|  9.63M|    const struct raw_info *info;
 1366|       |
 1367|  9.63M|    if (!ovsthread_once_start(&once)) {
  ------------------
  |  Branch (1367:9): [True: 9.63M, False: 1]
  ------------------
 1368|  9.63M|        return;
 1369|  9.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|  3.59M|{
  194|  3.59M|    BUILD_ASSERT_DECL(sizeof *hdrs % 4 == 0);
  ------------------
  |  |  270|  3.59M|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  ------------------
  195|  3.59M|    return hash_bytes32((const uint32_t *) hdrs, sizeof *hdrs, 0);
  196|  3.59M|}
ofp-msgs.c:raw_instance_get:
 1316|  3.10M|{
 1317|  3.10M|    ovs_assert(version >= info->min_version && version <= info->max_version);
  ------------------
  |  |   62|  3.10M|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (1317:16): [True: 3.10M, False: 0]
  |  Branch (1317:48): [True: 3.10M, False: 0]
  ------------------
 1318|  3.10M|    return &info->instances[version - info->min_version];
 1319|  3.10M|}
ofp-msgs.c:ofpraw_from_ofphdrs:
 1323|  3.59M|{
 1324|  3.59M|    static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 1);
  ------------------
  |  |  110|  3.59M|        {                                                                 \
  |  |  111|  3.59M|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|  14.3M|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [True: 0, Folded]
  |  |  |  |  |  Branch (37:48): [Folded, False: 3.59M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  3.59M|            0,                              /* first_dropped */           \
  |  |  113|  3.59M|            0,                              /* last_dropped */            \
  |  |  114|  3.59M|            0,                              /* n_dropped */               \
  |  |  115|  3.59M|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  3.59M|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  3.59M|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  3.59M|        }
  ------------------
 1325|       |
 1326|  3.59M|    struct raw_instance *raw_hdrs;
 1327|  3.59M|    uint32_t hash;
 1328|       |
 1329|  3.59M|    ofpmsgs_init();
 1330|       |
 1331|  3.59M|    hash = ofphdrs_hash(hdrs);
 1332|  3.59M|    HMAP_FOR_EACH_WITH_HASH (raw_hdrs, hmap_node, hash, &raw_instance_map) {
  ------------------
  |  |  138|  3.59M|    for (INIT_MULTIVAR(NODE, MEMBER, hmap_first_with_hash(HMAP, HASH),        \
  |  |  ------------------
  |  |  |  |  171|  3.59M|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|  3.59M|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  139|  3.59M|                       struct hmap_node);                                     \
  |  |  140|  3.59M|         CONDITION_MULTIVAR(NODE, MEMBER, ITER_VAR(NODE) != NULL);            \
  |  |  ------------------
  |  |  |  |  185|  3.59M|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 3.11M, False: 480k]
  |  |  |  |  |  Branch (185:6): [True: 3.11M, False: 480k]
  |  |  |  |  ------------------
  |  |  |  |  186|  3.59M|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  3.11M|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|  3.11M|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|  3.11M|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  3.59M|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |  141|  3.59M|         UPDATE_MULTIVAR(NODE, hmap_next_with_hash(ITER_VAR(NODE))))
  |  |  ------------------
  |  |  |  |  193|     66|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|     66|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1333|  3.11M|        if (ofphdrs_equal(hdrs, &raw_hdrs->hdrs)) {
  ------------------
  |  Branch (1333:13): [True: 3.11M, False: 66]
  ------------------
 1334|  3.11M|            *raw = raw_hdrs->raw;
 1335|  3.11M|            return 0;
 1336|  3.11M|        }
 1337|  3.11M|    }
 1338|       |
 1339|   480k|    if (!VLOG_DROP_WARN(&rl)) {
  ------------------
  |  |  234|   480k|#define VLOG_DROP_WARN(RL) vlog_should_drop(&this_module, VLL_WARN, RL)
  ------------------
  |  Branch (1339:9): [True: 0, False: 480k]
  ------------------
 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|   480k|    return (hdrs->vendor ? OFPERR_OFPBRC_BAD_SUBTYPE
  ------------------
  |  Branch (1356:13): [True: 3.36k, False: 477k]
  ------------------
 1357|   480k|            : ofphdrs_is_stat(hdrs) ? OFPERR_OFPBRC_BAD_STAT
  ------------------
  |  Branch (1357:15): [True: 10.0k, False: 467k]
  ------------------
 1358|   477k|            : OFPERR_OFPBRC_BAD_TYPE);
 1359|  3.59M|}
ofp-msgs.c:ofphdrs_equal:
  200|  3.11M|{
  201|  3.11M|    return !memcmp(a, b, sizeof *a);
  202|  3.11M|}
ofp-msgs.c:ofphdrs_is_stat:
  362|   477k|{
  363|   477k|    return ofp_is_stat(hdrs->version, hdrs->type);
  364|   477k|}

ofputil_packet_in_format_to_string:
   41|    241|{
   42|    241|    switch (format) {
   43|    169|    case OFPUTIL_PACKET_IN_STD:
  ------------------
  |  Branch (43:5): [True: 169, False: 72]
  ------------------
   44|    169|        return "standard";
   45|     40|    case OFPUTIL_PACKET_IN_NXT:
  ------------------
  |  Branch (45:5): [True: 40, False: 201]
  ------------------
   46|     40|        return "nxt_packet_in";
   47|     32|    case OFPUTIL_PACKET_IN_NXT2:
  ------------------
  |  Branch (47:5): [True: 32, False: 209]
  ------------------
   48|     32|        return "nxt_packet_in2";
   49|      0|    default:
  ------------------
  |  Branch (49:5): [True: 0, False: 241]
  ------------------
   50|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
   51|    241|    }
   52|    241|}
ofputil_decode_set_packet_in_format:
   81|    334|{
   82|    334|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
   83|    334|    ovs_assert(ofpraw_pull_assert(&b) == OFPRAW_NXT_SET_PACKET_IN_FORMAT);
  ------------------
  |  |   62|    334|#define ovs_assert ovs_ignore
  ------------------
   84|    334|    ovs_be32 *spifp = ofpbuf_pull(&b, sizeof *spifp);
   85|    334|    uint32_t spif = ntohl(*spifp);
   86|       |
   87|    334|    switch (spif) {
   88|    169|    case OFPUTIL_PACKET_IN_STD:
  ------------------
  |  Branch (88:5): [True: 169, False: 165]
  ------------------
   89|    209|    case OFPUTIL_PACKET_IN_NXT:
  ------------------
  |  Branch (89:5): [True: 40, False: 294]
  ------------------
   90|    241|    case OFPUTIL_PACKET_IN_NXT2:
  ------------------
  |  Branch (90:5): [True: 32, False: 302]
  ------------------
   91|    241|        *format = spif;
   92|    241|        return 0;
   93|       |
   94|     93|    default:
  ------------------
  |  Branch (94:5): [True: 93, False: 241]
  ------------------
   95|     93|        VLOG_WARN_RL(&rl, "NXT_SET_PACKET_IN_FORMAT message specified invalid "
  ------------------
  |  |  224|     93|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     93|    do {                                                                \
  |  |  |  |  288|     93|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     93|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 93]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     93|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 93]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   96|     93|                     "packet-in format %"PRIu32, spif);
   97|     93|        return OFPERR_OFPBRC_EPERM;
   98|    334|    }
   99|    334|}
ofputil_decode_packet_in:
  233|   106k|{
  234|   106k|    uint32_t buffer_id;
  235|   106k|    size_t total_len;
  236|       |
  237|   106k|    memset(pin, 0, sizeof *pin);
  238|   106k|    pin->cookie = OVS_BE64_MAX;
  ------------------
  |  |   44|   106k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  239|   106k|    if (continuation) {
  ------------------
  |  Branch (239:9): [True: 106k, False: 0]
  ------------------
  240|   106k|        ofpbuf_use_const(continuation, NULL, 0);
  241|   106k|    }
  242|       |
  243|   106k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  244|   106k|    enum ofpraw raw = ofpraw_pull_assert(&b);
  245|   106k|    if (raw == OFPRAW_OFPT13_PACKET_IN || raw == OFPRAW_OFPT12_PACKET_IN) {
  ------------------
  |  Branch (245:9): [True: 696, False: 106k]
  |  Branch (245:43): [True: 60.5k, False: 45.6k]
  ------------------
  246|  61.2k|        const struct ofp12_packet_in *opi = ofpbuf_pull(&b, sizeof *opi);
  247|  61.2k|        const ovs_be64 *cookie = (raw == OFPRAW_OFPT13_PACKET_IN
  ------------------
  |  Branch (247:35): [True: 696, False: 60.5k]
  ------------------
  248|  61.2k|                                  ? ofpbuf_pull(&b, sizeof *cookie)
  249|  61.2k|                                  : NULL);
  250|  61.2k|        enum ofperr error = oxm_pull_match_loose(&b, false, tun_table,
  251|  61.2k|                                                 &pin->flow_metadata);
  252|  61.2k|        pin->flow_metadata.flow.tunnel.metadata.tab = tun_table;
  253|  61.2k|        if (error) {
  ------------------
  |  Branch (253:13): [True: 32.3k, False: 28.8k]
  ------------------
  254|  32.3k|            return error;
  255|  32.3k|        }
  256|       |
  257|  28.8k|        if (!ofpbuf_try_pull(&b, 2)) {
  ------------------
  |  Branch (257:13): [True: 2.12k, False: 26.7k]
  ------------------
  258|  2.12k|            return OFPERR_OFPBRC_BAD_LEN;
  259|  2.12k|        }
  260|       |
  261|  26.7k|        pin->reason = opi->reason;
  262|  26.7k|        pin->table_id = opi->table_id;
  263|  26.7k|        buffer_id = ntohl(opi->buffer_id);
  264|  26.7k|        total_len = ntohs(opi->total_len);
  265|  26.7k|        if (cookie) {
  ------------------
  |  Branch (265:13): [True: 277, False: 26.4k]
  ------------------
  266|    277|            pin->cookie = *cookie;
  267|    277|        }
  268|       |
  269|  26.7k|        pin->packet = b.data;
  270|  26.7k|        pin->packet_len = b.size;
  271|  45.6k|    } else if (raw == OFPRAW_OFPT10_PACKET_IN) {
  ------------------
  |  Branch (271:16): [True: 24.6k, False: 20.9k]
  ------------------
  272|  24.6k|        const struct ofp10_packet_in *opi;
  273|       |
  274|  24.6k|        opi = ofpbuf_pull(&b, offsetof(struct ofp10_packet_in, data));
  275|       |
  276|  24.6k|        pin->packet = CONST_CAST(uint8_t *, opi->data);
  ------------------
  |  |   85|  24.6k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  24.6k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  24.6k|     (TYPE) (POINTER))
  ------------------
  277|  24.6k|        pin->packet_len = b.size;
  278|       |
  279|  24.6k|        match_init_catchall(&pin->flow_metadata);
  280|  24.6k|        match_set_in_port(&pin->flow_metadata,
  281|  24.6k|                          u16_to_ofp(ntohs(opi->in_port)));
  282|  24.6k|        pin->reason = opi->reason;
  283|  24.6k|        buffer_id = ntohl(opi->buffer_id);
  284|  24.6k|        total_len = ntohs(opi->total_len);
  285|  24.6k|    } else if (raw == OFPRAW_OFPT11_PACKET_IN) {
  ------------------
  |  Branch (285:16): [True: 430, False: 20.5k]
  ------------------
  286|    430|        const struct ofp11_packet_in *opi;
  287|    430|        ofp_port_t in_port;
  288|    430|        enum ofperr error;
  289|       |
  290|    430|        opi = ofpbuf_pull(&b, sizeof *opi);
  291|       |
  292|    430|        pin->packet = b.data;
  293|    430|        pin->packet_len = b.size;
  294|       |
  295|    430|        buffer_id = ntohl(opi->buffer_id);
  296|    430|        error = ofputil_port_from_ofp11(opi->in_port, &in_port);
  297|    430|        if (error) {
  ------------------
  |  Branch (297:13): [True: 336, False: 94]
  ------------------
  298|    336|            return error;
  299|    336|        }
  300|     94|        match_init_catchall(&pin->flow_metadata);
  301|     94|        match_set_in_port(&pin->flow_metadata, in_port);
  302|     94|        total_len = ntohs(opi->total_len);
  303|     94|        pin->reason = opi->reason;
  304|     94|        pin->table_id = opi->table_id;
  305|  20.5k|    } else if (raw == OFPRAW_NXT_PACKET_IN) {
  ------------------
  |  Branch (305:16): [True: 4.72k, False: 15.8k]
  ------------------
  306|  4.72k|        const struct nx_packet_in *npi;
  307|  4.72k|        int error;
  308|       |
  309|  4.72k|        npi = ofpbuf_pull(&b, sizeof *npi);
  310|  4.72k|        error = nx_pull_match_loose(&b, ntohs(npi->match_len),
  311|  4.72k|                                    &pin->flow_metadata, NULL, NULL, false,
  312|  4.72k|                                    NULL);
  313|  4.72k|        if (error) {
  ------------------
  |  Branch (313:13): [True: 1.63k, False: 3.08k]
  ------------------
  314|  1.63k|            return error;
  315|  1.63k|        }
  316|       |
  317|  3.08k|        if (!ofpbuf_try_pull(&b, 2)) {
  ------------------
  |  Branch (317:13): [True: 10, False: 3.07k]
  ------------------
  318|     10|            return OFPERR_OFPBRC_BAD_LEN;
  319|     10|        }
  320|       |
  321|  3.07k|        pin->reason = npi->reason;
  322|  3.07k|        pin->table_id = npi->table_id;
  323|  3.07k|        pin->cookie = npi->cookie;
  324|       |
  325|  3.07k|        buffer_id = ntohl(npi->buffer_id);
  326|  3.07k|        total_len = ntohs(npi->total_len);
  327|       |
  328|  3.07k|        pin->packet = b.data;
  329|  3.07k|        pin->packet_len = b.size;
  330|  15.8k|    } else if (raw == OFPRAW_NXT_PACKET_IN2 || raw == OFPRAW_NXT_RESUME) {
  ------------------
  |  Branch (330:16): [True: 12.2k, False: 3.57k]
  |  Branch (330:48): [True: 3.57k, False: 0]
  ------------------
  331|  15.8k|        enum ofperr error = decode_nx_packet_in2(oh, loose, tun_table,
  332|  15.8k|                                                 vl_mff_map, pin, &total_len,
  333|  15.8k|                                                 &buffer_id, continuation);
  334|  15.8k|        if (error) {
  ------------------
  |  Branch (334:13): [True: 5.02k, False: 10.8k]
  ------------------
  335|  5.02k|            return error;
  336|  5.02k|        }
  337|  15.8k|    } else {
  338|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  339|      0|    }
  340|       |
  341|  65.3k|    if (total_lenp) {
  ------------------
  |  Branch (341:9): [True: 65.3k, False: 0]
  ------------------
  342|  65.3k|        *total_lenp = total_len;
  343|  65.3k|    }
  344|  65.3k|    if (buffer_idp) {
  ------------------
  |  Branch (344:9): [True: 65.3k, False: 0]
  ------------------
  345|  65.3k|        *buffer_idp = buffer_id;
  346|  65.3k|    }
  347|       |
  348|  65.3k|    return 0;
  349|   106k|}
ofputil_packet_in_reason_to_string:
  710|  80.4k|{
  711|  80.4k|    switch (reason) {
  712|  27.8k|    case OFPR_NO_MATCH:
  ------------------
  |  Branch (712:5): [True: 27.8k, False: 52.5k]
  ------------------
  713|  27.8k|        return "no_match";
  714|  3.49k|    case OFPR_ACTION:
  ------------------
  |  Branch (714:5): [True: 3.49k, False: 76.9k]
  ------------------
  715|  3.49k|        return "action";
  716|  3.32k|    case OFPR_INVALID_TTL:
  ------------------
  |  Branch (716:5): [True: 3.32k, False: 77.0k]
  ------------------
  717|  3.32k|        return "invalid_ttl";
  718|  2.29k|    case OFPR_ACTION_SET:
  ------------------
  |  Branch (718:5): [True: 2.29k, False: 78.1k]
  ------------------
  719|  2.29k|        return "action_set";
  720|  5.27k|    case OFPR_GROUP:
  ------------------
  |  Branch (720:5): [True: 5.27k, False: 75.1k]
  ------------------
  721|  5.27k|        return "group";
  722|  1.56k|    case OFPR_PACKET_OUT:
  ------------------
  |  Branch (722:5): [True: 1.56k, False: 78.8k]
  ------------------
  723|  1.56k|        return "packet_out";
  724|  2.99k|    case OFPR_EXPLICIT_MISS:
  ------------------
  |  Branch (724:5): [True: 2.99k, False: 77.4k]
  ------------------
  725|  4.64k|    case OFPR_IMPLICIT_MISS:
  ------------------
  |  Branch (725:5): [True: 1.65k, False: 78.7k]
  ------------------
  726|  4.64k|        return "";
  727|       |
  728|    208|    case OFPR_N_REASONS:
  ------------------
  |  Branch (728:5): [True: 208, False: 80.2k]
  ------------------
  729|  31.9k|    default:
  ------------------
  |  Branch (729:5): [True: 31.7k, False: 48.6k]
  ------------------
  730|  31.9k|        snprintf(reasonbuf, bufsize, "%d", (int) reason);
  731|  31.9k|        return reasonbuf;
  732|  80.4k|    }
  733|  80.4k|}
ofputil_decode_packet_in_private:
  818|   106k|{
  819|   106k|    memset(pin, 0, sizeof *pin);
  820|       |
  821|   106k|    struct ofpbuf continuation;
  822|   106k|    enum ofperr error;
  823|   106k|    error = ofputil_decode_packet_in(oh, loose, tun_table, vl_mff_map,
  824|   106k|                                     &pin->base, total_len, buffer_id,
  825|   106k|                                     &continuation);
  826|   106k|    if (error) {
  ------------------
  |  Branch (826:9): [True: 41.5k, False: 65.3k]
  ------------------
  827|  41.5k|        return error;
  828|  41.5k|    }
  829|       |
  830|  65.3k|    struct ofpbuf actions, action_set;
  831|  65.3k|    ofpbuf_init(&actions, 0);
  832|  65.3k|    ofpbuf_init(&action_set, 0);
  833|       |
  834|  65.3k|    uint8_t table_id = 0;
  835|  65.3k|    ovs_be64 cookie = 0;
  836|       |
  837|  65.3k|    struct ofpbuf stack;
  838|  65.3k|    ofpbuf_init(&stack, 0);
  839|       |
  840|  82.5k|    while (continuation.size > 0) {
  ------------------
  |  Branch (840:12): [True: 20.3k, False: 62.2k]
  ------------------
  841|  20.3k|        struct ofpbuf payload;
  842|  20.3k|        uint64_t type;
  843|       |
  844|  20.3k|        error = ofpprop_pull(&continuation, &payload, &type);
  845|  20.3k|        if (error) {
  ------------------
  |  Branch (845:13): [True: 1.95k, False: 18.3k]
  ------------------
  846|  1.95k|            break;
  847|  1.95k|        }
  848|       |
  849|  18.3k|        switch (type) {
  850|  2.89k|        case NXCPT_BRIDGE:
  ------------------
  |  Branch (850:9): [True: 2.89k, False: 15.4k]
  ------------------
  851|  2.89k|            error = ofpprop_parse_uuid(&payload, &pin->bridge);
  852|  2.89k|            break;
  853|       |
  854|  3.04k|        case NXCPT_STACK:
  ------------------
  |  Branch (854:9): [True: 3.04k, False: 15.3k]
  ------------------
  855|  3.04k|            error = parse_stack_prop(&payload, &stack);
  856|  3.04k|            break;
  857|       |
  858|  1.25k|        case NXCPT_MIRRORS:
  ------------------
  |  Branch (858:9): [True: 1.25k, False: 17.1k]
  ------------------
  859|  1.25k|            error = ofpprop_parse_u32(&payload, &pin->mirrors);
  860|  1.25k|            break;
  861|       |
  862|    763|        case NXCPT_CONNTRACKED:
  ------------------
  |  Branch (862:9): [True: 763, False: 17.6k]
  ------------------
  863|    763|            pin->conntracked = true;
  864|    763|            break;
  865|       |
  866|     36|        case NXCPT_TABLE_ID:
  ------------------
  |  Branch (866:9): [True: 36, False: 18.3k]
  ------------------
  867|     36|            error = ofpprop_parse_u8(&payload, &table_id);
  868|     36|            break;
  869|       |
  870|    382|        case NXCPT_COOKIE:
  ------------------
  |  Branch (870:9): [True: 382, False: 17.9k]
  ------------------
  871|    382|            error = ofpprop_parse_be64(&payload, &cookie);
  872|    382|            break;
  873|       |
  874|  4.61k|        case NXCPT_ACTIONS: {
  ------------------
  |  Branch (874:9): [True: 4.61k, False: 13.7k]
  ------------------
  875|  4.61k|            struct ofpact_unroll_xlate *unroll
  876|  4.61k|                = ofpact_put_UNROLL_XLATE(&actions);
  877|  4.61k|            unroll->rule_table_id = table_id;
  878|  4.61k|            unroll->rule_cookie = cookie;
  879|  4.61k|            error = parse_actions_property(&payload, oh->version, &actions);
  880|  4.61k|            break;
  881|      0|        }
  882|       |
  883|  2.30k|        case NXCPT_ACTION_SET:
  ------------------
  |  Branch (883:9): [True: 2.30k, False: 16.0k]
  ------------------
  884|  2.30k|            error = parse_actions_property(&payload, oh->version, &action_set);
  885|  2.30k|            break;
  886|       |
  887|    577|        case NXCPT_ODP_PORT: {
  ------------------
  |  Branch (887:9): [True: 577, False: 17.7k]
  ------------------
  888|    577|            uint32_t value;
  889|    577|            error = ofpprop_parse_u32(&payload, &value);
  890|    577|            if (!error) {
  ------------------
  |  Branch (890:17): [True: 499, False: 78]
  ------------------
  891|    499|                pin->odp_port = u32_to_odp(value);
  892|    499|            }
  893|    577|            break;
  894|      0|         }
  895|       |
  896|  2.49k|        default:
  ------------------
  |  Branch (896:9): [True: 2.49k, False: 15.8k]
  ------------------
  897|  2.49k|            error = OFPPROP_UNKNOWN(loose, "continuation", type);
  ------------------
  |  |  144|  2.49k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  898|  2.49k|            break;
  899|  18.3k|        }
  900|  18.3k|        if (error) {
  ------------------
  |  Branch (900:13): [True: 1.17k, False: 17.1k]
  ------------------
  901|  1.17k|            break;
  902|  1.17k|        }
  903|  18.3k|    }
  904|       |
  905|  65.3k|    pin->actions_len = actions.size;
  906|  65.3k|    pin->actions = ofpbuf_steal_data(&actions);
  907|  65.3k|    pin->action_set_len = action_set.size;
  908|  65.3k|    pin->action_set = ofpbuf_steal_data(&action_set);
  909|  65.3k|    pin->stack_size = stack.size;
  910|  65.3k|    pin->stack = ofpbuf_steal_data(&stack);
  911|       |
  912|  65.3k|    if (error) {
  ------------------
  |  Branch (912:9): [True: 3.13k, False: 62.2k]
  ------------------
  913|  3.13k|        ofputil_packet_in_private_destroy(pin);
  914|  3.13k|    }
  915|       |
  916|  65.3k|    return error;
  917|  65.3k|}
ofputil_packet_in_private_format:
  926|  62.2k|{
  927|  62.2k|    char reasonbuf[OFPUTIL_PACKET_IN_REASON_BUFSIZE];
  928|  62.2k|    const struct ofputil_packet_in *public = &pin->base;
  929|       |
  930|  62.2k|    if (public->table_id
  ------------------
  |  Branch (930:9): [True: 18.4k, False: 43.8k]
  ------------------
  931|  43.8k|        || ofputil_table_map_get_name(table_map, public->table_id)) {
  ------------------
  |  Branch (931:12): [True: 0, False: 43.8k]
  ------------------
  932|  18.4k|        ds_put_format(s, " table_id=");
  933|  18.4k|        ofputil_format_table(public->table_id, table_map, s);
  934|  18.4k|    }
  935|       |
  936|  62.2k|    if (public->cookie != OVS_BE64_MAX) {
  ------------------
  |  |   44|  62.2k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  |  Branch (936:9): [True: 3.35k, False: 58.9k]
  ------------------
  937|  3.35k|        ds_put_format(s, " cookie=0x%"PRIx64, ntohll(public->cookie));
  938|  3.35k|    }
  939|       |
  940|  62.2k|    ds_put_format(s, " total_len=%"PRIuSIZE" ", total_len);
  941|       |
  942|  62.2k|    match_format(&public->flow_metadata, port_map, s, OFP_DEFAULT_PRIORITY);
  ------------------
  |  |  138|  62.2k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
  943|       |
  944|  62.2k|    ds_put_format(s, " (via %s)",
  945|  62.2k|                  ofputil_packet_in_reason_to_string(public->reason,
  946|  62.2k|                                                     reasonbuf,
  947|  62.2k|                                                     sizeof reasonbuf));
  948|       |
  949|  62.2k|    ds_put_format(s, " data_len=%"PRIuSIZE, public->packet_len);
  ------------------
  |  |  120|  62.2k|#define PRIuSIZE "zu"
  ------------------
  950|  62.2k|    if (buffer_id == UINT32_MAX) {
  ------------------
  |  Branch (950:9): [True: 8.42k, False: 53.8k]
  ------------------
  951|  8.42k|        ds_put_format(s, " (unbuffered)");
  952|  8.42k|        if (total_len != public->packet_len) {
  ------------------
  |  Branch (952:13): [True: 2.87k, False: 5.54k]
  ------------------
  953|  2.87k|            ds_put_format(s, " (***total_len != data_len***)");
  954|  2.87k|        }
  955|  53.8k|    } else {
  956|  53.8k|        ds_put_format(s, " buffer=0x%08"PRIx32, buffer_id);
  957|  53.8k|        if (total_len < public->packet_len) {
  ------------------
  |  Branch (957:13): [True: 1.41k, False: 52.4k]
  ------------------
  958|  1.41k|            ds_put_format(s, " (***total_len < data_len***)");
  959|  1.41k|        }
  960|  53.8k|    }
  961|  62.2k|    ds_put_char(s, '\n');
  962|       |
  963|  62.2k|    if (public->userdata_len) {
  ------------------
  |  Branch (963:9): [True: 575, False: 61.6k]
  ------------------
  964|    575|        ds_put_cstr(s, " userdata=");
  965|    575|        ds_put_hex_with_delimiter(s, pin->base.userdata,
  966|    575|                                  pin->base.userdata_len, ".");
  967|    575|        ds_put_char(s, '\n');
  968|    575|    }
  969|       |
  970|  62.2k|    if (!uuid_is_zero(&pin->bridge)) {
  ------------------
  |  Branch (970:9): [True: 2.58k, False: 59.6k]
  ------------------
  971|  2.58k|        ds_put_format(s, " continuation.bridge="UUID_FMT"\n",
  972|  2.58k|                      UUID_ARGS(&pin->bridge));
  ------------------
  |  |   39|  2.58k|    ((unsigned int) ((UUID)->parts[0])),            \
  |  |   40|  2.58k|    ((unsigned int) ((UUID)->parts[1] >> 16)),      \
  |  |   41|  2.58k|    ((unsigned int) ((UUID)->parts[1] & 0xffff)),   \
  |  |   42|  2.58k|    ((unsigned int) ((UUID)->parts[2] >> 16)),      \
  |  |   43|  2.58k|    ((unsigned int) ((UUID)->parts[2] & 0xffff)),   \
  |  |   44|  2.58k|    ((unsigned int) ((UUID)->parts[3]))
  ------------------
  973|  2.58k|    }
  974|       |
  975|  62.2k|    if (pin->stack_size) {
  ------------------
  |  Branch (975:9): [True: 1.89k, False: 60.3k]
  ------------------
  976|  1.89k|        ds_put_cstr(s, " continuation.stack=(top)");
  977|       |
  978|  1.89k|        struct ofpbuf pin_stack;
  979|  1.89k|        ofpbuf_use_const(&pin_stack, pin->stack, pin->stack_size);
  980|       |
  981|  4.24k|        while (pin_stack.size) {
  ------------------
  |  Branch (981:16): [True: 2.35k, False: 1.89k]
  ------------------
  982|  2.35k|            uint8_t len;
  983|  2.35k|            uint8_t *val = nx_stack_pop(&pin_stack, &len);
  984|  2.35k|            union mf_subvalue value;
  985|       |
  986|  2.35k|            ds_put_char(s, ' ');
  987|  2.35k|            memset(&value, 0, sizeof value - len);
  988|  2.35k|            memcpy(&value.u8[sizeof value - len], val, len);
  989|  2.35k|            mf_subvalue_format(&value, s);
  990|  2.35k|        }
  991|  1.89k|        ds_put_cstr(s, " (bottom)\n");
  992|  1.89k|    }
  993|       |
  994|  62.2k|    if (pin->mirrors) {
  ------------------
  |  Branch (994:9): [True: 950, False: 61.3k]
  ------------------
  995|    950|        ds_put_format(s, " continuation.mirrors=0x%"PRIx32"\n",
  996|    950|                      pin->mirrors);
  997|    950|    }
  998|       |
  999|  62.2k|    if (pin->conntracked) {
  ------------------
  |  Branch (999:9): [True: 286, False: 61.9k]
  ------------------
 1000|    286|        ds_put_cstr(s, " continuation.conntracked=true\n");
 1001|    286|    }
 1002|       |
 1003|  62.2k|    struct ofpact_format_params fp = {
 1004|  62.2k|        .port_map = port_map,
 1005|  62.2k|        .table_map = table_map,
 1006|  62.2k|        .s = s,
 1007|  62.2k|    };
 1008|       |
 1009|  62.2k|    if (pin->actions_len) {
  ------------------
  |  Branch (1009:9): [True: 2.92k, False: 59.3k]
  ------------------
 1010|  2.92k|        ds_put_cstr(s, " continuation.actions=");
 1011|  2.92k|        ofpacts_format(pin->actions, pin->actions_len, &fp);
 1012|  2.92k|        ds_put_char(s, '\n');
 1013|  2.92k|    }
 1014|       |
 1015|  62.2k|    if (pin->action_set_len) {
  ------------------
  |  Branch (1015:9): [True: 1.80k, False: 60.4k]
  ------------------
 1016|  1.80k|        ds_put_cstr(s, " continuation.action_set=");
 1017|  1.80k|        ofpacts_format(pin->action_set, pin->action_set_len, &fp);
 1018|  1.80k|        ds_put_char(s, '\n');
 1019|  1.80k|    }
 1020|       |
 1021|  62.2k|    if (pin->odp_port) {
  ------------------
  |  Branch (1021:9): [True: 498, False: 61.7k]
  ------------------
 1022|    498|        ds_put_format(s, " continuation.odp_port=%"PRIu32, pin->odp_port);
 1023|    498|        ds_put_char(s, '\n');
 1024|    498|    }
 1025|       |
 1026|  62.2k|    if (verbosity > 0) {
  ------------------
  |  Branch (1026:9): [True: 62.2k, False: 0]
  ------------------
 1027|  62.2k|        char *packet = ofp_packet_to_string(
 1028|  62.2k|            public->packet, public->packet_len,
 1029|  62.2k|            public->flow_metadata.flow.packet_type);
 1030|  62.2k|        ds_put_cstr(s, packet);
 1031|  62.2k|        free(packet);
 1032|  62.2k|    }
 1033|  62.2k|    if (verbosity > 2) {
  ------------------
  |  Branch (1033:9): [True: 0, False: 62.2k]
  ------------------
 1034|       |        ds_put_hex_dump(s, public->packet, public->packet_len, 0, false);
 1035|      0|    }
 1036|  62.2k|}
ofputil_packet_in_private_destroy:
 1046|  65.3k|{
 1047|  65.3k|    if (pin) {
  ------------------
  |  Branch (1047:9): [True: 65.3k, False: 0]
  ------------------
 1048|  65.3k|        free(pin->stack);
 1049|  65.3k|        free(pin->actions);
 1050|  65.3k|        free(pin->action_set);
 1051|  65.3k|    }
 1052|  65.3k|}
ofputil_decode_packet_out:
 1070|   160k|{
 1071|   160k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
 1072|   160k|    enum ofpraw raw = ofpraw_pull_assert(&b);
 1073|       |
 1074|   160k|    ofpbuf_clear(ofpacts);
 1075|   160k|    match_init_catchall(&po->flow_metadata);
 1076|   160k|    if (raw == OFPRAW_OFPT15_PACKET_OUT) {
  ------------------
  |  Branch (1076:9): [True: 72.2k, False: 88.3k]
  ------------------
 1077|  72.2k|        enum ofperr error;
 1078|  72.2k|        const struct ofp15_packet_out *opo = ofpbuf_pull(&b, sizeof *opo);
 1079|       |
 1080|  72.2k|        po->buffer_id = ntohl(opo->buffer_id);
 1081|  72.2k|        error = oxm_pull_match_loose(&b, true, tun_table, &po->flow_metadata);
 1082|  72.2k|        if (error) {
  ------------------
  |  Branch (1082:13): [True: 50.3k, False: 21.9k]
  ------------------
 1083|  50.3k|            return error;
 1084|  50.3k|        }
 1085|       |
 1086|  21.9k|        if (!po->flow_metadata.wc.masks.in_port.ofp_port) {
  ------------------
  |  Branch (1086:13): [True: 19.7k, False: 2.16k]
  ------------------
 1087|  19.7k|            return OFPERR_OFPBRC_BAD_PORT;
 1088|  19.7k|        }
 1089|       |
 1090|  2.16k|        error = ofpacts_pull_openflow_actions(&b, ntohs(opo->actions_len),
 1091|  2.16k|                                              oh->version, NULL, NULL,
 1092|  2.16k|                                              ofpacts);
 1093|  2.16k|        if (error) {
  ------------------
  |  Branch (1093:13): [True: 381, False: 1.78k]
  ------------------
 1094|    381|            return error;
 1095|    381|        }
 1096|  88.3k|    } else if (raw == OFPRAW_OFPT11_PACKET_OUT) {
  ------------------
  |  Branch (1096:16): [True: 54.8k, False: 33.5k]
  ------------------
 1097|  54.8k|        enum ofperr error;
 1098|  54.8k|        ofp_port_t in_port;
 1099|  54.8k|        const struct ofp11_packet_out *opo = ofpbuf_pull(&b, sizeof *opo);
 1100|       |
 1101|  54.8k|        po->buffer_id = ntohl(opo->buffer_id);
 1102|  54.8k|        error = ofputil_port_from_ofp11(opo->in_port, &in_port);
 1103|  54.8k|        if (error) {
  ------------------
  |  Branch (1103:13): [True: 3.87k, False: 50.9k]
  ------------------
 1104|  3.87k|            return error;
 1105|  3.87k|        }
 1106|  50.9k|        match_set_packet_type(&po->flow_metadata, htonl(PT_ETH));
 1107|  50.9k|        match_set_in_port(&po->flow_metadata, in_port);
 1108|       |
 1109|  50.9k|        error = ofpacts_pull_openflow_actions(&b, ntohs(opo->actions_len),
 1110|  50.9k|                                              oh->version, NULL, NULL,
 1111|  50.9k|                                              ofpacts);
 1112|  50.9k|        if (error) {
  ------------------
  |  Branch (1112:13): [True: 38.3k, False: 12.5k]
  ------------------
 1113|  38.3k|            return error;
 1114|  38.3k|        }
 1115|  50.9k|    } else if (raw == OFPRAW_OFPT10_PACKET_OUT) {
  ------------------
  |  Branch (1115:16): [True: 33.5k, False: 0]
  ------------------
 1116|  33.5k|        enum ofperr error;
 1117|  33.5k|        const struct ofp10_packet_out *opo = ofpbuf_pull(&b, sizeof *opo);
 1118|       |
 1119|  33.5k|        po->buffer_id = ntohl(opo->buffer_id);
 1120|  33.5k|        match_set_packet_type(&po->flow_metadata, htonl(PT_ETH));
 1121|  33.5k|        match_set_in_port(&po->flow_metadata, u16_to_ofp(ntohs(opo->in_port)));
 1122|       |
 1123|  33.5k|        error = ofpacts_pull_openflow_actions(&b, ntohs(opo->actions_len),
 1124|  33.5k|                                              oh->version, NULL, NULL,
 1125|  33.5k|                                              ofpacts);
 1126|  33.5k|        if (error) {
  ------------------
  |  Branch (1126:13): [True: 25.6k, False: 7.88k]
  ------------------
 1127|  25.6k|            return error;
 1128|  25.6k|        }
 1129|  33.5k|    } else {
 1130|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1131|      0|    }
 1132|       |
 1133|  22.2k|    ofp_port_t in_port = po->flow_metadata.flow.in_port.ofp_port;
 1134|  22.2k|    if (ofp_to_u16(in_port) >= ofp_to_u16(OFPP_MAX)
  ------------------
  |  |   33|  22.2k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|  22.2k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1134:9): [True: 1.15k, False: 21.0k]
  ------------------
 1135|  22.2k|        && in_port != OFPP_LOCAL
  ------------------
  |  |   46|  1.15k|#define OFPP_LOCAL      OFP_PORT_C(0xfffe) /* Local openflow "port". */
  |  |  ------------------
  |  |  |  |  157|  23.3k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1135:12): [True: 1.07k, False: 74]
  ------------------
 1136|  22.2k|        && in_port != OFPP_NONE
  ------------------
  |  |   47|  1.07k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|  23.3k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1136:12): [True: 910, False: 168]
  ------------------
 1137|    910|        && in_port != OFPP_CONTROLLER) {
  ------------------
  |  |   45|    910|#define OFPP_CONTROLLER OFP_PORT_C(0xfffd) /* Send to controller. */
  |  |  ------------------
  |  |  |  |  157|    910|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1137:12): [True: 353, False: 557]
  ------------------
 1138|    353|        VLOG_WARN_RL(&rl, "packet-out has bad input port %#"PRIx32,
  ------------------
  |  |  224|    353|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    353|    do {                                                                \
  |  |  |  |  288|    353|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    353|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 353]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    353|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 353]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1139|    353|                     po->flow_metadata.flow.in_port.ofp_port);
 1140|    353|        return OFPERR_OFPBRC_BAD_PORT;
 1141|    353|    }
 1142|       |
 1143|  21.8k|    po->ofpacts = ofpacts->data;
 1144|  21.8k|    po->ofpacts_len = ofpacts->size;
 1145|       |
 1146|  21.8k|    if (po->buffer_id == UINT32_MAX) {
  ------------------
  |  Branch (1146:9): [True: 736, False: 21.1k]
  ------------------
 1147|    736|        po->packet = b.data;
 1148|    736|        po->packet_len = b.size;
 1149|  21.1k|    } else {
 1150|  21.1k|        po->packet = NULL;
 1151|  21.1k|        po->packet_len = 0;
 1152|  21.1k|    }
 1153|       |
 1154|  21.8k|    return 0;
 1155|  22.2k|}
ofputil_packet_out_format:
 1243|  21.8k|{
 1244|  21.8k|    ds_put_char(s, ' ');
 1245|  21.8k|    match_format(&po->flow_metadata, port_map, s, OFP_DEFAULT_PRIORITY);
  ------------------
  |  |  138|  21.8k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
 1246|       |
 1247|  21.8k|    ds_put_cstr(s, " actions=");
 1248|  21.8k|    struct ofpact_format_params fp = {
 1249|  21.8k|        .port_map = port_map,
 1250|  21.8k|        .table_map = table_map,
 1251|  21.8k|        .s = s,
 1252|  21.8k|    };
 1253|  21.8k|    ofpacts_format(po->ofpacts, po->ofpacts_len, &fp);
 1254|       |
 1255|  21.8k|    if (po->buffer_id == UINT32_MAX) {
  ------------------
  |  Branch (1255:9): [True: 736, False: 21.1k]
  ------------------
 1256|    736|        ds_put_format(s, " data_len=%"PRIuSIZE, po->packet_len);
  ------------------
  |  |  120|    736|#define PRIuSIZE "zu"
  ------------------
 1257|    736|        if (verbosity > 0 && po->packet_len > 0) {
  ------------------
  |  Branch (1257:13): [True: 736, False: 0]
  |  Branch (1257:30): [True: 633, False: 103]
  ------------------
 1258|    633|            ovs_be32 po_packet_type = po->flow_metadata.flow.packet_type;
 1259|    633|            char *packet = ofp_packet_to_string(po->packet, po->packet_len,
 1260|    633|                                                po_packet_type);
 1261|    633|            ds_put_char(s, '\n');
 1262|    633|            ds_put_cstr(s, packet);
 1263|    633|            free(packet);
 1264|    633|        }
 1265|    736|        if (verbosity > 2) {
  ------------------
  |  Branch (1265:13): [True: 0, False: 736]
  ------------------
 1266|      0|            ds_put_hex_dump(s, po->packet, po->packet_len, 0, false);
 1267|      0|        }
 1268|  21.1k|    } else {
 1269|       |        ds_put_format(s, " buffer=0x%08"PRIx32, po->buffer_id);
 1270|  21.1k|    }
 1271|  21.8k|}
ofp-packet.c:decode_nx_packet_in2:
  110|  15.8k|{
  111|  15.8k|    *total_len = 0;
  112|  15.8k|    *buffer_id = UINT32_MAX;
  113|       |
  114|  15.8k|    struct ofpbuf properties;
  115|  15.8k|    ofpbuf_use_const(&properties, oh, ntohs(oh->length));
  116|  15.8k|    ofpraw_pull_assert(&properties);
  117|       |
  118|  53.3k|    while (properties.size > 0) {
  ------------------
  |  Branch (118:12): [True: 41.1k, False: 12.1k]
  ------------------
  119|  41.1k|        struct ofpbuf payload;
  120|  41.1k|        uint64_t type;
  121|       |
  122|  41.1k|        enum ofperr error = ofpprop_pull(&properties, &payload, &type);
  123|  41.1k|        if (error) {
  ------------------
  |  Branch (123:13): [True: 2.52k, False: 38.6k]
  ------------------
  124|  2.52k|            return error;
  125|  2.52k|        }
  126|       |
  127|  38.6k|        switch (type) {
  128|  13.4k|        case NXPINT_PACKET:
  ------------------
  |  Branch (128:9): [True: 13.4k, False: 25.1k]
  ------------------
  129|  13.4k|            pin->packet = payload.msg;
  130|  13.4k|            pin->packet_len = ofpbuf_msgsize(&payload);
  131|  13.4k|            break;
  132|       |
  133|  3.23k|        case NXPINT_FULL_LEN: {
  ------------------
  |  Branch (133:9): [True: 3.23k, False: 35.4k]
  ------------------
  134|  3.23k|            uint32_t u32;
  135|  3.23k|            error = ofpprop_parse_u32(&payload, &u32);
  136|  3.23k|            if (!error) {
  ------------------
  |  Branch (136:17): [True: 3.19k, False: 31]
  ------------------
  137|  3.19k|                *total_len = u32;
  138|  3.19k|            }
  139|  3.23k|            break;
  140|      0|        }
  141|       |
  142|    972|        case NXPINT_BUFFER_ID:
  ------------------
  |  Branch (142:9): [True: 972, False: 37.6k]
  ------------------
  143|    972|            error = ofpprop_parse_u32(&payload, buffer_id);
  144|    972|            break;
  145|       |
  146|    184|        case NXPINT_TABLE_ID:
  ------------------
  |  Branch (146:9): [True: 184, False: 38.4k]
  ------------------
  147|    184|            error = ofpprop_parse_u8(&payload, &pin->table_id);
  148|    184|            break;
  149|       |
  150|    184|        case NXPINT_COOKIE:
  ------------------
  |  Branch (150:9): [True: 184, False: 38.4k]
  ------------------
  151|    184|            error = ofpprop_parse_be64(&payload, &pin->cookie);
  152|    184|            break;
  153|       |
  154|    274|        case NXPINT_REASON: {
  ------------------
  |  Branch (154:9): [True: 274, False: 38.3k]
  ------------------
  155|    274|            uint8_t reason;
  156|    274|            error = ofpprop_parse_u8(&payload, &reason);
  157|    274|            if (!error) {
  ------------------
  |  Branch (157:17): [True: 240, False: 34]
  ------------------
  158|    240|                pin->reason = reason;
  159|    240|            }
  160|    274|            break;
  161|      0|        }
  162|       |
  163|  2.86k|        case NXPINT_METADATA:
  ------------------
  |  Branch (163:9): [True: 2.86k, False: 35.7k]
  ------------------
  164|  2.86k|            error = oxm_decode_match(payload.msg, ofpbuf_msgsize(&payload),
  165|  2.86k|                                     loose, tun_table, vl_mff_map,
  166|  2.86k|                                     &pin->flow_metadata);
  167|  2.86k|            pin->flow_metadata.flow.tunnel.metadata.tab = tun_table;
  168|  2.86k|            break;
  169|       |
  170|  1.00k|        case NXPINT_USERDATA:
  ------------------
  |  Branch (170:9): [True: 1.00k, False: 37.6k]
  ------------------
  171|  1.00k|            pin->userdata = payload.msg;
  172|  1.00k|            pin->userdata_len = ofpbuf_msgsize(&payload);
  173|  1.00k|            break;
  174|       |
  175|  10.9k|        case NXPINT_CONTINUATION:
  ------------------
  |  Branch (175:9): [True: 10.9k, False: 27.6k]
  ------------------
  176|  10.9k|            if (continuation) {
  ------------------
  |  Branch (176:17): [True: 10.9k, False: 0]
  ------------------
  177|  10.9k|                error = ofpprop_parse_nested(&payload, continuation);
  178|  10.9k|            }
  179|  10.9k|            break;
  180|       |
  181|  5.47k|        default:
  ------------------
  |  Branch (181:9): [True: 5.47k, False: 33.1k]
  ------------------
  182|  5.47k|            error = OFPPROP_UNKNOWN(loose, "NX_PACKET_IN2", type);
  ------------------
  |  |  144|  5.47k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  183|  5.47k|            break;
  184|  38.6k|        }
  185|  38.6k|        if (error) {
  ------------------
  |  Branch (185:13): [True: 1.19k, False: 37.4k]
  ------------------
  186|  1.19k|            return error;
  187|  1.19k|        }
  188|  38.6k|    }
  189|       |
  190|  12.1k|    if (!pin->packet_len) {
  ------------------
  |  Branch (190:9): [True: 1.23k, False: 10.8k]
  ------------------
  191|  1.23k|        VLOG_WARN_RL(&rl, "NXT_PACKET_IN2 lacks packet");
  ------------------
  |  |  224|  1.23k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.23k|    do {                                                                \
  |  |  |  |  288|  1.23k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.23k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.23k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.23k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.23k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  192|  1.23k|        return OFPERR_OFPBRC_BAD_LEN;
  193|  10.8k|    } else if (!*total_len) {
  ------------------
  |  Branch (193:16): [True: 7.81k, False: 3.07k]
  ------------------
  194|  7.81k|        *total_len = pin->packet_len;
  195|  7.81k|    } else if (*total_len < pin->packet_len) {
  ------------------
  |  Branch (195:16): [True: 66, False: 3.01k]
  ------------------
  196|     66|        VLOG_WARN_RL(&rl, "NXT_PACKET_IN2 claimed full_len < len");
  ------------------
  |  |  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]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  197|     66|        return OFPERR_OFPBRC_BAD_LEN;
  198|     66|    }
  199|       |
  200|  10.8k|    return 0;
  201|  12.1k|}
ofp-packet.c:parse_stack_prop:
  776|  3.04k|{
  777|  3.04k|    unsigned int len = ofpbuf_msgsize(property);
  778|  3.04k|    if (len > sizeof(union mf_subvalue)) {
  ------------------
  |  Branch (778:9): [True: 69, False: 2.97k]
  ------------------
  779|     69|        VLOG_WARN_RL(&rl, "NXCPT_STACK property has bad length %u",
  ------------------
  |  |  224|     69|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     69|    do {                                                                \
  |  |  |  |  288|     69|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     69|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 69]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     69|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 69]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  780|     69|                     len);
  781|     69|        return OFPERR_OFPBPC_BAD_LEN;
  782|     69|    }
  783|  2.97k|    nx_stack_push_bottom(stack, property->msg, len);
  784|  2.97k|    return 0;
  785|  3.04k|}
ofp-packet.c:parse_actions_property:
  790|  6.91k|{
  791|  6.91k|    if (!ofpbuf_try_pull(property, ROUND_UP(ofpbuf_headersize(property), 8))) {
  ------------------
  |  |  303|  6.91k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|  6.91k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (791:9): [True: 62, False: 6.85k]
  ------------------
  792|     62|        VLOG_WARN_RL(&rl, "actions property has bad length %"PRIu32,
  ------------------
  |  |  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]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  793|     62|                     property->size);
  794|     62|        return OFPERR_OFPBPC_BAD_LEN;
  795|     62|    }
  796|       |
  797|  6.85k|    return ofpacts_pull_openflow_actions(property, property->size,
  798|  6.85k|                                         version, NULL, NULL, ofpacts);
  799|  6.91k|}

ofputil_port_map_get_name:
   53|   148k|{
   54|   148k|    struct namemap_node *node
   55|   148k|        = (map
  ------------------
  |  Branch (55:12): [True: 0, False: 148k]
  ------------------
   56|   148k|           ? namemap_find_by_number(&map->map, ofp_to_u16(ofp_port))
   57|   148k|           : NULL);
   58|   148k|    return node && !node->duplicate ? node->name : NULL;
  ------------------
  |  Branch (58:12): [True: 0, False: 148k]
  |  Branch (58:20): [True: 0, False: 0]
  ------------------
   59|   148k|}
ofputil_port_from_ofp11:
   84|   163k|{
   85|   163k|    uint32_t ofp11_port_h = ntohl(ofp11_port);
   86|       |
   87|   163k|    if (ofp11_port_h < ofp_to_u16(OFPP_MAX)) {
  ------------------
  |  |   33|   163k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|   163k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (87:9): [True: 105k, False: 58.4k]
  ------------------
   88|   105k|        *ofp10_port = u16_to_ofp(ofp11_port_h);
   89|   105k|        return 0;
   90|   105k|    } else if (ofp11_port_h >= ofp11_to_u32(OFPP11_MAX)) {
  ------------------
  |  |   71|  58.4k|#define OFPP11_MAX    OFP11_PORT_C(0xffffff00)
  |  |  ------------------
  |  |  |  |  159|  58.4k|#define OFP11_PORT_C(X) ((OVS_FORCE ofp11_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (90:16): [True: 29.3k, False: 29.1k]
  ------------------
   91|  29.3k|        *ofp10_port = u16_to_ofp(ofp11_port_h - OFPP11_OFFSET);
  ------------------
  |  |   72|  29.3k|#define OFPP11_OFFSET 0xffff0000    /* OFPP11_MAX - OFPP_MAX */
  ------------------
   92|  29.3k|        return 0;
   93|  29.3k|    } else {
   94|  29.1k|        *ofp10_port = OFPP_NONE;
  ------------------
  |  |   47|  29.1k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|  29.1k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
   95|       |
   96|  29.1k|        static struct vlog_rate_limit rll = VLOG_RATE_LIMIT_INIT(1, 5);
  ------------------
  |  |  110|  29.1k|        {                                                                 \
  |  |  111|  29.1k|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|   116k|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [True: 0, Folded]
  |  |  |  |  |  Branch (37:48): [Folded, False: 29.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  29.1k|            0,                              /* first_dropped */           \
  |  |  113|  29.1k|            0,                              /* last_dropped */            \
  |  |  114|  29.1k|            0,                              /* n_dropped */               \
  |  |  115|  29.1k|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  29.1k|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  29.1k|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  29.1k|        }
  ------------------
   97|  29.1k|        VLOG_WARN_RL(&rll, "port %"PRIu32" is outside the supported "
  ------------------
  |  |  224|  29.1k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  29.1k|    do {                                                                \
  |  |  |  |  288|  29.1k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  29.1k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 29.1k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  29.1k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 29.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   98|  29.1k|                     "range 0 through %d or 0x%"PRIx32" through 0x%"PRIx32,
   99|  29.1k|                     ofp11_port_h, ofp_to_u16(OFPP_MAX) - 1,
  100|  29.1k|                     ofp11_to_u32(OFPP11_MAX), UINT32_MAX);
  101|       |
  102|  29.1k|        return OFPERR_OFPBAC_BAD_OUT_PORT;
  103|  29.1k|    }
  104|   163k|}
ofputil_port_to_ofp11:
  112|  30.4k|{
  113|       |    return htonl(ofp_to_u16(ofp10_port) < ofp_to_u16(OFPP_MAX)
  ------------------
  |  Branch (113:12): [True: 5.68k, False: 24.7k]
  ------------------
  114|  30.4k|                 ? ofp_to_u16(ofp10_port)
  115|  30.4k|                 : ofp_to_u16(ofp10_port) + OFPP11_OFFSET);
  116|  30.4k|}
ofputil_port_get_reserved_name:
  229|   173k|{
  230|   173k|    switch (port) {
  231|      0|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  232|      0|        OFPUTIL_NAMED_PORTS
  ------------------
  |  |  119|  1.95k|        OFPUTIL_NAMED_PORT(IN_PORT)             \
  |  |  ------------------
  |  |  |  |  231|  1.95k|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  1.95k|#define OFPP_IN_PORT    OFP_PORT_C(0xfff8) /* Where the packet came in. */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  1.95k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 1.95k, False: 171k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  120|  2.23k|        OFPUTIL_NAMED_PORT(TABLE)               \
  |  |  ------------------
  |  |  |  |  231|  2.23k|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  |   40|  2.23k|#define OFPP_TABLE      OFP_PORT_C(0xfff9) /* Perform actions in flow table. */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  2.23k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 2.23k, False: 171k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|  2.23k|        OFPUTIL_NAMED_PORT(NORMAL)              \
  |  |  ------------------
  |  |  |  |  231|    789|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|    789|#define OFPP_NORMAL     OFP_PORT_C(0xfffa) /* Process with normal L2/L3. */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|    789|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 789, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  122|    789|        OFPUTIL_NAMED_PORT(FLOOD)               \
  |  |  ------------------
  |  |  |  |  231|    719|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|    719|#define OFPP_FLOOD      OFP_PORT_C(0xfffb) /* All ports except input port and
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|    719|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 719, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  123|    719|        OFPUTIL_NAMED_PORT(ALL)                 \
  |  |  ------------------
  |  |  |  |  231|    566|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|    566|#define OFPP_ALL        OFP_PORT_C(0xfffc) /* All ports except input port. */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|    566|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 566, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  124|  3.27k|        OFPUTIL_NAMED_PORT(CONTROLLER)          \
  |  |  ------------------
  |  |  |  |  231|  3.27k|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  |   45|  3.27k|#define OFPP_CONTROLLER OFP_PORT_C(0xfffd) /* Send to controller. */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  3.27k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 3.27k, False: 170k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  125|  3.27k|        OFPUTIL_NAMED_PORT(LOCAL)               \
  |  |  ------------------
  |  |  |  |  231|    600|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  |   46|    600|#define OFPP_LOCAL      OFP_PORT_C(0xfffe) /* Local openflow "port". */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|    600|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 600, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  126|  14.9k|        OFPUTIL_NAMED_PORT(ANY)                 \
  |  |  ------------------
  |  |  |  |  231|  14.9k|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  |   80|  14.9k|#define OFPP_ANY OFPP_NONE
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|  14.9k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  157|  14.9k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 14.9k, False: 158k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  127|  14.9k|        OFPUTIL_NAMED_PORT(UNSET)
  |  |  ------------------
  |  |  |  |  231|     86|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  |   38|     86|#define OFPP_UNSET      OFP_PORT_C(0xfff7) /* For OXM_OF_ACTSET_OUTPUT only. */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|     86|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 86, False: 173k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  233|      0|#undef OFPUTIL_NAMED_PORT
  234|       |
  235|   148k|    default:
  ------------------
  |  Branch (235:5): [True: 148k, False: 25.1k]
  ------------------
  236|       |        return NULL;
  237|   173k|    }
  238|   173k|}
ofputil_format_port:
  246|   173k|{
  247|   173k|    const char *reserved_name = ofputil_port_get_reserved_name(port);
  248|   173k|    if (reserved_name) {
  ------------------
  |  Branch (248:9): [True: 25.1k, False: 148k]
  ------------------
  249|  25.1k|        ds_put_cstr(s, reserved_name);
  250|  25.1k|        return;
  251|  25.1k|    }
  252|       |
  253|   148k|    const char *port_name = ofputil_port_map_get_name(port_map, port);
  254|   148k|    if (port_name) {
  ------------------
  |  Branch (254:9): [True: 0, False: 148k]
  ------------------
  255|      0|        namemap_put_name(port_name, s);
  256|      0|        return;
  257|      0|    }
  258|       |
  259|   148k|    ds_put_format(s, "%"PRIu32, port);
  260|   148k|}
ofputil_port_config_format:
  311|  21.5k|{
  312|  21.5k|    ofp_print_bit_names(s, config, ofputil_port_config_to_name, ' ');
  313|  21.5k|    ds_put_char(s, '\n');
  314|  21.5k|}
ofputil_port_state_format:
  341|  16.4k|{
  342|  16.4k|    enum ofputil_port_state stp_state;
  343|       |
  344|       |    /* The STP state is a 2-bit field so it doesn't fit in with the bitmask
  345|       |     * pattern.  We have to special case it.
  346|       |     *
  347|       |     * OVS doesn't support STP, so this field will always be 0 if we are
  348|       |     * talking to OVS, so we'd always print STP_LISTEN in that case.
  349|       |     * Therefore, we don't print anything at all if the value is STP_LISTEN, to
  350|       |     * avoid confusing users. */
  351|  16.4k|    stp_state = state & OFPUTIL_PS_STP_MASK;
  352|  16.4k|    if (stp_state) {
  ------------------
  |  Branch (352:9): [True: 7.55k, False: 8.90k]
  ------------------
  353|  7.55k|        ds_put_cstr(s, (stp_state == OFPUTIL_PS_STP_LEARN ? "STP_LEARN"
  ------------------
  |  Branch (353:25): [True: 2.56k, False: 4.99k]
  ------------------
  354|  7.55k|                        : stp_state == OFPUTIL_PS_STP_FORWARD ? "STP_FORWARD"
  ------------------
  |  Branch (354:27): [True: 1.71k, False: 3.27k]
  ------------------
  355|  4.99k|                        : "STP_BLOCK"));
  356|  7.55k|        state &= ~OFPUTIL_PS_STP_MASK;
  357|  7.55k|        if (state) {
  ------------------
  |  Branch (357:13): [True: 3.51k, False: 4.04k]
  ------------------
  358|  3.51k|            ofp_print_bit_names(s, state, ofputil_port_state_to_name, ' ');
  359|  3.51k|        }
  360|  8.90k|    } else {
  361|  8.90k|        ofp_print_bit_names(s, state, ofputil_port_state_to_name, ' ');
  362|  8.90k|    }
  363|  16.4k|    ds_put_char(s, '\n');
  364|  16.4k|}
ofputil_decode_port_desc_stats_request:
  662|    523|{
  663|    523|    struct ofpbuf b = ofpbuf_const_initializer(request,
  664|    523|                                               ntohs(request->length));
  665|    523|    enum ofpraw raw = ofpraw_pull_assert(&b);
  666|    523|    if (raw == OFPRAW_OFPST10_PORT_DESC_REQUEST) {
  ------------------
  |  Branch (666:9): [True: 288, False: 235]
  ------------------
  667|    288|        *port = OFPP_ANY;
  ------------------
  |  |   80|    288|#define OFPP_ANY OFPP_NONE
  |  |  ------------------
  |  |  |  |   47|    288|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|    288|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  668|    288|        return 0;
  669|    288|    } else if (raw == OFPRAW_OFPST15_PORT_DESC_REQUEST) {
  ------------------
  |  Branch (669:16): [True: 235, False: 0]
  ------------------
  670|    235|        ovs_be32 *ofp11_port;
  671|       |
  672|    235|        ofp11_port = ofpbuf_pull(&b, sizeof *ofp11_port);
  673|    235|        return ofputil_port_from_ofp11(*ofp11_port, port);
  674|    235|    } else {
  675|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  676|      0|    }
  677|    523|}
ofputil_pull_phy_port:
  728|  23.0k|{
  729|  23.0k|    memset(pp, 0, sizeof *pp);
  730|       |
  731|  23.0k|    switch (ofp_version) {
  732|  17.7k|    case OFP10_VERSION: {
  ------------------
  |  Branch (732:5): [True: 17.7k, False: 5.32k]
  ------------------
  733|  17.7k|        const struct ofp10_phy_port *opp = ofpbuf_try_pull(b, sizeof *opp);
  734|  17.7k|        return opp ? ofputil_decode_ofp10_phy_port(pp, opp) : EOF;
  ------------------
  |  Branch (734:16): [True: 15.4k, False: 2.25k]
  ------------------
  735|      0|    }
  736|    596|    case OFP11_VERSION:
  ------------------
  |  Branch (736:5): [True: 596, False: 22.4k]
  ------------------
  737|  1.29k|    case OFP12_VERSION:
  ------------------
  |  Branch (737:5): [True: 701, False: 22.3k]
  ------------------
  738|  1.54k|    case OFP13_VERSION: {
  ------------------
  |  Branch (738:5): [True: 245, False: 22.7k]
  ------------------
  739|  1.54k|        const struct ofp11_port *op = ofpbuf_try_pull(b, sizeof *op);
  740|  1.54k|        return op ? ofputil_decode_ofp11_port(pp, op) : EOF;
  ------------------
  |  Branch (740:16): [True: 1.20k, False: 336]
  ------------------
  741|  1.29k|    }
  742|    513|    case OFP14_VERSION:
  ------------------
  |  Branch (742:5): [True: 513, False: 22.5k]
  ------------------
  743|  3.78k|    case OFP15_VERSION:
  ------------------
  |  Branch (743:5): [True: 3.26k, False: 19.7k]
  ------------------
  744|  3.78k|        return b->size ? ofputil_pull_ofp14_port(pp, b) : EOF;
  ------------------
  |  Branch (744:16): [True: 1.85k, False: 1.92k]
  ------------------
  745|      0|    default:
  ------------------
  |  Branch (745:5): [True: 0, False: 23.0k]
  ------------------
  746|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  747|  23.0k|    }
  748|  23.0k|}
ofputil_phy_port_format:
  752|  16.4k|{
  753|  16.4k|    char name[sizeof port->name];
  754|  16.4k|    int j;
  755|       |
  756|  16.4k|    memcpy(name, port->name, sizeof name);
  757|  34.4k|    for (j = 0; j < sizeof name - 1; j++) {
  ------------------
  |  Branch (757:17): [True: 33.7k, False: 713]
  ------------------
  758|  33.7k|        if (!isprint((unsigned char) name[j])) {
  ------------------
  |  Branch (758:13): [True: 15.7k, False: 18.0k]
  ------------------
  759|  15.7k|            break;
  760|  15.7k|        }
  761|  33.7k|    }
  762|  16.4k|    name[j] = '\0';
  763|       |
  764|  16.4k|    ds_put_char(s, ' ');
  765|  16.4k|    ofputil_format_port(port->port_no, NULL, s);
  766|  16.4k|    ds_put_format(s, "(%s): addr:"ETH_ADDR_FMT"\n",
  767|  16.4k|                  name, ETH_ADDR_ARGS(port->hw_addr));
  ------------------
  |  |  371|  16.4k|#define ETH_ADDR_ARGS(EA) ETH_ADDR_BYTES_ARGS((EA).ea)
  |  |  ------------------
  |  |  |  |  373|  16.4k|         (EAB)[0], (EAB)[1], (EAB)[2], (EAB)[3], (EAB)[4], (EAB)[5]
  |  |  ------------------
  ------------------
  768|       |
  769|  16.4k|    ds_put_cstr(s, "     config:     ");
  770|  16.4k|    ofputil_port_config_format(s, port->config);
  771|       |
  772|  16.4k|    ds_put_cstr(s, "     state:      ");
  773|  16.4k|    ofputil_port_state_format(s, port->state);
  774|       |
  775|  16.4k|    if (port->curr) {
  ------------------
  |  Branch (775:9): [True: 13.0k, False: 3.45k]
  ------------------
  776|  13.0k|        ds_put_format(s, "     current:    ");
  777|  13.0k|        netdev_features_format(s, port->curr);
  778|  13.0k|    }
  779|  16.4k|    if (port->advertised) {
  ------------------
  |  Branch (779:9): [True: 12.4k, False: 3.98k]
  ------------------
  780|  12.4k|        ds_put_format(s, "     advertised: ");
  781|  12.4k|        netdev_features_format(s, port->advertised);
  782|  12.4k|    }
  783|  16.4k|    if (port->supported) {
  ------------------
  |  Branch (783:9): [True: 12.7k, False: 3.70k]
  ------------------
  784|  12.7k|        ds_put_format(s, "     supported:  ");
  785|  12.7k|        netdev_features_format(s, port->supported);
  786|  12.7k|    }
  787|  16.4k|    if (port->peer) {
  ------------------
  |  Branch (787:9): [True: 13.0k, False: 3.40k]
  ------------------
  788|  13.0k|        ds_put_format(s, "     peer:       ");
  789|  13.0k|        netdev_features_format(s, port->peer);
  790|  13.0k|    }
  791|  16.4k|    ds_put_format(s, "     speed: %"PRIu32" Mbps now, "
  792|  16.4k|                  "%"PRIu32" Mbps max\n",
  793|  16.4k|                  port->curr_speed / UINT32_C(1000),
  794|       |                  port->max_speed / UINT32_C(1000));
  795|  16.4k|}
ofputil_phy_ports_format:
  814|  6.16k|{
  815|  6.16k|    struct ofputil_phy_port *ports;
  816|  6.16k|    size_t allocated_ports, n_ports;
  817|  6.16k|    int retval;
  818|  6.16k|    size_t i;
  819|       |
  820|  6.16k|    ports = NULL;
  821|  6.16k|    allocated_ports = 0;
  822|  20.7k|    for (n_ports = 0; ; n_ports++) {
  823|  20.7k|        if (n_ports >= allocated_ports) {
  ------------------
  |  Branch (823:13): [True: 7.58k, False: 13.2k]
  ------------------
  824|  7.58k|            ports = x2nrealloc(ports, &allocated_ports, sizeof *ports);
  825|  7.58k|        }
  826|       |
  827|  20.7k|        retval = ofputil_pull_phy_port(ofp_version, b, &ports[n_ports]);
  828|  20.7k|        if (retval) {
  ------------------
  |  Branch (828:13): [True: 6.16k, False: 14.6k]
  ------------------
  829|  6.16k|            break;
  830|  6.16k|        }
  831|  20.7k|    }
  832|       |
  833|  6.16k|    qsort(ports, n_ports, sizeof *ports, compare_ports);
  834|  20.7k|    for (i = 0; i < n_ports; i++) {
  ------------------
  |  Branch (834:17): [True: 14.6k, False: 6.16k]
  ------------------
  835|  14.6k|        ofputil_phy_port_format(string, &ports[i]);
  836|  14.6k|    }
  837|  6.16k|    free(ports);
  838|       |
  839|  6.16k|    return retval != EOF ? retval : 0;
  ------------------
  |  Branch (839:12): [True: 1.65k, False: 4.51k]
  ------------------
  840|  6.16k|}
ofputil_decode_port_status:
  849|  2.36k|{
  850|  2.36k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  851|  2.36k|    ofpraw_pull_assert(&b);
  852|       |
  853|  2.36k|    const struct ofp_port_status *ops = ofpbuf_pull(&b, sizeof *ops);
  854|  2.36k|    if (ops->reason != OFPPR_ADD &&
  ------------------
  |  Branch (854:9): [True: 1.55k, False: 806]
  ------------------
  855|  1.55k|        ops->reason != OFPPR_DELETE &&
  ------------------
  |  Branch (855:9): [True: 320, False: 1.23k]
  ------------------
  856|    320|        ops->reason != OFPPR_MODIFY) {
  ------------------
  |  Branch (856:9): [True: 117, False: 203]
  ------------------
  857|    117|        return OFPERR_NXBRC_BAD_REASON;
  858|    117|    }
  859|  2.24k|    ps->reason = ops->reason;
  860|       |
  861|  2.24k|    int retval = ofputil_pull_phy_port(oh->version, &b, &ps->desc);
  862|  2.24k|    ovs_assert(retval != EOF);
  ------------------
  |  |   62|  2.24k|#define ovs_assert ovs_ignore
  ------------------
  863|  2.24k|    return retval;
  864|  2.36k|}
ofputil_port_status_format:
  910|  1.83k|{
  911|  1.83k|    if (ps->reason == OFPPR_ADD) {
  ------------------
  |  Branch (911:9): [True: 661, False: 1.17k]
  ------------------
  912|    661|        ds_put_format(s, " ADD:");
  913|  1.17k|    } else if (ps->reason == OFPPR_DELETE) {
  ------------------
  |  Branch (913:16): [True: 1.13k, False: 43]
  ------------------
  914|  1.13k|        ds_put_format(s, " DEL:");
  915|  1.13k|    } else if (ps->reason == OFPPR_MODIFY) {
  ------------------
  |  Branch (915:16): [True: 43, False: 0]
  ------------------
  916|     43|        ds_put_format(s, " MOD:");
  917|     43|    }
  918|       |
  919|  1.83k|    ofputil_phy_port_format(s, &ps->desc);
  920|  1.83k|}
ofputil_decode_port_mod:
 1022|  4.39k|{
 1023|  4.39k|    memset(pm, 0, sizeof *pm);
 1024|       |
 1025|  4.39k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
 1026|  4.39k|    enum ofpraw raw = ofpraw_pull_assert(&b);
 1027|       |
 1028|  4.39k|    enum ofperr error;
 1029|  4.39k|    if (raw == OFPRAW_OFPT10_PORT_MOD) {
  ------------------
  |  Branch (1029:9): [True: 1.20k, False: 3.19k]
  ------------------
 1030|  1.20k|        error = ofputil_decode_ofp10_port_mod(b.data, pm);
 1031|  3.19k|    } else if (raw == OFPRAW_OFPT11_PORT_MOD) {
  ------------------
  |  Branch (1031:16): [True: 1.36k, False: 1.83k]
  ------------------
 1032|  1.36k|        error = ofputil_decode_ofp11_port_mod(b.data, pm);
 1033|  1.83k|    } else if (raw == OFPRAW_OFPT14_PORT_MOD) {
  ------------------
  |  Branch (1033:16): [True: 1.83k, False: 0]
  ------------------
 1034|  1.83k|        error = ofputil_decode_ofp14_port_mod(&b, loose, pm);
 1035|  1.83k|    } else {
 1036|      0|        error = OFPERR_OFPBRC_BAD_TYPE;
 1037|      0|    }
 1038|       |
 1039|  4.39k|    pm->config &= pm->mask;
 1040|  4.39k|    return error;
 1041|  4.39k|}
ofputil_port_mod_format:
 1108|  2.56k|{
 1109|  2.56k|    ds_put_cstr(s, " port: ");
 1110|  2.56k|    ofputil_format_port(pm->port_no, port_map, s);
 1111|  2.56k|    ds_put_format(s, ": addr:"ETH_ADDR_FMT"\n",
 1112|  2.56k|                  ETH_ADDR_ARGS(pm->hw_addr));
  ------------------
  |  |  371|  2.56k|#define ETH_ADDR_ARGS(EA) ETH_ADDR_BYTES_ARGS((EA).ea)
  |  |  ------------------
  |  |  |  |  373|  2.56k|         (EAB)[0], (EAB)[1], (EAB)[2], (EAB)[3], (EAB)[4], (EAB)[5]
  |  |  ------------------
  ------------------
 1113|       |
 1114|  2.56k|    ds_put_cstr(s, "     config: ");
 1115|  2.56k|    ofputil_port_config_format(s, pm->config);
 1116|       |
 1117|  2.56k|    ds_put_cstr(s, "     mask:   ");
 1118|  2.56k|    ofputil_port_config_format(s, pm->mask);
 1119|       |
 1120|  2.56k|    ds_put_cstr(s, "     advertise: ");
 1121|  2.56k|    if (pm->advertise) {
  ------------------
  |  Branch (1121:9): [True: 2.21k, False: 348]
  ------------------
 1122|  2.21k|        netdev_features_format(s, pm->advertise);
 1123|  2.21k|    } else {
 1124|    348|        ds_put_cstr(s, "UNCHANGED\n");
 1125|    348|    }
 1126|  2.56k|}
ofputil_count_port_stats:
 1606|  9.44k|{
 1607|  9.44k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
 1608|  9.44k|    ofpraw_pull_assert(&b);
 1609|       |
 1610|  17.6k|    for (size_t n = 0; ; n++) {
 1611|  17.6k|        struct ofputil_port_stats ps;
 1612|  17.6k|        if (ofputil_decode_port_stats(&ps, &b)) {
  ------------------
  |  Branch (1612:13): [True: 9.44k, False: 8.22k]
  ------------------
 1613|  9.44k|            return n;
 1614|  9.44k|        }
 1615|  8.22k|        netdev_free_custom_stats_counters(&ps.custom_stats);
 1616|  8.22k|    }
 1617|  9.44k|}
ofputil_decode_port_stats:
 1634|  35.3k|{
 1635|  35.3k|    enum ofperr error;
 1636|  35.3k|    enum ofpraw raw;
 1637|       |
 1638|  35.3k|    memset(&(ps->stats), 0xFF, sizeof (ps->stats));
 1639|  35.3k|    memset(&(ps->custom_stats), 0, sizeof (ps->custom_stats));
 1640|       |
 1641|  35.3k|    error = (msg->header ? ofpraw_decode(&raw, msg->header)
  ------------------
  |  Branch (1641:14): [True: 25.8k, False: 9.44k]
  ------------------
 1642|  35.3k|             : ofpraw_pull(&raw, msg));
 1643|  35.3k|    if (error) {
  ------------------
  |  Branch (1643:9): [True: 0, False: 35.3k]
  ------------------
 1644|      0|        return error;
 1645|      0|    }
 1646|       |
 1647|  35.3k|    if (!msg->size) {
  ------------------
  |  Branch (1647:9): [True: 8.62k, False: 26.7k]
  ------------------
 1648|  8.62k|        return EOF;
 1649|  26.7k|    } else if (raw == OFPRAW_OFPST14_PORT_REPLY) {
  ------------------
  |  Branch (1649:16): [True: 16.0k, False: 10.7k]
  ------------------
 1650|  16.0k|        return ofputil_pull_ofp14_port_stats(ps, msg);
 1651|  16.0k|    } else if (raw == OFPRAW_OFPST13_PORT_REPLY) {
  ------------------
  |  Branch (1651:16): [True: 2.21k, False: 8.50k]
  ------------------
 1652|  2.21k|        const struct ofp13_port_stats *ps13;
 1653|  2.21k|        ps13 = ofpbuf_try_pull(msg, sizeof *ps13);
 1654|  2.21k|        if (!ps13) {
  ------------------
  |  Branch (1654:13): [True: 0, False: 2.21k]
  ------------------
 1655|      0|            goto bad_len;
 1656|      0|        }
 1657|  2.21k|        return ofputil_port_stats_from_ofp13(ps, ps13);
 1658|  8.50k|    } else if (raw == OFPRAW_OFPST11_PORT_REPLY) {
  ------------------
  |  Branch (1658:16): [True: 402, False: 8.10k]
  ------------------
 1659|    402|        const struct ofp11_port_stats *ps11;
 1660|       |
 1661|    402|        ps11 = ofpbuf_try_pull(msg, sizeof *ps11);
 1662|    402|        if (!ps11) {
  ------------------
  |  Branch (1662:13): [True: 0, False: 402]
  ------------------
 1663|      0|            goto bad_len;
 1664|      0|        }
 1665|    402|        return ofputil_port_stats_from_ofp11(ps, ps11);
 1666|  8.10k|    } else if (raw == OFPRAW_OFPST10_PORT_REPLY) {
  ------------------
  |  Branch (1666:16): [True: 8.10k, False: 0]
  ------------------
 1667|  8.10k|        const struct ofp10_port_stats *ps10;
 1668|       |
 1669|  8.10k|        ps10 = ofpbuf_try_pull(msg, sizeof *ps10);
 1670|  8.10k|        if (!ps10) {
  ------------------
  |  Branch (1670:13): [True: 0, False: 8.10k]
  ------------------
 1671|      0|            goto bad_len;
 1672|      0|        }
 1673|  8.10k|        return ofputil_port_stats_from_ofp10(ps, ps10);
 1674|  8.10k|    } 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|  35.3k|}
ofputil_format_port_stats:
 1712|  8.22k|{
 1713|  8.22k|    ds_put_cstr(string, "  port ");
 1714|  8.22k|    if (ofp_to_u16(ps->port_no) < 10) {
  ------------------
  |  Branch (1714:9): [True: 898, False: 7.32k]
  ------------------
 1715|    898|        ds_put_char(string, ' ');
 1716|    898|    }
 1717|  8.22k|    ofputil_format_port(ps->port_no, port_map, string);
 1718|       |
 1719|  8.22k|    ds_put_cstr(string, ": rx ");
 1720|  8.22k|    print_port_stat(string, "pkts=", ps->stats.rx_packets, 1);
 1721|  8.22k|    print_port_stat(string, "bytes=", ps->stats.rx_bytes, 1);
 1722|  8.22k|    print_port_stat(string, "drop=", ps->stats.rx_dropped, 1);
 1723|  8.22k|    print_port_stat(string, "errs=", ps->stats.rx_errors, 1);
 1724|  8.22k|    print_port_stat(string, "frame=", ps->stats.rx_frame_errors, 1);
 1725|  8.22k|    print_port_stat(string, "over=", ps->stats.rx_over_errors, 1);
 1726|  8.22k|    print_port_stat(string, "crc=", ps->stats.rx_crc_errors, 0);
 1727|       |
 1728|  8.22k|    ds_put_cstr(string, "           tx ");
 1729|  8.22k|    print_port_stat(string, "pkts=", ps->stats.tx_packets, 1);
 1730|  8.22k|    print_port_stat(string, "bytes=", ps->stats.tx_bytes, 1);
 1731|  8.22k|    print_port_stat(string, "drop=", ps->stats.tx_dropped, 1);
 1732|  8.22k|    print_port_stat(string, "errs=", ps->stats.tx_errors, 1);
 1733|  8.22k|    print_port_stat(string, "coll=", ps->stats.collisions, 0);
 1734|       |
 1735|  8.22k|    if (ps->duration_sec != UINT32_MAX) {
  ------------------
  |  Branch (1735:9): [True: 3.51k, False: 4.71k]
  ------------------
 1736|  3.51k|        ds_put_cstr(string, "           duration=");
 1737|  3.51k|        ofp_print_duration(string, ps->duration_sec, ps->duration_nsec);
 1738|  3.51k|        ds_put_char(string, '\n');
 1739|  3.51k|    }
 1740|  8.22k|    struct ds string_ext_stats = DS_EMPTY_INITIALIZER;
  ------------------
  |  |   46|  8.22k|#define DS_EMPTY_INITIALIZER { NULL, 0, 0 }
  ------------------
 1741|       |
 1742|  8.22k|    ds_init(&string_ext_stats);
 1743|       |
 1744|  8.22k|    print_port_stat_cond(&string_ext_stats, "1_to_64_packets=",
 1745|  8.22k|                         ps->stats.rx_1_to_64_packets);
 1746|  8.22k|    print_port_stat_cond(&string_ext_stats, "65_to_127_packets=",
 1747|  8.22k|                         ps->stats.rx_65_to_127_packets);
 1748|  8.22k|    print_port_stat_cond(&string_ext_stats, "128_to_255_packets=",
 1749|  8.22k|                         ps->stats.rx_128_to_255_packets);
 1750|  8.22k|    print_port_stat_cond(&string_ext_stats, "256_to_511_packets=",
 1751|  8.22k|                         ps->stats.rx_256_to_511_packets);
 1752|  8.22k|    print_port_stat_cond(&string_ext_stats, "512_to_1023_packets=",
 1753|  8.22k|                         ps->stats.rx_512_to_1023_packets);
 1754|  8.22k|    print_port_stat_cond(&string_ext_stats, "1024_to_1522_packets=",
 1755|  8.22k|                         ps->stats.rx_1024_to_1522_packets);
 1756|  8.22k|    print_port_stat_cond(&string_ext_stats, "1523_to_max_packets=",
 1757|  8.22k|                         ps->stats.rx_1523_to_max_packets);
 1758|  8.22k|    print_port_stat_cond(&string_ext_stats, "broadcast_packets=",
 1759|  8.22k|                         ps->stats.rx_broadcast_packets);
 1760|  8.22k|    print_port_stat_cond(&string_ext_stats, "undersized_errors=",
 1761|  8.22k|                         ps->stats.rx_undersized_errors);
 1762|  8.22k|    print_port_stat_cond(&string_ext_stats, "oversize_errors=",
 1763|  8.22k|                         ps->stats.rx_oversize_errors);
 1764|  8.22k|    print_port_stat_cond(&string_ext_stats, "rx_fragmented_errors=",
 1765|  8.22k|                         ps->stats.rx_fragmented_errors);
 1766|  8.22k|    print_port_stat_cond(&string_ext_stats, "rx_jabber_errors=",
 1767|  8.22k|                         ps->stats.rx_jabber_errors);
 1768|       |
 1769|  8.22k|    if (string_ext_stats.length != 0) {
  ------------------
  |  Branch (1769:9): [True: 0, False: 8.22k]
  ------------------
 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|  8.22k|    ds_init(&string_ext_stats);
 1779|       |
 1780|  8.22k|    print_port_stat_cond(&string_ext_stats, "1_to_64_packets=",
 1781|  8.22k|                         ps->stats.tx_1_to_64_packets);
 1782|  8.22k|    print_port_stat_cond(&string_ext_stats, "65_to_127_packets=",
 1783|  8.22k|                         ps->stats.tx_65_to_127_packets);
 1784|  8.22k|    print_port_stat_cond(&string_ext_stats, "128_to_255_packets=",
 1785|  8.22k|                         ps->stats.tx_128_to_255_packets);
 1786|  8.22k|    print_port_stat_cond(&string_ext_stats, "256_to_511_packets=",
 1787|  8.22k|                         ps->stats.tx_256_to_511_packets);
 1788|  8.22k|    print_port_stat_cond(&string_ext_stats, "512_to_1023_packets=",
 1789|  8.22k|                         ps->stats.tx_512_to_1023_packets);
 1790|  8.22k|    print_port_stat_cond(&string_ext_stats, "1024_to_1522_packets=",
 1791|  8.22k|                         ps->stats.tx_1024_to_1522_packets);
 1792|  8.22k|    print_port_stat_cond(&string_ext_stats, "1523_to_max_packets=",
 1793|  8.22k|                         ps->stats.tx_1523_to_max_packets);
 1794|  8.22k|    print_port_stat_cond(&string_ext_stats, "multicast_packets=",
 1795|  8.22k|                         ps->stats.tx_multicast_packets);
 1796|  8.22k|    print_port_stat_cond(&string_ext_stats, "broadcast_packets=",
 1797|  8.22k|                         ps->stats.tx_broadcast_packets);
 1798|       |
 1799|  8.22k|    if (string_ext_stats.length != 0) {
  ------------------
  |  Branch (1799:9): [True: 0, False: 8.22k]
  ------------------
 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|  8.22k|    if (ps->custom_stats.size) {
  ------------------
  |  Branch (1808:9): [True: 1.00k, False: 7.21k]
  ------------------
 1809|  1.00k|        ds_put_cstr(string, "           CUSTOM Statistics");
 1810|  10.9k|        for (int i = 0; i < ps->custom_stats.size; i++) {
  ------------------
  |  Branch (1810:25): [True: 9.91k, False: 1.00k]
  ------------------
 1811|       |            /* 3 counters in the row */
 1812|  9.91k|            if (ps->custom_stats.counters[i].name[0]) {
  ------------------
  |  Branch (1812:17): [True: 4.36k, False: 5.55k]
  ------------------
 1813|  4.36k|                if (i % 3 == 0) {
  ------------------
  |  Branch (1813:21): [True: 1.43k, False: 2.93k]
  ------------------
 1814|  1.43k|                    ds_put_cstr(string, "\n");
 1815|  1.43k|                    ds_put_cstr(string, "                      ");
 1816|  2.93k|                } else {
 1817|  2.93k|                    ds_put_char(string, ' ');
 1818|  2.93k|                }
 1819|  4.36k|                ds_put_format(string, "%s=%"PRIu64",",
 1820|  4.36k|                              ps->custom_stats.counters[i].name,
 1821|  4.36k|                              ps->custom_stats.counters[i].value);
 1822|  4.36k|            }
 1823|  9.91k|        }
 1824|  1.00k|        ds_put_cstr(string, "\n");
 1825|  1.00k|    }
 1826|  8.22k|}
ofputil_decode_port_stats_request:
 1835|  2.76k|{
 1836|  2.76k|    switch ((enum ofp_version)request->version) {
 1837|    381|    case OFP15_VERSION:
  ------------------
  |  Branch (1837:5): [True: 381, False: 2.38k]
  ------------------
 1838|    437|    case OFP14_VERSION:
  ------------------
  |  Branch (1838:5): [True: 56, False: 2.71k]
  ------------------
 1839|    524|    case OFP13_VERSION:
  ------------------
  |  Branch (1839:5): [True: 87, False: 2.68k]
  ------------------
 1840|  1.29k|    case OFP12_VERSION:
  ------------------
  |  Branch (1840:5): [True: 767, False: 2.00k]
  ------------------
 1841|  2.57k|    case OFP11_VERSION: {
  ------------------
  |  Branch (1841:5): [True: 1.28k, False: 1.48k]
  ------------------
 1842|  2.57k|        const struct ofp11_port_stats_request *psr11 = ofpmsg_body(request);
 1843|  2.57k|        return ofputil_port_from_ofp11(psr11->port_no, ofp10_port);
 1844|  1.29k|    }
 1845|       |
 1846|    197|    case OFP10_VERSION: {
  ------------------
  |  Branch (1846:5): [True: 197, False: 2.57k]
  ------------------
 1847|    197|        const struct ofp10_port_stats_request *psr10 = ofpmsg_body(request);
 1848|    197|        *ofp10_port = u16_to_ofp(ntohs(psr10->port_no));
 1849|    197|        return 0;
 1850|  1.29k|    }
 1851|       |
 1852|      0|    default:
  ------------------
  |  Branch (1852:5): [True: 0, False: 2.76k]
  ------------------
 1853|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1854|  2.76k|    }
 1855|  2.76k|}
ofp-port.c:ofputil_port_config_to_name:
  293|  51.5k|{
  294|  51.5k|    enum ofputil_port_config pc = bit;
  295|       |
  296|  51.5k|    switch (pc) {
  ------------------
  |  Branch (296:13): [True: 51.5k, False: 0]
  ------------------
  297|  8.16k|    case OFPUTIL_PC_PORT_DOWN:    return "PORT_DOWN";
  ------------------
  |  Branch (297:5): [True: 8.16k, False: 43.4k]
  ------------------
  298|  6.40k|    case OFPUTIL_PC_NO_STP:       return "NO_STP";
  ------------------
  |  Branch (298:5): [True: 6.40k, False: 45.1k]
  ------------------
  299|  7.56k|    case OFPUTIL_PC_NO_RECV:      return "NO_RECV";
  ------------------
  |  Branch (299:5): [True: 7.56k, False: 44.0k]
  ------------------
  300|  7.55k|    case OFPUTIL_PC_NO_RECV_STP:  return "NO_RECV_STP";
  ------------------
  |  Branch (300:5): [True: 7.55k, False: 44.0k]
  ------------------
  301|  6.21k|    case OFPUTIL_PC_NO_FLOOD:     return "NO_FLOOD";
  ------------------
  |  Branch (301:5): [True: 6.21k, False: 45.3k]
  ------------------
  302|  8.08k|    case OFPUTIL_PC_NO_FWD:       return "NO_FWD";
  ------------------
  |  Branch (302:5): [True: 8.08k, False: 43.4k]
  ------------------
  303|  7.59k|    case OFPUTIL_PC_NO_PACKET_IN: return "NO_PACKET_IN";
  ------------------
  |  Branch (303:5): [True: 7.59k, False: 43.9k]
  ------------------
  304|  51.5k|    }
  305|       |
  306|      0|    return NULL;
  307|  51.5k|}
ofp-port.c:ofputil_port_state_to_name:
  320|  6.18k|{
  321|  6.18k|    enum ofputil_port_state ps = bit;
  322|       |
  323|  6.18k|    switch (ps) {
  ------------------
  |  Branch (323:13): [True: 6.18k, False: 0]
  ------------------
  324|  5.35k|    case OFPUTIL_PS_LINK_DOWN: return "LINK_DOWN";
  ------------------
  |  Branch (324:5): [True: 5.35k, False: 835]
  ------------------
  325|    406|    case OFPUTIL_PS_BLOCKED:   return "BLOCKED";
  ------------------
  |  Branch (325:5): [True: 406, False: 5.78k]
  ------------------
  326|    429|    case OFPUTIL_PS_LIVE:      return "LIVE";
  ------------------
  |  Branch (326:5): [True: 429, False: 5.75k]
  ------------------
  327|       |
  328|      0|    case OFPUTIL_PS_STP_LISTEN:
  ------------------
  |  Branch (328:5): [True: 0, False: 6.18k]
  ------------------
  329|      0|    case OFPUTIL_PS_STP_LEARN:
  ------------------
  |  Branch (329:5): [True: 0, False: 6.18k]
  ------------------
  330|      0|    case OFPUTIL_PS_STP_FORWARD:
  ------------------
  |  Branch (330:5): [True: 0, False: 6.18k]
  ------------------
  331|      0|    case OFPUTIL_PS_STP_BLOCK:
  ------------------
  |  Branch (331:5): [True: 0, False: 6.18k]
  ------------------
  332|       |        /* Handled elsewhere. */
  333|      0|        return NULL;
  334|  6.18k|    }
  335|       |
  336|      0|    return NULL;
  337|  6.18k|}
ofp-port.c:ofputil_decode_ofp10_phy_port:
  429|  15.4k|{
  430|  15.4k|    pp->port_no = u16_to_ofp(ntohs(opp->port_no));
  431|  15.4k|    pp->hw_addr = opp->hw_addr;
  432|  15.4k|    ovs_strlcpy_arrays(pp->name, opp->name);
  ------------------
  |  |  209|  15.4k|    ovs_strlcpy(DST, SRC, MIN(ARRAY_SIZE(DST), ARRAY_SIZE(SRC)))
  |  |  ------------------
  |  |  |  |   91|  15.4k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:20): [Folded, False: 15.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  433|       |
  434|  15.4k|    pp->config = ntohl(opp->config) & OFPPC10_ALL;
  ------------------
  |  |   65|  15.4k|#define OFPPC10_ALL (OFPPC_PORT_DOWN | OFPPC10_NO_STP | OFPPC_NO_RECV | \
  |  |   66|  15.4k|                     OFPPC10_NO_RECV_STP | OFPPC10_NO_FLOOD | OFPPC_NO_FWD | \
  |  |   67|  15.4k|                     OFPPC_NO_PACKET_IN)
  ------------------
  435|  15.4k|    pp->state = ntohl(opp->state) & OFPPS10_ALL;
  ------------------
  |  |   84|  15.4k|#define OFPPS10_ALL (OFPPS_LINK_DOWN | OFPPS10_STP_MASK)
  ------------------
  436|       |
  437|  15.4k|    pp->curr = netdev_port_features_from_ofp10(opp->curr);
  438|  15.4k|    pp->advertised = netdev_port_features_from_ofp10(opp->advertised);
  439|  15.4k|    pp->supported = netdev_port_features_from_ofp10(opp->supported);
  440|  15.4k|    pp->peer = netdev_port_features_from_ofp10(opp->peer);
  441|       |
  442|  15.4k|    pp->curr_speed = netdev_features_to_bps(pp->curr, 0) / 1000;
  443|  15.4k|    pp->max_speed = netdev_features_to_bps(pp->supported, 0) / 1000;
  444|       |
  445|  15.4k|    return 0;
  446|  15.4k|}
ofp-port.c:netdev_port_features_from_ofp10:
  386|  63.0k|{
  387|       |    uint32_t ofp10 = ntohl(ofp10_);
  388|  63.0k|    return (ofp10 & 0x7f) | ((ofp10 & 0xf80) << 4);
  389|  63.0k|}
ofp-port.c:ofputil_decode_ofp11_port:
  451|  1.20k|{
  452|  1.20k|    enum ofperr error;
  453|       |
  454|  1.20k|    error = ofputil_port_from_ofp11(op->port_no, &pp->port_no);
  455|  1.20k|    if (error) {
  ------------------
  |  Branch (455:9): [True: 327, False: 879]
  ------------------
  456|    327|        return error;
  457|    327|    }
  458|    879|    pp->hw_addr = op->hw_addr;
  459|    879|    ovs_strlcpy_arrays(pp->name, op->name);
  ------------------
  |  |  209|    879|    ovs_strlcpy(DST, SRC, MIN(ARRAY_SIZE(DST), ARRAY_SIZE(SRC)))
  |  |  ------------------
  |  |  |  |   91|    879|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:20): [Folded, False: 879]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  460|       |
  461|    879|    pp->config = ntohl(op->config) & OFPPC11_ALL;
  ------------------
  |  |   84|    879|    (OFPPC_PORT_DOWN | OFPPC_NO_RECV | OFPPC_NO_FWD | OFPPC_NO_PACKET_IN)
  ------------------
  462|    879|    pp->state = ntohl(op->state) & OFPPS11_ALL;
  ------------------
  |  |   92|    879|#define OFPPS11_ALL (OFPPS_LINK_DOWN | OFPPS11_BLOCKED | OFPPS11_LIVE)
  ------------------
  463|       |
  464|    879|    pp->curr = netdev_port_features_from_ofp11(op->curr);
  465|    879|    pp->advertised = netdev_port_features_from_ofp11(op->advertised);
  466|    879|    pp->supported = netdev_port_features_from_ofp11(op->supported);
  467|    879|    pp->peer = netdev_port_features_from_ofp11(op->peer);
  468|       |
  469|    879|    pp->curr_speed = ntohl(op->curr_speed);
  470|    879|    pp->max_speed = ntohl(op->max_speed);
  471|       |
  472|    879|    return 0;
  473|  1.20k|}
ofp-port.c:netdev_port_features_from_ofp11:
  416|  4.86k|{
  417|       |    return ntohl(ofp11) & 0xffff;
  418|  4.86k|}
ofp-port.c:ofputil_pull_ofp14_port:
  531|  1.85k|{
  532|  1.85k|    const struct ofp14_port *op = ofpbuf_try_pull(msg, sizeof *op);
  533|  1.85k|    if (!op) {
  ------------------
  |  Branch (533:9): [True: 13, False: 1.84k]
  ------------------
  534|     13|        return OFPERR_OFPBRC_BAD_LEN;
  535|     13|    }
  536|       |
  537|  1.84k|    size_t len = ntohs(op->length);
  538|  1.84k|    if (len < sizeof *op || len - sizeof *op > msg->size) {
  ------------------
  |  Branch (538:9): [True: 137, False: 1.70k]
  |  Branch (538:29): [True: 596, False: 1.11k]
  ------------------
  539|    733|        return OFPERR_OFPBRC_BAD_LEN;
  540|    733|    }
  541|  1.11k|    len -= sizeof *op;
  542|       |
  543|  1.11k|    enum ofperr error = ofputil_port_from_ofp11(op->port_no, &pp->port_no);
  544|  1.11k|    if (error) {
  ------------------
  |  Branch (544:9): [True: 473, False: 637]
  ------------------
  545|    473|        return error;
  546|    473|    }
  547|    637|    pp->hw_addr = op->hw_addr;
  548|    637|    ovs_strlcpy_arrays(pp->name, op->name);
  ------------------
  |  |  209|    637|    ovs_strlcpy(DST, SRC, MIN(ARRAY_SIZE(DST), ARRAY_SIZE(SRC)))
  |  |  ------------------
  |  |  |  |   91|    637|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:20): [Folded, False: 637]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  549|       |
  550|    637|    pp->config = ntohl(op->config) & OFPPC11_ALL;
  ------------------
  |  |   84|    637|    (OFPPC_PORT_DOWN | OFPPC_NO_RECV | OFPPC_NO_FWD | OFPPC_NO_PACKET_IN)
  ------------------
  551|    637|    pp->state = ntohl(op->state) & OFPPS11_ALL;
  ------------------
  |  |   92|    637|#define OFPPS11_ALL (OFPPS_LINK_DOWN | OFPPS11_BLOCKED | OFPPS11_LIVE)
  ------------------
  552|       |
  553|    637|    return ofputil_pull_ofp14_port_properties(ofpbuf_pull(msg, len), len, pp);
  554|  1.11k|}
ofp-port.c:ofputil_pull_ofp14_port_properties:
  499|    637|{
  500|    637|    struct ofpbuf properties = ofpbuf_const_initializer(props, len);
  501|  1.30k|    while (properties.size > 0) {
  ------------------
  |  Branch (501:12): [True: 1.18k, False: 118]
  ------------------
  502|  1.18k|        struct ofpbuf payload;
  503|  1.18k|        enum ofperr error;
  504|  1.18k|        uint64_t type;
  505|       |
  506|  1.18k|        error = ofpprop_pull(&properties, &payload, &type);
  507|  1.18k|        if (error) {
  ------------------
  |  Branch (507:13): [True: 134, False: 1.05k]
  ------------------
  508|    134|            return error;
  509|    134|        }
  510|       |
  511|  1.05k|        switch (type) {
  512|    396|        case OFPPDPT14_ETHERNET:
  ------------------
  |  Branch (512:9): [True: 396, False: 658]
  ------------------
  513|    396|            error = parse_ofp14_port_ethernet_property(&payload, pp);
  514|    396|            break;
  515|       |
  516|    658|        default:
  ------------------
  |  Branch (516:9): [True: 658, False: 396]
  ------------------
  517|    658|            error = OFPPROP_UNKNOWN(true, "port", type);
  ------------------
  |  |  144|    658|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  518|    658|            break;
  519|  1.05k|        }
  520|       |
  521|  1.05k|        if (error) {
  ------------------
  |  Branch (521:13): [True: 385, False: 669]
  ------------------
  522|    385|            return error;
  523|    385|        }
  524|  1.05k|    }
  525|       |
  526|    118|    return 0;
  527|    637|}
ofp-port.c:parse_ofp14_port_ethernet_property:
  478|    396|{
  479|    396|    struct ofp14_port_desc_prop_ethernet *eth = payload->data;
  480|       |
  481|    396|    if (payload->size != sizeof *eth) {
  ------------------
  |  Branch (481:9): [True: 385, False: 11]
  ------------------
  482|    385|        return OFPERR_OFPBPC_BAD_LEN;
  483|    385|    }
  484|       |
  485|     11|    pp->curr = netdev_port_features_from_ofp11(eth->curr);
  486|     11|    pp->advertised = netdev_port_features_from_ofp11(eth->advertised);
  487|     11|    pp->supported = netdev_port_features_from_ofp11(eth->supported);
  488|     11|    pp->peer = netdev_port_features_from_ofp11(eth->peer);
  489|       |
  490|     11|    pp->curr_speed = ntohl(eth->curr_speed);
  491|     11|    pp->max_speed = ntohl(eth->max_speed);
  492|       |
  493|     11|    return 0;
  494|    396|}
ofp-port.c:compare_ports:
  800|  93.4k|{
  801|  93.4k|    const struct ofputil_phy_port *a = a_;
  802|  93.4k|    const struct ofputil_phy_port *b = b_;
  803|  93.4k|    uint16_t ap = ofp_to_u16(a->port_no);
  804|  93.4k|    uint16_t bp = ofp_to_u16(b->port_no);
  805|       |
  806|  93.4k|    return ap < bp ? -1 : ap > bp;
  ------------------
  |  Branch (806:12): [True: 18.9k, False: 74.4k]
  ------------------
  807|  93.4k|}
ofp-port.c:ofputil_decode_ofp10_port_mod:
  941|  1.20k|{
  942|  1.20k|    pm->port_no = u16_to_ofp(ntohs(opm->port_no));
  943|  1.20k|    pm->hw_addr = opm->hw_addr;
  944|  1.20k|    pm->config = ntohl(opm->config) & OFPPC10_ALL;
  ------------------
  |  |   65|  1.20k|#define OFPPC10_ALL (OFPPC_PORT_DOWN | OFPPC10_NO_STP | OFPPC_NO_RECV | \
  |  |   66|  1.20k|                     OFPPC10_NO_RECV_STP | OFPPC10_NO_FLOOD | OFPPC_NO_FWD | \
  |  |   67|  1.20k|                     OFPPC_NO_PACKET_IN)
  ------------------
  945|  1.20k|    pm->mask = ntohl(opm->mask) & OFPPC10_ALL;
  ------------------
  |  |   65|  1.20k|#define OFPPC10_ALL (OFPPC_PORT_DOWN | OFPPC10_NO_STP | OFPPC_NO_RECV | \
  |  |   66|  1.20k|                     OFPPC10_NO_RECV_STP | OFPPC10_NO_FLOOD | OFPPC_NO_FWD | \
  |  |   67|  1.20k|                     OFPPC_NO_PACKET_IN)
  ------------------
  946|  1.20k|    pm->advertise = netdev_port_features_from_ofp10(opm->advertise);
  947|  1.20k|    return 0;
  948|  1.20k|}
ofp-port.c:ofputil_decode_ofp11_port_mod:
  953|  1.36k|{
  954|  1.36k|    enum ofperr error;
  955|       |
  956|  1.36k|    error = ofputil_port_from_ofp11(opm->port_no, &pm->port_no);
  957|  1.36k|    if (error) {
  ------------------
  |  Branch (957:9): [True: 243, False: 1.12k]
  ------------------
  958|    243|        return error;
  959|    243|    }
  960|       |
  961|  1.12k|    pm->hw_addr = opm->hw_addr;
  962|  1.12k|    pm->config = ntohl(opm->config) & OFPPC11_ALL;
  ------------------
  |  |   84|  1.12k|    (OFPPC_PORT_DOWN | OFPPC_NO_RECV | OFPPC_NO_FWD | OFPPC_NO_PACKET_IN)
  ------------------
  963|  1.12k|    pm->mask = ntohl(opm->mask) & OFPPC11_ALL;
  ------------------
  |  |   84|  1.12k|    (OFPPC_PORT_DOWN | OFPPC_NO_RECV | OFPPC_NO_FWD | OFPPC_NO_PACKET_IN)
  ------------------
  964|  1.12k|    pm->advertise = netdev_port_features_from_ofp11(opm->advertise);
  965|       |
  966|  1.12k|    return 0;
  967|  1.36k|}
ofp-port.c:ofputil_decode_ofp14_port_mod:
 1003|  1.83k|{
 1004|  1.83k|    const struct ofp14_port_mod *opm = ofpbuf_pull(b, sizeof *opm);
 1005|  1.83k|    enum ofperr error = ofputil_port_from_ofp11(opm->port_no, &pm->port_no);
 1006|  1.83k|    if (error) {
  ------------------
  |  Branch (1006:9): [True: 667, False: 1.16k]
  ------------------
 1007|    667|        return error;
 1008|    667|    }
 1009|       |
 1010|  1.16k|    pm->hw_addr = opm->hw_addr;
 1011|  1.16k|    pm->config = ntohl(opm->config) & OFPPC11_ALL;
  ------------------
  |  |   84|  1.16k|    (OFPPC_PORT_DOWN | OFPPC_NO_RECV | OFPPC_NO_FWD | OFPPC_NO_PACKET_IN)
  ------------------
 1012|  1.16k|    pm->mask = ntohl(opm->mask) & OFPPC11_ALL;
  ------------------
  |  |   84|  1.16k|    (OFPPC_PORT_DOWN | OFPPC_NO_RECV | OFPPC_NO_FWD | OFPPC_NO_PACKET_IN)
  ------------------
 1013|       |
 1014|  1.16k|    return ofputil_decode_ofp14_port_mod_properties(b, loose, pm);
 1015|  1.83k|}
ofp-port.c:ofputil_decode_ofp14_port_mod_properties:
  972|  1.16k|{
  973|  1.70k|    while (b->size > 0) {
  ------------------
  |  Branch (973:12): [True: 1.45k, False: 245]
  ------------------
  974|  1.45k|        struct ofpbuf property;
  975|  1.45k|        enum ofperr error;
  976|  1.45k|        uint64_t type;
  977|       |
  978|  1.45k|        error = ofpprop_pull(b, &property, &type);
  979|  1.45k|        if (error) {
  ------------------
  |  Branch (979:13): [True: 880, False: 576]
  ------------------
  980|    880|            return error;
  981|    880|        }
  982|       |
  983|    576|        switch (type) {
  984|    221|        case OFPPMPT14_ETHERNET:
  ------------------
  |  Branch (984:9): [True: 221, False: 355]
  ------------------
  985|    221|            error = parse_port_mod_ethernet_property(&property, pm);
  986|    221|            break;
  987|       |
  988|    355|        default:
  ------------------
  |  Branch (988:9): [True: 355, False: 221]
  ------------------
  989|    355|            error = OFPPROP_UNKNOWN(loose, "port_mod", type);
  ------------------
  |  |  144|    355|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  990|    355|            break;
  991|    576|        }
  992|       |
  993|    576|        if (error) {
  ------------------
  |  Branch (993:13): [True: 41, False: 535]
  ------------------
  994|     41|            return error;
  995|     41|        }
  996|    576|    }
  997|    245|    return 0;
  998|  1.16k|}
ofp-port.c:parse_port_mod_ethernet_property:
  927|    221|{
  928|    221|    ovs_be32 advertise;
  929|    221|    enum ofperr error;
  930|       |
  931|    221|    error = ofpprop_parse_be32(property, &advertise);
  932|    221|    if (!error) {
  ------------------
  |  Branch (932:9): [True: 180, False: 41]
  ------------------
  933|    180|        pm->advertise = netdev_port_features_from_ofp11(advertise);
  934|    180|    }
  935|    221|    return error;
  936|    221|}
ofp-port.c:ofputil_pull_ofp14_port_stats:
 1538|  16.0k|{
 1539|  16.0k|    const struct ofp14_port_stats *ps14 = ofpbuf_try_pull(msg, sizeof *ps14);
 1540|  16.0k|    if (!ps14) {
  ------------------
  |  Branch (1540:9): [True: 588, False: 15.4k]
  ------------------
 1541|    588|        return OFPERR_OFPBRC_BAD_LEN;
 1542|    588|    }
 1543|       |
 1544|  15.4k|    size_t len = ntohs(ps14->length);
 1545|  15.4k|    if (len < sizeof *ps14 || len - sizeof *ps14 > msg->size) {
  ------------------
  |  Branch (1545:9): [True: 556, False: 14.8k]
  |  Branch (1545:31): [True: 394, False: 14.4k]
  ------------------
 1546|    950|        return OFPERR_OFPBRC_BAD_LEN;
 1547|    950|    }
 1548|  14.4k|    len -= sizeof *ps14;
 1549|       |
 1550|  14.4k|    enum ofperr error = ofputil_port_from_ofp11(ps14->port_no, &ops->port_no);
 1551|  14.4k|    if (error) {
  ------------------
  |  Branch (1551:9): [True: 750, False: 13.7k]
  ------------------
 1552|    750|        return error;
 1553|    750|    }
 1554|       |
 1555|  13.7k|    ops->duration_sec = ntohl(ps14->duration_sec);
 1556|  13.7k|    ops->duration_nsec = ntohl(ps14->duration_nsec);
 1557|  13.7k|    ops->stats.rx_packets = ntohll(ps14->rx_packets);
 1558|  13.7k|    ops->stats.tx_packets = ntohll(ps14->tx_packets);
 1559|  13.7k|    ops->stats.rx_bytes = ntohll(ps14->rx_bytes);
 1560|  13.7k|    ops->stats.tx_bytes = ntohll(ps14->tx_bytes);
 1561|  13.7k|    ops->stats.rx_dropped = ntohll(ps14->rx_dropped);
 1562|  13.7k|    ops->stats.tx_dropped = ntohll(ps14->tx_dropped);
 1563|  13.7k|    ops->stats.rx_errors = ntohll(ps14->rx_errors);
 1564|  13.7k|    ops->stats.tx_errors = ntohll(ps14->tx_errors);
 1565|       |
 1566|       |
 1567|  13.7k|    struct ofpbuf properties = ofpbuf_const_initializer(ofpbuf_pull(msg, len),
 1568|  13.7k|                                                        len);
 1569|  17.8k|    while (properties.size > 0) {
  ------------------
  |  Branch (1569:12): [True: 11.7k, False: 6.06k]
  ------------------
 1570|  11.7k|        struct ofpbuf payload;
 1571|  11.7k|        uint64_t type = 0;
 1572|       |
 1573|  11.7k|        error = ofpprop_pull(&properties, &payload, &type);
 1574|  11.7k|        if (error) {
  ------------------
  |  Branch (1574:13): [True: 1.75k, False: 10.0k]
  ------------------
 1575|  1.75k|            netdev_free_custom_stats_counters(&ops->custom_stats);
 1576|  1.75k|            return error;
 1577|  1.75k|        }
 1578|  10.0k|        switch (type) {
 1579|    156|        case OFPPSPT14_ETHERNET:
  ------------------
  |  Branch (1579:9): [True: 156, False: 9.87k]
  ------------------
 1580|    156|            error = parse_ofp14_port_stats_ethernet_property(&payload, ops);
 1581|    156|            break;
 1582|      4|        case OFPPROP_EXP(INTEL_VENDOR_ID, INTEL_PORT_STATS_RFC2819):
  ------------------
  |  |   67|      4|    (((uint64_t) (EXP_ID) << 32) | (EXP_TYPE))
  ------------------
  |  Branch (1582:9): [True: 4, False: 10.0k]
  ------------------
 1583|      4|            error = parse_intel_port_stats_rfc2819_property(&payload, ops);
 1584|      4|            break;
 1585|  7.95k|        case OFPPROP_EXP(INTEL_VENDOR_ID, INTEL_PORT_STATS_CUSTOM):
  ------------------
  |  |   67|  7.95k|    (((uint64_t) (EXP_ID) << 32) | (EXP_TYPE))
  ------------------
  |  Branch (1585:9): [True: 7.95k, False: 2.08k]
  ------------------
 1586|  7.95k|            error = parse_intel_port_custom_property(&payload, ops);
 1587|  7.95k|            break;
 1588|  1.92k|        default:
  ------------------
  |  Branch (1588:9): [True: 1.92k, False: 8.11k]
  ------------------
 1589|  1.92k|            error = OFPPROP_UNKNOWN(true, "port stats", type);
  ------------------
  |  |  144|  1.92k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
 1590|  1.92k|            break;
 1591|  10.0k|        }
 1592|       |
 1593|  10.0k|        if (error) {
  ------------------
  |  Branch (1593:13): [True: 5.89k, False: 4.14k]
  ------------------
 1594|  5.89k|            netdev_free_custom_stats_counters(&ops->custom_stats);
 1595|  5.89k|            return error;
 1596|  5.89k|        }
 1597|  10.0k|    }
 1598|       |
 1599|  6.06k|    return 0;
 1600|  13.7k|}
ofp-port.c:parse_ofp14_port_stats_ethernet_property:
 1434|    156|{
 1435|    156|    const struct ofp14_port_stats_prop_ethernet *eth = payload->data;
 1436|       |
 1437|    156|    if (payload->size != sizeof *eth) {
  ------------------
  |  Branch (1437:9): [True: 140, False: 16]
  ------------------
 1438|    140|        return OFPERR_OFPBPC_BAD_LEN;
 1439|    140|    }
 1440|       |
 1441|     16|    ops->stats.rx_frame_errors = ntohll(eth->rx_frame_err);
 1442|     16|    ops->stats.rx_over_errors = ntohll(eth->rx_over_err);
 1443|     16|    ops->stats.rx_crc_errors = ntohll(eth->rx_crc_err);
 1444|     16|    ops->stats.collisions = ntohll(eth->collisions);
 1445|       |
 1446|     16|    return 0;
 1447|    156|}
ofp-port.c:parse_intel_port_stats_rfc2819_property:
 1452|      4|{
 1453|      4|    const struct intel_port_stats_rfc2819 *rfc2819 = payload->data;
 1454|       |
 1455|      4|    if (payload->size != sizeof *rfc2819) {
  ------------------
  |  Branch (1455:9): [True: 4, False: 0]
  ------------------
 1456|      4|        return OFPERR_OFPBPC_BAD_LEN;
 1457|      4|    }
 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|      4|}
ofp-port.c:parse_intel_port_custom_property:
 1495|  7.95k|{
 1496|  7.95k|    const struct intel_port_custom_stats *custom_stats
 1497|  7.95k|        = ofpbuf_try_pull(payload, sizeof *custom_stats);
 1498|  7.95k|    if (!custom_stats) {
  ------------------
  |  Branch (1498:9): [True: 6, False: 7.94k]
  ------------------
 1499|      6|        return OFPERR_OFPBPC_BAD_LEN;
 1500|      6|    }
 1501|       |
 1502|  7.94k|    ops->custom_stats.size = ntohs(custom_stats->stats_array_size);
 1503|       |
 1504|  7.94k|    netdev_free_custom_stats_counters(&ops->custom_stats);
 1505|  7.94k|    ops->custom_stats.counters = xcalloc(ops->custom_stats.size,
 1506|  7.94k|                                         sizeof *ops->custom_stats.counters);
 1507|       |
 1508|  52.1k|    for (int i = 0; i < ops->custom_stats.size; i++) {
  ------------------
  |  Branch (1508:21): [True: 49.9k, False: 2.20k]
  ------------------
 1509|  49.9k|        struct netdev_custom_counter *c = &ops->custom_stats.counters[i];
 1510|       |
 1511|       |        /* Counter name. */
 1512|  49.9k|        uint8_t *name_len = ofpbuf_try_pull(payload, sizeof *name_len);
 1513|  49.9k|        char *name = name_len ? ofpbuf_try_pull(payload, *name_len) : NULL;
  ------------------
  |  Branch (1513:22): [True: 49.2k, False: 670]
  ------------------
 1514|  49.9k|        if (!name_len || !name) {
  ------------------
  |  Branch (1514:13): [True: 670, False: 49.2k]
  |  Branch (1514:26): [True: 1.82k, False: 47.4k]
  ------------------
 1515|  2.49k|            netdev_free_custom_stats_counters(&ops->custom_stats);
 1516|  2.49k|            return OFPERR_OFPBPC_BAD_LEN;
 1517|  2.49k|        }
 1518|       |
 1519|  47.4k|        size_t len = MIN(*name_len, sizeof c->name - 1);
  ------------------
  |  |   91|  47.4k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (91:20): [True: 44.1k, False: 3.34k]
  |  |  ------------------
  ------------------
 1520|  47.4k|        memcpy(c->name, name, len);
 1521|  47.4k|        c->name[len] = '\0';
 1522|       |
 1523|       |        /* Counter value. */
 1524|  47.4k|        ovs_be64 *value = ofpbuf_try_pull(payload, sizeof *value);
 1525|  47.4k|        if (!value) {
  ------------------
  |  Branch (1525:13): [True: 3.25k, False: 44.1k]
  ------------------
 1526|  3.25k|            netdev_free_custom_stats_counters(&ops->custom_stats);
 1527|  3.25k|            return OFPERR_OFPBPC_BAD_LEN;
 1528|  3.25k|        }
 1529|  44.1k|        c->value = ntohll(get_unaligned_be64(value));
 1530|  44.1k|    }
 1531|       |
 1532|  2.20k|    return 0;
 1533|  7.94k|}
ofp-port.c:ofputil_port_stats_from_ofp13:
 1422|  2.21k|{
 1423|  2.21k|    enum ofperr error = ofputil_port_stats_from_ofp11(ops, &ps13->ps);
 1424|  2.21k|    if (!error) {
  ------------------
  |  Branch (1424:9): [True: 1.97k, False: 238]
  ------------------
 1425|  1.97k|        ops->duration_sec = ntohl(ps13->duration_sec);
 1426|       |        ops->duration_nsec = ntohl(ps13->duration_nsec);
 1427|  1.97k|    }
 1428|  2.21k|    return error;
 1429|  2.21k|}
ofp-port.c:ofputil_port_stats_from_ofp11:
 1394|  2.61k|{
 1395|  2.61k|    enum ofperr error;
 1396|       |
 1397|  2.61k|    error = ofputil_port_from_ofp11(ps11->port_no, &ops->port_no);
 1398|  2.61k|    if (error) {
  ------------------
  |  Branch (1398:9): [True: 334, False: 2.28k]
  ------------------
 1399|    334|        return error;
 1400|    334|    }
 1401|       |
 1402|  2.28k|    ops->stats.rx_packets = ntohll(ps11->rx_packets);
 1403|  2.28k|    ops->stats.tx_packets = ntohll(ps11->tx_packets);
 1404|  2.28k|    ops->stats.rx_bytes = ntohll(ps11->rx_bytes);
 1405|  2.28k|    ops->stats.tx_bytes = ntohll(ps11->tx_bytes);
 1406|  2.28k|    ops->stats.rx_dropped = ntohll(ps11->rx_dropped);
 1407|  2.28k|    ops->stats.tx_dropped = ntohll(ps11->tx_dropped);
 1408|  2.28k|    ops->stats.rx_errors = ntohll(ps11->rx_errors);
 1409|  2.28k|    ops->stats.tx_errors = ntohll(ps11->tx_errors);
 1410|  2.28k|    ops->stats.rx_frame_errors = ntohll(ps11->rx_frame_err);
 1411|  2.28k|    ops->stats.rx_over_errors = ntohll(ps11->rx_over_err);
 1412|  2.28k|    ops->stats.rx_crc_errors = ntohll(ps11->rx_crc_err);
 1413|  2.28k|    ops->stats.collisions = ntohll(ps11->collisions);
 1414|  2.28k|    ops->duration_sec = ops->duration_nsec = UINT32_MAX;
 1415|       |
 1416|  2.28k|    return 0;
 1417|  2.61k|}
ofp-port.c:ofputil_port_stats_from_ofp10:
 1370|  8.10k|{
 1371|       |
 1372|  8.10k|    ops->port_no = u16_to_ofp(ntohs(ps10->port_no));
 1373|  8.10k|    ops->stats.rx_packets = ntohll(get_32aligned_be64(&ps10->rx_packets));
 1374|  8.10k|    ops->stats.tx_packets = ntohll(get_32aligned_be64(&ps10->tx_packets));
 1375|  8.10k|    ops->stats.rx_bytes = ntohll(get_32aligned_be64(&ps10->rx_bytes));
 1376|  8.10k|    ops->stats.tx_bytes = ntohll(get_32aligned_be64(&ps10->tx_bytes));
 1377|  8.10k|    ops->stats.rx_dropped = ntohll(get_32aligned_be64(&ps10->rx_dropped));
 1378|  8.10k|    ops->stats.tx_dropped = ntohll(get_32aligned_be64(&ps10->tx_dropped));
 1379|  8.10k|    ops->stats.rx_errors = ntohll(get_32aligned_be64(&ps10->rx_errors));
 1380|  8.10k|    ops->stats.tx_errors = ntohll(get_32aligned_be64(&ps10->tx_errors));
 1381|  8.10k|    ops->stats.rx_frame_errors =
 1382|  8.10k|        ntohll(get_32aligned_be64(&ps10->rx_frame_err));
 1383|  8.10k|    ops->stats.rx_over_errors = ntohll(get_32aligned_be64(&ps10->rx_over_err));
 1384|  8.10k|    ops->stats.rx_crc_errors = ntohll(get_32aligned_be64(&ps10->rx_crc_err));
 1385|  8.10k|    ops->stats.collisions = ntohll(get_32aligned_be64(&ps10->collisions));
 1386|  8.10k|    ops->duration_sec = ops->duration_nsec = UINT32_MAX;
 1387|       |
 1388|  8.10k|    return 0;
 1389|  8.10k|}
ofp-port.c:print_port_stat:
 1686|  98.7k|{
 1687|  98.7k|    ds_put_cstr(string, leader);
 1688|  98.7k|    if (stat != UINT64_MAX) {
  ------------------
  |  Branch (1688:9): [True: 60.2k, False: 38.4k]
  ------------------
 1689|  60.2k|        ds_put_format(string, "%"PRIu64, stat);
 1690|  60.2k|    } else {
 1691|  38.4k|        ds_put_char(string, '?');
 1692|  38.4k|    }
 1693|  98.7k|    if (more) {
  ------------------
  |  Branch (1693:9): [True: 82.2k, False: 16.4k]
  ------------------
 1694|  82.2k|        ds_put_cstr(string, ", ");
 1695|  82.2k|    } else {
 1696|  16.4k|        ds_put_cstr(string, "\n");
 1697|  16.4k|    }
 1698|  98.7k|}
ofp-port.c:print_port_stat_cond:
 1702|   172k|{
 1703|   172k|    if (stat != UINT64_MAX) {
  ------------------
  |  Branch (1703:9): [True: 0, False: 172k]
  ------------------
 1704|      0|        ds_put_format(string, "%s%"PRIu64", ", leader, stat);
 1705|      0|    }
 1706|   172k|}

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

ofpprop_pull__:
   75|   201k|{
   76|   201k|    struct ofp_prop_header *oph;
   77|   201k|    unsigned int padded_len;
   78|   201k|    unsigned int len;
   79|       |
   80|   201k|    if (msg->size < sizeof *oph) {
  ------------------
  |  Branch (80:9): [True: 156, False: 201k]
  ------------------
   81|    156|        return OFPERR_OFPBPC_BAD_LEN;
   82|    156|    }
   83|       |
   84|   201k|    oph = msg->data;
   85|   201k|    len = ntohs(oph->len);
   86|   201k|    padded_len = ROUND_UP(len, alignment);
  ------------------
  |  |  303|   201k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|   201k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
   87|   201k|    if (len < sizeof *oph || padded_len > msg->size) {
  ------------------
  |  Branch (87:9): [True: 8.15k, False: 193k]
  |  Branch (87:30): [True: 18.9k, False: 174k]
  ------------------
   88|  27.0k|        return OFPERR_OFPBPC_BAD_LEN;
   89|  27.0k|    }
   90|       |
   91|   174k|    uint16_t type = ntohs(oph->type);
   92|   174k|    if (type < min_exp) {
  ------------------
  |  Branch (92:9): [True: 148k, False: 26.0k]
  ------------------
   93|   148k|        *typep = type;
   94|   148k|    } else {
   95|  26.0k|        struct ofp_prop_experimenter *ope = msg->data;
   96|  26.0k|        if (len < sizeof *ope) {
  ------------------
  |  Branch (96:13): [True: 323, False: 25.6k]
  ------------------
   97|    323|            return OFPERR_OFPBPC_BAD_LEN;
   98|    323|        }
   99|       |
  100|  25.6k|        if (!ope->experimenter) {
  ------------------
  |  Branch (100:13): [True: 69, False: 25.6k]
  ------------------
  101|       |            /* Reject experimenter 0 because it yields ambiguity with standard
  102|       |             * property types. */
  103|     69|            return OFPERR_OFPBPC_BAD_EXPERIMENTER;
  104|     69|        }
  105|       |
  106|  25.6k|        *typep = OFPPROP_EXP(ntohl(ope->experimenter), ntohl(ope->exp_type));
  ------------------
  |  |   67|  25.6k|    (((uint64_t) (EXP_ID) << 32) | (EXP_TYPE))
  ------------------
  107|  25.6k|    }
  108|       |
  109|   174k|    if (property) {
  ------------------
  |  Branch (109:9): [True: 171k, False: 3.20k]
  ------------------
  110|   171k|        ofpbuf_use_const(property, msg->data, len);
  111|   171k|        property->header = property->data;
  112|   171k|        property->msg = ((uint8_t *) property->data
  113|   171k|                         + (type < min_exp
  ------------------
  |  Branch (113:29): [True: 145k, False: 25.6k]
  ------------------
  114|   171k|                            ? sizeof(struct ofp_prop_header)
  115|   171k|                            : sizeof(struct ofp_prop_experimenter)));
  116|   171k|    }
  117|   174k|    ofpbuf_pull(msg, padded_len);
  118|   174k|    return 0;
  119|   174k|}
ofpprop_pull:
  136|   178k|{
  137|   178k|    return ofpprop_pull__(msg, property, 8, 0xffff, typep);
  138|   178k|}
ofpprop_parse_be16:
  145|  8.90k|{
  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|  8.90k|    ovs_be16 *p = property->msg;
  150|  8.90k|    if (ofpbuf_msgsize(property) < sizeof *p) {
  ------------------
  |  Branch (150:9): [True: 165, False: 8.74k]
  ------------------
  151|    165|        return OFPERR_OFPBPC_BAD_LEN;
  152|    165|    }
  153|  8.74k|    *value = *p;
  154|  8.74k|    return 0;
  155|  8.90k|}
ofpprop_parse_be32:
  162|  14.8k|{
  163|  14.8k|    ovs_be32 *p = property->msg;
  164|  14.8k|    if (ofpbuf_msgsize(property) != sizeof *p) {
  ------------------
  |  Branch (164:9): [True: 378, False: 14.4k]
  ------------------
  165|    378|        return OFPERR_OFPBPC_BAD_LEN;
  166|    378|    }
  167|  14.4k|    *value = *p;
  168|  14.4k|    return 0;
  169|  14.8k|}
ofpprop_parse_be64:
  176|    566|{
  177|    566|    ovs_be64 *p;
  178|    566|    size_t be64_offset = ROUND_UP(ofpbuf_headersize(property), 8);
  ------------------
  |  |  303|    566|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|    566|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  179|    566|    if (property->size != be64_offset + sizeof *p) {
  ------------------
  |  Branch (179:9): [True: 282, False: 284]
  ------------------
  180|    282|        return OFPERR_OFPBPC_BAD_LEN;
  181|    282|    }
  182|       |
  183|    284|    p = ALIGNED_CAST(ovs_be64 *, (char *) property->data + be64_offset);
  ------------------
  |  |  434|    284|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  184|    284|    *value = *p;
  185|    284|    return 0;
  186|    566|}
ofpprop_parse_be128:
  193|  1.50k|{
  194|  1.50k|    ovs_32aligned_be128 *p = property->msg;
  195|       |
  196|  1.50k|    if (ofpbuf_msgsize(property) != sizeof *p) {
  ------------------
  |  Branch (196:9): [True: 21, False: 1.48k]
  ------------------
  197|     21|        return OFPERR_OFPBPC_BAD_LEN;
  198|     21|    }
  199|  1.48k|    *value = get_32aligned_be128(p);
  200|  1.48k|    return 0;
  201|  1.50k|}
ofpprop_parse_u8:
  208|  1.30k|{
  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.30k|    uint8_t *p = property->msg;
  214|  1.30k|    if (ofpbuf_msgsize(property) < sizeof *p) {
  ------------------
  |  Branch (214:9): [True: 457, False: 847]
  ------------------
  215|    457|        return OFPERR_OFPBPC_BAD_LEN;
  216|    457|    }
  217|    847|    *value = *p;
  218|    847|    return 0;
  219|  1.30k|}
ofpprop_parse_u16:
  226|  3.73k|{
  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|  3.73k|    ovs_be16 *p = property->msg;
  231|  3.73k|    if (ofpbuf_msgsize(property) < sizeof *p) {
  ------------------
  |  Branch (231:9): [True: 83, False: 3.64k]
  ------------------
  232|     83|        return OFPERR_OFPBPC_BAD_LEN;
  233|     83|    }
  234|  3.64k|    *value = ntohs(*p);
  235|  3.64k|    return 0;
  236|  3.73k|}
ofpprop_parse_u32:
  243|  8.10k|{
  244|  8.10k|    ovs_be32 *p = property->msg;
  245|  8.10k|    if (ofpbuf_msgsize(property) != sizeof *p) {
  ------------------
  |  Branch (245:9): [True: 136, False: 7.97k]
  ------------------
  246|    136|        return OFPERR_OFPBPC_BAD_LEN;
  247|    136|    }
  248|  7.97k|    *value = ntohl(*p);
  249|  7.97k|    return 0;
  250|  8.10k|}
ofpprop_parse_u128:
  274|  1.50k|{
  275|  1.50k|    enum ofperr error = ofpprop_parse_be128(property, (ovs_be128 *) value);
  276|       |
  277|  1.50k|    if (!error) {
  ------------------
  |  Branch (277:9): [True: 1.48k, False: 21]
  ------------------
  278|  1.48k|        *value = ntoh128(*(ovs_be128 *) value);
  279|  1.48k|    }
  280|       |
  281|  1.50k|    return error;
  282|  1.50k|}
ofpprop_parse_uuid:
  289|  2.89k|{
  290|  2.89k|    struct uuid *p = property->msg;
  291|  2.89k|    if (ofpbuf_msgsize(property) != sizeof *p) {
  ------------------
  |  Branch (291:9): [True: 311, False: 2.58k]
  ------------------
  292|    311|        return OFPERR_OFPBPC_BAD_LEN;
  293|    311|    }
  294|  2.58k|    *uuid = *p;
  295|  2.58k|    return 0;
  296|  2.89k|}
ofpprop_parse_nested:
  308|  20.2k|{
  309|  20.2k|    size_t nested_offset = ROUND_UP(ofpbuf_headersize(property), 8);
  ------------------
  |  |  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))
  |  |  ------------------
  ------------------
  310|  20.2k|    if (property->size < nested_offset) {
  ------------------
  |  Branch (310:9): [True: 302, False: 19.9k]
  ------------------
  311|    302|        return OFPERR_OFPBPC_BAD_LEN;
  312|    302|    }
  313|       |
  314|  19.9k|    ofpbuf_use_const(nested, property->data, property->size);
  315|  19.9k|    ofpbuf_pull(nested, nested_offset);
  316|  19.9k|    return 0;
  317|  20.2k|}
ofpprop_unknown:
  528|  30.6k|{
  529|  30.6k|    bool is_experimenter = ofpprop_is_experimenter(type);
  530|       |
  531|  30.6k|    static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 5);
  ------------------
  |  |  110|  30.6k|        {                                                                 \
  |  |  111|  30.6k|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|   122k|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [True: 0, Folded]
  |  |  |  |  |  Branch (37:48): [Folded, False: 30.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  30.6k|            0,                              /* first_dropped */           \
  |  |  113|  30.6k|            0,                              /* last_dropped */            \
  |  |  114|  30.6k|            0,                              /* n_dropped */               \
  |  |  115|  30.6k|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  30.6k|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  30.6k|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  30.6k|        }
  ------------------
  532|  30.6k|    enum vlog_level level = loose ? VLL_DBG : VLL_WARN;
  ------------------
  |  Branch (532:29): [True: 22.5k, False: 8.07k]
  ------------------
  533|  30.6k|    if (!is_experimenter) {
  ------------------
  |  Branch (533:9): [True: 25.0k, False: 5.61k]
  ------------------
  534|  25.0k|        vlog_rate_limit(module, level, &rl, "unknown %s property type %"PRId64,
  535|  25.0k|                        msg, type);
  536|  25.0k|    } else {
  537|  5.61k|        vlog_rate_limit(module, level, &rl,
  538|  5.61k|                        "unknown %s property type for exp_id 0x%"PRIx32", "
  539|  5.61k|                        "exp_type %"PRId32, msg,
  540|  5.61k|                        ofpprop_type_to_exp_id(type),
  541|  5.61k|                        ofpprop_type_to_exp_type(type));
  542|  5.61k|    }
  543|       |
  544|       |    /* There's an error OFPBPC_BAD_EXPERIMENTER that we could use for
  545|       |     * experimenter IDs that we don't know at all, but that seems like a
  546|       |     * difficult distinction and OFPERR_OFPBPC_BAD_EXP_TYPE communicates the
  547|       |     * problem quite well. */
  548|  30.6k|    return (loose ? 0
  ------------------
  |  Branch (548:13): [True: 22.5k, False: 8.07k]
  ------------------
  549|  30.6k|            : is_experimenter ? OFPERR_OFPBPC_BAD_EXP_TYPE
  ------------------
  |  Branch (549:15): [True: 4.10k, False: 3.97k]
  ------------------
  550|  8.07k|            : OFPERR_OFPBPC_BAD_TYPE);
  551|  30.6k|}
ofp-prop.c:ofpprop_type_to_exp_id:
   45|  5.61k|{
   46|  5.61k|    return type >> 32;
   47|  5.61k|}
ofp-prop.c:ofpprop_type_to_exp_type:
   51|  5.61k|{
   52|       |    return type & UINT32_MAX;
   53|  5.61k|}

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

ofputil_decode_queue_get_config_request:
   90|  2.41k|{
   91|  2.41k|    const struct ofp10_queue_get_config_request *qgcr10;
   92|  2.41k|    const struct ofp11_queue_get_config_request *qgcr11;
   93|  2.41k|    const struct ofp14_queue_desc_request *qdr14;
   94|  2.41k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
   95|  2.41k|    enum ofpraw raw = ofpraw_pull_assert(&b);
   96|       |
   97|  2.41k|    switch ((int) raw) {
   98|     97|    case OFPRAW_OFPT10_QUEUE_GET_CONFIG_REQUEST:
  ------------------
  |  Branch (98:5): [True: 97, False: 2.31k]
  ------------------
   99|     97|        qgcr10 = b.data;
  100|     97|        *port = u16_to_ofp(ntohs(qgcr10->port));
  101|     97|        *queue = OFPQ_ALL;
  ------------------
  |  |  416|     97|#define OFPQ_ALL      0xffffffff
  ------------------
  102|     97|        break;
  103|       |
  104|  1.85k|    case OFPRAW_OFPT11_QUEUE_GET_CONFIG_REQUEST:
  ------------------
  |  Branch (104:5): [True: 1.85k, False: 560]
  ------------------
  105|  1.85k|        qgcr11 = b.data;
  106|  1.85k|        *queue = OFPQ_ALL;
  ------------------
  |  |  416|  1.85k|#define OFPQ_ALL      0xffffffff
  ------------------
  107|  1.85k|        enum ofperr error = ofputil_port_from_ofp11(qgcr11->port, port);
  108|  1.85k|        if (error || *port == OFPP_ANY) {
  ------------------
  |  |   80|  1.23k|#define OFPP_ANY OFPP_NONE
  |  |  ------------------
  |  |  |  |   47|  1.23k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|  1.23k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (108:13): [True: 613, False: 1.23k]
  |  Branch (108:22): [True: 323, False: 915]
  ------------------
  109|    936|            return error;
  110|    936|        }
  111|    915|        break;
  112|       |
  113|    915|    case OFPRAW_OFPST14_QUEUE_DESC_REQUEST:
  ------------------
  |  Branch (113:5): [True: 463, False: 1.94k]
  ------------------
  114|    463|        qdr14 = b.data;
  115|    463|        *queue = ntohl(qdr14->queue);
  116|    463|        return ofputil_port_from_ofp11(qdr14->port, port);
  117|       |
  118|      0|    default:
  ------------------
  |  Branch (118:5): [True: 0, False: 2.41k]
  ------------------
  119|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  120|  2.41k|    }
  121|       |
  122|  1.01k|    return (ofp_to_u16(*port) < ofp_to_u16(OFPP_MAX)
  ------------------
  |  |   33|  1.01k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|  1.01k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (122:13): [True: 934, False: 78]
  ------------------
  123|  1.01k|            ? 0
  124|  1.01k|            : OFPERR_OFPQOFC_BAD_PORT);
  125|  2.41k|}
ofputil_queue_get_config_request_format:
  131|  2.41k|{
  132|  2.41k|    enum ofperr error;
  133|  2.41k|    ofp_port_t port;
  134|  2.41k|    uint32_t queue;
  135|       |
  136|  2.41k|    error = ofputil_decode_queue_get_config_request(oh, &port, &queue);
  137|  2.41k|    if (error) {
  ------------------
  |  Branch (137:9): [True: 824, False: 1.58k]
  ------------------
  138|    824|        return error;
  139|    824|    }
  140|       |
  141|  1.58k|    ds_put_cstr(string, " port=");
  142|  1.58k|    ofputil_format_port(port, port_map, string);
  143|       |
  144|  1.58k|    if (queue != OFPQ_ALL) {
  ------------------
  |  |  416|  1.58k|#define OFPQ_ALL      0xffffffff
  ------------------
  |  Branch (144:9): [True: 330, False: 1.25k]
  ------------------
  145|    330|        ds_put_cstr(string, " queue=");
  146|    330|        ofp_print_queue_name(string, queue);
  147|    330|    }
  148|       |
  149|  1.58k|    return 0;
  150|  2.41k|}
ofputil_pull_queue_get_config_reply:
  430|  20.6k|{
  431|  20.6k|    enum ofpraw raw;
  432|  20.6k|    if (!msg->header) {
  ------------------
  |  Branch (432:9): [True: 10.6k, False: 10.0k]
  ------------------
  433|       |        /* Pull OpenFlow header. */
  434|  10.6k|        raw = ofpraw_pull_assert(msg);
  435|       |
  436|       |        /* Pull protocol-specific ofp_queue_get_config_reply header (OF1.4
  437|       |         * doesn't have one at all). */
  438|  10.6k|        if (raw == OFPRAW_OFPT10_QUEUE_GET_CONFIG_REPLY) {
  ------------------
  |  Branch (438:13): [True: 3.29k, False: 7.32k]
  ------------------
  439|  3.29k|            ofpbuf_pull(msg, sizeof(struct ofp10_queue_get_config_reply));
  440|  7.32k|        } else if (raw == OFPRAW_OFPT11_QUEUE_GET_CONFIG_REPLY) {
  ------------------
  |  Branch (440:20): [True: 2.48k, False: 4.84k]
  ------------------
  441|  2.48k|            ofpbuf_pull(msg, sizeof(struct ofp11_queue_get_config_reply));
  442|  4.84k|        } else {
  443|  4.84k|            ovs_assert(raw == OFPRAW_OFPST14_QUEUE_DESC_REPLY);
  ------------------
  |  |   62|  4.84k|#define ovs_assert ovs_ignore
  ------------------
  444|  4.84k|        }
  445|  10.6k|    } else {
  446|  10.0k|        raw = ofpraw_decode_assert(msg->header);
  447|  10.0k|    }
  448|       |
  449|  20.6k|    queue->min_rate = UINT16_MAX;
  450|  20.6k|    queue->max_rate = UINT16_MAX;
  451|       |
  452|  20.6k|    if (!msg->size) {
  ------------------
  |  Branch (452:9): [True: 2.24k, False: 18.3k]
  ------------------
  453|  2.24k|        return EOF;
  454|  18.3k|    } else if (raw == OFPRAW_OFPST14_QUEUE_DESC_REPLY) {
  ------------------
  |  Branch (454:16): [True: 6.81k, False: 11.5k]
  ------------------
  455|  6.81k|        return ofputil_pull_queue_get_config_reply14(msg, queue);
  456|  11.5k|    } else {
  457|  11.5k|        return ofputil_pull_queue_get_config_reply10(msg, queue);
  458|  11.5k|    }
  459|  20.6k|}
ofputil_queue_get_config_reply_format:
  493|  10.6k|{
  494|  10.6k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  495|       |
  496|  10.6k|    struct ofputil_queue_config *queues = NULL;
  497|  10.6k|    size_t allocated_queues = 0;
  498|  10.6k|    size_t n = 0;
  499|       |
  500|  10.6k|    int retval = 0;
  501|  20.6k|    for (;;) {
  502|  20.6k|        if (n >= allocated_queues) {
  ------------------
  |  Branch (502:13): [True: 18.6k, False: 1.94k]
  ------------------
  503|  18.6k|            queues = x2nrealloc(queues, &allocated_queues, sizeof *queues);
  504|  18.6k|        }
  505|  20.6k|        retval = ofputil_pull_queue_get_config_reply(&b, &queues[n]);
  506|  20.6k|        if (retval) {
  ------------------
  |  Branch (506:13): [True: 10.6k, False: 10.0k]
  ------------------
  507|  10.6k|            break;
  508|  10.6k|        }
  509|  10.0k|        n++;
  510|  10.0k|    }
  511|       |
  512|  10.6k|    qsort(queues, n, sizeof *queues, compare_queues);
  513|       |
  514|  10.6k|    ds_put_char(string, ' ');
  515|       |
  516|  10.6k|    ofp_port_t port = 0;
  517|  20.6k|    for (const struct ofputil_queue_config *q = queues; q < &queues[n]; q++) {
  ------------------
  |  Branch (517:57): [True: 10.0k, False: 10.6k]
  ------------------
  518|  10.0k|        if (q->port != port) {
  ------------------
  |  Branch (518:13): [True: 4.57k, False: 5.43k]
  ------------------
  519|  4.57k|            port = q->port;
  520|       |
  521|  4.57k|            ds_put_cstr(string, "port=");
  522|  4.57k|            ofputil_format_port(port, port_map, string);
  523|  4.57k|            ds_put_char(string, '\n');
  524|  4.57k|        }
  525|       |
  526|  10.0k|        ds_put_format(string, "queue %"PRIu32":", q->queue);
  527|  10.0k|        print_queue_rate(string, "min_rate", q->min_rate);
  528|  10.0k|        print_queue_rate(string, "max_rate", q->max_rate);
  529|  10.0k|        ds_put_char(string, '\n');
  530|  10.0k|    }
  531|       |
  532|  10.6k|    ds_chomp(string, ' ');
  533|  10.6k|    free(queues);
  534|       |
  535|  10.6k|    return retval != EOF ? retval : 0;
  ------------------
  |  Branch (535:12): [True: 8.37k, False: 2.24k]
  ------------------
  536|  10.6k|}
ofputil_decode_queue_stats_request:
  543|  1.42k|{
  544|  1.42k|    switch ((enum ofp_version)request->version) {
  545|     45|    case OFP15_VERSION:
  ------------------
  |  Branch (545:5): [True: 45, False: 1.37k]
  ------------------
  546|    273|    case OFP14_VERSION:
  ------------------
  |  Branch (546:5): [True: 228, False: 1.19k]
  ------------------
  547|    475|    case OFP13_VERSION:
  ------------------
  |  Branch (547:5): [True: 202, False: 1.22k]
  ------------------
  548|    554|    case OFP12_VERSION:
  ------------------
  |  Branch (548:5): [True: 79, False: 1.34k]
  ------------------
  549|    669|    case OFP11_VERSION: {
  ------------------
  |  Branch (549:5): [True: 115, False: 1.30k]
  ------------------
  550|    669|        const struct ofp11_queue_stats_request *qsr11 = ofpmsg_body(request);
  551|    669|        oqsr->queue_id = ntohl(qsr11->queue_id);
  552|    669|        return ofputil_port_from_ofp11(qsr11->port_no, &oqsr->port_no);
  553|    554|    }
  554|       |
  555|    754|    case OFP10_VERSION: {
  ------------------
  |  Branch (555:5): [True: 754, False: 669]
  ------------------
  556|    754|        const struct ofp10_queue_stats_request *qsr10 = ofpmsg_body(request);
  557|    754|        oqsr->queue_id = ntohl(qsr10->queue_id);
  558|    754|        oqsr->port_no = u16_to_ofp(ntohs(qsr10->port_no));
  559|       |        /* OF 1.0 uses OFPP_ALL for OFPP_ANY */
  560|    754|        if (oqsr->port_no == OFPP_ALL) {
  ------------------
  |  |   44|    754|#define OFPP_ALL        OFP_PORT_C(0xfffc) /* All ports except input port. */
  |  |  ------------------
  |  |  |  |  157|    754|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (560:13): [True: 263, False: 491]
  ------------------
  561|    263|            oqsr->port_no = OFPP_ANY;
  ------------------
  |  |   80|    263|#define OFPP_ANY OFPP_NONE
  |  |  ------------------
  |  |  |  |   47|    263|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|    263|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  562|    263|        }
  563|    754|        return 0;
  564|    554|    }
  565|       |
  566|      0|    default:
  ------------------
  |  Branch (566:5): [True: 0, False: 1.42k]
  ------------------
  567|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  568|  1.42k|    }
  569|  1.42k|}
ofputil_queue_stats_request_format:
  615|  1.42k|{
  616|  1.42k|    struct ofputil_queue_stats_request oqsr;
  617|  1.42k|    enum ofperr error;
  618|       |
  619|  1.42k|    error = ofputil_decode_queue_stats_request(oh, &oqsr);
  620|  1.42k|    if (error) {
  ------------------
  |  Branch (620:9): [True: 346, False: 1.07k]
  ------------------
  621|    346|        return error;
  622|    346|    }
  623|       |
  624|  1.07k|    ds_put_cstr(string, " port=");
  625|  1.07k|    ofputil_format_port(oqsr.port_no, port_map, string);
  626|       |
  627|  1.07k|    ds_put_cstr(string, " queue=");
  628|  1.07k|    ofp_print_queue_name(string, oqsr.queue_id);
  629|       |
  630|  1.07k|    return 0;
  631|  1.42k|}
ofputil_count_queue_stats:
  637|  7.77k|{
  638|  7.77k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  639|  7.77k|    ofpraw_pull_assert(&b);
  640|       |
  641|  13.2k|    for (size_t n = 0; ; n++) {
  642|  13.2k|        struct ofputil_queue_stats qs;
  643|  13.2k|        if (ofputil_decode_queue_stats(&qs, &b)) {
  ------------------
  |  Branch (643:13): [True: 7.77k, False: 5.49k]
  ------------------
  644|  7.77k|            return n;
  645|  7.77k|        }
  646|  13.2k|    }
  647|  7.77k|}
ofputil_decode_queue_stats:
  731|  26.5k|{
  732|  26.5k|    enum ofperr error;
  733|  26.5k|    enum ofpraw raw;
  734|       |
  735|  26.5k|    error = (msg->header ? ofpraw_decode(&raw, msg->header)
  ------------------
  |  Branch (735:14): [True: 18.7k, False: 7.77k]
  ------------------
  736|  26.5k|             : ofpraw_pull(&raw, msg));
  737|  26.5k|    if (error) {
  ------------------
  |  Branch (737:9): [True: 0, False: 26.5k]
  ------------------
  738|      0|        return error;
  739|      0|    }
  740|       |
  741|  26.5k|    if (!msg->size) {
  ------------------
  |  Branch (741:9): [True: 3.86k, False: 22.6k]
  ------------------
  742|  3.86k|        return EOF;
  743|  22.6k|    } else if (raw == OFPRAW_OFPST14_QUEUE_REPLY) {
  ------------------
  |  Branch (743:16): [True: 13.1k, False: 9.53k]
  ------------------
  744|  13.1k|        return ofputil_pull_ofp14_queue_stats(qs, msg);
  745|  13.1k|    } else if (raw == OFPRAW_OFPST13_QUEUE_REPLY) {
  ------------------
  |  Branch (745:16): [True: 1.83k, False: 7.70k]
  ------------------
  746|  1.83k|        const struct ofp13_queue_stats *qs13;
  747|       |
  748|  1.83k|        qs13 = ofpbuf_try_pull(msg, sizeof *qs13);
  749|  1.83k|        if (!qs13) {
  ------------------
  |  Branch (749:13): [True: 0, False: 1.83k]
  ------------------
  750|      0|            goto bad_len;
  751|      0|        }
  752|  1.83k|        return ofputil_queue_stats_from_ofp13(qs, qs13);
  753|  7.70k|    } else if (raw == OFPRAW_OFPST11_QUEUE_REPLY) {
  ------------------
  |  Branch (753:16): [True: 3.52k, False: 4.18k]
  ------------------
  754|  3.52k|        const struct ofp11_queue_stats *qs11;
  755|       |
  756|  3.52k|        qs11 = ofpbuf_try_pull(msg, sizeof *qs11);
  757|  3.52k|        if (!qs11) {
  ------------------
  |  Branch (757:13): [True: 0, False: 3.52k]
  ------------------
  758|      0|            goto bad_len;
  759|      0|        }
  760|  3.52k|        return ofputil_queue_stats_from_ofp11(qs, qs11);
  761|  4.18k|    } else if (raw == OFPRAW_OFPST10_QUEUE_REPLY) {
  ------------------
  |  Branch (761:16): [True: 4.18k, False: 0]
  ------------------
  762|  4.18k|        const struct ofp10_queue_stats *qs10;
  763|       |
  764|  4.18k|        qs10 = ofpbuf_try_pull(msg, sizeof *qs10);
  765|  4.18k|        if (!qs10) {
  ------------------
  |  Branch (765:13): [True: 0, False: 4.18k]
  ------------------
  766|      0|            goto bad_len;
  767|      0|        }
  768|  4.18k|        return ofputil_queue_stats_from_ofp10(qs, qs10);
  769|  4.18k|    } 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|  26.5k|}
ofputil_queue_stats_reply_format:
  885|  7.77k|{
  886|  7.77k|    ds_put_format(string, " %"PRIuSIZE" queues\n",
  887|  7.77k|                  ofputil_count_queue_stats(oh));
  888|  7.77k|    if (verbosity < 1) {
  ------------------
  |  Branch (888:9): [True: 0, False: 7.77k]
  ------------------
  889|      0|        return 0;
  890|      0|    }
  891|       |
  892|  7.77k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  893|  13.2k|    for (;;) {
  894|  13.2k|        struct ofputil_queue_stats qs;
  895|  13.2k|        int retval;
  896|       |
  897|  13.2k|        retval = ofputil_decode_queue_stats(&qs, &b);
  898|  13.2k|        if (retval) {
  ------------------
  |  Branch (898:13): [True: 7.77k, False: 5.49k]
  ------------------
  899|  7.77k|            return retval != EOF ? retval : 0;
  ------------------
  |  Branch (899:20): [True: 5.84k, False: 1.93k]
  ------------------
  900|  7.77k|        }
  901|       |
  902|  5.49k|        ds_put_cstr(string, "  port ");
  903|  5.49k|        ofputil_format_port(qs.port_no, port_map, string);
  904|  5.49k|        ds_put_cstr(string, " queue ");
  905|  5.49k|        ofp_print_queue_name(string, qs.queue_id);
  906|  5.49k|        ds_put_cstr(string, ": ");
  907|       |
  908|  5.49k|        print_queue_stat(string, "bytes=", qs.tx_bytes, 1);
  909|  5.49k|        print_queue_stat(string, "pkts=", qs.tx_packets, 1);
  910|  5.49k|        print_queue_stat(string, "errors=", qs.tx_errors, 1);
  911|       |
  912|  5.49k|        ds_put_cstr(string, "duration=");
  913|  5.49k|        if (qs.duration_sec != UINT32_MAX) {
  ------------------
  |  Branch (913:13): [True: 1.92k, False: 3.57k]
  ------------------
  914|  1.92k|            ofp_print_duration(string, qs.duration_sec, qs.duration_nsec);
  915|  3.57k|        } else {
  916|  3.57k|            ds_put_char(string, '?');
  917|  3.57k|        }
  918|  5.49k|        ds_put_char(string, '\n');
  919|  5.49k|    }
  920|  7.77k|}
ofp-queue.c:ofp_print_queue_name:
   35|  6.90k|{
   36|  6.90k|    if (queue_id == OFPQ_ALL) {
  ------------------
  |  |  416|  6.90k|#define OFPQ_ALL      0xffffffff
  ------------------
  |  Branch (36:9): [True: 2.49k, False: 4.41k]
  ------------------
   37|  2.49k|        ds_put_cstr(string, "ALL");
   38|  4.41k|    } else {
   39|       |        ds_put_format(string, "%"PRIu32, queue_id);
   40|  4.41k|    }
   41|  6.90k|}
ofp-queue.c:ofputil_pull_queue_get_config_reply14:
  369|  6.81k|{
  370|  6.81k|    struct ofp14_queue_desc *oqd14 = ofpbuf_try_pull(msg, sizeof *oqd14);
  371|  6.81k|    if (!oqd14) {
  ------------------
  |  Branch (371:9): [True: 336, False: 6.47k]
  ------------------
  372|    336|        return OFPERR_OFPBRC_BAD_LEN;
  373|    336|    }
  374|  6.47k|    enum ofperr error = ofputil_port_from_ofp11(oqd14->port_no, &queue->port);
  375|  6.47k|    if (error) {
  ------------------
  |  Branch (375:9): [True: 2.06k, False: 4.40k]
  ------------------
  376|  2.06k|        return error;
  377|  2.06k|    }
  378|  4.40k|    queue->queue = ntohl(oqd14->queue_id);
  379|       |
  380|       |    /* Length check. */
  381|  4.40k|    unsigned int len = ntohs(oqd14->len);
  382|  4.40k|    if (len < sizeof *oqd14 || len > msg->size + sizeof *oqd14 || len % 8) {
  ------------------
  |  Branch (382:9): [True: 80, False: 4.32k]
  |  Branch (382:32): [True: 255, False: 4.07k]
  |  Branch (382:67): [True: 942, False: 3.13k]
  ------------------
  383|  1.27k|        return OFPERR_OFPBRC_BAD_LEN;
  384|  1.27k|    }
  385|  3.13k|    len -= sizeof *oqd14;
  386|       |
  387|  3.13k|    struct ofpbuf properties = ofpbuf_const_initializer(ofpbuf_pull(msg, len),
  388|  3.13k|                                                        len);
  389|  10.6k|    while (properties.size > 0) {
  ------------------
  |  Branch (389:12): [True: 8.33k, False: 2.26k]
  ------------------
  390|  8.33k|        struct ofpbuf payload;
  391|  8.33k|        uint64_t type;
  392|       |
  393|  8.33k|        error = ofpprop_pull(&properties, &payload, &type);
  394|  8.33k|        if (error) {
  ------------------
  |  Branch (394:13): [True: 847, False: 7.48k]
  ------------------
  395|    847|            return error;
  396|    847|        }
  397|       |
  398|  7.48k|        switch (type) {
  399|  1.94k|        case OFPQDPT14_MIN_RATE:
  ------------------
  |  Branch (399:9): [True: 1.94k, False: 5.54k]
  ------------------
  400|  1.94k|            error = ofpprop_parse_u16(&payload, &queue->min_rate);
  401|  1.94k|            break;
  402|       |
  403|    715|        case OFPQDPT14_MAX_RATE:
  ------------------
  |  Branch (403:9): [True: 715, False: 6.77k]
  ------------------
  404|    715|            error = ofpprop_parse_u16(&payload, &queue->max_rate);
  405|    715|            break;
  406|       |
  407|  4.82k|        default:
  ------------------
  |  Branch (407:9): [True: 4.82k, False: 2.65k]
  ------------------
  408|  4.82k|            error = OFPPROP_UNKNOWN(true, "queue desc", type);
  ------------------
  |  |  144|  4.82k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  409|  4.82k|            break;
  410|  7.48k|        }
  411|       |
  412|  7.48k|        if (error) {
  ------------------
  |  Branch (412:13): [True: 16, False: 7.47k]
  ------------------
  413|     16|            return error;
  414|     16|        }
  415|  7.48k|    }
  416|       |
  417|  2.26k|    return 0;
  418|  3.13k|}
ofp-queue.c:ofputil_pull_queue_get_config_reply10:
  283|  11.5k|{
  284|  11.5k|    const struct ofp_header *oh = msg->header;
  285|  11.5k|    unsigned int opq_len;       /* Length of protocol-specific queue header. */
  286|  11.5k|    unsigned int len;           /* Total length of queue + properties. */
  287|       |
  288|       |    /* Obtain the port number from the message header. */
  289|  11.5k|    if (oh->version == OFP10_VERSION) {
  ------------------
  |  Branch (289:9): [True: 4.90k, False: 6.67k]
  ------------------
  290|  4.90k|        const struct ofp10_queue_get_config_reply *oqgcr10 = msg->msg;
  291|  4.90k|        queue->port = u16_to_ofp(ntohs(oqgcr10->port));
  292|  6.67k|    } else {
  293|  6.67k|        const struct ofp11_queue_get_config_reply *oqgcr11 = msg->msg;
  294|  6.67k|        enum ofperr error = ofputil_port_from_ofp11(oqgcr11->port,
  295|  6.67k|                                                    &queue->port);
  296|  6.67k|        if (error) {
  ------------------
  |  Branch (296:13): [True: 165, False: 6.50k]
  ------------------
  297|    165|            return error;
  298|    165|        }
  299|  6.67k|    }
  300|       |
  301|       |    /* Pull off the queue header and get the queue number and length. */
  302|  11.4k|    if (oh->version < OFP12_VERSION) {
  ------------------
  |  Branch (302:9): [True: 10.7k, False: 633]
  ------------------
  303|  10.7k|        const struct ofp10_packet_queue *opq10;
  304|  10.7k|        opq10 = ofpbuf_try_pull(msg, sizeof *opq10);
  305|  10.7k|        if (!opq10) {
  ------------------
  |  Branch (305:13): [True: 0, False: 10.7k]
  ------------------
  306|      0|            return OFPERR_OFPBRC_BAD_LEN;
  307|      0|        }
  308|  10.7k|        queue->queue = ntohl(opq10->queue_id);
  309|  10.7k|        len = ntohs(opq10->len);
  310|  10.7k|        opq_len = sizeof *opq10;
  311|  10.7k|    } else {
  312|    633|        const struct ofp12_packet_queue *opq12;
  313|    633|        opq12 = ofpbuf_try_pull(msg, sizeof *opq12);
  314|    633|        if (!opq12) {
  ------------------
  |  Branch (314:13): [True: 264, False: 369]
  ------------------
  315|    264|            return OFPERR_OFPBRC_BAD_LEN;
  316|    264|        }
  317|    369|        queue->queue = ntohl(opq12->queue_id);
  318|    369|        len = ntohs(opq12->len);
  319|    369|        opq_len = sizeof *opq12;
  320|    369|    }
  321|       |
  322|       |    /* Length check. */
  323|  11.1k|    if (len < opq_len || len > msg->size + opq_len || len % 8) {
  ------------------
  |  Branch (323:9): [True: 357, False: 10.7k]
  |  Branch (323:26): [True: 1.20k, False: 9.58k]
  |  Branch (323:55): [True: 569, False: 9.01k]
  ------------------
  324|  2.13k|        return OFPERR_OFPBRC_BAD_LEN;
  325|  2.13k|    }
  326|  9.01k|    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|  13.9k|    while (len > 0) {
  ------------------
  |  Branch (330:12): [True: 6.16k, False: 7.74k]
  ------------------
  331|  6.16k|        const struct ofp10_queue_prop_header *hdr;
  332|  6.16k|        unsigned int property;
  333|  6.16k|        unsigned int prop_len;
  334|  6.16k|        enum ofperr error = 0;
  335|       |
  336|  6.16k|        hdr = ofpbuf_at_assert(msg, 0, sizeof *hdr);
  337|  6.16k|        prop_len = ntohs(hdr->len);
  338|  6.16k|        if (prop_len < sizeof *hdr || prop_len > len || prop_len % 8) {
  ------------------
  |  Branch (338:13): [True: 106, False: 6.06k]
  |  Branch (338:39): [True: 478, False: 5.58k]
  |  Branch (338:57): [True: 545, False: 5.03k]
  ------------------
  339|  1.12k|            return OFPERR_OFPBRC_BAD_LEN;
  340|  1.12k|        }
  341|       |
  342|  5.03k|        property = ntohs(hdr->property);
  343|  5.03k|        switch (property) {
  344|    351|        case OFPQT10_MIN_RATE:
  ------------------
  |  Branch (344:9): [True: 351, False: 4.68k]
  ------------------
  345|    351|            error = parse_ofp10_queue_rate(hdr, &queue->min_rate);
  346|    351|            break;
  347|       |
  348|  1.45k|        case OFPQT11_MAX_RATE:
  ------------------
  |  Branch (348:9): [True: 1.45k, False: 3.58k]
  ------------------
  349|  1.45k|            error = parse_ofp10_queue_rate(hdr, &queue->max_rate);
  350|  1.45k|            break;
  351|       |
  352|  3.23k|        default:
  ------------------
  |  Branch (352:9): [True: 3.23k, False: 1.80k]
  ------------------
  353|  3.23k|            VLOG_INFO_RL(&rl, "unknown queue property %u", property);
  ------------------
  |  |  225|  3.23k|#define VLOG_INFO_RL(RL, ...) VLOG_RL(RL, VLL_INFO, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  3.23k|    do {                                                                \
  |  |  |  |  288|  3.23k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  3.23k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 3.23k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  3.23k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 3.23k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  354|  3.23k|            break;
  355|  5.03k|        }
  356|  5.03k|        if (error) {
  ------------------
  |  Branch (356:13): [True: 142, False: 4.89k]
  ------------------
  357|    142|            return error;
  358|    142|        }
  359|       |
  360|  4.89k|        ofpbuf_pull(msg, prop_len);
  361|  4.89k|        len -= prop_len;
  362|  4.89k|    }
  363|  7.74k|    return 0;
  364|  9.01k|}
ofp-queue.c:parse_ofp10_queue_rate:
  268|  1.80k|{
  269|  1.80k|    const struct ofp10_queue_prop_rate *oqpr;
  270|       |
  271|  1.80k|    if (hdr->len == htons(sizeof *oqpr)) {
  ------------------
  |  Branch (271:9): [True: 1.65k, False: 142]
  ------------------
  272|  1.65k|        oqpr = (const struct ofp10_queue_prop_rate *) hdr;
  273|  1.65k|        *rate = ntohs(oqpr->rate);
  274|  1.65k|        return 0;
  275|  1.65k|    } else {
  276|    142|        return OFPERR_OFPBRC_BAD_LEN;
  277|    142|    }
  278|  1.80k|}
ofp-queue.c:compare_queues:
  474|  7.43k|{
  475|  7.43k|    const struct ofputil_queue_config *a = a_;
  476|  7.43k|    const struct ofputil_queue_config *b = b_;
  477|       |
  478|  7.43k|    uint16_t ap = ofp_to_u16(a->port);
  479|  7.43k|    uint16_t bp = ofp_to_u16(b->port);
  480|  7.43k|    if (ap != bp) {
  ------------------
  |  Branch (480:9): [True: 534, False: 6.90k]
  ------------------
  481|    534|        return ap < bp ? -1 : 1;
  ------------------
  |  Branch (481:16): [True: 283, False: 251]
  ------------------
  482|    534|    }
  483|       |
  484|  6.90k|    uint32_t aq = a->queue;
  485|  6.90k|    uint32_t bq = b->queue;
  486|  6.90k|    return aq < bq ? -1 : aq > bq;
  ------------------
  |  Branch (486:12): [True: 2.07k, False: 4.82k]
  ------------------
  487|  7.43k|}
ofp-queue.c:print_queue_rate:
  463|  20.0k|{
  464|  20.0k|    if (rate <= 1000) {
  ------------------
  |  Branch (464:9): [True: 2.49k, False: 17.5k]
  ------------------
  465|  2.49k|        ds_put_format(string, " %s:%u.%u%%", name, rate / 10, rate % 10);
  466|  17.5k|    } else if (rate < UINT16_MAX) {
  ------------------
  |  Branch (466:16): [True: 687, False: 16.8k]
  ------------------
  467|    687|        ds_put_format(string, " %s:(disabled)", name);
  468|    687|    }
  469|  20.0k|}
ofp-queue.c:ofputil_pull_ofp14_queue_stats:
  699|  13.1k|{
  700|  13.1k|    const struct ofp14_queue_stats *qs14;
  701|  13.1k|    size_t len;
  702|       |
  703|  13.1k|    qs14 = ofpbuf_try_pull(msg, sizeof *qs14);
  704|  13.1k|    if (!qs14) {
  ------------------
  |  Branch (704:9): [True: 478, False: 12.6k]
  ------------------
  705|    478|        return OFPERR_OFPBRC_BAD_LEN;
  706|    478|    }
  707|       |
  708|  12.6k|    len = ntohs(qs14->length);
  709|  12.6k|    if (len < sizeof *qs14 || len - sizeof *qs14 > msg->size) {
  ------------------
  |  Branch (709:9): [True: 818, False: 11.8k]
  |  Branch (709:31): [True: 2.66k, False: 9.18k]
  ------------------
  710|  3.48k|        return OFPERR_OFPBRC_BAD_LEN;
  711|  3.48k|    }
  712|  9.18k|    ofpbuf_pull(msg, len - sizeof *qs14);
  713|       |
  714|       |    /* No properties yet defined, so ignore them for now. */
  715|       |
  716|  9.18k|    return ofputil_queue_stats_from_ofp13(oqs, &qs14->qs);
  717|  12.6k|}
ofp-queue.c:ofputil_queue_stats_from_ofp13:
  686|  11.0k|{
  687|  11.0k|    enum ofperr error = ofputil_queue_stats_from_ofp11(oqs, &qs13->qs);
  688|  11.0k|    if (!error) {
  ------------------
  |  Branch (688:9): [True: 3.98k, False: 7.02k]
  ------------------
  689|  3.98k|        oqs->duration_sec = ntohl(qs13->duration_sec);
  690|  3.98k|        oqs->duration_nsec = ntohl(qs13->duration_nsec);
  691|  3.98k|    }
  692|       |
  693|  11.0k|    return error;
  694|  11.0k|}
ofp-queue.c:ofputil_queue_stats_from_ofp11:
  666|  14.5k|{
  667|  14.5k|    enum ofperr error;
  668|       |
  669|  14.5k|    error = ofputil_port_from_ofp11(qs11->port_no, &oqs->port_no);
  670|  14.5k|    if (error) {
  ------------------
  |  Branch (670:9): [True: 7.71k, False: 6.81k]
  ------------------
  671|  7.71k|        return error;
  672|  7.71k|    }
  673|       |
  674|  6.81k|    oqs->queue_id = ntohl(qs11->queue_id);
  675|  6.81k|    oqs->tx_bytes = ntohll(qs11->tx_bytes);
  676|  6.81k|    oqs->tx_packets = ntohll(qs11->tx_packets);
  677|  6.81k|    oqs->tx_errors = ntohll(qs11->tx_errors);
  678|  6.81k|    oqs->duration_sec = oqs->duration_nsec = UINT32_MAX;
  679|       |
  680|  6.81k|    return 0;
  681|  14.5k|}
ofp-queue.c:ofputil_queue_stats_from_ofp10:
  652|  4.18k|{
  653|  4.18k|    oqs->port_no = u16_to_ofp(ntohs(qs10->port_no));
  654|  4.18k|    oqs->queue_id = ntohl(qs10->queue_id);
  655|  4.18k|    oqs->tx_bytes = ntohll(get_32aligned_be64(&qs10->tx_bytes));
  656|  4.18k|    oqs->tx_packets = ntohll(get_32aligned_be64(&qs10->tx_packets));
  657|  4.18k|    oqs->tx_errors = ntohll(get_32aligned_be64(&qs10->tx_errors));
  658|  4.18k|    oqs->duration_sec = oqs->duration_nsec = UINT32_MAX;
  659|       |
  660|  4.18k|    return 0;
  661|  4.18k|}
ofp-queue.c:print_queue_stat:
  866|  16.4k|{
  867|  16.4k|    ds_put_cstr(string, leader);
  868|  16.4k|    if (stat != UINT64_MAX) {
  ------------------
  |  Branch (868:9): [True: 10.7k, False: 5.76k]
  ------------------
  869|  10.7k|        ds_put_format(string, "%"PRIu64, stat);
  870|  10.7k|    } else {
  871|  5.76k|        ds_put_char(string, '?');
  872|  5.76k|    }
  873|  16.4k|    if (more) {
  ------------------
  |  Branch (873:9): [True: 16.4k, False: 0]
  ------------------
  874|  16.4k|        ds_put_cstr(string, ", ");
  875|  16.4k|    } else {
  876|      0|        ds_put_cstr(string, "\n");
  877|      0|    }
  878|  16.4k|}

ofputil_pull_switch_features:
   71|  4.43k|{
   72|  4.43k|    const struct ofp_header *oh = b->data;
   73|  4.43k|    enum ofpraw raw = ofpraw_pull_assert(b);
   74|  4.43k|    const struct ofp_switch_features *osf = ofpbuf_pull(b, sizeof *osf);
   75|  4.43k|    features->datapath_id = ntohll(osf->datapath_id);
   76|  4.43k|    features->n_buffers = ntohl(osf->n_buffers);
   77|  4.43k|    features->n_tables = osf->n_tables;
   78|  4.43k|    features->auxiliary_id = 0;
   79|       |
   80|  4.43k|    features->capabilities = ntohl(osf->capabilities) &
   81|  4.43k|        ofputil_capabilities_mask(oh->version);
   82|       |
   83|  4.43k|    if (raw == OFPRAW_OFPT10_FEATURES_REPLY) {
  ------------------
  |  Branch (83:9): [True: 2.08k, False: 2.34k]
  ------------------
   84|  2.08k|        if (osf->capabilities & htonl(OFPC10_STP)) {
  ------------------
  |  Branch (84:13): [True: 710, False: 1.37k]
  ------------------
   85|    710|            features->capabilities |= OFPUTIL_C_STP;
   86|    710|        }
   87|  2.08k|        features->ofpacts = ofpact_bitmap_from_openflow(osf->actions,
   88|  2.08k|                                                        OFP10_VERSION);
   89|  2.34k|    } else if (raw == OFPRAW_OFPT11_FEATURES_REPLY
  ------------------
  |  Branch (89:16): [True: 534, False: 1.81k]
  ------------------
   90|  2.34k|               || raw == OFPRAW_OFPT13_FEATURES_REPLY) {
  ------------------
  |  Branch (90:19): [True: 1.81k, False: 0]
  ------------------
   91|  2.34k|        if (osf->capabilities & htonl(OFPC11_GROUP_STATS)) {
  ------------------
  |  Branch (91:13): [True: 1.37k, False: 978]
  ------------------
   92|  1.37k|            features->capabilities |= OFPUTIL_C_GROUP_STATS;
   93|  1.37k|        }
   94|  2.34k|        features->ofpacts = 0;
   95|  2.34k|        if (raw == OFPRAW_OFPT13_FEATURES_REPLY) {
  ------------------
  |  Branch (95:13): [True: 1.81k, False: 534]
  ------------------
   96|  1.81k|            features->auxiliary_id = osf->auxiliary_id;
   97|  1.81k|        }
   98|  2.34k|    } else {
   99|      0|        return OFPERR_OFPBRC_BAD_VERSION;
  100|      0|    }
  101|       |
  102|  4.43k|    return 0;
  103|  4.43k|}
ofputil_switch_features_format:
  255|  4.43k|{
  256|  4.43k|    ds_put_format(s, " dpid:%016"PRIx64"\n", features->datapath_id);
  257|       |
  258|  4.43k|    ds_put_format(s, "n_tables:%"PRIu8", n_buffers:%"PRIu32,
  259|  4.43k|                  features->n_tables, features->n_buffers);
  260|  4.43k|    if (features->auxiliary_id) {
  ------------------
  |  Branch (260:9): [True: 1.41k, False: 3.01k]
  ------------------
  261|  1.41k|        ds_put_format(s, ", auxiliary_id:%"PRIu8, features->auxiliary_id);
  262|  1.41k|    }
  263|  4.43k|    ds_put_char(s, '\n');
  264|       |
  265|  4.43k|    ds_put_cstr(s, "capabilities: ");
  266|  4.43k|    ofp_print_bit_names(s, features->capabilities,
  267|  4.43k|                        ofputil_capabilities_to_name, ' ');
  268|  4.43k|    ds_put_char(s, '\n');
  269|       |
  270|  4.43k|    if (features->ofpacts) {
  ------------------
  |  Branch (270:9): [True: 2.03k, False: 2.39k]
  ------------------
  271|  2.03k|        ds_put_cstr(s, "actions: ");
  272|  2.03k|        ofpact_bitmap_format(features->ofpacts, s);
  273|  2.03k|        ds_put_char(s, '\n');
  274|  2.03k|    }
  275|  4.43k|}
ofputil_frag_handling_to_string:
  279|  2.99k|{
  280|  2.99k|    switch (frag) {
  ------------------
  |  Branch (280:13): [True: 2.99k, False: 0]
  ------------------
  281|    659|    case OFPUTIL_FRAG_NORMAL:   return "normal";
  ------------------
  |  Branch (281:5): [True: 659, False: 2.33k]
  ------------------
  282|    422|    case OFPUTIL_FRAG_DROP:     return "drop";
  ------------------
  |  Branch (282:5): [True: 422, False: 2.57k]
  ------------------
  283|  1.76k|    case OFPUTIL_FRAG_REASM:    return "reassemble";
  ------------------
  |  Branch (283:5): [True: 1.76k, False: 1.22k]
  ------------------
  284|    147|    case OFPUTIL_FRAG_NX_MATCH: return "nx-match";
  ------------------
  |  Branch (284:5): [True: 147, False: 2.84k]
  ------------------
  285|  2.99k|    }
  286|       |
  287|      0|    OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  288|  2.99k|}
ofputil_decode_get_config_reply:
  339|  2.43k|{
  340|  2.43k|    ofputil_decode_switch_config(oh, config);
  341|  2.43k|}
ofputil_decode_set_config:
  346|  3.91k|{
  347|  3.91k|    return (ofputil_decode_switch_config(oh, config)
  ------------------
  |  Branch (347:13): [True: 555, False: 3.35k]
  ------------------
  348|  3.91k|            ? 0
  349|  3.91k|            : OFPERR_OFPSCFC_BAD_FLAGS);
  350|  3.91k|}
ofputil_switch_config_format:
  386|  2.99k|{
  387|  2.99k|    ds_put_format(s, " frags=%s",
  388|  2.99k|                  ofputil_frag_handling_to_string(config->frag));
  389|       |
  390|  2.99k|    if (config->invalid_ttl_to_controller > 0) {
  ------------------
  |  Branch (390:9): [True: 738, False: 2.25k]
  ------------------
  391|    738|        ds_put_format(s, " invalid_ttl_to_controller");
  392|    738|    }
  393|       |
  394|  2.99k|    ds_put_format(s, " miss_send_len=%"PRIu16"\n", config->miss_send_len);
  395|  2.99k|}
ofp-switch.c:ofputil_capabilities_mask:
   44|  4.43k|{
   45|       |    /* Handle capabilities whose bit is unique for all OpenFlow versions */
   46|  4.43k|    switch (ofp_version) {
   47|  2.08k|    case OFP10_VERSION:
  ------------------
  |  Branch (47:5): [True: 2.08k, False: 2.34k]
  ------------------
   48|  2.19k|    case OFP11_VERSION:
  ------------------
  |  Branch (48:5): [True: 106, False: 4.32k]
  ------------------
   49|  2.19k|        return OFPC_COMMON | OFPC_ARP_MATCH_IP;
  ------------------
  |  |   30|  2.19k|#define OFPC_COMMON (OFPC_FLOW_STATS | OFPC_TABLE_STATS | OFPC_PORT_STATS | \
  |  |   31|  2.19k|                     OFPC_IP_REASM | OFPC_QUEUE_STATS)
  ------------------
   50|    428|    case OFP12_VERSION:
  ------------------
  |  Branch (50:5): [True: 428, False: 4.00k]
  ------------------
   51|    438|    case OFP13_VERSION:
  ------------------
  |  Branch (51:5): [True: 10, False: 4.42k]
  ------------------
   52|    438|        return OFPC_COMMON | OFPC12_PORT_BLOCKED;
  ------------------
  |  |   30|    438|#define OFPC_COMMON (OFPC_FLOW_STATS | OFPC_TABLE_STATS | OFPC_PORT_STATS | \
  |  |   31|    438|                     OFPC_IP_REASM | OFPC_QUEUE_STATS)
  ------------------
   53|    122|    case OFP14_VERSION:
  ------------------
  |  Branch (53:5): [True: 122, False: 4.31k]
  ------------------
   54|  1.80k|    case OFP15_VERSION:
  ------------------
  |  Branch (54:5): [True: 1.68k, False: 2.75k]
  ------------------
   55|  1.80k|        return OFPC_COMMON | OFPC12_PORT_BLOCKED | OFPC14_BUNDLES
  ------------------
  |  |   30|  1.80k|#define OFPC_COMMON (OFPC_FLOW_STATS | OFPC_TABLE_STATS | OFPC_PORT_STATS | \
  |  |   31|  1.80k|                     OFPC_IP_REASM | OFPC_QUEUE_STATS)
  ------------------
   56|  1.80k|            | OFPC14_FLOW_MONITORING;
   57|      0|    default:
  ------------------
  |  Branch (57:5): [True: 0, False: 4.43k]
  ------------------
   58|       |        /* Caller needs to check osf->header.version itself */
   59|      0|        return 0;
   60|  4.43k|    }
   61|  4.43k|}
ofp-switch.c:ofputil_capabilities_to_name:
  232|  14.4k|{
  233|  14.4k|    enum ofputil_capabilities capabilities = bit;
  234|       |
  235|  14.4k|    switch (capabilities) {
  ------------------
  |  Branch (235:13): [True: 14.4k, False: 0]
  ------------------
  236|  2.67k|    case OFPUTIL_C_FLOW_STATS:   return "FLOW_STATS";
  ------------------
  |  Branch (236:5): [True: 2.67k, False: 11.7k]
  ------------------
  237|  1.55k|    case OFPUTIL_C_TABLE_STATS:  return "TABLE_STATS";
  ------------------
  |  Branch (237:5): [True: 1.55k, False: 12.8k]
  ------------------
  238|  1.60k|    case OFPUTIL_C_PORT_STATS:   return "PORT_STATS";
  ------------------
  |  Branch (238:5): [True: 1.60k, False: 12.8k]
  ------------------
  239|  2.51k|    case OFPUTIL_C_IP_REASM:     return "IP_REASM";
  ------------------
  |  Branch (239:5): [True: 2.51k, False: 11.8k]
  ------------------
  240|  1.24k|    case OFPUTIL_C_QUEUE_STATS:  return "QUEUE_STATS";
  ------------------
  |  Branch (240:5): [True: 1.24k, False: 13.1k]
  ------------------
  241|    551|    case OFPUTIL_C_ARP_MATCH_IP: return "ARP_MATCH_IP";
  ------------------
  |  Branch (241:5): [True: 551, False: 13.8k]
  ------------------
  242|    710|    case OFPUTIL_C_STP:          return "STP";
  ------------------
  |  Branch (242:5): [True: 710, False: 13.6k]
  ------------------
  243|  1.37k|    case OFPUTIL_C_GROUP_STATS:  return "GROUP_STATS";
  ------------------
  |  Branch (243:5): [True: 1.37k, False: 13.0k]
  ------------------
  244|    662|    case OFPUTIL_C_PORT_BLOCKED: return "PORT_BLOCKED";
  ------------------
  |  Branch (244:5): [True: 662, False: 13.7k]
  ------------------
  245|    932|    case OFPUTIL_C_BUNDLES:      return "BUNDLES";
  ------------------
  |  Branch (245:5): [True: 932, False: 13.4k]
  ------------------
  246|    585|    case OFPUTIL_C_FLOW_MONITORING: return "FLOW_MONITORING";
  ------------------
  |  Branch (246:5): [True: 585, False: 13.8k]
  ------------------
  247|  14.4k|    }
  248|       |
  249|      0|    return NULL;
  250|  14.4k|}
ofp-switch.c:ofputil_decode_switch_config:
  316|  6.35k|{
  317|  6.35k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  318|  6.35k|    ofpraw_pull_assert(&b);
  319|       |
  320|  6.35k|    const struct ofp_switch_config *osc = ofpbuf_pull(&b, sizeof *osc);
  321|  6.35k|    config->frag = ntohs(osc->flags) & OFPC_FRAG_MASK;
  322|  6.35k|    config->miss_send_len = ntohs(osc->miss_send_len);
  323|       |
  324|  6.35k|    ovs_be16 valid_mask = htons(OFPC_FRAG_MASK);
  325|  6.35k|    if (oh->version < OFP13_VERSION) {
  ------------------
  |  Branch (325:9): [True: 1.14k, False: 5.20k]
  ------------------
  326|  1.14k|        const ovs_be16 ttl_bit = htons(OFPC_INVALID_TTL_TO_CONTROLLER);
  327|  1.14k|        valid_mask |= ttl_bit;
  328|  1.14k|        config->invalid_ttl_to_controller = (osc->flags & ttl_bit) != 0;
  329|  5.20k|    } else {
  330|  5.20k|        config->invalid_ttl_to_controller = -1;
  331|  5.20k|    }
  332|       |
  333|  6.35k|    return !(osc->flags & ~valid_mask);
  334|  6.35k|}

ofputil_table_miss_to_string:
   46|  19.4k|{
   47|  19.4k|    switch (miss) {
   48|      0|    case OFPUTIL_TABLE_MISS_DEFAULT: return "default";
  ------------------
  |  Branch (48:5): [True: 0, False: 19.4k]
  ------------------
   49|  15.3k|    case OFPUTIL_TABLE_MISS_CONTROLLER: return "controller";
  ------------------
  |  Branch (49:5): [True: 15.3k, False: 4.06k]
  ------------------
   50|  2.21k|    case OFPUTIL_TABLE_MISS_CONTINUE: return "continue";
  ------------------
  |  Branch (50:5): [True: 2.21k, False: 17.2k]
  ------------------
   51|  1.85k|    case OFPUTIL_TABLE_MISS_DROP: return "drop";
  ------------------
  |  Branch (51:5): [True: 1.85k, False: 17.5k]
  ------------------
   52|      0|    default: return "***error***";
  ------------------
  |  Branch (52:5): [True: 0, False: 19.4k]
  ------------------
   53|  19.4k|    }
   54|  19.4k|}
ofputil_table_eviction_to_string:
   58|  4.16k|{
   59|  4.16k|    switch (eviction) {
   60|      0|    case OFPUTIL_TABLE_EVICTION_DEFAULT: return "default";
  ------------------
  |  Branch (60:5): [True: 0, False: 4.16k]
  ------------------
   61|  1.37k|    case OFPUTIL_TABLE_EVICTION_ON: return "on";
  ------------------
  |  Branch (61:5): [True: 1.37k, False: 2.79k]
  ------------------
   62|  2.67k|    case OFPUTIL_TABLE_EVICTION_OFF: return "off";
  ------------------
  |  Branch (62:5): [True: 2.67k, False: 1.49k]
  ------------------
   63|    114|    default: return "***error***";
  ------------------
  |  Branch (63:5): [True: 114, False: 4.05k]
  ------------------
   64|  4.16k|    }
   65|  4.16k|}
ofputil_table_vacancy_to_string:
   69|  4.16k|{
   70|  4.16k|    switch (vacancy) {
   71|      0|    case OFPUTIL_TABLE_VACANCY_DEFAULT: return "default";
  ------------------
  |  Branch (71:5): [True: 0, False: 4.16k]
  ------------------
   72|  1.99k|    case OFPUTIL_TABLE_VACANCY_ON: return "on";
  ------------------
  |  Branch (72:5): [True: 1.99k, False: 2.17k]
  ------------------
   73|  2.17k|    case OFPUTIL_TABLE_VACANCY_OFF: return "off";
  ------------------
  |  Branch (73:5): [True: 2.17k, False: 1.99k]
  ------------------
   74|      0|    default: return "***error***";
  ------------------
  |  Branch (74:5): [True: 0, False: 4.16k]
  ------------------
   75|  4.16k|    }
   76|  4.16k|}
ofputil_table_map_get_name:
  123|   147k|{
  124|   147k|    struct namemap_node *node
  125|   147k|        = map ? namemap_find_by_number(&map->map, table_id) : NULL;
  ------------------
  |  Branch (125:11): [True: 0, False: 147k]
  ------------------
  126|   147k|    return node && !node->duplicate ? node->name : NULL;
  ------------------
  |  Branch (126:12): [True: 0, False: 147k]
  |  Branch (126:20): [True: 0, False: 0]
  ------------------
  127|   147k|}
ofputil_format_table:
  201|  80.0k|{
  202|  80.0k|    const char *table_name = ofputil_table_map_get_name(table_map, table);
  203|  80.0k|    if (table_name) {
  ------------------
  |  Branch (203:9): [True: 0, False: 80.0k]
  ------------------
  204|      0|        namemap_put_name(table_name, s);
  205|  80.0k|    } else {
  206|       |        ds_put_format(s, "%"PRIu8, table);
  207|  80.0k|    }
  208|  80.0k|}
ofputil_decode_table_features:
  375|  19.1k|{
  376|  19.1k|    bool loose = raw_properties != NULL;
  377|       |
  378|  19.1k|    memset(tf, 0, sizeof *tf);
  379|       |
  380|  19.1k|    if (!msg->header) {
  ------------------
  |  Branch (380:9): [True: 12.7k, False: 6.44k]
  ------------------
  381|  12.7k|        ofpraw_pull_assert(msg);
  382|  12.7k|    }
  383|       |
  384|  19.1k|    if (!msg->size) {
  ------------------
  |  Branch (384:9): [True: 270, False: 18.9k]
  ------------------
  385|    270|        return EOF;
  386|    270|    }
  387|       |
  388|  18.9k|    const struct ofp_header *oh = msg->header;
  389|  18.9k|    struct ofp13_table_features *otf = msg->data;
  390|  18.9k|    if (msg->size < sizeof *otf) {
  ------------------
  |  Branch (390:9): [True: 2.78k, False: 16.1k]
  ------------------
  391|  2.78k|        return OFPERR_OFPBPC_BAD_LEN;
  392|  2.78k|    }
  393|       |
  394|  16.1k|    unsigned int len = ntohs(otf->length);
  395|  16.1k|    if (len < sizeof *otf || len % 8 || len > msg->size) {
  ------------------
  |  Branch (395:9): [True: 327, False: 15.7k]
  |  Branch (395:30): [True: 330, False: 15.4k]
  |  Branch (395:41): [True: 623, False: 14.8k]
  ------------------
  396|  1.28k|        return OFPERR_OFPBPC_BAD_LEN;
  397|  1.28k|    }
  398|       |
  399|  14.8k|    if (oh->version >= OFP15_VERSION) {
  ------------------
  |  Branch (399:9): [True: 14.1k, False: 690]
  ------------------
  400|  14.1k|        if (!ofp15_table_features_command_is_valid(otf->command)) {
  ------------------
  |  Branch (400:13): [True: 122, False: 14.0k]
  ------------------
  401|    122|            return OFPERR_OFPTFFC_BAD_COMMAND;
  402|    122|        }
  403|  14.0k|        tf->command = otf->command;
  404|  14.0k|    } else {
  405|    690|        tf->command = OFPTFC15_REPLACE;
  406|    690|    }
  407|       |
  408|  14.7k|    tf->table_id = otf->table_id;
  409|  14.7k|    if (tf->table_id == OFPTT_ALL) {
  ------------------
  |  Branch (409:9): [True: 69, False: 14.6k]
  ------------------
  410|     69|        return OFPERR_OFPTFFC_BAD_TABLE;
  411|     69|    }
  412|       |
  413|  14.6k|    ovs_strlcpy_arrays(tf->name, otf->name);
  ------------------
  |  |  209|  14.6k|    ovs_strlcpy(DST, SRC, MIN(ARRAY_SIZE(DST), ARRAY_SIZE(SRC)))
  |  |  ------------------
  |  |  |  |   91|  14.6k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:20): [Folded, False: 14.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  414|  14.6k|    tf->metadata_match = otf->metadata_match;
  415|  14.6k|    tf->metadata_write = otf->metadata_write;
  416|  14.6k|    tf->miss_config = OFPUTIL_TABLE_MISS_DEFAULT;
  417|  14.6k|    if (oh->version >= OFP14_VERSION) {
  ------------------
  |  Branch (417:9): [True: 14.4k, False: 160]
  ------------------
  418|  14.4k|        uint32_t caps = ntohl(otf->capabilities);
  419|  14.4k|        tf->supports_eviction = (caps & OFPTC14_EVICTION) != 0;
  420|  14.4k|        tf->supports_vacancy_events = (caps & OFPTC14_VACANCY_EVENTS) != 0;
  421|  14.4k|    } else {
  422|    160|        tf->supports_eviction = -1;
  423|    160|        tf->supports_vacancy_events = -1;
  424|    160|    }
  425|  14.6k|    tf->max_entries = ntohl(otf->max_entries);
  426|       |
  427|  14.6k|    struct ofpbuf properties = ofpbuf_const_initializer(ofpbuf_pull(msg, len),
  428|  14.6k|                                                        len);
  429|  14.6k|    ofpbuf_pull(&properties, sizeof *otf);
  430|  14.6k|    tf->any_properties = properties.size > 0;
  431|  14.6k|    if (raw_properties) {
  ------------------
  |  Branch (431:9): [True: 14.6k, False: 0]
  ------------------
  432|  14.6k|        *raw_properties = properties;
  433|  14.6k|    }
  434|  14.6k|    uint32_t seen = 0;
  435|  27.9k|    while (properties.size > 0) {
  ------------------
  |  Branch (435:12): [True: 19.4k, False: 8.49k]
  ------------------
  436|  19.4k|        struct ofpbuf payload;
  437|  19.4k|        enum ofperr error;
  438|  19.4k|        uint64_t type;
  439|       |
  440|  19.4k|        error = pull_table_feature_property(&properties, &payload, &type);
  441|  19.4k|        if (error) {
  ------------------
  |  Branch (441:13): [True: 1.79k, False: 17.6k]
  ------------------
  442|  1.79k|            return error;
  443|  1.79k|        }
  444|       |
  445|  17.6k|        if (type < 32) {
  ------------------
  |  Branch (445:13): [True: 13.6k, False: 4.01k]
  ------------------
  446|  13.6k|            uint32_t bit = 1u << type;
  447|  13.6k|            if (seen & bit) {
  ------------------
  |  Branch (447:17): [True: 421, False: 13.1k]
  ------------------
  448|    421|                return OFPERR_OFPTFFC_BAD_FEATURES;
  449|    421|            }
  450|  13.1k|            seen |= bit;
  451|  13.1k|        }
  452|       |
  453|  17.2k|        switch ((enum ofp13_table_feature_prop_type) type) {
  454|  1.08k|        case OFPTFPT13_INSTRUCTIONS:
  ------------------
  |  Branch (454:9): [True: 1.08k, False: 16.1k]
  ------------------
  455|  1.08k|            error = parse_instruction_ids(&payload, loose,
  456|  1.08k|                                          &tf->nonmiss.instructions);
  457|  1.08k|            break;
  458|  2.78k|        case OFPTFPT13_INSTRUCTIONS_MISS:
  ------------------
  |  Branch (458:9): [True: 2.78k, False: 14.4k]
  ------------------
  459|  2.78k|            error = parse_instruction_ids(&payload, loose,
  460|  2.78k|                                          &tf->miss.instructions);
  461|  2.78k|            break;
  462|       |
  463|  3.01k|        case OFPTFPT13_NEXT_TABLES:
  ------------------
  |  Branch (463:9): [True: 3.01k, False: 14.1k]
  ------------------
  464|  3.01k|            error = parse_table_features_next_table(&payload,
  465|  3.01k|                                                    tf->nonmiss.next);
  466|  3.01k|            break;
  467|    671|        case OFPTFPT13_NEXT_TABLES_MISS:
  ------------------
  |  Branch (467:9): [True: 671, False: 16.5k]
  ------------------
  468|    671|            error = parse_table_features_next_table(&payload, tf->miss.next);
  469|    671|            break;
  470|       |
  471|    211|        case OFPTFPT13_WRITE_ACTIONS:
  ------------------
  |  Branch (471:9): [True: 211, False: 16.9k]
  ------------------
  472|    211|            error = parse_action_bitmap(&payload, oh->version,
  473|    211|                                        &tf->nonmiss.write.ofpacts);
  474|    211|            break;
  475|    297|        case OFPTFPT13_WRITE_ACTIONS_MISS:
  ------------------
  |  Branch (475:9): [True: 297, False: 16.9k]
  ------------------
  476|    297|            error = parse_action_bitmap(&payload, oh->version,
  477|    297|                                        &tf->miss.write.ofpacts);
  478|    297|            break;
  479|       |
  480|  1.11k|        case OFPTFPT13_APPLY_ACTIONS:
  ------------------
  |  Branch (480:9): [True: 1.11k, False: 16.0k]
  ------------------
  481|  1.11k|            error = parse_action_bitmap(&payload, oh->version,
  482|  1.11k|                                        &tf->nonmiss.apply.ofpacts);
  483|  1.11k|            break;
  484|    420|        case OFPTFPT13_APPLY_ACTIONS_MISS:
  ------------------
  |  Branch (484:9): [True: 420, False: 16.7k]
  ------------------
  485|    420|            error = parse_action_bitmap(&payload, oh->version,
  486|    420|                                        &tf->miss.apply.ofpacts);
  487|    420|            break;
  488|       |
  489|    416|        case OFPTFPT13_MATCH:
  ------------------
  |  Branch (489:9): [True: 416, False: 16.7k]
  ------------------
  490|    416|            error = parse_oxms(&payload, loose, &tf->match, &tf->mask);
  491|    416|            break;
  492|    791|        case OFPTFPT13_WILDCARDS:
  ------------------
  |  Branch (492:9): [True: 791, False: 16.4k]
  ------------------
  493|    791|            error = parse_oxms(&payload, loose, &tf->wildcard, NULL);
  494|    791|            break;
  495|       |
  496|    919|        case OFPTFPT13_WRITE_SETFIELD:
  ------------------
  |  Branch (496:9): [True: 919, False: 16.2k]
  ------------------
  497|    919|            error = parse_oxms(&payload, loose,
  498|    919|                               &tf->nonmiss.write.set_fields, NULL);
  499|    919|            break;
  500|    562|        case OFPTFPT13_WRITE_SETFIELD_MISS:
  ------------------
  |  Branch (500:9): [True: 562, False: 16.6k]
  ------------------
  501|    562|            error = parse_oxms(&payload, loose,
  502|    562|                               &tf->miss.write.set_fields, NULL);
  503|    562|            break;
  504|    310|        case OFPTFPT13_APPLY_SETFIELD:
  ------------------
  |  Branch (504:9): [True: 310, False: 16.9k]
  ------------------
  505|    310|            error = parse_oxms(&payload, loose,
  506|    310|                               &tf->nonmiss.apply.set_fields, NULL);
  507|    310|            break;
  508|    601|        case OFPTFPT13_APPLY_SETFIELD_MISS:
  ------------------
  |  Branch (508:9): [True: 601, False: 16.6k]
  ------------------
  509|    601|            error = parse_oxms(&payload, loose,
  510|    601|                               &tf->miss.apply.set_fields, NULL);
  511|    601|            break;
  512|       |
  513|      0|        case OFPTFPT13_EXPERIMENTER:
  ------------------
  |  Branch (513:9): [True: 0, False: 17.2k]
  ------------------
  514|      0|        case OFPTFPT13_EXPERIMENTER_MISS:
  ------------------
  |  Branch (514:9): [True: 0, False: 17.2k]
  ------------------
  515|  4.01k|        default:
  ------------------
  |  Branch (515:9): [True: 4.01k, False: 13.1k]
  ------------------
  516|  4.01k|            error = OFPPROP_UNKNOWN(loose, "table features", type);
  ------------------
  |  |  144|  4.01k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  517|  4.01k|            break;
  518|  17.2k|        }
  519|  17.2k|        if (error) {
  ------------------
  |  Branch (519:13): [True: 3.94k, False: 13.2k]
  ------------------
  520|  3.94k|            return error;
  521|  3.94k|        }
  522|  17.2k|    }
  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|  8.49k|    unsigned int missing = (seen & OFPTFPT13_REQUIRED) ^ OFPTFPT13_REQUIRED;
  ------------------
  |  |  276|  8.49k|#define OFPTFPT13_REQUIRED ((1u << OFPTFPT13_INSTRUCTIONS) |    \
  |  |  277|  8.49k|                            (1u << OFPTFPT13_NEXT_TABLES) |     \
  |  |  278|  8.49k|                            (1u << OFPTFPT13_WRITE_ACTIONS) |   \
  |  |  279|  8.49k|                            (1u << OFPTFPT13_APPLY_ACTIONS) |   \
  |  |  280|  8.49k|                            (1u << OFPTFPT13_MATCH) |           \
  |  |  281|  8.49k|                            (1u << OFPTFPT13_WILDCARDS) |       \
  |  |  282|  8.49k|                            (1u << OFPTFPT13_WRITE_SETFIELD) |  \
  |  |  283|  8.49k|                            (1u << OFPTFPT13_APPLY_SETFIELD))
  ------------------
                  unsigned int missing = (seen & OFPTFPT13_REQUIRED) ^ OFPTFPT13_REQUIRED;
  ------------------
  |  |  276|  8.49k|#define OFPTFPT13_REQUIRED ((1u << OFPTFPT13_INSTRUCTIONS) |    \
  |  |  277|  8.49k|                            (1u << OFPTFPT13_NEXT_TABLES) |     \
  |  |  278|  8.49k|                            (1u << OFPTFPT13_WRITE_ACTIONS) |   \
  |  |  279|  8.49k|                            (1u << OFPTFPT13_APPLY_ACTIONS) |   \
  |  |  280|  8.49k|                            (1u << OFPTFPT13_MATCH) |           \
  |  |  281|  8.49k|                            (1u << OFPTFPT13_WILDCARDS) |       \
  |  |  282|  8.49k|                            (1u << OFPTFPT13_WRITE_SETFIELD) |  \
  |  |  283|  8.49k|                            (1u << OFPTFPT13_APPLY_SETFIELD))
  ------------------
  527|  8.49k|    if (missing && (tf->any_properties || oh->version < OFP15_VERSION)) {
  ------------------
  |  Branch (527:9): [True: 8.49k, False: 0]
  |  Branch (527:21): [True: 2.03k, False: 6.45k]
  |  Branch (527:43): [True: 9, False: 6.44k]
  ------------------
  528|  2.04k|        VLOG_WARN_RL(&rl,
  ------------------
  |  |  224|  2.04k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  2.04k|    do {                                                                \
  |  |  |  |  288|  2.04k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  2.04k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 2.04k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  2.04k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 2.04k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  529|  2.04k|                     "table features message missing %u required "
  530|  2.04k|                     "properties, including property %d",
  531|  2.04k|                     count_1bits(missing), rightmost_1bit_idx(missing));
  532|  2.04k|        return OFPERR_OFPTFFC_BAD_FEATURES;
  533|  2.04k|    }
  534|       |
  535|       |    /* Copy nonmiss to miss when appropriate. */
  536|  6.44k|    if (tf->any_properties) {
  ------------------
  |  Branch (536:9): [True: 0, False: 6.44k]
  ------------------
  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|  6.44k|    bitmap_or(tf->match.bm, tf->mask.bm, MFF_N_IDS);
  568|  6.44k|    bitmap_or(tf->wildcard.bm, tf->mask.bm, MFF_N_IDS);
  569|  6.44k|    bitmap_and(tf->wildcard.bm, tf->match.bm, MFF_N_IDS);
  570|       |
  571|  6.44k|    return 0;
  572|  8.49k|}
ofputil_decode_table_desc:
  729|  4.96k|{
  730|  4.96k|    memset(td, 0, sizeof *td);
  731|       |
  732|  4.96k|    if (!msg->header) {
  ------------------
  |  Branch (732:9): [True: 1.92k, False: 3.03k]
  ------------------
  733|  1.92k|        ofpraw_pull_assert(msg);
  734|  1.92k|    }
  735|       |
  736|  4.96k|    if (!msg->size) {
  ------------------
  |  Branch (736:9): [True: 761, False: 4.20k]
  ------------------
  737|    761|        return EOF;
  738|    761|    }
  739|       |
  740|  4.20k|    struct ofp14_table_desc *otd = ofpbuf_try_pull(msg, sizeof *otd);
  741|  4.20k|    if (!otd) {
  ------------------
  |  Branch (741:9): [True: 0, False: 4.20k]
  ------------------
  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|  4.20k|    td->table_id = otd->table_id;
  748|  4.20k|    size_t length = ntohs(otd->length);
  749|  4.20k|    if (length < sizeof *otd || length - sizeof *otd > msg->size) {
  ------------------
  |  Branch (749:9): [True: 798, False: 3.40k]
  |  Branch (749:33): [True: 634, False: 2.77k]
  ------------------
  750|  1.43k|        VLOG_WARN_RL(&rl, "OFP14_TABLE_DESC reply claims invalid "
  ------------------
  |  |  224|  1.43k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.43k|    do {                                                                \
  |  |  |  |  288|  1.43k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.43k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.43k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.43k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.43k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  751|  1.43k|                     "length %"PRIuSIZE, length);
  752|  1.43k|        return OFPERR_OFPBRC_BAD_LEN;
  753|  1.43k|    }
  754|  2.77k|    length -= sizeof *otd;
  755|       |
  756|  2.77k|    td->eviction = ofputil_decode_table_eviction(otd->config, version);
  757|  2.77k|    td->vacancy = ofputil_decode_table_vacancy(otd->config, version);
  758|  2.77k|    td->eviction_flags = UINT32_MAX;
  759|       |
  760|  2.77k|    struct ofpbuf properties = ofpbuf_const_initializer(
  761|  2.77k|        ofpbuf_pull(msg, length), length);
  762|  3.63k|    while (properties.size > 0) {
  ------------------
  |  Branch (762:12): [True: 1.46k, False: 2.16k]
  ------------------
  763|  1.46k|        struct ofpbuf payload;
  764|  1.46k|        enum ofperr error;
  765|  1.46k|        uint64_t type;
  766|       |
  767|  1.46k|        error = ofpprop_pull(&properties, &payload, &type);
  768|  1.46k|        if (error) {
  ------------------
  |  Branch (768:13): [True: 293, False: 1.17k]
  ------------------
  769|    293|            return error;
  770|    293|        }
  771|       |
  772|  1.17k|        switch (type) {
  773|    471|        case OFPTMPT14_EVICTION:
  ------------------
  |  Branch (773:9): [True: 471, False: 704]
  ------------------
  774|    471|            error = ofpprop_parse_u32(&payload, &td->eviction_flags);
  775|    471|            break;
  776|       |
  777|    380|        case OFPTMPT14_VACANCY:
  ------------------
  |  Branch (777:9): [True: 380, False: 795]
  ------------------
  778|    380|            error = parse_table_desc_vacancy_property(&payload, td);
  779|    380|            break;
  780|       |
  781|    324|        default:
  ------------------
  |  Branch (781:9): [True: 324, False: 851]
  ------------------
  782|    324|            error = OFPPROP_UNKNOWN(true, "table_desc", type);
  ------------------
  |  |  144|    324|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  783|    324|            break;
  784|  1.17k|        }
  785|       |
  786|  1.17k|        if (error) {
  ------------------
  |  Branch (786:13): [True: 309, False: 866]
  ------------------
  787|    309|            return error;
  788|    309|        }
  789|  1.17k|    }
  790|       |
  791|  2.16k|    return 0;
  792|  2.77k|}
ofputil_table_desc_format:
  875|  2.16k|{
  876|  2.16k|    ds_put_format(s, "\n  table ");
  877|  2.16k|    ofputil_format_table(td->table_id, table_map, s);
  878|  2.16k|    ds_put_cstr(s, ":\n");
  879|  2.16k|    ds_put_format(s, "   eviction=%s eviction_flags=",
  880|  2.16k|                  ofputil_table_eviction_to_string(td->eviction));
  881|  2.16k|    ofputil_put_eviction_flags(s, td->eviction_flags);
  882|  2.16k|    ds_put_char(s, '\n');
  883|  2.16k|    ds_put_format(s, "   vacancy=%s",
  884|  2.16k|                  ofputil_table_vacancy_to_string(td->vacancy));
  885|  2.16k|    if (td->vacancy == OFPUTIL_TABLE_VACANCY_ON) {
  ------------------
  |  Branch (885:9): [True: 977, False: 1.19k]
  ------------------
  886|    977|        ds_put_format(s, " vacancy_down=%"PRIu8"%%",
  887|    977|                      td->table_vacancy.vacancy_down);
  888|    977|        ds_put_format(s, " vacancy_up=%"PRIu8"%%",
  889|    977|                      td->table_vacancy.vacancy_up);
  890|    977|        ds_put_format(s, " vacancy=%"PRIu8"%%",
  891|    977|                      td->table_vacancy.vacancy);
  892|    977|    }
  893|  2.16k|    ds_put_char(s, '\n');
  894|  2.16k|}
ofputil_decode_table_mod:
 1055|  7.53k|{
 1056|  7.53k|    memset(pm, 0, sizeof *pm);
 1057|  7.53k|    pm->miss = OFPUTIL_TABLE_MISS_DEFAULT;
 1058|  7.53k|    pm->eviction = OFPUTIL_TABLE_EVICTION_DEFAULT;
 1059|  7.53k|    pm->eviction_flags = UINT32_MAX;
 1060|  7.53k|    pm->vacancy = OFPUTIL_TABLE_VACANCY_DEFAULT;
 1061|       |
 1062|  7.53k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
 1063|  7.53k|    enum ofpraw raw = ofpraw_pull_assert(&b);
 1064|  7.53k|    if (raw == OFPRAW_OFPT11_TABLE_MOD) {
  ------------------
  |  Branch (1064:9): [True: 1.60k, False: 5.93k]
  ------------------
 1065|  1.60k|        const struct ofp11_table_mod *otm = b.data;
 1066|       |
 1067|  1.60k|        pm->table_id = otm->table_id;
 1068|  1.60k|        pm->miss = ofputil_decode_table_miss(otm->config, oh->version);
 1069|  5.93k|    } else if (raw == OFPRAW_OFPT14_TABLE_MOD) {
  ------------------
  |  Branch (1069:16): [True: 5.93k, False: 0]
  ------------------
 1070|  5.93k|        const struct ofp14_table_mod *otm = ofpbuf_pull(&b, sizeof *otm);
 1071|       |
 1072|  5.93k|        pm->table_id = otm->table_id;
 1073|  5.93k|        pm->miss = ofputil_decode_table_miss(otm->config, oh->version);
 1074|  5.93k|        pm->eviction = ofputil_decode_table_eviction(otm->config, oh->version);
 1075|  5.93k|        pm->vacancy = ofputil_decode_table_vacancy(otm->config, oh->version);
 1076|  6.12k|        while (b.size > 0) {
  ------------------
  |  Branch (1076:16): [True: 4.12k, False: 2.00k]
  ------------------
 1077|  4.12k|            struct ofpbuf property;
 1078|  4.12k|            enum ofperr error;
 1079|  4.12k|            uint64_t type;
 1080|       |
 1081|  4.12k|            error = ofpprop_pull(&b, &property, &type);
 1082|  4.12k|            if (error) {
  ------------------
  |  Branch (1082:17): [True: 630, False: 3.49k]
  ------------------
 1083|    630|                return error;
 1084|    630|            }
 1085|       |
 1086|  3.49k|            switch (type) {
 1087|    135|            case OFPTMPT14_EVICTION:
  ------------------
  |  Branch (1087:13): [True: 135, False: 3.35k]
  ------------------
 1088|    135|                error = ofpprop_parse_u32(&property, &pm->eviction);
 1089|    135|                break;
 1090|       |
 1091|  2.57k|            case OFPTMPT14_VACANCY:
  ------------------
  |  Branch (1091:13): [True: 2.57k, False: 915]
  ------------------
 1092|  2.57k|                error = parse_table_mod_vacancy_property(&property, pm);
 1093|  2.57k|                break;
 1094|       |
 1095|    780|            default:
  ------------------
  |  Branch (1095:13): [True: 780, False: 2.71k]
  ------------------
 1096|    780|                error = OFPERR_OFPBRC_BAD_TYPE;
 1097|    780|                break;
 1098|  3.49k|            }
 1099|       |
 1100|  3.49k|            if (error) {
  ------------------
  |  Branch (1100:17): [True: 3.30k, False: 186]
  ------------------
 1101|  3.30k|                return error;
 1102|  3.30k|            }
 1103|  3.49k|        }
 1104|  5.93k|    } else {
 1105|      0|        return OFPERR_OFPBRC_BAD_TYPE;
 1106|      0|    }
 1107|       |
 1108|  3.60k|    return 0;
 1109|  7.53k|}
ofputil_table_mod_format:
 1171|  3.60k|{
 1172|  3.60k|    if (tm->table_id == 0xff) {
  ------------------
  |  Branch (1172:9): [True: 1.37k, False: 2.22k]
  ------------------
 1173|  1.37k|        ds_put_cstr(s, " table_id: ALL_TABLES");
 1174|  2.22k|    } else {
 1175|  2.22k|        ds_put_format(s, " table_id=");
 1176|  2.22k|        ofputil_format_table(tm->table_id, table_map, s);
 1177|  2.22k|    }
 1178|       |
 1179|  3.60k|    if (tm->miss != OFPUTIL_TABLE_MISS_DEFAULT) {
  ------------------
  |  Branch (1179:9): [True: 1.40k, False: 2.20k]
  ------------------
 1180|  1.40k|        ds_put_format(s, ", flow_miss_config=%s",
 1181|  1.40k|                      ofputil_table_miss_to_string(tm->miss));
 1182|  1.40k|    }
 1183|  3.60k|    if (tm->eviction != OFPUTIL_TABLE_EVICTION_DEFAULT) {
  ------------------
  |  Branch (1183:9): [True: 2.00k, False: 1.60k]
  ------------------
 1184|  2.00k|        ds_put_format(s, ", eviction=%s",
 1185|  2.00k|                      ofputil_table_eviction_to_string(tm->eviction));
 1186|  2.00k|    }
 1187|  3.60k|    if (tm->eviction_flags != UINT32_MAX) {
  ------------------
  |  Branch (1187:9): [True: 0, False: 3.60k]
  ------------------
 1188|      0|        ds_put_cstr(s, "eviction_flags=");
 1189|      0|        ofputil_put_eviction_flags(s, tm->eviction_flags);
 1190|      0|    }
 1191|  3.60k|    if (tm->vacancy != OFPUTIL_TABLE_VACANCY_DEFAULT) {
  ------------------
  |  Branch (1191:9): [True: 2.00k, False: 1.60k]
  ------------------
 1192|  2.00k|        ds_put_format(s, ", vacancy=%s",
 1193|  2.00k|                      ofputil_table_vacancy_to_string(tm->vacancy));
 1194|  2.00k|        if (tm->vacancy == OFPUTIL_TABLE_VACANCY_ON) {
  ------------------
  |  Branch (1194:13): [True: 1.02k, False: 980]
  ------------------
 1195|  1.02k|            ds_put_format(s, " vacancy:%"PRIu8""
 1196|  1.02k|                          ",%"PRIu8"", tm->table_vacancy.vacancy_down,
 1197|  1.02k|                          tm->table_vacancy.vacancy_up);
 1198|  1.02k|        }
 1199|  2.00k|    }
 1200|  3.60k|}
ofputil_table_features_format:
 1707|  36.4k|{
 1708|  36.4k|    if (!prev_features && features->command != OFPTFC15_REPLACE) {
  ------------------
  |  Branch (1708:9): [True: 7.06k, False: 29.3k]
  |  Branch (1708:27): [True: 149, False: 6.91k]
  ------------------
 1709|    149|        ds_put_format(s, "\n  command: %s",
 1710|    149|                      ofp15_table_features_command_to_string(
 1711|    149|                          features->command));
 1712|    149|    }
 1713|       |
 1714|  36.4k|    int table = features->table_id;
 1715|  36.4k|    int prev_table = prev_features ? prev_features->table_id : 0;
  ------------------
  |  Branch (1715:22): [True: 29.3k, False: 7.06k]
  ------------------
 1716|       |
 1717|  36.4k|    bool same_stats = !stats || (prev_stats
  ------------------
  |  Branch (1717:23): [True: 6.44k, False: 29.9k]
  |  Branch (1717:34): [True: 25.4k, False: 4.55k]
  ------------------
 1718|  25.4k|                                 && table_stats_equal(stats, prev_stats));
  ------------------
  |  Branch (1718:37): [True: 4.03k, False: 21.3k]
  ------------------
 1719|  36.4k|    bool same_features = prev_features && table_features_equal(features,
  ------------------
  |  Branch (1719:26): [True: 29.3k, False: 7.06k]
  |  Branch (1719:43): [True: 8.00k, False: 21.3k]
  ------------------
 1720|  29.3k|                                                               prev_features);
 1721|  36.4k|    if (same_stats && same_features && !features->name[0]) {
  ------------------
  |  Branch (1721:9): [True: 10.4k, False: 25.9k]
  |  Branch (1721:23): [True: 3.01k, False: 7.46k]
  |  Branch (1721:40): [True: 906, False: 2.11k]
  ------------------
 1722|    906|        if (*first_ditto < 0) {
  ------------------
  |  Branch (1722:13): [True: 476, False: 430]
  ------------------
 1723|    476|            *first_ditto = table;
 1724|    476|        }
 1725|    906|        *last_ditto = table;
 1726|    906|        return;
 1727|    906|    }
 1728|  35.5k|    ofputil_table_features_format_finish(s, *first_ditto, *last_ditto);
 1729|  35.5k|    *first_ditto = -1;
 1730|       |
 1731|  35.5k|    ds_put_format(s, "\n  table %d", table);
 1732|  35.5k|    if (features->name[0]) {
  ------------------
  |  Branch (1732:9): [True: 22.6k, False: 12.8k]
  ------------------
 1733|  22.6k|        ds_put_format(s, " (\"%s\")", features->name);
 1734|  22.6k|    }
 1735|  35.5k|    ds_put_char(s, ':');
 1736|       |
 1737|  35.5k|    if (same_stats && same_features) {
  ------------------
  |  Branch (1737:9): [True: 9.57k, False: 25.9k]
  |  Branch (1737:23): [True: 2.11k, False: 7.46k]
  ------------------
 1738|  2.11k|        ds_put_cstr(s, " ditto");
 1739|  2.11k|        return;
 1740|  2.11k|    }
 1741|  33.4k|    ds_put_char(s, '\n');
 1742|  33.4k|    if (stats) {
  ------------------
  |  Branch (1742:9): [True: 28.0k, False: 5.36k]
  ------------------
 1743|  28.0k|        ds_put_format(s, "    active=%"PRIu32", ", stats->active_count);
 1744|  28.0k|        ds_put_format(s, "lookup=%"PRIu64", ", stats->lookup_count);
 1745|  28.0k|        ds_put_format(s, "matched=%"PRIu64"\n", stats->matched_count);
 1746|  28.0k|    }
 1747|  33.4k|    if (same_features) {
  ------------------
  |  Branch (1747:9): [True: 4.98k, False: 28.4k]
  ------------------
 1748|  4.98k|        if (!table_features_empty(features)) {
  ------------------
  |  Branch (1748:13): [True: 1.41k, False: 3.56k]
  ------------------
 1749|  1.41k|            ds_put_cstr(s, "    (same features)\n");
 1750|  1.41k|        }
 1751|  4.98k|        return;
 1752|  4.98k|    }
 1753|  28.4k|    if (features->metadata_match || features->metadata_write) {
  ------------------
  |  Branch (1753:9): [True: 16.7k, False: 11.6k]
  |  Branch (1753:37): [True: 1.21k, False: 10.4k]
  ------------------
 1754|  17.9k|        ds_put_format(s, "    metadata: match=%#"PRIx64" write=%#"PRIx64"\n",
 1755|  17.9k|                      ntohll(features->metadata_match),
 1756|  17.9k|                      ntohll(features->metadata_write));
 1757|  17.9k|    }
 1758|       |
 1759|  28.4k|    if (features->miss_config != OFPUTIL_TABLE_MISS_DEFAULT) {
  ------------------
  |  Branch (1759:9): [True: 18.0k, False: 10.3k]
  ------------------
 1760|  18.0k|        ds_put_format(s, "    config=%s\n",
 1761|  18.0k|                      ofputil_table_miss_to_string(features->miss_config));
 1762|  18.0k|    }
 1763|       |
 1764|  28.4k|    if (features->supports_eviction >= 0) {
  ------------------
  |  Branch (1764:9): [True: 5.36k, False: 23.0k]
  ------------------
 1765|  5.36k|        ds_put_format(s, "    eviction: %ssupported\n",
 1766|  5.36k|                      features->supports_eviction ? "" : "not ");
  ------------------
  |  Branch (1766:23): [True: 944, False: 4.41k]
  ------------------
 1767|       |
 1768|  5.36k|    }
 1769|  28.4k|    if (features->supports_vacancy_events >= 0) {
  ------------------
  |  Branch (1769:9): [True: 5.36k, False: 23.0k]
  ------------------
 1770|  5.36k|        ds_put_format(s, "    vacancy events: %ssupported\n",
 1771|  5.36k|                      features->supports_vacancy_events ? "" : "not ");
  ------------------
  |  Branch (1771:23): [True: 4.62k, False: 738]
  ------------------
 1772|       |
 1773|  5.36k|    }
 1774|       |
 1775|  28.4k|    if (features->max_entries) {
  ------------------
  |  Branch (1775:9): [True: 24.6k, False: 3.82k]
  ------------------
 1776|  24.6k|        ds_put_format(s, "    max_entries=%"PRIu32"\n", features->max_entries);
 1777|  24.6k|    }
 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: 21.3k, False: 7.06k]
  ------------------
 1781|  28.4k|    const struct ofputil_table_instruction_features *prev_miss
 1782|  28.4k|        = prev_features ? &prev_features->miss : NULL;
  ------------------
  |  Branch (1782:11): [True: 21.3k, False: 7.06k]
  ------------------
 1783|  28.4k|    if (prev_features
  ------------------
  |  Branch (1783:9): [True: 21.3k, False: 7.06k]
  ------------------
 1784|  21.3k|        && table_instruction_features_equal(&features->nonmiss, table,
  ------------------
  |  Branch (1784:12): [True: 8.16k, False: 13.2k]
  ------------------
 1785|  21.3k|                                            prev_nonmiss, prev_table)
 1786|  8.16k|        && table_instruction_features_equal(&features->miss, table,
  ------------------
  |  Branch (1786:12): [True: 8.16k, False: 0]
  ------------------
 1787|  8.16k|                                            prev_miss, prev_table)) {
 1788|  8.16k|        if (!table_instruction_features_empty(&features->nonmiss)) {
  ------------------
  |  Branch (1788:13): [True: 1.53k, False: 6.62k]
  ------------------
 1789|  1.53k|            ds_put_cstr(s, "    (same instructions)\n");
 1790|  1.53k|        }
 1791|  20.2k|    } else if (!table_instruction_features_equal(&features->nonmiss, table,
  ------------------
  |  Branch (1791:16): [True: 0, False: 20.2k]
  ------------------
 1792|  20.2k|                                                 &features->miss, table)) {
 1793|      0|        ds_put_cstr(s, "    instructions (other than table miss):\n");
 1794|      0|        print_table_instruction_features(s, &features->nonmiss, prev_nonmiss);
 1795|      0|        ds_put_cstr(s, "    instructions (table miss):\n");
 1796|      0|        print_table_instruction_features(s, &features->miss, prev_miss);
 1797|  20.2k|    } else if (!table_instruction_features_empty(&features->nonmiss)) {
  ------------------
  |  Branch (1797:16): [True: 16.2k, False: 3.98k]
  ------------------
 1798|  16.2k|        ds_put_cstr(s, "    instructions (table miss and others):\n");
 1799|  16.2k|        print_table_instruction_features(s, &features->nonmiss, prev_nonmiss);
 1800|  16.2k|    }
 1801|       |
 1802|  28.4k|    if (!bitmap_is_all_zeros(features->match.bm, MFF_N_IDS)) {
  ------------------
  |  Branch (1802:9): [True: 21.8k, False: 6.55k]
  ------------------
 1803|  21.8k|        if (prev_features
  ------------------
  |  Branch (1803:13): [True: 17.7k, False: 4.08k]
  ------------------
 1804|  17.7k|            && bitmap_equal(features->match.bm, prev_features->match.bm,
  ------------------
  |  Branch (1804:16): [True: 3.68k, False: 14.1k]
  ------------------
 1805|  17.7k|                            MFF_N_IDS)) {
 1806|  3.68k|            ds_put_cstr(s, "    (same matching)\n");
 1807|  18.1k|        } else {
 1808|  18.1k|            ds_put_cstr(s, "    matching:\n");
 1809|       |
 1810|  18.1k|            print_matches(s, features, true, true, "arbitrary mask");
 1811|  18.1k|            print_matches(s, features, false, true, "exact match or wildcard");
 1812|  18.1k|            print_matches(s, features, false, false, "must exact match");
 1813|  18.1k|        }
 1814|  21.8k|    }
 1815|  28.4k|}
ofputil_table_features_format_finish:
 1820|  53.2k|{
 1821|  53.2k|    if (first_ditto < 0) {
  ------------------
  |  Branch (1821:9): [True: 52.8k, False: 476]
  ------------------
 1822|  52.8k|        return;
 1823|  52.8k|    }
 1824|       |
 1825|    476|    ds_put_char(s, '\n');
 1826|    476|    if (first_ditto == last_ditto) {
  ------------------
  |  Branch (1826:9): [True: 414, False: 62]
  ------------------
 1827|    414|        ds_put_format(s, "  table %d: ditto\n", first_ditto);
 1828|    414|    } else {
 1829|     62|        ds_put_format(s, "  tables %d...%d: ditto\n", first_ditto, last_ditto);
 1830|     62|    }
 1831|    476|}
ofputil_decode_table_stats_reply:
 2256|  35.0k|{
 2257|  35.0k|    const struct ofp_header *oh;
 2258|       |
 2259|  35.0k|    if (!msg->header) {
  ------------------
  |  Branch (2259:9): [True: 0, False: 35.0k]
  ------------------
 2260|      0|        ofpraw_pull_assert(msg);
 2261|      0|    }
 2262|  35.0k|    oh = msg->header;
 2263|       |
 2264|  35.0k|    if (!msg->size) {
  ------------------
  |  Branch (2264:9): [True: 5.04k, False: 29.9k]
  ------------------
 2265|  5.04k|        return EOF;
 2266|  5.04k|    }
 2267|       |
 2268|  29.9k|    memset(stats, 0, sizeof *stats);
 2269|  29.9k|    memset(features, 0, sizeof *features);
 2270|  29.9k|    features->supports_eviction = -1;
 2271|  29.9k|    features->supports_vacancy_events = -1;
 2272|       |
 2273|  29.9k|    switch ((enum ofp_version) oh->version) {
 2274|  5.73k|    case OFP10_VERSION:
  ------------------
  |  Branch (2274:5): [True: 5.73k, False: 24.2k]
  ------------------
 2275|  5.73k|        return ofputil_decode_ofp10_table_stats(msg, stats, features);
 2276|       |
 2277|  5.80k|    case OFP11_VERSION:
  ------------------
  |  Branch (2277:5): [True: 5.80k, False: 24.1k]
  ------------------
 2278|  5.80k|        return ofputil_decode_ofp11_table_stats(msg, stats, features);
 2279|       |
 2280|  13.9k|    case OFP12_VERSION:
  ------------------
  |  Branch (2280:5): [True: 13.9k, False: 16.0k]
  ------------------
 2281|  13.9k|        return ofputil_decode_ofp12_table_stats(msg, stats, features);
 2282|       |
 2283|  1.12k|    case OFP13_VERSION:
  ------------------
  |  Branch (2283:5): [True: 1.12k, False: 28.8k]
  ------------------
 2284|  2.50k|    case OFP14_VERSION:
  ------------------
  |  Branch (2284:5): [True: 1.38k, False: 28.5k]
  ------------------
 2285|  4.51k|    case OFP15_VERSION:
  ------------------
  |  Branch (2285:5): [True: 2.01k, False: 27.9k]
  ------------------
 2286|  4.51k|        return ofputil_decode_ofp13_table_stats(msg, stats, features);
 2287|       |
 2288|      0|    default:
  ------------------
  |  Branch (2288:5): [True: 0, False: 29.9k]
  ------------------
 2289|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 2290|  29.9k|    }
 2291|  29.9k|}
ofp_table_reason_to_string:
 2299|    589|{
 2300|    589|    switch (reason) {
 2301|    302|    case OFPTR_VACANCY_DOWN:
  ------------------
  |  Branch (2301:5): [True: 302, False: 287]
  ------------------
 2302|    302|        return "vacancy_down";
 2303|       |
 2304|    287|    case OFPTR_VACANCY_UP:
  ------------------
  |  Branch (2304:5): [True: 287, False: 302]
  ------------------
 2305|    287|        return "vacancy_up";
 2306|       |
 2307|      0|    default:
  ------------------
  |  Branch (2307:5): [True: 0, False: 589]
  ------------------
 2308|      0|        snprintf(reasonbuf, bufsize, "%d", (int) reason);
 2309|      0|        return reasonbuf;
 2310|    589|    }
 2311|    589|}
ofputil_decode_table_status:
 2373|  2.62k|{
 2374|  2.62k|    const struct ofp14_table_status *ots;
 2375|  2.62k|    struct ofpbuf b;
 2376|  2.62k|    enum ofperr error;
 2377|  2.62k|    enum ofpraw raw;
 2378|       |
 2379|  2.62k|    ofpbuf_use_const(&b, oh, ntohs(oh->length));
 2380|  2.62k|    raw = ofpraw_pull_assert(&b);
 2381|  2.62k|    ots = ofpbuf_pull(&b, sizeof *ots);
 2382|       |
 2383|  2.62k|    if (raw == OFPRAW_OFPT14_TABLE_STATUS) {
  ------------------
  |  Branch (2383:9): [True: 2.62k, False: 0]
  ------------------
 2384|  2.62k|        if (ots->reason != OFPTR_VACANCY_DOWN
  ------------------
  |  Branch (2384:13): [True: 2.44k, False: 171]
  ------------------
 2385|  2.44k|            && ots->reason != OFPTR_VACANCY_UP) {
  ------------------
  |  Branch (2385:16): [True: 1.23k, False: 1.21k]
  ------------------
 2386|  1.23k|            return OFPERR_OFPBPC_BAD_VALUE;
 2387|  1.23k|        }
 2388|  1.38k|        ts->reason = ots->reason;
 2389|       |
 2390|  1.38k|        error = ofputil_decode_table_desc(&b, &ts->desc, oh->version);
 2391|  1.38k|        return error;
 2392|  2.62k|    } else {
 2393|      0|        return OFPERR_OFPBRC_BAD_VERSION;
 2394|      0|    }
 2395|       |
 2396|      0|    return 0;
 2397|  2.62k|}
ofputil_format_table_status:
 2403|    519|{
 2404|    519|    if (ts->reason == OFPTR_VACANCY_DOWN) {
  ------------------
  |  Branch (2404:9): [True: 70, False: 449]
  ------------------
 2405|     70|        ds_put_format(string, " reason=VACANCY_DOWN");
 2406|    449|    } else if (ts->reason == OFPTR_VACANCY_UP) {
  ------------------
  |  Branch (2406:16): [True: 449, False: 0]
  ------------------
 2407|    449|        ds_put_format(string, " reason=VACANCY_UP");
 2408|    449|    }
 2409|       |
 2410|    519|    ds_put_format(string, "\ntable_desc:-");
 2411|    519|    ofputil_table_desc_format(string, &ts->desc, table_map);
 2412|    519|}
ofp-table.c:ofp15_table_features_command_is_valid:
   80|  14.1k|{
   81|  14.1k|    switch (cmd) {
   82|  12.4k|    case OFPTFC15_REPLACE:
  ------------------
  |  Branch (82:5): [True: 12.4k, False: 1.73k]
  ------------------
   83|  13.1k|    case OFPTFC15_MODIFY:
  ------------------
  |  Branch (83:5): [True: 725, False: 13.4k]
  ------------------
   84|  13.9k|    case OFPTFC15_ENABLE:
  ------------------
  |  Branch (84:5): [True: 828, False: 13.3k]
  ------------------
   85|  14.0k|    case OFPTFC15_DISABLE:
  ------------------
  |  Branch (85:5): [True: 57, False: 14.0k]
  ------------------
   86|  14.0k|        return true;
   87|       |
   88|    122|    default:
  ------------------
  |  Branch (88:5): [True: 122, False: 14.0k]
  ------------------
   89|       |        return false;
   90|  14.1k|    }
   91|  14.1k|}
ofp-table.c:pull_table_feature_property:
  235|  19.4k|{
  236|  19.4k|    enum ofperr error;
  237|       |
  238|  19.4k|    error = ofpprop_pull(msg, payload, typep);
  239|  19.4k|    if (payload && !error) {
  ------------------
  |  Branch (239:9): [True: 19.4k, False: 0]
  |  Branch (239:20): [True: 17.6k, False: 1.79k]
  ------------------
  240|  17.6k|        ofpbuf_pull(payload, (char *)payload->msg - (char *)payload->header);
  241|  17.6k|    }
  242|  19.4k|    return error;
  243|  19.4k|}
ofp-table.c:parse_instruction_ids:
  270|  3.86k|{
  271|  3.86k|    *insts = 0;
  272|  6.10k|    while (payload->size > 0) {
  ------------------
  |  Branch (272:12): [True: 4.10k, False: 2.00k]
  ------------------
  273|  4.10k|        enum ovs_instruction_type inst;
  274|  4.10k|        enum ofperr error;
  275|  4.10k|        uint64_t ofpit;
  276|       |
  277|       |        /* OF1.3 and OF1.4 aren't clear about padding in the instruction IDs.
  278|       |         * It seems clear that they aren't padded to 8 bytes, though, because
  279|       |         * both standards say that "non-experimenter instructions are 4 bytes"
  280|       |         * and do not mention any padding before the first instruction ID.
  281|       |         * (There wouldn't be any point in padding to 8 bytes if the IDs were
  282|       |         * aligned on an odd 4-byte boundary.)
  283|       |         *
  284|       |         * Anyway, we just assume they're all glommed together on byte
  285|       |         * boundaries. */
  286|  4.10k|        error = ofpprop_pull__(payload, NULL, 1, 0x10000, &ofpit);
  287|  4.10k|        if (error) {
  ------------------
  |  Branch (287:13): [True: 1.86k, False: 2.23k]
  ------------------
  288|  1.86k|            return error;
  289|  1.86k|        }
  290|       |
  291|  2.23k|        error = ovs_instruction_type_from_inst_type(&inst, ofpit);
  292|  2.23k|        if (!error) {
  ------------------
  |  Branch (292:13): [True: 358, False: 1.87k]
  ------------------
  293|    358|            *insts |= 1u << inst;
  294|  1.87k|        } else if (!loose) {
  ------------------
  |  Branch (294:20): [True: 0, False: 1.87k]
  ------------------
  295|      0|            return error;
  296|      0|        }
  297|  2.23k|    }
  298|  2.00k|    return 0;
  299|  3.86k|}
ofp-table.c:parse_table_features_next_table:
  304|  3.68k|{
  305|  3.68k|    size_t i;
  306|       |
  307|  3.68k|    memset(next_tables, 0, bitmap_n_bytes(255));
  308|  23.1k|    for (i = 0; i < payload->size; i++) {
  ------------------
  |  Branch (308:17): [True: 20.3k, False: 2.78k]
  ------------------
  309|  20.3k|        uint8_t id = ((const uint8_t *) payload->data)[i];
  310|  20.3k|        if (id >= 255) {
  ------------------
  |  Branch (310:13): [True: 903, False: 19.4k]
  ------------------
  311|    903|            return OFPERR_OFPBPC_BAD_VALUE;
  312|    903|        }
  313|  19.4k|        bitmap_set1(next_tables, id);
  314|  19.4k|    }
  315|  2.78k|    return 0;
  316|  3.68k|}
ofp-table.c:parse_action_bitmap:
  248|  2.04k|{
  249|  2.04k|    uint32_t types = 0;
  250|       |
  251|  3.00k|    while (payload->size > 0) {
  ------------------
  |  Branch (251:12): [True: 1.60k, False: 1.40k]
  ------------------
  252|  1.60k|        enum ofperr error;
  253|  1.60k|        uint64_t type;
  254|       |
  255|  1.60k|        error = ofpprop_pull__(payload, NULL, 1, 0x10000, &type);
  256|  1.60k|        if (error) {
  ------------------
  |  Branch (256:13): [True: 635, False: 965]
  ------------------
  257|    635|            return error;
  258|    635|        }
  259|    965|        if (type < CHAR_BIT * sizeof types) {
  ------------------
  |  Branch (259:13): [True: 723, False: 242]
  ------------------
  260|    723|            types |= 1u << type;
  261|    723|        }
  262|    965|    }
  263|       |
  264|  1.40k|    *ofpacts = ofpact_bitmap_from_openflow(htonl(types), ofp_version);
  265|  1.40k|    return 0;
  266|  2.04k|}
ofp-table.c:parse_oxms:
  321|  3.59k|{
  322|  3.59k|    struct mf_bitmap exact = MF_BITMAP_INITIALIZER;
  ------------------
  |  | 2053|  3.59k|#define MF_BITMAP_INITIALIZER { { [0] = 0 } }
  ------------------
  323|  3.59k|    struct mf_bitmap masked = MF_BITMAP_INITIALIZER;
  ------------------
  |  | 2053|  3.59k|#define MF_BITMAP_INITIALIZER { { [0] = 0 } }
  ------------------
  324|       |
  325|  30.3k|    while (payload->size > 0) {
  ------------------
  |  Branch (325:12): [True: 26.8k, False: 3.52k]
  ------------------
  326|  26.8k|        const struct mf_field *field;
  327|  26.8k|        enum ofperr error;
  328|  26.8k|        bool hasmask;
  329|       |
  330|  26.8k|        error = nx_pull_header(payload, NULL, &field, &hasmask);
  331|  26.8k|        if (!error) {
  ------------------
  |  Branch (331:13): [True: 697, False: 26.1k]
  ------------------
  332|    697|            bitmap_set1(hasmask ? masked.bm : exact.bm, field->id);
  ------------------
  |  Branch (332:25): [True: 602, False: 95]
  ------------------
  333|  26.1k|        } else if (error != OFPERR_OFPBMC_BAD_FIELD || !loose) {
  ------------------
  |  Branch (333:20): [True: 71, False: 26.0k]
  |  Branch (333:56): [True: 0, False: 26.0k]
  ------------------
  334|     71|            return error;
  335|     71|        }
  336|  26.8k|    }
  337|  3.52k|    if (exactp) {
  ------------------
  |  Branch (337:9): [True: 3.52k, False: 0]
  ------------------
  338|  3.52k|        *exactp = exact;
  339|  3.52k|    } else if (!bitmap_is_all_zeros(exact.bm, MFF_N_IDS)) {
  ------------------
  |  Branch (339:16): [True: 0, False: 0]
  ------------------
  340|      0|        return OFPERR_OFPBMC_BAD_MASK;
  341|      0|    }
  342|  3.52k|    if (maskedp) {
  ------------------
  |  Branch (342:9): [True: 409, False: 3.11k]
  ------------------
  343|    409|        *maskedp = masked;
  344|  3.11k|    } else if (!bitmap_is_all_zeros(masked.bm, MFF_N_IDS)) {
  ------------------
  |  Branch (344:16): [True: 469, False: 2.65k]
  ------------------
  345|    469|        return OFPERR_OFPBMC_BAD_MASK;
  346|    469|    }
  347|  3.05k|    return 0;
  348|  3.52k|}
ofp-table.c:parse_table_desc_vacancy_property:
  708|    380|{
  709|    380|    struct ofp14_table_mod_prop_vacancy *otv = property->data;
  710|       |
  711|    380|    if (property->size != sizeof *otv) {
  ------------------
  |  Branch (711:9): [True: 309, False: 71]
  ------------------
  712|    309|        return OFPERR_OFPBPC_BAD_LEN;
  713|    309|    }
  714|       |
  715|     71|    td->table_vacancy.vacancy_down = otv->vacancy_down;
  716|     71|    td->table_vacancy.vacancy_up = otv->vacancy_up;
  717|     71|    td->table_vacancy.vacancy = otv->vacancy;
  718|     71|    return 0;
  719|    380|}
ofp-table.c:ofputil_put_eviction_flags:
  863|  2.16k|{
  864|  2.16k|    if (eviction_flags != UINT32_MAX) {
  ------------------
  |  Branch (864:9): [True: 458, False: 1.71k]
  ------------------
  865|    458|        ofp_print_bit_names(string, eviction_flags,
  866|    458|                            ofputil_eviction_flag_to_string, '|');
  867|  1.71k|    } else {
  868|  1.71k|        ds_put_cstr(string, "(default)");
  869|  1.71k|    }
  870|  2.16k|}
ofp-table.c:ofputil_eviction_flag_to_string:
  847|  12.3k|{
  848|  12.3k|    enum ofp14_table_mod_prop_eviction_flag eviction_flag = bit;
  849|       |
  850|  12.3k|    switch (eviction_flag) {
  ------------------
  |  Branch (850:13): [True: 1.29k, False: 11.0k]
  ------------------
  851|    448|    case OFPTMPEF14_OTHER:      return "OTHER";
  ------------------
  |  Branch (851:5): [True: 448, False: 11.8k]
  ------------------
  852|    439|    case OFPTMPEF14_IMPORTANCE: return "IMPORTANCE";
  ------------------
  |  Branch (852:5): [True: 439, False: 11.8k]
  ------------------
  853|    410|    case OFPTMPEF14_LIFETIME:   return "LIFETIME";
  ------------------
  |  Branch (853:5): [True: 410, False: 11.9k]
  ------------------
  854|  12.3k|    }
  855|       |
  856|  11.0k|    return NULL;
  857|  12.3k|}
ofp-table.c:ofputil_decode_table_vacancy:
  941|  8.70k|{
  942|  8.70k|    return (version < OFP14_VERSION ? OFPUTIL_TABLE_VACANCY_DEFAULT
  ------------------
  |  Branch (942:13): [True: 0, False: 8.70k]
  ------------------
  943|  8.70k|            : config & htonl(OFPTC14_VACANCY_EVENTS) ? OFPUTIL_TABLE_VACANCY_ON
  ------------------
  |  Branch (943:15): [True: 4.61k, False: 4.08k]
  ------------------
  944|  8.70k|            : OFPUTIL_TABLE_VACANCY_OFF);
  945|  8.70k|}
ofp-table.c:ofputil_decode_table_eviction:
  956|  8.70k|{
  957|  8.70k|    return (version < OFP14_VERSION ? OFPUTIL_TABLE_EVICTION_DEFAULT
  ------------------
  |  Branch (957:13): [True: 0, False: 8.70k]
  ------------------
  958|  8.70k|            : config & htonl(OFPTC14_EVICTION) ? OFPUTIL_TABLE_EVICTION_ON
  ------------------
  |  Branch (958:15): [True: 3.35k, False: 5.35k]
  ------------------
  959|  8.70k|            : OFPUTIL_TABLE_EVICTION_OFF);
  960|  8.70k|}
ofp-table.c:ofputil_decode_table_miss:
 1027|  27.2k|{
 1028|  27.2k|    uint32_t config = ntohl(config_);
 1029|       |
 1030|  27.2k|    if (version == OFP11_VERSION || version == OFP12_VERSION) {
  ------------------
  |  Branch (1030:9): [True: 6.93k, False: 20.3k]
  |  Branch (1030:37): [True: 14.1k, False: 6.13k]
  ------------------
 1031|  21.1k|        switch (config & OFPTC11_TABLE_MISS_MASK) {
 1032|  13.0k|        case OFPTC11_TABLE_MISS_CONTROLLER:
  ------------------
  |  Branch (1032:9): [True: 13.0k, False: 8.04k]
  ------------------
 1033|  13.0k|            return OFPUTIL_TABLE_MISS_CONTROLLER;
 1034|       |
 1035|  2.71k|        case OFPTC11_TABLE_MISS_CONTINUE:
  ------------------
  |  Branch (1035:9): [True: 2.71k, False: 18.4k]
  ------------------
 1036|  2.71k|            return OFPUTIL_TABLE_MISS_CONTINUE;
 1037|       |
 1038|  2.02k|        case OFPTC11_TABLE_MISS_DROP:
  ------------------
  |  Branch (1038:9): [True: 2.02k, False: 19.1k]
  ------------------
 1039|  2.02k|            return OFPUTIL_TABLE_MISS_DROP;
 1040|       |
 1041|  3.31k|        default:
  ------------------
  |  Branch (1041:9): [True: 3.31k, False: 17.8k]
  ------------------
 1042|  3.31k|            VLOG_WARN_RL(&rl, "bad table miss config %d", config);
  ------------------
  |  |  224|  3.31k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  3.31k|    do {                                                                \
  |  |  |  |  288|  3.31k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  3.31k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 3.31k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  3.31k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 3.31k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1043|  3.31k|            return OFPUTIL_TABLE_MISS_CONTROLLER;
 1044|  21.1k|        }
 1045|  21.1k|    } else {
 1046|  6.13k|        return OFPUTIL_TABLE_MISS_DEFAULT;
 1047|  6.13k|    }
 1048|  27.2k|}
ofp-table.c:parse_table_mod_vacancy_property:
  904|  2.57k|{
  905|  2.57k|    struct ofp14_table_mod_prop_vacancy *otv = property->data;
  906|       |
  907|  2.57k|    if (property->size != sizeof *otv) {
  ------------------
  |  Branch (907:9): [True: 353, False: 2.22k]
  ------------------
  908|    353|        return OFPERR_OFPBPC_BAD_LEN;
  909|    353|    }
  910|  2.22k|    tm->table_vacancy.vacancy_down = otv->vacancy_down;
  911|  2.22k|    tm->table_vacancy.vacancy_up = otv->vacancy_up;
  912|  2.22k|    if (tm->table_vacancy.vacancy_down > tm->table_vacancy.vacancy_up) {
  ------------------
  |  Branch (912:9): [True: 720, False: 1.50k]
  ------------------
  913|    720|        OFPPROP_LOG(&rl, false,
  ------------------
  |  |  139|    720|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    720|    do {                                                                \
  |  |  |  |  288|  1.44k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 720]
  |  |  |  |  ------------------
  |  |  |  |  289|    720|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 720]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    720|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 720]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  914|    720|                    "Value of vacancy_down is greater than vacancy_up");
  915|    720|        return OFPERR_OFPBPC_BAD_VALUE;
  916|    720|    }
  917|  1.50k|    if (tm->table_vacancy.vacancy_down > 100 ||
  ------------------
  |  Branch (917:9): [True: 646, False: 859]
  ------------------
  918|  1.21k|        tm->table_vacancy.vacancy_up > 100) {
  ------------------
  |  Branch (918:9): [True: 573, False: 286]
  ------------------
  919|  1.21k|        OFPPROP_LOG(&rl, false, "Vacancy threshold percentage "
  ------------------
  |  |  139|  1.21k|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.21k|    do {                                                                \
  |  |  |  |  288|  2.43k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 1.21k]
  |  |  |  |  ------------------
  |  |  |  |  289|  1.21k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.21k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.21k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.21k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  920|  1.21k|                    "should not be greater than 100");
  921|  1.21k|        return OFPERR_OFPBPC_BAD_VALUE;
  922|  1.21k|    }
  923|    286|    tm->table_vacancy.vacancy = otv->vacancy;
  924|    286|    if (tm->table_vacancy.vacancy) {
  ------------------
  |  Branch (924:9): [True: 217, False: 69]
  ------------------
  925|    217|        OFPPROP_LOG(&rl, false,
  ------------------
  |  |  139|    217|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    217|    do {                                                                \
  |  |  |  |  288|    434|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 217]
  |  |  |  |  ------------------
  |  |  |  |  289|    217|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 217]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    217|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 217]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  926|    217|                    "Vacancy value should be zero for table-mod messages");
  927|    217|        return OFPERR_OFPBPC_BAD_VALUE;
  928|    217|    }
  929|     69|    return 0;
  930|    286|}
ofp-table.c:ofp15_table_features_command_to_string:
   95|    149|{
   96|    149|    switch (cmd) {
   97|      0|    case OFPTFC15_REPLACE: return "replace";
  ------------------
  |  Branch (97:5): [True: 0, False: 149]
  ------------------
   98|     26|    case OFPTFC15_MODIFY: return "modify";
  ------------------
  |  Branch (98:5): [True: 26, False: 123]
  ------------------
   99|     79|    case OFPTFC15_ENABLE: return "enable";
  ------------------
  |  Branch (99:5): [True: 79, False: 70]
  ------------------
  100|     44|    case OFPTFC15_DISABLE: return "disable";
  ------------------
  |  Branch (100:5): [True: 44, False: 105]
  ------------------
  101|      0|    default: return "***bad command***";
  ------------------
  |  Branch (101:5): [True: 0, False: 149]
  ------------------
  102|    149|    }
  103|    149|}
ofp-table.c:table_stats_equal:
 1693|  25.4k|{
 1694|  25.4k|    return (a->active_count == b->active_count
  ------------------
  |  Branch (1694:13): [True: 8.34k, False: 17.0k]
  ------------------
 1695|  8.34k|            && a->lookup_count == b->lookup_count
  ------------------
  |  Branch (1695:16): [True: 5.24k, False: 3.09k]
  ------------------
 1696|  5.24k|            && a->matched_count == b->matched_count);
  ------------------
  |  Branch (1696:16): [True: 4.03k, False: 1.21k]
  ------------------
 1697|  25.4k|}
ofp-table.c:table_features_equal:
 1662|  29.3k|{
 1663|  29.3k|    return (a->metadata_match == b->metadata_match
  ------------------
  |  Branch (1663:13): [True: 20.7k, False: 8.65k]
  ------------------
 1664|  20.7k|            && a->metadata_write == b->metadata_write
  ------------------
  |  Branch (1664:16): [True: 18.1k, False: 2.53k]
  ------------------
 1665|  18.1k|            && a->miss_config == b->miss_config
  ------------------
  |  Branch (1665:16): [True: 16.5k, False: 1.68k]
  ------------------
 1666|  16.5k|            && a->supports_eviction == b->supports_eviction
  ------------------
  |  Branch (1666:16): [True: 16.1k, False: 336]
  ------------------
 1667|  16.1k|            && a->supports_vacancy_events == b->supports_vacancy_events
  ------------------
  |  Branch (1667:16): [True: 16.1k, False: 22]
  ------------------
 1668|  16.1k|            && a->max_entries == b->max_entries
  ------------------
  |  Branch (1668:16): [True: 10.1k, False: 5.94k]
  ------------------
 1669|  10.1k|            && table_instruction_features_equal(&a->nonmiss, a->table_id,
  ------------------
  |  Branch (1669:16): [True: 8.63k, False: 1.56k]
  ------------------
 1670|  10.1k|                                                &b->nonmiss, b->table_id)
 1671|  8.63k|            && table_instruction_features_equal(&a->miss, a->table_id,
  ------------------
  |  Branch (1671:16): [True: 8.63k, False: 0]
  ------------------
 1672|  8.63k|                                                &b->miss, b->table_id)
 1673|  8.63k|            && bitmap_equal(a->match.bm, b->match.bm, MFF_N_IDS));
  ------------------
  |  Branch (1673:16): [True: 8.00k, False: 636]
  ------------------
 1674|  29.3k|}
ofp-table.c:table_features_empty:
 1678|  4.98k|{
 1679|  4.98k|    return (!tf->metadata_match
  ------------------
  |  Branch (1679:13): [True: 4.48k, False: 499]
  ------------------
 1680|  4.48k|            && !tf->metadata_write
  ------------------
  |  Branch (1680:16): [True: 4.38k, False: 103]
  ------------------
 1681|  4.38k|            && tf->miss_config == OFPUTIL_TABLE_MISS_DEFAULT
  ------------------
  |  Branch (1681:16): [True: 4.24k, False: 137]
  ------------------
 1682|  4.24k|            && tf->supports_eviction < 0
  ------------------
  |  Branch (1682:16): [True: 4.24k, False: 0]
  ------------------
 1683|  4.24k|            && tf->supports_vacancy_events < 0
  ------------------
  |  Branch (1683:16): [True: 4.24k, False: 0]
  ------------------
 1684|  4.24k|            && !tf->max_entries
  ------------------
  |  Branch (1684:16): [True: 3.79k, False: 451]
  ------------------
 1685|  3.79k|            && table_instruction_features_empty(&tf->nonmiss)
  ------------------
  |  Branch (1685:16): [True: 3.79k, False: 0]
  ------------------
 1686|  3.79k|            && table_instruction_features_empty(&tf->miss)
  ------------------
  |  Branch (1686:16): [True: 3.79k, False: 0]
  ------------------
 1687|  3.79k|            && bitmap_is_all_zeros(tf->match.bm, MFF_N_IDS));
  ------------------
  |  Branch (1687:16): [True: 3.56k, False: 225]
  ------------------
 1688|  4.98k|}
ofp-table.c:table_instruction_features_equal:
 1641|  68.6k|{
 1642|  68.6k|    return (table_instruction_features_next_equal(a->next, a_table_id,
  ------------------
  |  Branch (1642:13): [True: 68.6k, False: 0]
  ------------------
 1643|  68.6k|                                                  b->next, b_table_id)
 1644|  68.6k|            && a->instructions == b->instructions
  ------------------
  |  Branch (1644:16): [True: 60.6k, False: 7.98k]
  ------------------
 1645|  60.6k|            && table_action_features_equal(&a->write, &b->write)
  ------------------
  |  Branch (1645:16): [True: 55.5k, False: 5.11k]
  ------------------
 1646|  55.5k|            && table_action_features_equal(&a->apply, &b->apply));
  ------------------
  |  Branch (1646:16): [True: 53.8k, False: 1.66k]
  ------------------
 1647|  68.6k|}
ofp-table.c:table_instruction_features_next_equal:
 1615|  69.3k|{
 1616|  69.3k|    if (b_table_id == a_table_id + 1
  ------------------
  |  Branch (1616:9): [True: 1.26k, False: 68.0k]
  ------------------
 1617|  1.26k|        && bitmap_is_set(a, b_table_id)
  ------------------
  |  Branch (1617:12): [True: 0, False: 1.26k]
  ------------------
 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.3k|    } else if (a_table_id == b_table_id + 1) {
  ------------------
  |  Branch (1629:16): [True: 672, False: 68.6k]
  ------------------
 1630|    672|        return table_instruction_features_next_equal(b, b_table_id,
 1631|    672|                                                     a, a_table_id);
 1632|  68.6k|    } else {
 1633|  68.6k|        return bitmap_equal(a, b, 255);
 1634|  68.6k|    }
 1635|  69.3k|}
ofp-table.c:table_action_features_equal:
 1511|   147k|{
 1512|   147k|    return (a->ofpacts == b->ofpacts
  ------------------
  |  Branch (1512:13): [True: 125k, False: 21.7k]
  ------------------
 1513|   125k|            && bitmap_equal(a->set_fields.bm, b->set_fields.bm, MFF_N_IDS));
  ------------------
  |  Branch (1513:16): [True: 117k, False: 8.19k]
  ------------------
 1514|   147k|}
ofp-table.c:table_instruction_features_empty:
 1652|  36.0k|{
 1653|  36.0k|    return (bitmap_is_all_zeros(tif->next, 255)
  ------------------
  |  Branch (1653:13): [True: 36.0k, False: 0]
  ------------------
 1654|  36.0k|            && !tif->instructions
  ------------------
  |  Branch (1654:16): [True: 25.6k, False: 10.3k]
  ------------------
 1655|  25.6k|            && table_action_features_empty(&tif->write)
  ------------------
  |  Branch (1655:16): [True: 19.8k, False: 5.81k]
  ------------------
 1656|  19.8k|            && table_action_features_empty(&tif->apply));
  ------------------
  |  Branch (1656:16): [True: 18.2k, False: 1.62k]
  ------------------
 1657|  36.0k|}
ofp-table.c:table_action_features_empty:
 1518|  45.4k|{
 1519|  45.4k|    return !taf->ofpacts && bitmap_is_all_zeros(taf->set_fields.bm, MFF_N_IDS);
  ------------------
  |  Branch (1519:12): [True: 39.6k, False: 5.79k]
  |  Branch (1519:29): [True: 38.0k, False: 1.64k]
  ------------------
 1520|  45.4k|}
ofp-table.c:print_table_instruction_features:
 1527|  16.2k|{
 1528|  16.2k|    int start, end;
 1529|       |
 1530|  16.2k|    if (!bitmap_is_all_zeros(tif->next, 255)) {
  ------------------
  |  Branch (1530:9): [True: 0, False: 16.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|  16.2k|    if (tif->instructions) {
  ------------------
  |  Branch (1548:9): [True: 9.94k, False: 6.33k]
  ------------------
 1549|  9.94k|        if (prev_tif && tif->instructions == prev_tif->instructions) {
  ------------------
  |  Branch (1549:13): [True: 8.16k, False: 1.78k]
  |  Branch (1549:25): [True: 2.11k, False: 6.04k]
  ------------------
 1550|  2.11k|            ds_put_cstr(s, "      (same instructions)\n");
 1551|  7.83k|        } else {
 1552|  7.83k|            ds_put_cstr(s, "      instructions: ");
 1553|  7.83k|            int i;
 1554|       |
 1555|   258k|            for (i = 0; i < 32; i++) {
  ------------------
  |  Branch (1555:25): [True: 250k, False: 7.83k]
  ------------------
 1556|   250k|                if (tif->instructions & (1u << i)) {
  ------------------
  |  Branch (1556:21): [True: 22.7k, False: 227k]
  ------------------
 1557|  22.7k|                    const char *name = ovs_instruction_name_from_type(i);
 1558|  22.7k|                    if (name) {
  ------------------
  |  Branch (1558:25): [True: 22.7k, False: 0]
  ------------------
 1559|  22.7k|                        ds_put_cstr(s, name);
 1560|  22.7k|                    } else {
 1561|      0|                        ds_put_format(s, "%d", i);
 1562|      0|                    }
 1563|  22.7k|                    ds_put_char(s, ' ');
 1564|  22.7k|                }
 1565|   250k|            }
 1566|  7.83k|            ds_chomp(s, ' ');
 1567|  7.83k|            ds_put_char(s, '\n');
 1568|  7.83k|        }
 1569|  9.94k|    }
 1570|       |
 1571|  16.2k|    if (prev_tif
  ------------------
  |  Branch (1571:9): [True: 13.0k, False: 3.22k]
  ------------------
 1572|  13.0k|        && table_action_features_equal(&tif->write, &prev_tif->write)
  ------------------
  |  Branch (1572:12): [True: 2.31k, False: 10.7k]
  ------------------
 1573|  2.31k|        && table_action_features_equal(&tif->apply, &prev_tif->apply)
  ------------------
  |  Branch (1573:12): [True: 621, False: 1.69k]
  ------------------
 1574|    621|        && !bitmap_is_all_zeros(tif->write.set_fields.bm, MFF_N_IDS)) {
  ------------------
  |  Branch (1574:12): [True: 426, False: 195]
  ------------------
 1575|    426|        ds_put_cstr(s, "      (same actions)\n");
 1576|  15.8k|    } else if (!table_action_features_equal(&tif->write, &tif->apply)) {
  ------------------
  |  Branch (1576:16): [True: 10.6k, False: 5.16k]
  ------------------
 1577|  10.6k|        ds_put_cstr(s, "      Write-Actions features:\n");
 1578|  10.6k|        print_table_action_features(s, &tif->write);
 1579|  10.6k|        ds_put_cstr(s, "      Apply-Actions features:\n");
 1580|  10.6k|        print_table_action_features(s, &tif->apply);
 1581|  10.6k|    } else if (tif->write.ofpacts
  ------------------
  |  Branch (1581:16): [True: 4.77k, False: 382]
  ------------------
 1582|  4.88k|               || !bitmap_is_all_zeros(tif->write.set_fields.bm, MFF_N_IDS)) {
  ------------------
  |  Branch (1582:19): [True: 107, False: 275]
  ------------------
 1583|  4.88k|        ds_put_cstr(s, "      Write-Actions and Apply-Actions features:\n");
 1584|  4.88k|        print_table_action_features(s, &tif->write);
 1585|  4.88k|    }
 1586|  16.2k|}
ofp-table.c:print_table_action_features:
 1494|  26.2k|{
 1495|  26.2k|    if (taf->ofpacts) {
  ------------------
  |  Branch (1495:9): [True: 19.0k, False: 7.21k]
  ------------------
 1496|  19.0k|        ds_put_cstr(s, "        actions: ");
 1497|  19.0k|        ofpact_bitmap_format(taf->ofpacts, s);
 1498|  19.0k|        ds_put_char(s, '\n');
 1499|  19.0k|    }
 1500|       |
 1501|  26.2k|    if (!bitmap_is_all_zeros(taf->set_fields.bm, MFF_N_IDS)) {
  ------------------
  |  Branch (1501:9): [True: 17.8k, False: 8.37k]
  ------------------
 1502|  17.8k|        ds_put_cstr(s, "        supported on Set-Field:");
 1503|  17.8k|        print_mf_bitmap(s, &taf->set_fields);
 1504|  17.8k|        ds_put_char(s, '\n');
 1505|  17.8k|    }
 1506|  26.2k|}
ofp-table.c:print_mf_bitmap:
 1476|  43.4k|{
 1477|  43.4k|    const char *ids[MFF_N_IDS];
 1478|  43.4k|    size_t n = 0;
 1479|       |
 1480|  43.4k|    int i;
 1481|   347k|    BITMAP_FOR_EACH_1 (i, MFF_N_IDS, mfb->bm) {
  ------------------
  |  |  281|  43.4k|    BITMAP_FOR_EACH_1_RANGE(IDX, 0, SIZE, BITMAP)
  |  |  ------------------
  |  |  |  |  278|   391k|    for ((IDX) = bitmap_scan(BITMAP, true, BEGIN, END); (IDX) < (END);   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (278:57): [True: 347k, False: 43.4k]
  |  |  |  |  ------------------
  |  |  |  |  279|   347k|         (IDX) = bitmap_scan(BITMAP, true, (IDX) + 1, END))
  |  |  ------------------
  ------------------
 1482|   347k|        ids[n++] = mf_from_id(i)->name;
 1483|   347k|    }
 1484|       |
 1485|  43.4k|    if (n > 0) {
  ------------------
  |  Branch (1485:9): [True: 43.4k, False: 0]
  ------------------
 1486|  43.4k|        ds_put_char(s, ' ');
 1487|  43.4k|        print_names(s, ids, n, 0);
 1488|  43.4k|    }
 1489|  43.4k|}
ofp-table.c:print_names:
 1439|   132k|{
 1440|   132k|    int group = 0;
 1441|   568k|    while (n > 0) {
  ------------------
  |  Branch (1441:12): [True: 436k, False: 132k]
  ------------------
 1442|   436k|        if (group++) {
  ------------------
  |  Branch (1442:13): [True: 304k, False: 132k]
  ------------------
 1443|   304k|            ds_put_char(s, prefix_len ? ',' : ' ');
  ------------------
  |  Branch (1443:28): [True: 112k, False: 191k]
  ------------------
 1444|   304k|        }
 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|   436k|        size_t extra_prefix_len;
 1453|   436k|        size_t prefix_run = count_common_prefix_run(ids, n, prefix_len,
 1454|   436k|                                                    &extra_prefix_len);
 1455|   436k|        size_t suffix_run = count_sequential_suffix_run(ids, n);
 1456|   436k|        size_t run = MAX(prefix_run, suffix_run);
  ------------------
  |  |   95|   436k|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (95:20): [True: 88.6k, False: 347k]
  |  |  ------------------
  ------------------
 1457|   436k|        if (suffix_run >= prefix_run) {
  ------------------
  |  Branch (1457:13): [True: 347k, False: 88.6k]
  ------------------
 1458|   347k|            ds_put_format(s, "%s", ids[0] + prefix_len);
 1459|   347k|            if (run > 1) {
  ------------------
  |  Branch (1459:17): [True: 0, False: 347k]
  ------------------
 1460|      0|                ds_put_format(s, "...%s", ids[run - 1] + prefix_len);
 1461|      0|            }
 1462|   347k|        } else {
 1463|  88.6k|            ds_put_format(s, "%.*s{", (int) extra_prefix_len,
 1464|  88.6k|                          ids[0] + prefix_len);
 1465|  88.6k|            print_names(s, ids, run, prefix_len + extra_prefix_len);
 1466|  88.6k|            ds_put_char(s, '}');
 1467|  88.6k|        }
 1468|       |
 1469|   436k|        ids += run;
 1470|   436k|        n -= run;
 1471|   436k|    }
 1472|   132k|}
ofp-table.c:count_common_prefix_run:
 1400|   436k|{
 1401|   436k|    *extra_prefix_lenp = 0;
 1402|   436k|    if (n < 2) {
  ------------------
  |  Branch (1402:9): [True: 116k, False: 319k]
  ------------------
 1403|   116k|        return n;
 1404|   116k|    }
 1405|       |
 1406|   319k|    size_t extra_prefix_len = count_common_prefix(ids[0] + prefix_len,
 1407|   319k|                                                  ids[1] + prefix_len);
 1408|   319k|    if (!extra_prefix_len) {
  ------------------
  |  Branch (1408:9): [True: 230k, False: 88.6k]
  ------------------
 1409|   230k|        return 1;
 1410|   230k|    }
 1411|       |
 1412|  88.6k|    size_t i = 2;
 1413|   112k|    while (i < n) {
  ------------------
  |  Branch (1413:12): [True: 97.1k, False: 15.4k]
  ------------------
 1414|  97.1k|        size_t next = count_common_prefix(ids[0] + prefix_len,
 1415|  97.1k|                                          ids[i] + prefix_len);
 1416|  97.1k|        if (!next) {
  ------------------
  |  Branch (1416:13): [True: 73.2k, False: 23.8k]
  ------------------
 1417|  73.2k|            break;
 1418|  73.2k|        } else if (next < extra_prefix_len) {
  ------------------
  |  Branch (1418:20): [True: 0, False: 23.8k]
  ------------------
 1419|      0|            extra_prefix_len = next;
 1420|      0|        }
 1421|  23.8k|        i++;
 1422|  23.8k|    }
 1423|  88.6k|    *extra_prefix_lenp = extra_prefix_len;
 1424|  88.6k|    return i;
 1425|   319k|}
ofp-table.c:count_common_prefix:
 1378|   416k|{
 1379|   416k|    size_t retval = 0;
 1380|   941k|    for (size_t i = 0; ; i++) {
 1381|   941k|        if (a[i] != b[i] || !a[i]) {
  ------------------
  |  Branch (1381:13): [True: 416k, False: 524k]
  |  Branch (1381:29): [True: 0, False: 524k]
  ------------------
 1382|   416k|            return retval;
 1383|   524k|        } else if (a[i] == '_') {
  ------------------
  |  Branch (1383:20): [True: 112k, False: 412k]
  ------------------
 1384|   112k|            retval = i + 1;
 1385|   112k|        }
 1386|   941k|    }
 1387|   416k|}
ofp-table.c:count_sequential_suffix_run:
 1365|   436k|{
 1366|   436k|    for (size_t i = 1; ; i++) {
 1367|   436k|        if (i >= n || !are_names_sequential(ids[i - 1], ids[i])) {
  ------------------
  |  Branch (1367:13): [True: 116k, False: 319k]
  |  Branch (1367:23): [True: 319k, False: 0]
  ------------------
 1368|       |            /* "x0...x1" is worse than "x0 x1", so suppress it. */
 1369|   436k|            return i == 2 ? 1 : i;
  ------------------
  |  Branch (1369:20): [True: 0, False: 436k]
  ------------------
 1370|   436k|        }
 1371|   436k|    }
 1372|   436k|}
ofp-table.c:are_names_sequential:
 1345|   319k|{
 1346|       |    /* Skip common prefix. */
 1347|  1.20M|    for (; *a == *b; a++, b++) {
  ------------------
  |  Branch (1347:12): [True: 881k, False: 319k]
  ------------------
 1348|   881k|        if (!*a) {
  ------------------
  |  Branch (1348:13): [True: 0, False: 881k]
  ------------------
 1349|       |            /* 'a' and 'b' are the same.  Weird, but not sequential. */
 1350|      0|            return false;
 1351|      0|        }
 1352|   881k|    }
 1353|       |
 1354|   319k|    return (is_all_digits(a)
  ------------------
  |  Branch (1354:13): [True: 0, False: 319k]
  ------------------
 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|   319k|}
ofp-table.c:is_all_digits:
 1337|   319k|{
 1338|   319k|    return s[0] && s[strspn(s, "0123456789")] == '\0';
  ------------------
  |  Branch (1338:12): [True: 319k, False: 0]
  |  Branch (1338:20): [True: 0, False: 319k]
  ------------------
 1339|   319k|}
ofp-table.c:print_matches:
 1591|  54.5k|{
 1592|  54.5k|    const struct mf_bitmap m = mask ? f->mask : mf_bitmap_not(f->mask);
  ------------------
  |  Branch (1592:32): [True: 18.1k, False: 36.3k]
  ------------------
 1593|  54.5k|    const struct mf_bitmap w = wc ? f->wildcard : mf_bitmap_not(f->wildcard);
  ------------------
  |  Branch (1593:32): [True: 36.3k, False: 18.1k]
  ------------------
 1594|  54.5k|    const struct mf_bitmap bm = mf_bitmap_and(f->match, mf_bitmap_and(m, w));
 1595|       |
 1596|  54.5k|    if (!bitmap_is_all_zeros(bm.bm, MFF_N_IDS)) {
  ------------------
  |  Branch (1596:9): [True: 25.5k, False: 29.0k]
  ------------------
 1597|  25.5k|        ds_put_format(s, "      %s:", title);
 1598|  25.5k|        print_mf_bitmap(s, &bm);
 1599|  25.5k|        ds_put_char(s, '\n');
 1600|  25.5k|    }
 1601|  54.5k|}
ofp-table.c:ofputil_decode_ofp10_table_stats:
 2128|  5.73k|{
 2129|  5.73k|    struct ofp10_table_stats *ots;
 2130|       |
 2131|  5.73k|    ots = ofpbuf_try_pull(msg, sizeof *ots);
 2132|  5.73k|    if (!ots) {
  ------------------
  |  Branch (2132:9): [True: 0, False: 5.73k]
  ------------------
 2133|      0|        return OFPERR_OFPBRC_BAD_LEN;
 2134|      0|    }
 2135|       |
 2136|  5.73k|    features->table_id = ots->table_id;
 2137|  5.73k|    ovs_strlcpy_arrays(features->name, ots->name);
  ------------------
  |  |  209|  5.73k|    ovs_strlcpy(DST, SRC, MIN(ARRAY_SIZE(DST), ARRAY_SIZE(SRC)))
  |  |  ------------------
  |  |  |  |   91|  5.73k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:20): [Folded, False: 5.73k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2138|  5.73k|    features->max_entries = ntohl(ots->max_entries);
 2139|  5.73k|    features->match = features->wildcard = mf_bitmap_from_of10(ots->wildcards);
 2140|       |
 2141|  5.73k|    stats->table_id = ots->table_id;
 2142|  5.73k|    stats->active_count = ntohl(ots->active_count);
 2143|  5.73k|    stats->lookup_count = ntohll(get_32aligned_be64(&ots->lookup_count));
 2144|  5.73k|    stats->matched_count = ntohll(get_32aligned_be64(&ots->matched_count));
 2145|       |
 2146|  5.73k|    return 0;
 2147|  5.73k|}
ofp-table.c:mf_bitmap_from_of10:
 1927|  5.73k|{
 1928|  5.73k|    struct mf_bitmap fields = MF_BITMAP_INITIALIZER;
  ------------------
  |  | 2053|  5.73k|#define MF_BITMAP_INITIALIZER { { [0] = 0 } }
  ------------------
 1929|  5.73k|    const struct ofp10_wc_map *p;
 1930|  5.73k|    uint32_t wc10 = ntohl(wc10_);
 1931|       |
 1932|  74.5k|    for (p = ofp10_wc_map; p < &ofp10_wc_map[ARRAY_SIZE(ofp10_wc_map)]; p++) {
  ------------------
  |  |  297|  74.5k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   46|  74.5k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|  74.5k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   47|  74.5k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  74.5k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|  74.5k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1932:28): [True: 68.8k, False: 5.73k]
  ------------------
 1933|  68.8k|        if (wc10 & p->wc10) {
  ------------------
  |  Branch (1933:13): [True: 29.6k, False: 39.2k]
  ------------------
 1934|  29.6k|            bitmap_set1(fields.bm, p->mf);
 1935|  29.6k|        }
 1936|  68.8k|    }
 1937|  5.73k|    return fields;
 1938|  5.73k|}
ofp-table.c:ofputil_decode_ofp11_table_stats:
 2153|  5.80k|{
 2154|  5.80k|    struct ofp11_table_stats *ots;
 2155|       |
 2156|  5.80k|    ots = ofpbuf_try_pull(msg, sizeof *ots);
 2157|  5.80k|    if (!ots) {
  ------------------
  |  Branch (2157:9): [True: 0, False: 5.80k]
  ------------------
 2158|      0|        return OFPERR_OFPBRC_BAD_LEN;
 2159|      0|    }
 2160|       |
 2161|  5.80k|    features->table_id = ots->table_id;
 2162|  5.80k|    ovs_strlcpy_arrays(features->name, ots->name);
  ------------------
  |  |  209|  5.80k|    ovs_strlcpy(DST, SRC, MIN(ARRAY_SIZE(DST), ARRAY_SIZE(SRC)))
  |  |  ------------------
  |  |  |  |   91|  5.80k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:20): [Folded, False: 5.80k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2163|  5.80k|    features->max_entries = ntohl(ots->max_entries);
 2164|  5.80k|    features->nonmiss.instructions = ovsinst_bitmap_from_openflow(
 2165|  5.80k|        ots->instructions, OFP11_VERSION);
 2166|  5.80k|    features->nonmiss.write.ofpacts = ofpact_bitmap_from_openflow(
 2167|  5.80k|        ots->write_actions, OFP11_VERSION);
 2168|  5.80k|    features->nonmiss.apply.ofpacts = ofpact_bitmap_from_openflow(
 2169|  5.80k|        ots->write_actions, OFP11_VERSION);
 2170|  5.80k|    features->miss = features->nonmiss;
 2171|  5.80k|    features->miss_config = ofputil_decode_table_miss(ots->config,
 2172|  5.80k|                                                      OFP11_VERSION);
 2173|  5.80k|    features->match = mf_bitmap_from_of11(ots->match);
 2174|  5.80k|    features->wildcard = mf_bitmap_from_of11(ots->wildcards);
 2175|  5.80k|    bitmap_or(features->match.bm, features->wildcard.bm, MFF_N_IDS);
 2176|       |
 2177|  5.80k|    stats->table_id = ots->table_id;
 2178|  5.80k|    stats->active_count = ntohl(ots->active_count);
 2179|  5.80k|    stats->lookup_count = ntohll(ots->lookup_count);
 2180|  5.80k|    stats->matched_count = ntohll(ots->matched_count);
 2181|       |
 2182|  5.80k|    return 0;
 2183|  5.80k|}
ofp-table.c:mf_bitmap_from_of11:
 1998|  11.6k|{
 1999|  11.6k|    struct mf_bitmap fields = MF_BITMAP_INITIALIZER;
  ------------------
  |  | 2053|  11.6k|#define MF_BITMAP_INITIALIZER { { [0] = 0 } }
  ------------------
 2000|  11.6k|    const struct ofp11_wc_map *p;
 2001|  11.6k|    uint32_t wc11 = ntohl(wc11_);
 2002|       |
 2003|   185k|    for (p = ofp11_wc_map; p < &ofp11_wc_map[ARRAY_SIZE(ofp11_wc_map)]; p++) {
  ------------------
  |  |  297|   185k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   46|   185k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|   185k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   47|   185k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   185k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|   185k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2003:28): [True: 174k, False: 11.6k]
  ------------------
 2004|   174k|        if (wc11 & p->wc11) {
  ------------------
  |  Branch (2004:13): [True: 73.0k, False: 100k]
  ------------------
 2005|  73.0k|            bitmap_set1(fields.bm, p->mf);
 2006|  73.0k|        }
 2007|   174k|    }
 2008|  11.6k|    return fields;
 2009|  11.6k|}
ofp-table.c:ofputil_decode_ofp12_table_stats:
 2189|  13.9k|{
 2190|  13.9k|    struct ofp12_table_stats *ots;
 2191|       |
 2192|  13.9k|    ots = ofpbuf_try_pull(msg, sizeof *ots);
 2193|  13.9k|    if (!ots) {
  ------------------
  |  Branch (2193:9): [True: 0, False: 13.9k]
  ------------------
 2194|      0|        return OFPERR_OFPBRC_BAD_LEN;
 2195|      0|    }
 2196|       |
 2197|  13.9k|    features->table_id = ots->table_id;
 2198|  13.9k|    ovs_strlcpy_arrays(features->name, ots->name);
  ------------------
  |  |  209|  13.9k|    ovs_strlcpy(DST, SRC, MIN(ARRAY_SIZE(DST), ARRAY_SIZE(SRC)))
  |  |  ------------------
  |  |  |  |   91|  13.9k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:20): [Folded, False: 13.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2199|  13.9k|    features->metadata_match = ots->metadata_match;
 2200|  13.9k|    features->metadata_write = ots->metadata_write;
 2201|  13.9k|    features->miss_config = ofputil_decode_table_miss(ots->config,
 2202|  13.9k|                                                      OFP12_VERSION);
 2203|  13.9k|    features->max_entries = ntohl(ots->max_entries);
 2204|       |
 2205|  13.9k|    features->nonmiss.instructions = ovsinst_bitmap_from_openflow(
 2206|  13.9k|        ots->instructions, OFP12_VERSION);
 2207|  13.9k|    features->nonmiss.write.ofpacts = ofpact_bitmap_from_openflow(
 2208|  13.9k|        ots->write_actions, OFP12_VERSION);
 2209|  13.9k|    features->nonmiss.apply.ofpacts = ofpact_bitmap_from_openflow(
 2210|  13.9k|        ots->apply_actions, OFP12_VERSION);
 2211|  13.9k|    features->nonmiss.write.set_fields = oxm_bitmap_to_mf_bitmap(
 2212|  13.9k|        ots->write_setfields, OFP12_VERSION);
 2213|  13.9k|    features->nonmiss.apply.set_fields = oxm_bitmap_to_mf_bitmap(
 2214|  13.9k|        ots->apply_setfields, OFP12_VERSION);
 2215|  13.9k|    features->miss = features->nonmiss;
 2216|       |
 2217|  13.9k|    features->match = oxm_bitmap_to_mf_bitmap(ots->match, OFP12_VERSION);
 2218|  13.9k|    features->wildcard = oxm_bitmap_to_mf_bitmap(ots->wildcards,
 2219|  13.9k|                                                 OFP12_VERSION);
 2220|  13.9k|    bitmap_or(features->match.bm, features->wildcard.bm, MFF_N_IDS);
 2221|       |
 2222|  13.9k|    stats->table_id = ots->table_id;
 2223|  13.9k|    stats->active_count = ntohl(ots->active_count);
 2224|  13.9k|    stats->lookup_count = ntohll(ots->lookup_count);
 2225|  13.9k|    stats->matched_count = ntohll(ots->matched_count);
 2226|       |
 2227|  13.9k|    return 0;
 2228|  13.9k|}
ofp-table.c:ofputil_decode_ofp13_table_stats:
 2234|  4.51k|{
 2235|  4.51k|    struct ofp13_table_stats *ots;
 2236|       |
 2237|  4.51k|    ots = ofpbuf_try_pull(msg, sizeof *ots);
 2238|  4.51k|    if (!ots) {
  ------------------
  |  Branch (2238:9): [True: 0, False: 4.51k]
  ------------------
 2239|      0|        return OFPERR_OFPBRC_BAD_LEN;
 2240|      0|    }
 2241|       |
 2242|  4.51k|    features->table_id = ots->table_id;
 2243|       |
 2244|  4.51k|    stats->table_id = ots->table_id;
 2245|  4.51k|    stats->active_count = ntohl(ots->active_count);
 2246|  4.51k|    stats->lookup_count = ntohll(ots->lookup_count);
 2247|  4.51k|    stats->matched_count = ntohll(ots->matched_count);
 2248|       |
 2249|  4.51k|    return 0;
 2250|  4.51k|}

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

ofpbuf_use_const:
  114|   354k|{
  115|   354k|    ofpbuf_use__(b, CONST_CAST(void *, data), size, size, OFPBUF_STACK);
  ------------------
  |  |   85|   354k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   354k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   354k|     (TYPE) (POINTER))
  ------------------
  116|   354k|}
ofpbuf_use_data:
  132|  76.8k|{
  133|  76.8k|    ofpbuf_use__(b, CONST_CAST(void *, data), size, size, OFPBUF_STUB);
  ------------------
  |  |   85|  76.8k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  76.8k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  76.8k|     (TYPE) (POINTER))
  ------------------
  134|  76.8k|}
ofpbuf_init:
  140|  1.10M|{
  141|  1.10M|    ofpbuf_use(b, size ? xmalloc(size) : NULL, size);
  ------------------
  |  Branch (141:19): [True: 453k, False: 653k]
  ------------------
  142|  1.10M|}
ofpbuf_uninit:
  147|  1.02M|{
  148|  1.02M|    if (b) {
  ------------------
  |  Branch (148:9): [True: 1.02M, False: 0]
  ------------------
  149|  1.02M|        if (b->source == OFPBUF_MALLOC) {
  ------------------
  |  Branch (149:13): [True: 902k, False: 120k]
  ------------------
  150|   902k|            free(b->base);
  151|   902k|        }
  152|  1.02M|    }
  153|  1.02M|}
ofpbuf_prealloc_tailroom:
  306|   478k|{
  307|   478k|    if (size > ofpbuf_tailroom(b)) {
  ------------------
  |  Branch (307:9): [True: 75.9k, False: 402k]
  ------------------
  308|  75.9k|        ofpbuf_resize__(b, ofpbuf_headroom(b), MAX(size, 64));
  ------------------
  |  |   95|  75.9k|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (95:20): [True: 8.06k, False: 67.8k]
  |  |  ------------------
  ------------------
  309|  75.9k|    }
  310|   478k|}
ofpbuf_prealloc_headroom:
  317|   106k|{
  318|   106k|    if (size > ofpbuf_headroom(b)) {
  ------------------
  |  Branch (318:9): [True: 94.5k, False: 12.2k]
  ------------------
  319|  94.5k|        ofpbuf_resize__(b, MAX(size, 64), ofpbuf_tailroom(b));
  ------------------
  |  |   95|  94.5k|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (95:20): [True: 1.25k, False: 93.3k]
  |  |  ------------------
  ------------------
  320|  94.5k|    }
  321|   106k|}
ofpbuf_trim:
  336|   499k|{
  337|   499k|    if (b->source == OFPBUF_MALLOC
  ------------------
  |  Branch (337:9): [True: 499k, False: 0]
  ------------------
  338|   499k|        && (ofpbuf_headroom(b) || ofpbuf_tailroom(b))) {
  ------------------
  |  Branch (338:13): [True: 90.8k, False: 408k]
  |  Branch (338:35): [True: 1.26k, False: 407k]
  ------------------
  339|  92.1k|        ofpbuf_resize__(b, 0, 0);
  340|  92.1k|    }
  341|   499k|}
ofpbuf_padto:
  368|  60.7k|{
  369|  60.7k|    if (b->size < length) {
  ------------------
  |  Branch (369:9): [True: 13.2k, False: 47.5k]
  ------------------
  370|  13.2k|        ofpbuf_put_zeros(b, length - b->size);
  371|  13.2k|    }
  372|  60.7k|}
ofpbuf_put_uninit:
  401|   478k|{
  402|   478k|    void *p;
  403|   478k|    ofpbuf_prealloc_tailroom(b, size);
  404|   478k|    p = ofpbuf_tail(b);
  405|   478k|    b->size += size;
  406|   478k|    return p;
  407|   478k|}
ofpbuf_put_zeros:
  414|   104k|{
  415|   104k|    void *dst = ofpbuf_put_uninit(b, size);
  416|   104k|    nullable_memset(dst, 0, size);
  417|   104k|    return dst;
  418|   104k|}
ofpbuf_put:
  425|   140k|{
  426|   140k|    if (!size) {
  ------------------
  |  Branch (426:9): [True: 25.0k, False: 115k]
  ------------------
  427|  25.0k|        return ofpbuf_tail(b);
  428|  25.0k|    }
  429|       |
  430|   115k|    void *dst = ofpbuf_put_uninit(b, size);
  431|   115k|    memcpy(dst, p, size);
  432|   115k|    return dst;
  433|   140k|}
ofpbuf_push_uninit:
  481|   520k|{
  482|   520k|    if (!size) {
  ------------------
  |  Branch (482:9): [True: 413k, False: 106k]
  ------------------
  483|   413k|        return b->data;
  484|   413k|    }
  485|       |
  486|   106k|    ofpbuf_prealloc_headroom(b, size);
  487|   106k|    b->data = (char*)b->data - size;
  488|   106k|    b->size += size;
  489|   106k|    return b->data;
  490|   520k|}
ofpbuf_push:
  508|   505k|{
  509|   505k|    void *dst = ofpbuf_push_uninit(b, size);
  510|   505k|    memcpy(dst, p, size);
  511|   505k|    return dst;
  512|   505k|}
ofpbuf_steal_data:
  537|   205k|{
  538|   205k|    void *p;
  539|       |
  540|   205k|    if (b->source == OFPBUF_MALLOC && b->data == b->base) {
  ------------------
  |  Branch (540:9): [True: 205k, False: 0]
  |  Branch (540:39): [True: 203k, False: 2.45k]
  ------------------
  541|   203k|        p = b->data;
  542|   203k|    } else {
  543|  2.45k|        p = xmemdup(b->data, b->size);
  544|  2.45k|        if (b->source == OFPBUF_MALLOC) {
  ------------------
  |  Branch (544:13): [True: 2.45k, False: 0]
  ------------------
  545|  2.45k|            free(b->base);
  546|  2.45k|        }
  547|  2.45k|    }
  548|   205k|    b->base = NULL;
  549|   205k|    b->data = NULL;
  550|   205k|    b->header = NULL;
  551|       |    b->msg = NULL;
  552|   205k|    return p;
  553|   205k|}
ofpbuf.c:ofpbuf_use__:
   37|  1.53M|{
   38|  1.53M|    b->base = base;
   39|  1.53M|    b->data = base;
   40|  1.53M|    b->size = size;
   41|       |
   42|  1.53M|    ofpbuf_init__(b, allocated, source);
   43|  1.53M|}
ofpbuf.c:ofpbuf_init__:
   26|  1.53M|{
   27|  1.53M|    b->allocated = allocated;
   28|  1.53M|    b->source = source;
   29|  1.53M|    b->header = NULL;
   30|       |    b->msg = NULL;
   31|  1.53M|    ovs_list_poison(&b->list_node);
   32|  1.53M|}
ofpbuf.c:ofpbuf_use:
   51|  1.10M|{
   52|  1.10M|    ofpbuf_use__(b, base, allocated, 0, OFPBUF_MALLOC);
   53|  1.10M|}
ofpbuf.c:ofpbuf_resize__:
  252|   262k|{
  253|   262k|    void *new_base, *new_data;
  254|   262k|    size_t new_allocated;
  255|       |
  256|   262k|    new_allocated = new_headroom + b->size + new_tailroom;
  257|       |
  258|   262k|    switch (b->source) {
  259|   262k|    case OFPBUF_MALLOC:
  ------------------
  |  Branch (259:5): [True: 262k, False: 0]
  ------------------
  260|   262k|        if (new_headroom == ofpbuf_headroom(b)) {
  ------------------
  |  Branch (260:13): [True: 77.1k, False: 185k]
  ------------------
  261|  77.1k|            new_base = xrealloc(b->base, new_allocated);
  262|   185k|        } else {
  263|   185k|            new_base = xmalloc(new_allocated);
  264|   185k|            ofpbuf_copy__(b, new_base, new_headroom, new_tailroom);
  265|   185k|            free(b->base);
  266|   185k|        }
  267|   262k|        break;
  268|       |
  269|      0|    case OFPBUF_STACK:
  ------------------
  |  Branch (269:5): [True: 0, False: 262k]
  ------------------
  270|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  271|       |
  272|      0|    case OFPBUF_STUB:
  ------------------
  |  Branch (272:5): [True: 0, False: 262k]
  ------------------
  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: 262k]
  ------------------
  279|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  280|   262k|    }
  281|       |
  282|   262k|    b->allocated = new_allocated;
  283|   262k|    b->base = new_base;
  284|       |
  285|   262k|    new_data = (char *) new_base + new_headroom;
  286|   262k|    if (b->data != new_data) {
  ------------------
  |  Branch (286:9): [True: 258k, False: 4.53k]
  ------------------
  287|   258k|        if (b->header) {
  ------------------
  |  Branch (287:13): [True: 60.1k, False: 197k]
  ------------------
  288|  60.1k|            ptrdiff_t header_offset = (char *) b->header - (char *) b->data;
  289|       |
  290|  60.1k|            b->header = (char *) new_data + header_offset;
  291|  60.1k|        }
  292|   258k|        if (b->msg) {
  ------------------
  |  Branch (292:13): [True: 0, False: 258k]
  ------------------
  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|   258k|        b->data = new_data;
  298|   258k|    }
  299|   262k|}
ofpbuf.c:ofpbuf_copy__:
  236|   185k|{
  237|   185k|    const uint8_t *old_base = b->base;
  238|   185k|    size_t old_headroom = ofpbuf_headroom(b);
  239|   185k|    size_t old_tailroom = ofpbuf_tailroom(b);
  240|   185k|    size_t copy_headroom = MIN(old_headroom, new_headroom);
  ------------------
  |  |   91|   185k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (91:20): [True: 94.5k, False: 90.8k]
  |  |  ------------------
  ------------------
  241|   185k|    size_t copy_tailroom = MIN(old_tailroom, new_tailroom);
  ------------------
  |  |   91|   185k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (91:20): [True: 0, False: 185k]
  |  |  ------------------
  ------------------
  242|       |
  243|   185k|    memcpy(&new_base[new_headroom - copy_headroom],
  244|   185k|           &old_base[old_headroom - copy_headroom],
  245|   185k|           copy_headroom + b->size + copy_tailroom);
  246|   185k|}

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

set_mpls_lse_ttl:
  337|    207|{
  338|    207|    *lse &= ~htonl(MPLS_TTL_MASK);
  339|       |    *lse |= htonl((ttl << MPLS_TTL_SHIFT) & MPLS_TTL_MASK);
  340|    207|}
set_mpls_lse_tc:
  345|  1.19k|{
  346|  1.19k|    *lse &= ~htonl(MPLS_TC_MASK);
  347|       |    *lse |= htonl((tc << MPLS_TC_SHIFT) & MPLS_TC_MASK);
  348|  1.19k|}
set_mpls_lse_label:
  353|  2.20k|{
  354|  2.20k|    *lse &= ~htonl(MPLS_LABEL_MASK);
  355|       |    *lse |= htonl((ntohl(label) << MPLS_LABEL_SHIFT) & MPLS_LABEL_MASK);
  356|  2.20k|}
set_mpls_lse_bos:
  361|    224|{
  362|    224|    *lse &= ~htonl(MPLS_BOS_MASK);
  363|       |    *lse |= htonl((bos << MPLS_BOS_SHIFT) & MPLS_BOS_MASK);
  364|    224|}
eth_format_masked:
  590|   153k|{
  591|   153k|    ds_put_format(s, ETH_ADDR_FMT, ETH_ADDR_ARGS(eth));
  ------------------
  |  |  370|   153k|    "%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8
  ------------------
                  ds_put_format(s, ETH_ADDR_FMT, ETH_ADDR_ARGS(eth));
  ------------------
  |  |  371|   153k|#define ETH_ADDR_ARGS(EA) ETH_ADDR_BYTES_ARGS((EA).ea)
  |  |  ------------------
  |  |  |  |  373|   153k|         (EAB)[0], (EAB)[1], (EAB)[2], (EAB)[3], (EAB)[4], (EAB)[5]
  |  |  ------------------
  ------------------
  592|   153k|    if (mask && !eth_mask_is_exact(*mask)) {
  ------------------
  |  Branch (592:9): [True: 153k, False: 205]
  |  Branch (592:17): [True: 4.38k, False: 149k]
  ------------------
  593|  4.38k|        ds_put_format(s, "/"ETH_ADDR_FMT, ETH_ADDR_ARGS(*mask));
  ------------------
  |  |  370|  4.38k|    "%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8
  ------------------
                      ds_put_format(s, "/"ETH_ADDR_FMT, ETH_ADDR_ARGS(*mask));
  ------------------
  |  |  371|  4.38k|#define ETH_ADDR_ARGS(EA) ETH_ADDR_BYTES_ARGS((EA).ea)
  |  |  ------------------
  |  |  |  |  373|  4.38k|         (EAB)[0], (EAB)[1], (EAB)[2], (EAB)[3], (EAB)[4], (EAB)[5]
  |  |  ------------------
  ------------------
  594|  4.38k|    }
  595|   153k|}
ip_count_cidr_bits:
  677|  8.33k|{
  678|       |    return 32 - ctz32(ntohl(netmask));
  679|  8.33k|}
ip_format_masked:
  683|  21.9k|{
  684|  21.9k|    ds_put_format(s, IP_FMT, IP_ARGS(ip));
  ------------------
  |  |  628|  21.9k|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
                  ds_put_format(s, IP_FMT, IP_ARGS(ip));
  ------------------
  |  |  630|  21.9k|    ntohl(ip) >> 24,                            \
  |  |  631|  21.9k|    (ntohl(ip) >> 16) & 0xff,                   \
  |  |  632|  21.9k|    (ntohl(ip) >> 8) & 0xff,                    \
  |  |  633|  21.9k|    ntohl(ip) & 0xff
  ------------------
  685|  21.9k|    if (mask != OVS_BE32_MAX) {
  ------------------
  |  |   43|  21.9k|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  |  Branch (685:9): [True: 9.78k, False: 12.1k]
  ------------------
  686|  9.78k|        if (ip_is_cidr(mask)) {
  ------------------
  |  Branch (686:13): [True: 8.33k, False: 1.44k]
  ------------------
  687|  8.33k|            ds_put_format(s, "/%d", ip_count_cidr_bits(mask));
  688|  8.33k|        } 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|  9.78k|    }
  692|  21.9k|}
ipv6_format_addr:
  903|  54.9k|{
  904|  54.9k|    char *dst;
  905|       |
  906|  54.9k|    ds_reserve(s, s->length + INET6_ADDRSTRLEN);
  907|       |
  908|  54.9k|    dst = s->string + s->length;
  909|  54.9k|    inet_ntop(AF_INET6, addr, dst, INET6_ADDRSTRLEN);
  910|  54.9k|    s->length += strlen(dst);
  911|  54.9k|}
ipv6_format_mapped:
  930|  18.5k|{
  931|  18.5k|    if (IN6_IS_ADDR_V4MAPPED(addr)) {
  ------------------
  |  Branch (931:9): [True: 535, False: 18.0k]
  ------------------
  932|    535|        ds_put_format(s, IP_FMT, addr->s6_addr[12], addr->s6_addr[13],
  ------------------
  |  |  628|    535|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
  933|    535|                                 addr->s6_addr[14], addr->s6_addr[15]);
  934|  18.0k|    } else {
  935|  18.0k|        ipv6_format_addr(addr, s);
  936|  18.0k|    }
  937|  18.5k|}
ipv6_format_masked:
  942|  36.2k|{
  943|  36.2k|    ipv6_format_addr(addr, s);
  944|  36.2k|    if (mask && !ipv6_mask_is_exact(mask)) {
  ------------------
  |  Branch (944:9): [True: 36.2k, False: 10]
  |  Branch (944:17): [True: 1.08k, False: 35.1k]
  ------------------
  945|  1.08k|        if (ipv6_is_cidr(mask)) {
  ------------------
  |  Branch (945:13): [True: 408, False: 680]
  ------------------
  946|    408|            int cidr_bits = ipv6_count_cidr_bits(mask);
  947|    408|            ds_put_format(s, "/%d", cidr_bits);
  948|    680|        } else {
  949|    680|            ds_put_char(s, '/');
  950|    680|            ipv6_format_addr(mask, s);
  951|    680|        }
  952|  1.08k|    }
  953|  36.2k|}
ipv6_addr_bitand:
  980|  4.43k|{
  981|  4.43k|   struct in6_addr dst;
  982|  17.7k|   IPV6_FOR_EACH (i) {
  ------------------
  |  |  972|  22.1k|#define IPV6_FOR_EACH(VAR) for (int VAR = 0; VAR < 4; VAR++)
  |  |  ------------------
  |  |  |  Branch (972:46): [True: 17.7k, False: 4.43k]
  |  |  ------------------
  ------------------
  983|  17.7k|       dst.s6_addrX[i] = a->s6_addrX[i] & b->s6_addrX[i];
  ------------------
  |  |  971|  17.7k|#define s6_addrX s6_addr32
  ------------------
                     dst.s6_addrX[i] = a->s6_addrX[i] & b->s6_addrX[i];
  ------------------
  |  |  971|  17.7k|#define s6_addrX s6_addr32
  ------------------
                     dst.s6_addrX[i] = a->s6_addrX[i] & b->s6_addrX[i];
  ------------------
  |  |  971|  17.7k|#define s6_addrX s6_addr32
  ------------------
  984|  17.7k|   }
  985|  4.43k|   return dst;
  986|  4.43k|}
ipv6_is_zero:
 1000|  9.61k|{
 1001|  18.0k|   IPV6_FOR_EACH (i) {
  ------------------
  |  |  972|  18.4k|#define IPV6_FOR_EACH(VAR) for (int VAR = 0; VAR < 4; VAR++)
  |  |  ------------------
  |  |  |  Branch (972:46): [True: 18.0k, False: 371]
  |  |  ------------------
  ------------------
 1002|  18.0k|       if (a->s6_addrX[i]) {
  ------------------
  |  |  971|  18.0k|#define s6_addrX s6_addr32
  ------------------
  |  Branch (1002:12): [True: 9.24k, False: 8.84k]
  ------------------
 1003|  9.24k|           return false;
 1004|  9.24k|       }
 1005|  18.0k|   }
 1006|    371|   return true;
 1007|  9.61k|}
ipv6_count_cidr_bits:
 1039|    408|{
 1040|    408|    int i;
 1041|    408|    int count = 0;
 1042|    408|    const uint8_t *netmaskp = &netmask->s6_addr[0];
 1043|       |
 1044|  5.57k|    for (i=0; i<16; i++) {
  ------------------
  |  Branch (1044:15): [True: 5.57k, False: 0]
  ------------------
 1045|  5.57k|        if (netmaskp[i] == 0xff) {
  ------------------
  |  Branch (1045:13): [True: 5.16k, False: 408]
  ------------------
 1046|  5.16k|            count += 8;
 1047|  5.16k|        } else {
 1048|    408|            uint8_t nm;
 1049|       |
 1050|  1.19k|            for(nm = netmaskp[i]; nm; nm <<= 1) {
  ------------------
  |  Branch (1050:35): [True: 782, False: 408]
  ------------------
 1051|    782|                count++;
 1052|    782|            }
 1053|    408|            break;
 1054|    408|        }
 1055|       |
 1056|  5.57k|    }
 1057|       |
 1058|    408|    return count;
 1059|    408|}
ipv6_is_cidr:
 1065|  1.08k|{
 1066|  1.08k|    const uint8_t *netmaskp = &netmask->s6_addr[0];
 1067|  1.08k|    int i;
 1068|       |
 1069|  7.63k|    for (i=0; i<16; i++) {
  ------------------
  |  Branch (1069:15): [True: 7.22k, False: 408]
  ------------------
 1070|  7.22k|        if (netmaskp[i] != 0xff) {
  ------------------
  |  Branch (1070:13): [True: 1.08k, False: 6.13k]
  ------------------
 1071|  1.08k|            uint8_t x = ~netmaskp[i];
 1072|  1.08k|            if (x & (x + 1)) {
  ------------------
  |  Branch (1072:17): [True: 169, False: 919]
  ------------------
 1073|    169|                return false;
 1074|    169|            }
 1075|  5.31k|            while (++i < 16) {
  ------------------
  |  Branch (1075:20): [True: 4.90k, False: 408]
  ------------------
 1076|  4.90k|                if (netmaskp[i]) {
  ------------------
  |  Branch (1076:21): [True: 511, False: 4.39k]
  ------------------
 1077|    511|                    return false;
 1078|    511|                }
 1079|  4.90k|            }
 1080|    919|        }
 1081|  7.22k|    }
 1082|       |
 1083|    408|    return true;
 1084|  1.08k|}
packet_tcp_flag_to_string:
 1717|  46.8k|{
 1718|  46.8k|    switch (flag) {
 1719|  2.84k|    case TCP_FIN:
  ------------------
  |  |  893|  2.84k|#define TCP_FIN 0x001
  ------------------
  |  Branch (1719:5): [True: 2.84k, False: 44.0k]
  ------------------
 1720|  2.84k|        return "fin";
 1721|  1.74k|    case TCP_SYN:
  ------------------
  |  |  894|  1.74k|#define TCP_SYN 0x002
  ------------------
  |  Branch (1721:5): [True: 1.74k, False: 45.1k]
  ------------------
 1722|  1.74k|        return "syn";
 1723|  5.80k|    case TCP_RST:
  ------------------
  |  |  895|  5.80k|#define TCP_RST 0x004
  ------------------
  |  Branch (1723:5): [True: 5.80k, False: 41.0k]
  ------------------
 1724|  5.80k|        return "rst";
 1725|  1.88k|    case TCP_PSH:
  ------------------
  |  |  896|  1.88k|#define TCP_PSH 0x008
  ------------------
  |  Branch (1725:5): [True: 1.88k, False: 44.9k]
  ------------------
 1726|  1.88k|        return "psh";
 1727|  4.30k|    case TCP_ACK:
  ------------------
  |  |  897|  4.30k|#define TCP_ACK 0x010
  ------------------
  |  Branch (1727:5): [True: 4.30k, False: 42.5k]
  ------------------
 1728|  4.30k|        return "ack";
 1729|  5.20k|    case TCP_URG:
  ------------------
  |  |  898|  5.20k|#define TCP_URG 0x020
  ------------------
  |  Branch (1729:5): [True: 5.20k, False: 41.6k]
  ------------------
 1730|  5.20k|        return "urg";
 1731|  3.09k|    case TCP_ECE:
  ------------------
  |  |  899|  3.09k|#define TCP_ECE 0x040
  ------------------
  |  Branch (1731:5): [True: 3.09k, False: 43.7k]
  ------------------
 1732|  3.09k|        return "ece";
 1733|  1.69k|    case TCP_CWR:
  ------------------
  |  |  900|  1.69k|#define TCP_CWR 0x080
  ------------------
  |  Branch (1733:5): [True: 1.69k, False: 45.1k]
  ------------------
 1734|  1.69k|        return "cwr";
 1735|  6.21k|    case TCP_NS:
  ------------------
  |  |  901|  6.21k|#define TCP_NS  0x100
  ------------------
  |  Branch (1735:5): [True: 6.21k, False: 40.6k]
  ------------------
 1736|  6.21k|        return "ns";
 1737|  2.09k|    case 0x200:
  ------------------
  |  Branch (1737:5): [True: 2.09k, False: 44.7k]
  ------------------
 1738|  2.09k|        return "[200]";
 1739|  6.19k|    case 0x400:
  ------------------
  |  Branch (1739:5): [True: 6.19k, False: 40.6k]
  ------------------
 1740|  6.19k|        return "[400]";
 1741|  4.54k|    case 0x800:
  ------------------
  |  Branch (1741:5): [True: 4.54k, False: 42.3k]
  ------------------
 1742|  4.54k|        return "[800]";
 1743|  1.23k|    default:
  ------------------
  |  Branch (1743:5): [True: 1.23k, False: 45.6k]
  ------------------
 1744|       |        return NULL;
 1745|  46.8k|    }
 1746|  46.8k|}

dp-packet.c:pkt_metadata_init:
  165|  62.8k|{
  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|  62.8k|    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|  62.8k|    md->tunnel.ip_dst = 0;
  179|  62.8k|    md->tunnel.ipv6_dst = in6addr_any;
  180|  62.8k|    md->in_port.odp_port = port;
  181|  62.8k|    md->orig_in_port = port;
  182|       |    md->conn = NULL;
  183|  62.8k|}
flow.c:flow_tnl_dst_is_set:
   51|   125k|{
   52|   125k|    return tnl->ip_dst || ipv6_addr_is_set(&tnl->ipv6_dst);
  ------------------
  |  Branch (52:12): [True: 0, False: 125k]
  |  Branch (52:27): [True: 0, False: 125k]
  ------------------
   53|   125k|}
flow.c:eth_type_vlan:
  429|  27.8k|{
  430|  27.8k|    return eth_type == htons(ETH_TYPE_VLAN_8021Q) ||
  ------------------
  |  Branch (430:12): [True: 199, False: 27.6k]
  ------------------
  431|  27.6k|        eth_type == htons(ETH_TYPE_VLAN_8021AD);
  ------------------
  |  Branch (431:9): [True: 1.13k, False: 26.5k]
  ------------------
  432|  27.8k|}
flow.c:pt_ns_type_be:
 1577|  62.3k|{
 1578|  62.3k|    return be32_to_be16(packet_type);
 1579|  62.3k|}
flow.c:eth_type_mpls:
  423|  78.8k|{
  424|  78.8k|    return eth_type == htons(ETH_TYPE_MPLS) ||
  ------------------
  |  Branch (424:12): [True: 710, False: 78.1k]
  ------------------
  425|  78.1k|        eth_type == htons(ETH_TYPE_MPLS_MCAST);
  ------------------
  |  Branch (425:9): [True: 940, False: 77.1k]
  ------------------
  426|  78.8k|}
flow.c:eth_addr_is_zero:
  246|    154|{
  247|    154|    return !(a.be16[0] | a.be16[1] | a.be16[2]);
  248|    154|}
flow.c:ipv6_addr_is_set:
 1205|   125k|static inline bool ipv6_addr_is_set(const struct in6_addr *addr) {
 1206|   125k|    return !ipv6_addr_equals(addr, &in6addr_any);
 1207|   125k|}
flow.c:ipv6_addr_equals:
 1184|   125k|{
 1185|   125k|#ifdef IN6_ARE_ADDR_EQUAL
 1186|   125k|    return IN6_ARE_ADDR_EQUAL(a, b);
 1187|       |#else
 1188|       |    return !memcmp(a, b, sizeof(*a));
 1189|       |#endif
 1190|   125k|}
flow.c:pt_ns:
 1570|  42.4k|{
 1571|       |    return ntohl(packet_type) >> 16;
 1572|  42.4k|}
flow.c:pt_ns_type:
 1584|  42.2k|{
 1585|       |    return ntohs(pt_ns_type_be(packet_type));
 1586|  42.2k|}
match.c:ipv6_mask_is_any:
 1193|   850k|static inline bool ipv6_mask_is_any(const struct in6_addr *mask) {
 1194|   850k|    return ipv6_addr_equals(mask, &in6addr_any);
 1195|   850k|}
match.c:ipv6_addr_equals:
 1184|   850k|{
 1185|   850k|#ifdef IN6_ARE_ADDR_EQUAL
 1186|   850k|    return IN6_ARE_ADDR_EQUAL(a, b);
 1187|       |#else
 1188|       |    return !memcmp(a, b, sizeof(*a));
 1189|       |#endif
 1190|   850k|}
match.c:pt_ns:
 1570|  40.0k|{
 1571|       |    return ntohl(packet_type) >> 16;
 1572|  40.0k|}
match.c:pt_ns_type_be:
 1577|  29.2k|{
 1578|  29.2k|    return be32_to_be16(packet_type);
 1579|  29.2k|}
match.c:vlan_tci_to_vid:
  507|  17.9k|{
  508|  17.9k|    return (ntohs(vlan_tci) & VLAN_VID_MASK) >> VLAN_VID_SHIFT;
  ------------------
  |  |  494|  17.9k|#define VLAN_VID_MASK 0x0fff
  ------------------
                  return (ntohs(vlan_tci) & VLAN_VID_MASK) >> VLAN_VID_SHIFT;
  ------------------
  |  |  495|  17.9k|#define VLAN_VID_SHIFT 0
  ------------------
  509|  17.9k|}
match.c:vlan_tci_to_pcp:
  515|  21.5k|{
  516|  21.5k|    return (ntohs(vlan_tci) & VLAN_PCP_MASK) >> VLAN_PCP_SHIFT;
  ------------------
  |  |  497|  21.5k|#define VLAN_PCP_MASK 0xe000
  ------------------
                  return (ntohs(vlan_tci) & VLAN_PCP_MASK) >> VLAN_PCP_SHIFT;
  ------------------
  |  |  498|  21.5k|#define VLAN_PCP_SHIFT 13
  ------------------
  517|  21.5k|}
match.c:eth_addr_is_zero:
  246|   411k|{
  247|   411k|    return !(a.be16[0] | a.be16[1] | a.be16[2]);
  248|   411k|}
match.c:mpls_lse_to_label:
  568|  1.49k|{
  569|  1.49k|    return (ntohl(mpls_lse) & MPLS_LABEL_MASK) >> MPLS_LABEL_SHIFT;
  ------------------
  |  |  554|  1.49k|#define MPLS_LABEL_MASK     0xfffff000
  ------------------
                  return (ntohl(mpls_lse) & MPLS_LABEL_MASK) >> MPLS_LABEL_SHIFT;
  ------------------
  |  |  555|  1.49k|#define MPLS_LABEL_SHIFT    12
  ------------------
  570|  1.49k|}
match.c:mpls_lse_to_tc:
  576|  1.46k|{
  577|  1.46k|    return (ntohl(mpls_lse) & MPLS_TC_MASK) >> MPLS_TC_SHIFT;
  ------------------
  |  |  551|  1.46k|#define MPLS_TC_MASK        0x00000e00
  ------------------
                  return (ntohl(mpls_lse) & MPLS_TC_MASK) >> MPLS_TC_SHIFT;
  ------------------
  |  |  552|  1.46k|#define MPLS_TC_SHIFT       9
  ------------------
  578|  1.46k|}
match.c:mpls_lse_to_ttl:
  584|    828|{
  585|    828|    return (ntohl(mpls_lse) & MPLS_TTL_MASK) >> MPLS_TTL_SHIFT;
  ------------------
  |  |  545|    828|#define MPLS_TTL_MASK       0x000000ff
  ------------------
                  return (ntohl(mpls_lse) & MPLS_TTL_MASK) >> MPLS_TTL_SHIFT;
  ------------------
  |  |  546|    828|#define MPLS_TTL_SHIFT      0
  ------------------
  586|    828|}
match.c:mpls_lse_to_bos:
  624|    881|{
  625|       |    return (mpls_lse & htonl(MPLS_BOS_MASK)) != 0;
  626|    881|}
match.c:dl_type_is_ip_any:
 1256|   202k|{
 1257|   202k|    return dl_type == htons(ETH_TYPE_IP)
  ------------------
  |  Branch (1257:12): [True: 9.46k, False: 193k]
  ------------------
 1258|   193k|        || dl_type == htons(ETH_TYPE_IPV6);
  ------------------
  |  Branch (1258:12): [True: 18.9k, False: 174k]
  ------------------
 1259|   202k|}
meta-flow.c:ipv6_mask_is_any:
 1193|  7.74k|static inline bool ipv6_mask_is_any(const struct in6_addr *mask) {
 1194|  7.74k|    return ipv6_addr_equals(mask, &in6addr_any);
 1195|  7.74k|}
meta-flow.c:ipv6_addr_equals:
 1184|  7.74k|{
 1185|  7.74k|#ifdef IN6_ARE_ADDR_EQUAL
 1186|  7.74k|    return IN6_ARE_ADDR_EQUAL(a, b);
 1187|       |#else
 1188|       |    return !memcmp(a, b, sizeof(*a));
 1189|       |#endif
 1190|  7.74k|}
meta-flow.c:eth_addr_is_zero:
  246|  5.60k|{
  247|  5.60k|    return !(a.be16[0] | a.be16[1] | a.be16[2]);
  248|  5.60k|}
meta-flow.c:pt_ns:
 1570|  13.9k|{
 1571|       |    return ntohl(packet_type) >> 16;
 1572|  13.9k|}
meta-flow.c:pt_ns_type_be:
 1577|  11.2k|{
 1578|  11.2k|    return be32_to_be16(packet_type);
 1579|  11.2k|}
meta-flow.c:eth_type_mpls:
  423|     94|{
  424|     94|    return eth_type == htons(ETH_TYPE_MPLS) ||
  ------------------
  |  Branch (424:12): [True: 13, False: 81]
  ------------------
  425|     81|        eth_type == htons(ETH_TYPE_MPLS_MCAST);
  ------------------
  |  Branch (425:9): [True: 51, False: 30]
  ------------------
  426|     94|}
meta-flow.c:ip_is_cidr:
  664|    316|{
  665|       |    uint32_t x = ~ntohl(netmask);
  666|    316|    return !(x & (x + 1));
  667|    316|}
meta-flow.c:dl_type_is_ip_any:
 1256|  4.17k|{
 1257|  4.17k|    return dl_type == htons(ETH_TYPE_IP)
  ------------------
  |  Branch (1257:12): [True: 677, False: 3.49k]
  ------------------
 1258|  3.49k|        || dl_type == htons(ETH_TYPE_IPV6);
  ------------------
  |  Branch (1258:12): [True: 2.51k, False: 978]
  ------------------
 1259|  4.17k|}
ofp-actions.c:eth_type_vlan:
  429|  2.62k|{
  430|  2.62k|    return eth_type == htons(ETH_TYPE_VLAN_8021Q) ||
  ------------------
  |  Branch (430:12): [True: 195, False: 2.42k]
  ------------------
  431|  2.42k|        eth_type == htons(ETH_TYPE_VLAN_8021AD);
  ------------------
  |  Branch (431:9): [True: 1.98k, False: 441]
  ------------------
  432|  2.62k|}
ofp-actions.c:eth_type_mpls:
  423|  17.5k|{
  424|  17.5k|    return eth_type == htons(ETH_TYPE_MPLS) ||
  ------------------
  |  Branch (424:12): [True: 5.76k, False: 11.7k]
  ------------------
  425|  11.7k|        eth_type == htons(ETH_TYPE_MPLS_MCAST);
  ------------------
  |  Branch (425:9): [True: 4.72k, False: 7.03k]
  ------------------
  426|  17.5k|}
ofp-actions.c:ipv6_mask_is_any:
 1193|  1.04k|static inline bool ipv6_mask_is_any(const struct in6_addr *mask) {
 1194|  1.04k|    return ipv6_addr_equals(mask, &in6addr_any);
 1195|  1.04k|}
ofp-actions.c:ipv6_addr_equals:
 1184|  1.04k|{
 1185|  1.04k|#ifdef IN6_ARE_ADDR_EQUAL
 1186|  1.04k|    return IN6_ARE_ADDR_EQUAL(a, b);
 1187|       |#else
 1188|       |    return !memcmp(a, b, sizeof(*a));
 1189|       |#endif
 1190|  1.04k|}
ofp-actions.c:pt_ns:
 1570|  16.2k|{
 1571|       |    return ntohl(packet_type) >> 16;
 1572|  16.2k|}
ofp-actions.c:pt_ns_type_be:
 1577|  10.1k|{
 1578|  10.1k|    return be32_to_be16(packet_type);
 1579|  10.1k|}
ofp-actions.c:dl_type_is_ip_any:
 1256|  24.2k|{
 1257|  24.2k|    return dl_type == htons(ETH_TYPE_IP)
  ------------------
  |  Branch (1257:12): [True: 9.38k, False: 14.8k]
  ------------------
 1258|  14.8k|        || dl_type == htons(ETH_TYPE_IPV6);
  ------------------
  |  Branch (1258:12): [True: 4.18k, False: 10.6k]
  ------------------
 1259|  24.2k|}
ofp-actions.c:pt_ns_type:
 1584|  5.57k|{
 1585|       |    return ntohs(pt_ns_type_be(packet_type));
 1586|  5.57k|}
ofp-flow.c:ipv6_addr_is_set:
 1205|   150k|static inline bool ipv6_addr_is_set(const struct in6_addr *addr) {
 1206|   150k|    return !ipv6_addr_equals(addr, &in6addr_any);
 1207|   150k|}
ofp-flow.c:ipv6_addr_equals:
 1184|   150k|{
 1185|   150k|#ifdef IN6_ARE_ADDR_EQUAL
 1186|   150k|    return IN6_ARE_ADDR_EQUAL(a, b);
 1187|       |#else
 1188|       |    return !memcmp(a, b, sizeof(*a));
 1189|       |#endif
 1190|   150k|}
ofp-match.c:eth_addr_is_zero:
  246|  6.60k|{
  247|  6.60k|    return !(a.be16[0] | a.be16[1] | a.be16[2]);
  248|  6.60k|}
ofp-match.c:eth_addr_invert:
  301|  12.6k|{
  302|  12.6k|    struct eth_addr dst;
  303|       |
  304|  50.5k|    for (int i = 0; i < ARRAY_SIZE(src.be16); i++) {
  ------------------
  |  |  297|  50.5k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   46|  50.5k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|  50.5k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   47|  50.5k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  50.5k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|  50.5k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (304:21): [True: 37.9k, False: 12.6k]
  ------------------
  305|  37.9k|        dst.be16[i] = ~src.be16[i];
  306|  37.9k|    }
  307|       |
  308|  12.6k|    return dst;
  309|  12.6k|}
ofp-match.c:eth_type_mpls:
  423|  42.0k|{
  424|  42.0k|    return eth_type == htons(ETH_TYPE_MPLS) ||
  ------------------
  |  Branch (424:12): [True: 586, False: 41.4k]
  ------------------
  425|  41.4k|        eth_type == htons(ETH_TYPE_MPLS_MCAST);
  ------------------
  |  Branch (425:9): [True: 725, False: 40.7k]
  ------------------
  426|  42.0k|}
packets.c:eth_mask_is_exact:
  255|   153k|{
  256|       |    return (a.be16[0] & a.be16[1] & a.be16[2]) == htons(0xffff);
  257|   153k|}
packets.c:ip_is_cidr:
  664|  9.78k|{
  665|       |    uint32_t x = ~ntohl(netmask);
  666|  9.78k|    return !(x & (x + 1));
  667|  9.78k|}
packets.c:ipv6_mask_is_exact:
 1197|  36.2k|static inline bool ipv6_mask_is_exact(const struct in6_addr *mask) {
 1198|  36.2k|    return ipv6_addr_equals(mask, &in6addr_exact);
 1199|  36.2k|}
packets.c:ipv6_addr_equals:
 1184|  36.2k|{
 1185|  36.2k|#ifdef IN6_ARE_ADDR_EQUAL
 1186|  36.2k|    return IN6_ARE_ADDR_EQUAL(a, b);
 1187|       |#else
 1188|       |    return !memcmp(a, b, sizeof(*a));
 1189|       |#endif
 1190|  36.2k|}

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

ofp-print.c:get_16aligned_be32:
  246|    612|{
  247|       |#ifdef WORDS_BIGENDIAN
  248|       |    return ((ovs_be32) x->hi << 16) | x->lo;
  249|       |#else
  250|    612|    return ((ovs_be32) x->lo << 16) | x->hi;
  251|    612|#endif
  252|    612|}
ofp-queue.c:get_32aligned_be64:
  270|  12.5k|{
  271|       |#ifdef WORDS_BIGENDIAN
  272|       |    return ((ovs_be64) x->hi << 32) | x->lo;
  273|       |#else
  274|  12.5k|    return ((ovs_be64) x->lo << 32) | x->hi;
  275|  12.5k|#endif
  276|  12.5k|}
ofp-table.c:get_32aligned_be64:
  270|  11.4k|{
  271|       |#ifdef WORDS_BIGENDIAN
  272|       |    return ((ovs_be64) x->hi << 32) | x->lo;
  273|       |#else
  274|  11.4k|    return ((ovs_be64) x->lo << 32) | x->hi;
  275|  11.4k|#endif
  276|  11.4k|}
flow.c:get_16aligned_be32:
  246|  20.6k|{
  247|       |#ifdef WORDS_BIGENDIAN
  248|       |    return ((ovs_be32) x->hi << 16) | x->lo;
  249|       |#else
  250|  20.6k|    return ((ovs_be32) x->lo << 16) | x->hi;
  251|  20.6k|#endif
  252|  20.6k|}
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|   399k|get_unaligned_##ABBREV(const TYPE *p)           \
   75|   399k|{                                               \
   76|   399k|    return unaligned_##ABBREV(p)->x;            \
   77|   399k|}                                               \
nx-match.c:unaligned_be32:
   68|   399k|unaligned_##ABBREV(const TYPE *p)               \
   69|   399k|{                                               \
   70|   399k|    return (struct unaligned_##ABBREV *) p;     \
   71|   399k|}                                               \
nx-match.c:get_unaligned_be64:
   74|  16.0k|get_unaligned_##ABBREV(const TYPE *p)           \
   75|  16.0k|{                                               \
   76|  16.0k|    return unaligned_##ABBREV(p)->x;            \
   77|  16.0k|}                                               \
nx-match.c:unaligned_be64:
   68|  16.0k|unaligned_##ABBREV(const TYPE *p)               \
   69|  16.0k|{                                               \
   70|  16.0k|    return (struct unaligned_##ABBREV *) p;     \
   71|  16.0k|}                                               \
ofp-actions.c:get_unaligned_be32:
   74|  39.2k|get_unaligned_##ABBREV(const TYPE *p)           \
   75|  39.2k|{                                               \
   76|  39.2k|    return unaligned_##ABBREV(p)->x;            \
   77|  39.2k|}                                               \
ofp-actions.c:unaligned_be32:
   68|  39.2k|unaligned_##ABBREV(const TYPE *p)               \
   69|  39.2k|{                                               \
   70|  39.2k|    return (struct unaligned_##ABBREV *) p;     \
   71|  39.2k|}                                               \
ofp-flow.c:get_32aligned_be64:
  270|  2.33k|{
  271|       |#ifdef WORDS_BIGENDIAN
  272|       |    return ((ovs_be64) x->hi << 32) | x->lo;
  273|       |#else
  274|  2.33k|    return ((ovs_be64) x->lo << 32) | x->hi;
  275|  2.33k|#endif
  276|  2.33k|}
ofp-port.c:get_unaligned_be64:
   74|  44.1k|get_unaligned_##ABBREV(const TYPE *p)           \
   75|  44.1k|{                                               \
   76|  44.1k|    return unaligned_##ABBREV(p)->x;            \
   77|  44.1k|}                                               \
ofp-port.c:unaligned_be64:
   68|  44.1k|unaligned_##ABBREV(const TYPE *p)               \
   69|  44.1k|{                                               \
   70|  44.1k|    return (struct unaligned_##ABBREV *) p;     \
   71|  44.1k|}                                               \
ofp-port.c:get_32aligned_be64:
  270|  97.2k|{
  271|       |#ifdef WORDS_BIGENDIAN
  272|       |    return ((ovs_be64) x->hi << 32) | x->lo;
  273|       |#else
  274|  97.2k|    return ((ovs_be64) x->lo << 32) | x->hi;
  275|  97.2k|#endif
  276|  97.2k|}
ofp-prop.c:get_32aligned_be128:
  294|  1.48k|{
  295|  1.48k|    ovs_be128 u;
  296|  1.48k|    u.be32[0] = x->be32[0];
  297|  1.48k|    u.be32[1] = x->be32[1];
  298|  1.48k|    u.be32[2] = x->be32[2];
  299|  1.48k|    u.be32[3] = x->be32[3];
  300|  1.48k|    return u;
  301|  1.48k|}
ox-stat.c:get_unaligned_be64:
   74|  1.53k|get_unaligned_##ABBREV(const TYPE *p)           \
   75|  1.53k|{                                               \
   76|  1.53k|    return unaligned_##ABBREV(p)->x;            \
   77|  1.53k|}                                               \
ox-stat.c:unaligned_be64:
   68|  1.53k|unaligned_##ABBREV(const TYPE *p)               \
   69|  1.53k|{                                               \
   70|  1.53k|    return (struct unaligned_##ABBREV *) p;     \
   71|  1.53k|}                                               \
ox-stat.c:get_unaligned_be32:
   74|  4.78k|get_unaligned_##ABBREV(const TYPE *p)           \
   75|  4.78k|{                                               \
   76|  4.78k|    return unaligned_##ABBREV(p)->x;            \
   77|  4.78k|}                                               \
ox-stat.c:unaligned_be32:
   68|  4.78k|unaligned_##ABBREV(const TYPE *p)               \
   69|  4.78k|{                                               \
   70|  4.78k|    return (struct unaligned_##ABBREV *) p;     \
   71|  4.78k|}                                               \

xcalloc__:
  121|  20.8k|{
  122|  20.8k|    void *p = count && size ? calloc(count, size) : malloc(1);
  ------------------
  |  Branch (122:15): [True: 20.6k, False: 184]
  |  Branch (122:24): [True: 20.6k, False: 0]
  ------------------
  123|  20.8k|    if (p == NULL) {
  ------------------
  |  Branch (123:9): [True: 0, False: 20.8k]
  ------------------
  124|      0|        out_of_memory();
  125|      0|    }
  126|  20.8k|    return p;
  127|  20.8k|}
xzalloc__:
  131|  12.9k|{
  132|  12.9k|    return xcalloc__(1, size);
  133|  12.9k|}
xmalloc__:
  137|   697k|{
  138|   697k|    void *p = malloc(size ? size : 1);
  ------------------
  |  Branch (138:22): [True: 696k, False: 1.48k]
  ------------------
  139|   697k|    if (p == NULL) {
  ------------------
  |  Branch (139:9): [True: 0, False: 697k]
  ------------------
  140|      0|        out_of_memory();
  141|      0|    }
  142|   697k|    return p;
  143|   697k|}
xrealloc__:
  147|  10.0M|{
  148|  10.0M|    p = realloc(p, size ? size : 1);
  ------------------
  |  Branch (148:20): [True: 10.0M, False: 0]
  ------------------
  149|  10.0M|    if (p == NULL) {
  ------------------
  |  Branch (149:9): [True: 0, False: 10.0M]
  ------------------
  150|      0|        out_of_memory();
  151|      0|    }
  152|  10.0M|    return p;
  153|  10.0M|}
xcalloc:
  157|  7.94k|{
  158|  7.94k|    COVERAGE_INC(util_xalloc);
  ------------------
  |  |   83|  7.94k|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  7.94k|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  159|  7.94k|    return xcalloc__(count, size);
  160|  7.94k|}
xzalloc:
  164|  12.9k|{
  165|  12.9k|    COVERAGE_INC(util_xalloc);
  ------------------
  |  |   83|  12.9k|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  12.9k|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  166|  12.9k|    return xzalloc__(size);
  167|  12.9k|}
xmalloc:
  171|   697k|{
  172|   697k|    COVERAGE_INC(util_xalloc);
  ------------------
  |  |   83|   697k|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|   697k|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  173|   697k|    return xmalloc__(size);
  174|   697k|}
xrealloc:
  178|  10.0M|{
  179|  10.0M|    COVERAGE_INC(util_xalloc);
  ------------------
  |  |   83|  10.0M|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  10.0M|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  180|  10.0M|    return xrealloc__(p, size);
  181|  10.0M|}
xmemdup:
  185|  3.98k|{
  186|  3.98k|    void *p = xmalloc(size);
  187|  3.98k|    nullable_memcpy(p, p_, size);
  188|  3.98k|    return p;
  189|  3.98k|}
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|  4.96k|{
  221|  4.96k|    va_list args2;
  222|  4.96k|    size_t needed;
  223|  4.96k|    char *s;
  224|       |
  225|  4.96k|    ovs_assert(format);
  ------------------
  |  |   62|  4.96k|#define ovs_assert ovs_ignore
  ------------------
  226|       |
  227|  4.96k|    va_copy(args2, args);
  228|  4.96k|    needed = vsnprintf(NULL, 0, format, args);
  229|       |
  230|  4.96k|    s = xmalloc(needed + 1);
  231|       |
  232|  4.96k|    vsnprintf(s, needed + 1, format, args2);
  233|  4.96k|    va_end(args2);
  234|       |
  235|  4.96k|    return s;
  236|  4.96k|}
x2nrealloc:
  240|  26.2k|{
  241|  26.2k|    *n = *n == 0 ? 1 : 2 * *n;
  ------------------
  |  Branch (241:10): [True: 16.7k, False: 9.50k]
  ------------------
  242|  26.2k|    return xrealloc(p, *n * s);
  243|  26.2k|}
ovs_strlcpy:
  381|  57.6k|{
  382|  57.6k|    if (size > 0) {
  ------------------
  |  Branch (382:9): [True: 57.6k, False: 0]
  ------------------
  383|  57.6k|        size_t len = strnlen(src, size - 1);
  384|  57.6k|        memcpy(dst, src, len);
  385|  57.6k|        dst[len] = '\0';
  386|  57.6k|    }
  387|  57.6k|}
ovs_ignore:
 1265|  34.1M|void ovs_ignore(bool x OVS_UNUSED) { }
is_all_byte:
 1356|   529k|{
 1357|   529k|    const uint8_t *p = p_;
 1358|   529k|    size_t i;
 1359|       |
 1360|  12.9M|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (1360:17): [True: 12.6M, False: 251k]
  ------------------
 1361|  12.6M|        if (p[i] != byte) {
  ------------------
  |  Branch (1361:13): [True: 278k, False: 12.3M]
  ------------------
 1362|   278k|            return false;
 1363|   278k|        }
 1364|  12.6M|    }
 1365|   251k|    return true;
 1366|   529k|}
is_all_zeros:
 1371|   230k|{
 1372|   230k|    return is_all_byte(p, n, 0);
 1373|   230k|}
is_all_ones:
 1378|   298k|{
 1379|   298k|    return is_all_byte(p, n, 0xff);
 1380|   298k|}
bitwise_copy:
 1414|  39.6k|{
 1415|  39.6k|    const uint8_t *src = src_;
 1416|  39.6k|    uint8_t *dst = dst_;
 1417|       |
 1418|  39.6k|    src += src_len - (src_ofs / 8 + 1);
 1419|  39.6k|    src_ofs %= 8;
 1420|       |
 1421|  39.6k|    dst += dst_len - (dst_ofs / 8 + 1);
 1422|  39.6k|    dst_ofs %= 8;
 1423|       |
 1424|  39.6k|    if (src_ofs == 0 && dst_ofs == 0) {
  ------------------
  |  Branch (1424:9): [True: 39.1k, False: 511]
  |  Branch (1424:25): [True: 22.2k, False: 16.9k]
  ------------------
 1425|  22.2k|        unsigned int n_bytes = n_bits / 8;
 1426|  22.2k|        if (n_bytes) {
  ------------------
  |  Branch (1426:13): [True: 17.1k, False: 5.02k]
  ------------------
 1427|  17.1k|            dst -= n_bytes - 1;
 1428|  17.1k|            src -= n_bytes - 1;
 1429|  17.1k|            memcpy(dst, src, n_bytes);
 1430|       |
 1431|  17.1k|            n_bits %= 8;
 1432|  17.1k|            src--;
 1433|  17.1k|            dst--;
 1434|  17.1k|        }
 1435|  22.2k|        if (n_bits) {
  ------------------
  |  Branch (1435:13): [True: 13.4k, False: 8.78k]
  ------------------
 1436|  13.4k|            uint8_t mask = (1 << n_bits) - 1;
 1437|  13.4k|            *dst = (*dst & ~mask) | (*src & mask);
 1438|  13.4k|        }
 1439|  22.2k|    } else {
 1440|   100k|        while (n_bits > 0) {
  ------------------
  |  Branch (1440:16): [True: 82.7k, False: 17.4k]
  ------------------
 1441|  82.7k|            unsigned int max_copy = 8 - MAX(src_ofs, dst_ofs);
  ------------------
  |  |   95|  82.7k|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (95:20): [True: 36.6k, False: 46.1k]
  |  |  ------------------
  ------------------
 1442|  82.7k|            unsigned int chunk = MIN(n_bits, max_copy);
  ------------------
  |  |   91|  82.7k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (91:20): [True: 13.6k, False: 69.1k]
  |  |  ------------------
  ------------------
 1443|  82.7k|            uint8_t mask = ((1 << chunk) - 1) << dst_ofs;
 1444|       |
 1445|  82.7k|            *dst &= ~mask;
 1446|  82.7k|            *dst |= ((*src >> src_ofs) << dst_ofs) & mask;
 1447|       |
 1448|  82.7k|            src_ofs += chunk;
 1449|  82.7k|            if (src_ofs == 8) {
  ------------------
  |  Branch (1449:17): [True: 30.7k, False: 52.0k]
  ------------------
 1450|  30.7k|                src--;
 1451|  30.7k|                src_ofs = 0;
 1452|  30.7k|            }
 1453|  82.7k|            dst_ofs += chunk;
 1454|  82.7k|            if (dst_ofs == 8) {
  ------------------
  |  Branch (1454:17): [True: 38.3k, False: 44.4k]
  ------------------
 1455|  38.3k|                dst--;
 1456|  38.3k|                dst_ofs = 0;
 1457|  38.3k|            }
 1458|  82.7k|            n_bits -= chunk;
 1459|  82.7k|        }
 1460|  17.4k|    }
 1461|  39.6k|}
bitwise_one:
 1526|  32.9k|{
 1527|  32.9k|    uint8_t *dst = dst_;
 1528|       |
 1529|  32.9k|    if (!n_bits) {
  ------------------
  |  Branch (1529:9): [True: 0, False: 32.9k]
  ------------------
 1530|      0|        return;
 1531|      0|    }
 1532|       |
 1533|  32.9k|    dst += dst_len - (dst_ofs / 8 + 1);
 1534|  32.9k|    dst_ofs %= 8;
 1535|       |
 1536|  32.9k|    if (dst_ofs) {
  ------------------
  |  Branch (1536:9): [True: 15.8k, False: 17.0k]
  ------------------
 1537|  15.8k|        unsigned int chunk = MIN(n_bits, 8 - dst_ofs);
  ------------------
  |  |   91|  15.8k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (91:20): [True: 1.74k, False: 14.1k]
  |  |  ------------------
  ------------------
 1538|       |
 1539|  15.8k|        *dst |= ((1 << chunk) - 1) << dst_ofs;
 1540|       |
 1541|  15.8k|        n_bits -= chunk;
 1542|  15.8k|        if (!n_bits) {
  ------------------
  |  Branch (1542:13): [True: 2.35k, False: 13.5k]
  ------------------
 1543|  2.35k|            return;
 1544|  2.35k|        }
 1545|       |
 1546|  13.5k|        dst--;
 1547|  13.5k|    }
 1548|       |
 1549|  85.7k|    while (n_bits >= 8) {
  ------------------
  |  Branch (1549:12): [True: 55.1k, False: 30.6k]
  ------------------
 1550|  55.1k|        *dst-- = 0xff;
 1551|  55.1k|        n_bits -= 8;
 1552|  55.1k|    }
 1553|       |
 1554|  30.6k|    if (n_bits) {
  ------------------
  |  Branch (1554:9): [True: 22.6k, False: 7.93k]
  ------------------
 1555|  22.6k|        *dst |= (1 << n_bits) - 1;
 1556|  22.6k|    }
 1557|  30.6k|}
bitwise_scan:
 1630|  5.17k|{
 1631|  5.17k|    unsigned int ofs;
 1632|       |
 1633|  1.18M|    for (ofs = start; ofs < end; ofs++) {
  ------------------
  |  Branch (1633:23): [True: 1.17M, False: 2.22k]
  ------------------
 1634|  1.17M|        if (bitwise_get_bit(p, len, ofs) == target) {
  ------------------
  |  Branch (1634:13): [True: 2.94k, False: 1.17M]
  ------------------
 1635|  2.94k|            break;
 1636|  2.94k|        }
 1637|  1.17M|    }
 1638|  5.17k|    return ofs;
 1639|  5.17k|}
bitwise_put:
 1719|  4.78k|{
 1720|  4.78k|    ovs_be64 n_value = htonll(value);
 1721|  4.78k|    bitwise_copy(&n_value, sizeof n_value, 0,
 1722|  4.78k|                 dst, dst_len, dst_ofs,
 1723|  4.78k|                 n_bits);
 1724|  4.78k|}
bitwise_get:
 1742|  1.94k|{
 1743|  1.94k|    ovs_be64 value = htonll(0);
 1744|       |
 1745|  1.94k|    bitwise_copy(src, src_len, src_ofs,
 1746|  1.94k|                 &value, sizeof value, 0,
 1747|  1.94k|                 n_bits);
 1748|  1.94k|    return ntohll(value);
 1749|  1.94k|}
bitwise_get_bit:
 1765|  1.17M|{
 1766|  1.17M|    const uint8_t *src = src_;
 1767|       |
 1768|  1.17M|    return (src[len - (ofs / 8 + 1)] & (1u << (ofs % 8))) != 0;
 1769|  1.17M|}

ofp-protocol.c:rightmost_1bit:
  382|  85.6k|{
  383|  85.6k|    return x & -x;
  384|  85.6k|}
ofp-protocol.c:zero_rightmost_1bit:
  390|   788k|{
  391|   788k|    return x & (x - 1);
  392|   788k|}
ofp-protocol.c:raw_ctz:
  261|   788k|{
  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|   788k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 788k, False: 0]
  |  Branch (265:54): [True: 788k, False: 0]
  ------------------
  266|   788k|            ? __builtin_ctz(n)
  267|   788k|            : __builtin_ctzll(n));
  268|   788k|}
ofp-table.c:raw_ctz:
  261|   415k|{
  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|   415k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 0, False: 415k]
  |  Branch (265:54): [True: 0, False: 0]
  ------------------
  266|   415k|            ? __builtin_ctz(n)
  267|   415k|            : __builtin_ctzll(n));
  268|   415k|}
ofpbuf.c:nullable_memset:
  198|   104k|{
  199|   104k|    if (n) {
  ------------------
  |  Branch (199:9): [True: 104k, False: 87]
  ------------------
  200|   104k|        memset(dst, c, n);
  201|   104k|    }
  202|   104k|}
util.c:nullable_memcpy:
  188|  3.98k|{
  189|  3.98k|    if (n) {
  ------------------
  |  Branch (189:9): [True: 3.98k, False: 0]
  ------------------
  190|  3.98k|        memcpy(dst, src, n);
  191|  3.98k|    }
  192|  3.98k|}
flow.c:ovs_u128_is_zero:
  488|  62.8k|{
  489|  62.8k|    return !(val.u64.hi || val.u64.lo);
  ------------------
  |  Branch (489:14): [True: 0, False: 62.8k]
  |  Branch (489:28): [True: 0, False: 62.8k]
  ------------------
  490|  62.8k|}
flow.c:rightmost_1bit:
  382|  80.1k|{
  383|  80.1k|    return x & -x;
  384|  80.1k|}
flow.c:count_1bits:
  332|  76.4k|{
  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|  76.4k|    const uint64_t h55 = UINT64_C(0x5555555555555555);
  341|  76.4k|    const uint64_t h33 = UINT64_C(0x3333333333333333);
  342|  76.4k|    const uint64_t h0F = UINT64_C(0x0F0F0F0F0F0F0F0F);
  343|       |    const uint64_t h01 = UINT64_C(0x0101010101010101);
  344|  76.4k|    x -= (x >> 1) & h55;               /* Count of each 2 bits in-place. */
  345|  76.4k|    x = (x & h33) + ((x >> 2) & h33);  /* Count of each 4 bits in-place. */
  346|  76.4k|    x = (x + (x >> 4)) & h0F;          /* Count of each 8 bits in-place. */
  347|  76.4k|    return (x * h01) >> 56;            /* Sum of all bytes. */
  348|  76.4k|#endif
  349|  76.4k|}
flow.c:raw_ctz:
  261|   850k|{
  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|   850k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 0, False: 850k]
  |  Branch (265:54): [True: 0, False: 0]
  ------------------
  266|   850k|            ? __builtin_ctz(n)
  267|   850k|            : __builtin_ctzll(n));
  268|   850k|}
flow.c:zero_rightmost_1bit:
  390|   850k|{
  391|   850k|    return x & (x - 1);
  392|   850k|}
match.c:ovs_u128_and:
  515|  5.97k|{
  516|  5.97k|    ovs_u128 dst;
  517|       |
  518|  5.97k|    dst.u64.hi = a.u64.hi & b.u64.hi;
  519|  5.97k|    dst.u64.lo = a.u64.lo & b.u64.lo;
  520|       |
  521|  5.97k|    return dst;
  522|  5.97k|}
match.c:ovs_u128_is_zero:
  488|   203k|{
  489|   203k|    return !(val.u64.hi || val.u64.lo);
  ------------------
  |  Branch (489:14): [True: 424, False: 202k]
  |  Branch (489:28): [True: 142, False: 202k]
  ------------------
  490|   203k|}
meta-flow.c:ovs_u128_is_zero:
  488|  6.99k|{
  489|  6.99k|    return !(val.u64.hi || val.u64.lo);
  ------------------
  |  Branch (489:14): [True: 121, False: 6.87k]
  |  Branch (489:28): [True: 24, False: 6.85k]
  ------------------
  490|  6.99k|}
meta-flow.c:raw_ctz:
  261|  5.29k|{
  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.29k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 0, False: 5.29k]
  |  Branch (265:54): [True: 0, False: 0]
  ------------------
  266|  5.29k|            ? __builtin_ctz(n)
  267|  5.29k|            : __builtin_ctzll(n));
  268|  5.29k|}
nx-match.c:raw_ctz:
  261|  6.05k|{
  262|       |    /* With GCC 4.7 on 32-bit x86, if a 32-bit integer is passed as 'n', using
  263|       |     * a plain __builtin_ctzll() here always generates an out-of-line function
  264|       |     * call.  The test below helps it to emit a single 'bsf' instruction. */
  265|  6.05k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 0, False: 6.05k]
  |  Branch (265:54): [True: 0, False: 0]
  ------------------
  266|  6.05k|            ? __builtin_ctz(n)
  267|  6.05k|            : __builtin_ctzll(n));
  268|  6.05k|}
ofp-actions.c:log_2_ceil:
  322|  5.43k|{
  323|  5.43k|    return log_2_floor(n) + !is_pow2(n);
  324|  5.43k|}
ofp-actions.c:log_2_floor:
  314|  5.43k|{
  315|  5.43k|    return 63 - raw_clz64(n);
  316|  5.43k|}
ofp-actions.c:raw_clz64:
  272|  5.43k|{
  273|  5.43k|    return __builtin_clzll(n);
  274|  5.43k|}
ofp-actions.c:rightmost_1bit_idx:
  398|   119k|{
  399|   119k|    return ctz64(x);
  400|   119k|}
ofp-actions.c:ctz64:
  291|   119k|{
  292|   119k|    return n ? raw_ctz(n) : 64;
  ------------------
  |  Branch (292:12): [True: 119k, False: 0]
  ------------------
  293|   119k|}
ofp-actions.c:raw_ctz:
  261|   119k|{
  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|   119k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 0, False: 119k]
  |  Branch (265:54): [True: 0, False: 0]
  ------------------
  266|   119k|            ? __builtin_ctz(n)
  267|   119k|            : __builtin_ctzll(n));
  268|   119k|}
ofp-actions.c:zero_rightmost_1bit:
  390|   119k|{
  391|   119k|    return x & (x - 1);
  392|   119k|}
ofp-ct.c:ovs_u128_is_zero:
  488|  4.64k|{
  489|  4.64k|    return !(val.u64.hi || val.u64.lo);
  ------------------
  |  Branch (489:14): [True: 1.40k, False: 3.24k]
  |  Branch (489:28): [True: 71, False: 3.17k]
  ------------------
  490|  4.64k|}
ofp-ct.c:ovs_u128_is_ones:
  495|  1.47k|{
  496|  1.47k|    return ovs_u128_equals(val, OVS_U128_MAX);
  497|  1.47k|}
ofp-ct.c:ovs_u128_equals:
  481|  1.47k|{
  482|  1.47k|    return (a.u64.hi == b.u64.hi) && (a.u64.lo == b.u64.lo);
  ------------------
  |  Branch (482:12): [True: 739, False: 732]
  |  Branch (482:38): [True: 331, False: 408]
  ------------------
  483|  1.47k|}
ofp-group.c:count_1bits:
  332|  9.32k|{
  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|  9.32k|    const uint64_t h55 = UINT64_C(0x5555555555555555);
  341|  9.32k|    const uint64_t h33 = UINT64_C(0x3333333333333333);
  342|  9.32k|    const uint64_t h0F = UINT64_C(0x0F0F0F0F0F0F0F0F);
  343|       |    const uint64_t h01 = UINT64_C(0x0101010101010101);
  344|  9.32k|    x -= (x >> 1) & h55;               /* Count of each 2 bits in-place. */
  345|  9.32k|    x = (x & h33) + ((x >> 2) & h33);  /* Count of each 4 bits in-place. */
  346|  9.32k|    x = (x + (x >> 4)) & h0F;          /* Count of each 8 bits in-place. */
  347|  9.32k|    return (x * h01) >> 56;            /* Sum of all bytes. */
  348|  9.32k|#endif
  349|  9.32k|}
packets.c:ctz32:
  284|  8.33k|{
  285|  8.33k|    return n ? raw_ctz(n) : 32;
  ------------------
  |  Branch (285:12): [True: 8.33k, False: 0]
  ------------------
  286|  8.33k|}
packets.c:raw_ctz:
  261|  8.33k|{
  262|       |    /* With GCC 4.7 on 32-bit x86, if a 32-bit integer is passed as 'n', using
  263|       |     * a plain __builtin_ctzll() here always generates an out-of-line function
  264|       |     * call.  The test below helps it to emit a single 'bsf' instruction. */
  265|  8.33k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 8.33k, False: 0]
  |  Branch (265:54): [True: 8.33k, False: 0]
  ------------------
  266|  8.33k|            ? __builtin_ctz(n)
  267|  8.33k|            : __builtin_ctzll(n));
  268|  8.33k|}
tun-metadata.c:raw_ctz:
  261|  6.74k|{
  262|       |    /* With GCC 4.7 on 32-bit x86, if a 32-bit integer is passed as 'n', using
  263|       |     * a plain __builtin_ctzll() here always generates an out-of-line function
  264|       |     * call.  The test below helps it to emit a single 'bsf' instruction. */
  265|  6.74k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 0, False: 6.74k]
  |  Branch (265:54): [True: 0, False: 0]
  ------------------
  266|  6.74k|            ? __builtin_ctz(n)
  267|  6.74k|            : __builtin_ctzll(n));
  268|  6.74k|}
tun-metadata.c:zero_rightmost_1bit:
  390|  6.74k|{
  391|  6.74k|    return x & (x - 1);
  392|  6.74k|}

uuid_is_zero:
  204|  62.2k|{
  205|  62.2k|    return (!uuid->parts[0] && !uuid->parts[1]
  ------------------
  |  Branch (205:13): [True: 62.0k, False: 218]
  |  Branch (205:32): [True: 60.4k, False: 1.61k]
  ------------------
  206|  60.4k|            && !uuid->parts[2] && !uuid->parts[3]);
  ------------------
  |  Branch (206:16): [True: 59.6k, False: 735]
  |  Branch (206:35): [True: 59.6k, False: 15]
  ------------------
  207|  62.2k|}

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|   644k|{
 1001|   644k|    return module->min_level >= level;
 1002|   644k|}
vlog_should_drop:
 1330|   643k|{
 1331|   643k|    if (!module->honor_rate_limits) {
  ------------------
  |  Branch (1331:9): [True: 0, False: 643k]
  ------------------
 1332|      0|        return false;
 1333|      0|    }
 1334|       |
 1335|   643k|    if (!vlog_is_enabled(module, level)) {
  ------------------
  |  Branch (1335:9): [True: 643k, False: 0]
  ------------------
 1336|   643k|        return true;
 1337|   643k|    }
 1338|       |
 1339|      0|    ovs_mutex_lock(&rl->mutex);
  ------------------
  |  |   71|      0|        ovs_mutex_lock_at(mutex, OVS_SOURCE_LOCATOR)
  |  |  ------------------
  |  |  |  |   37|      0|#define OVS_SOURCE_LOCATOR __FILE__ ":" OVS_STRINGIZE(__LINE__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   38|      0|#define OVS_STRINGIZE(ARG) OVS_STRINGIZE2(ARG)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   39|      0|#define OVS_STRINGIZE2(ARG) #ARG
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1340|      0|    if (!token_bucket_withdraw(&rl->token_bucket, VLOG_MSG_TOKENS)) {
  ------------------
  |  |  105|      0|#define VLOG_MSG_TOKENS (60 * 1000)
  ------------------
  |  Branch (1340:9): [True: 0, False: 0]
  ------------------
 1341|      0|        time_t now = time_now();
 1342|      0|        if (!rl->n_dropped) {
  ------------------
  |  Branch (1342:13): [True: 0, False: 0]
  ------------------
 1343|      0|            rl->first_dropped = now;
 1344|      0|        }
 1345|      0|        rl->last_dropped = now;
 1346|      0|        rl->n_dropped++;
 1347|      0|        ovs_mutex_unlock(&rl->mutex);
 1348|      0|        return true;
 1349|      0|    }
 1350|       |
 1351|      0|    if (!rl->n_dropped) {
  ------------------
  |  Branch (1351:9): [True: 0, False: 0]
  ------------------
 1352|      0|        ovs_mutex_unlock(&rl->mutex);
 1353|      0|    } else {
 1354|      0|        time_t now = time_now();
 1355|      0|        unsigned int n_dropped = rl->n_dropped;
 1356|      0|        unsigned int first_dropped_elapsed = now - rl->first_dropped;
 1357|      0|        unsigned int last_dropped_elapsed = now - rl->last_dropped;
 1358|      0|        rl->n_dropped = 0;
 1359|      0|        ovs_mutex_unlock(&rl->mutex);
 1360|       |
 1361|      0|        vlog(module, level,
 1362|      0|             "Dropped %u log messages in last %u seconds (most recently, "
 1363|      0|             "%u seconds ago) due to excessive rate",
 1364|      0|             n_dropped, first_dropped_elapsed, last_dropped_elapsed);
 1365|      0|    }
 1366|       |
 1367|       |    return false;
 1368|      0|}
vlog_rate_limit:
 1373|  30.6k|{
 1374|  30.6k|    if (!vlog_should_drop(module, level, rl)) {
  ------------------
  |  Branch (1374:9): [True: 0, False: 30.6k]
  ------------------
 1375|      0|        va_list args;
 1376|       |
 1377|      0|        va_start(args, message);
 1378|      0|        vlog_valist(module, level, message, args);
 1379|       |        va_end(args);
 1380|      0|    }
 1381|  30.6k|}
vlog.c:search_name_array:
  165|      2|{
  166|      2|    size_t i;
  167|       |
  168|      2|    for (i = 0; i < n_names; i++) {
  ------------------
  |  Branch (168:17): [True: 2, False: 0]
  ------------------
  169|      2|        assert(names[i]);
  170|      2|        if (!strcasecmp(names[i], target)) {
  ------------------
  |  Branch (170:13): [True: 2, False: 0]
  ------------------
  171|      2|            break;
  172|      2|        }
  173|      2|    }
  174|      2|    return i;
  175|      2|}
vlog.c:set_destination_level:
  279|      3|{
  280|      3|    assert(destination >= 0 && destination < VLF_N_DESTINATIONS);
  281|      3|    assert(level < VLL_N_LEVELS);
  282|       |
  283|      3|    ovs_mutex_lock(&log_file_mutex);
  ------------------
  |  |   71|      3|        ovs_mutex_lock_at(mutex, OVS_SOURCE_LOCATOR)
  |  |  ------------------
  |  |  |  |   37|      3|#define OVS_SOURCE_LOCATOR __FILE__ ":" OVS_STRINGIZE(__LINE__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   38|      3|#define OVS_STRINGIZE(ARG) OVS_STRINGIZE2(ARG)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   39|      3|#define OVS_STRINGIZE2(ARG) #ARG
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  284|      3|    if (!module) {
  ------------------
  |  Branch (284:9): [True: 3, False: 0]
  ------------------
  285|      3|        struct vlog_module *mp;
  286|    273|        LIST_FOR_EACH (mp, list, &vlog_modules) {
  ------------------
  |  |   76|      3|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->next, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  171|      3|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|      3|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|    276|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  185|    276|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 273, False: 3]
  |  |  |  |  |  Branch (185:6): [True: 273, False: 3]
  |  |  |  |  ------------------
  |  |  |  |  186|    276|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|    273|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|    273|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|    273|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|    276|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   78|    273|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->next))
  |  |  ------------------
  |  |  |  |  193|    273|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|    273|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  287|    273|            mp->levels[destination] = level;
  288|    273|            update_min_level(mp);
  289|    273|        }
  290|      3|    } else {
  291|      0|        module->levels[destination] = level;
  292|      0|        update_min_level(module);
  293|      0|    }
  294|      3|    ovs_mutex_unlock(&log_file_mutex);
  295|      3|}
vlog.c:update_min_level:
  262|    273|{
  263|    273|    enum vlog_destination destination;
  264|       |
  265|    273|    module->min_level = VLL_OFF;
  266|  1.09k|    for (destination = 0; destination < VLF_N_DESTINATIONS; destination++) {
  ------------------
  |  Branch (266:27): [True: 819, False: 273]
  ------------------
  267|    819|        if (log_fd >= 0 || destination != VLF_FILE) {
  ------------------
  |  Branch (267:13): [True: 0, False: 819]
  |  Branch (267:28): [True: 546, False: 273]
  ------------------
  268|    546|            enum vlog_level level = module->levels[destination];
  269|    546|            if (level > module->min_level) {
  ------------------
  |  Branch (269:17): [True: 91, False: 455]
  ------------------
  270|     91|                module->min_level = level;
  271|     91|            }
  272|    546|        }
  273|    819|    }
  274|    273|}

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

